• Michał Mirosław's avatar
    regulator: push allocation in regulator_ena_gpio_request() out of lock · 467bf301
    Michał Mirosław authored
    Move another allocation out of regulator_list_mutex-protected region, as
    reclaim might want to take the same lock.
    
    WARNING: possible circular locking dependency detected
    5.7.13+ #534 Not tainted
    ------------------------------------------------------
    kswapd0/383 is trying to acquire lock:
    c0e5d920 (regulator_list_mutex){+.+.}-{3:3}, at: regulator_lock_dependent+0x54/0x2c0
    
    but task is already holding lock:
    c0e38518 (fs_reclaim){+.+.}-{0:0}, at: __fs_reclaim_acquire+0x0/0x50
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #1 (fs_reclaim){+.+.}-{0:0}:
           fs_reclaim_acquire.part.11+0x40/0x50
           fs_reclaim_acquire+0x24/0x28
           kmem_cache_alloc_trace+0x40/0x1e8
           regulator_register+0x384/0x1630
           devm_regulator_register+0x50/0x84
           reg_fixed_voltage_probe+0x248/0x35c
    [...]
    other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(fs_reclaim);
                                   lock(regulator_list_mutex);
                                   lock(fs_reclaim);
      lock(regulator_list_mutex);
    
     *** DEADLOCK ***
    [...]
    2 locks held by kswapd0/383:
     #0: c0e38518 (fs_reclaim){+.+.}-{0:0}, at: __fs_reclaim_acquire+0x0/0x50
     #1: cb70e5e0 (hctx->srcu){....}-{0:0}, at: hctx_lock+0x60/0xb8
    [...]
    
    Fixes: 541d052d ("regulator: core: Only support passing enable GPIO descriptors")
    [this commit only changes context]
    Fixes: f8702f9e ("regulator: core: Use ww_mutex for regulators locking")
    [this is when the regulator_list_mutex was introduced in reclaim locking path]
    Signed-off-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
    Link: https://lore.kernel.org/r/41fe6a9670335721b48e8f5195038c3d67a3bf92.1597195321.git.mirq-linux@rere.qmqm.plSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    467bf301
core.c 150 KB