• Russell King's avatar
    leds: leds-pwm: properly clean up after probe failure · 5d33fff5
    Russell King authored
    commit 392369019eb96e914234ea21eda806cb51a1073e upstream.
    When probing with DT, we add each LED one at a time.  If we find a LED
    without a PWM device (because it is not available yet) we fail the
    initialisation, unregister previous LEDs, and then by way of managed
    resources, we free the structure.
    The problem with this is we may have a scheduled and active work_struct
    in this structure, and this results in a nasty kernel oops.
    We need to cancel this work_struct properly upon cleanup - and the
    cleanup we require is the same cleanup as we do when the LED platform
    device is removed.  Rather than writing this same code three times,
    move it into a separate function and use it in all three places.
    Fixes: c971ff18 ("leds: leds-pwm: Defer led_pwm_set() if PWM can sleep")
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    Signed-off-by: default avatarBryan Wu <cooloney@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
leds-pwm.c 5.91 KB