Use raw_spin_lock instead of spin_lock, this patch fixes the following warning:
BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:46 in_atomic(): 1, irqs_disabled(): 128, non_block: 0, pid: 506, name: sh preempt_count: 2, expected: 0 RCU nest depth: 0, expected: 0 Preemption disabled at: [<00000000>] 0x0 CPU: 0 PID: 506 Comm: sh Not tainted 6.1.53-rt10-yocto-preempt-rt #1 Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree) unwind_backtrace from show_stack+0x18/0x1c show_stack from dump_stack_lvl+0x40/0x4c dump_stack_lvl from __might_resched+0x17c/0x1bc __might_resched from rt_spin_lock+0x2c/0x90 rt_spin_lock from imx_gpc_irq_set_wake+0x34/0x68 imx_gpc_irq_set_wake from irq_set_irq_wake+0x154/0x1ac irq_set_irq_wake from gpio_set_wake_irq+0x44/0x78 gpio_set_wake_irq from irq_set_irq_wake+0x154/0x1ac irq_set_irq_wake from gpio_keys_suspend+0x88/0x1b8 gpio_keys_suspend from dpm_run_callback+0x3c/0x188 dpm_run_callback from __device_suspend+0x124/0x5c8 __device_suspend from dpm_suspend+0x158/0x328 dpm_suspend from dpm_suspend_start+0x6c/0x74 dpm_suspend_start from suspend_devices_and_enter+0x294/0x8f4 suspend_devices_and_enter from pm_suspend+0x2e0/0x33c pm_suspend from state_store+0x74/0xd0 Signed-off-by: Xiaolei Wang <xiaolei.w...@windriver.com> Signed-off-by: Bruce Ashfield <bruce.ashfi...@gmail.com> --- arch/arm/mach-imx/gpc.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/arm/mach-imx/gpc.c b/arch/arm/mach-imx/gpc.c index b93de80fa563..2da7bd5e1610 100644 --- a/arch/arm/mach-imx/gpc.c +++ b/arch/arm/mach-imx/gpc.c @@ -51,7 +51,7 @@ static u32 gpc_wake_irqs[IMR_NUM]; static u32 gpc_saved_imrs[IMR_NUM]; static u32 gpc_mf_irqs[IMR_NUM]; static u32 gpc_mf_request_on[IMR_NUM]; -static DEFINE_SPINLOCK(gpc_lock); +static DEFINE_RAW_SPINLOCK(gpc_lock); void imx_gpc_add_m4_wake_up_irq(u32 hwirq, bool enable) { @@ -64,10 +64,10 @@ void imx_gpc_add_m4_wake_up_irq(u32 hwirq, bool enable) return; mask = 1 << hwirq % 32; - spin_lock_irqsave(&gpc_lock, flags); + raw_spin_lock_irqsave(&gpc_lock, flags); gpc_wake_irqs[idx] = enable ? gpc_wake_irqs[idx] | mask : gpc_wake_irqs[idx] & ~mask; - spin_unlock_irqrestore(&gpc_lock, flags); + raw_spin_unlock_irqrestore(&gpc_lock, flags); } void imx_gpc_hold_m4_in_sleep(void) @@ -233,10 +233,10 @@ static int imx_gpc_irq_set_wake(struct irq_data *d, unsigned int on) u32 mask; mask = 1 << d->hwirq % 32; - spin_lock_irqsave(&gpc_lock, flags); + raw_spin_lock_irqsave(&gpc_lock, flags); gpc_wake_irqs[idx] = on ? gpc_wake_irqs[idx] | mask : gpc_wake_irqs[idx] & ~mask; - spin_unlock_irqrestore(&gpc_lock, flags); + raw_spin_unlock_irqrestore(&gpc_lock, flags); /* * Do *not* call into the parent, as the GIC doesn't have any @@ -375,10 +375,10 @@ int imx_gpc_mf_power_on(unsigned int irq, unsigned int on) u32 mask; mask = 1 << (d->irq_data.hwirq % 32); - spin_lock_irqsave(&gpc_lock, flags); + raw_spin_lock_irqsave(&gpc_lock, flags); gpc_mf_request_on[idx] = on ? gpc_mf_request_on[idx] | mask : gpc_mf_request_on[idx] & ~mask; - spin_unlock_irqrestore(&gpc_lock, flags); + raw_spin_unlock_irqrestore(&gpc_lock, flags); return 0; } -- 2.25.1
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#13988): https://lists.yoctoproject.org/g/linux-yocto/message/13988 Mute This Topic: https://lists.yoctoproject.org/mt/106517215/21656 Group Owner: linux-yocto+ow...@lists.yoctoproject.org Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-