• S
    drivers/perf: arm-pmu: convert arm_pmu_mutex to spinlock · a026bb12
    Sudeep Holla 提交于
    arm_pmu_mutex is never held long and we don't want to sleep while the
    lock is being held as it's executed in the context of hotplug notifiers.
    So it can be converted to a simple spinlock instead.
    
    Without this patch we get the following warning:
    
    BUG: sleeping function called from invalid context at kernel/locking/mutex.c:620
    in_atomic(): 1, irqs_disabled(): 128, pid: 0, name: swapper/2
    no locks held by swapper/2/0.
    irq event stamp: 381314
    hardirqs last  enabled at (381313): _raw_spin_unlock_irqrestore+0x7c/0x88
    hardirqs last disabled at (381314): cpu_die+0x28/0x48
    softirqs last  enabled at (381294): _local_bh_enable+0x28/0x50
    softirqs last disabled at (381293): irq_enter+0x58/0x78
    CPU: 2 PID: 0 Comm: swapper/2 Not tainted 4.7.0 #12
    Call trace:
     dump_backtrace+0x0/0x220
     show_stack+0x24/0x30
     dump_stack+0xb4/0xf0
     ___might_sleep+0x1d8/0x1f0
     __might_sleep+0x5c/0x98
     mutex_lock_nested+0x54/0x400
     arm_perf_starting_cpu+0x34/0xb0
     cpuhp_invoke_callback+0x88/0x3d8
     notify_cpu_starting+0x78/0x98
     secondary_start_kernel+0x108/0x1a8
    
    This patch converts the mutex to spinlock to eliminate the above
    warnings. This constraints pmu->reset to be non-blocking call which is
    the case with all the ARM PMU backends.
    
    Cc: Stephen Boyd <sboyd@codeaurora.org>
    Fixes: 37b502f1 ("arm/perf: Fix hotplug state machine conversion")
    Acked-by: NMark Rutland <mark.rutland@arm.com>
    Signed-off-by: NSudeep Holla <sudeep.holla@arm.com>
    Signed-off-by: NWill Deacon <will.deacon@arm.com>
    a026bb12
arm_pmu.c 25.8 KB