• Geert Uytterhoeven's avatar
    ARM: shmobile: rcar-gen2: Fix deadlock in regulator quirk · fce8dc5e
    Geert Uytterhoeven authored
    Simon Horman reported that Koelsch and Lager hang during boot, and
    bisected this to commit 1c3c5eab ("sched/core: Enable
    might_sleep() and smp_processor_id() checks early").
    
    The da9063/da9210 regulator quirk for R-Car Gen2 boards uses a bus
    notifier, and unregisters the notifier when it is no longer needed.
    However, a notifier must not be unregistered from within the call chain.
    
    This bug went unnoticed, as blocking_notifier_chain_unregister() didn't
    take the semaphore during early boot.  The aforementioned commit changed
    that behavior, leading to a deadlock.
    
    Fix this by removing the call to bus_unregister_notifier(), and keeping
    local completion state instead.
    Reported-by: default avatarSimon Horman <horms+renesas@verge.net.au>
    Fixes: 663fbb52 ("ARM: shmobile: R-Car Gen2: Add da9063/da9210 regulator quirk")
    Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: default avatarSimon Horman <horms+renesas@verge.net.au>
    fce8dc5e
regulator-quirk-rcar-gen2.c 4.02 KB