• Michael Ellerman's avatar
    powerpc/imc-pmu: Revert nest_init_lock to being a mutex · ad53db4a
    Michael Ellerman authored
    The recent commit 76d588dd ("powerpc/imc-pmu: Fix use of mutex in
    IRQs disabled section") fixed warnings (and possible deadlocks) in the
    IMC PMU driver by converting the locking to use spinlocks.
    
    It also converted the init-time nest_init_lock to a spinlock, even
    though it's not used at runtime in IRQ disabled sections or while
    holding other spinlocks.
    
    This leads to warnings such as:
    
      BUG: sleeping function called from invalid context at include/linux/percpu-rwsem.h:49
      in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1, name: swapper/0
      preempt_count: 1, expected: 0
      CPU: 7 PID: 1 Comm: swapper/0 Not tainted 6.2.0-rc2-14719-gf12cd061-dirty #1
      Hardware name: Mambo,Simulated-System POWER9 0x4e1203 opal:v6.6.6 PowerNV
      Call Trace:
        dump_stack_lvl+0x74/0xa8 (unreliable)
        __might_resched+0x178/0x1a0
        __cpuhp_setup_state+0x64/0x1e0
        init_imc_pmu+0xe48/0x1250
        opal_imc_counters_probe+0x30c/0x6a0
        platform_probe+0x78/0x110
        really_probe+0x104/0x420
        __driver_probe_device+0xb0/0x170
        driver_probe_device+0x58/0x180
        __driver_attach+0xd8/0x250
        bus_for_each_dev+0xb4/0x140
        driver_attach+0x34/0x50
        bus_add_driver+0x1e8/0x2d0
        driver_register+0xb4/0x1c0
        __platform_driver_register+0x38/0x50
        opal_imc_driver_init+0x2c/0x40
        do_one_initcall+0x80/0x360
        kernel_init_freeable+0x310/0x3b8
        kernel_init+0x30/0x1a0
        ret_from_kernel_thread+0x5c/0x64
    
    Fix it by converting nest_init_lock back to a mutex, so that we can call
    sleeping functions while holding it. There is no interaction between
    nest_init_lock and the runtime spinlocks used by the actual PMU routines.
    
    Fixes: 76d588dd ("powerpc/imc-pmu: Fix use of mutex in IRQs disabled section")
    Tested-by: Kajol Jain<kjain@linux.ibm.com>
    Reviewed-by: Kajol Jain<kjain@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20230130014401.540543-1-mpe@ellerman.id.au
    ad53db4a
imc-pmu.c 46.5 KB