2017-03-21 14:25:16

by Larry Finger

[permalink] [raw]
Subject: [PATCH] rtlwifi: Fix scheduling while atomic splat

Following commit cceb0a597320 ("rtlwifi: Add work queue for c2h cmd."),
the following BUG is reported when rtl8723be is used:

BUG: sleeping function called from invalid context at mm/slab.h:432
in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: swapper/0
CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W O 4.11.0-rc3-wl+ #276
Hardware name: TOSHIBA TECRA A50-A/TECRA A50-A, BIOS Version 4.50 09/29/2014
Call Trace:
<IRQ>
dump_stack+0x63/0x89
___might_sleep+0xe9/0x130
__might_sleep+0x4a/0x90
kmem_cache_alloc_trace+0x19f/0x200
? rtl_c2hcmd_enqueue+0x3e/0x110 [rtlwifi]
rtl_c2hcmd_enqueue+0x3e/0x110 [rtlwifi]
rtl8723be_c2h_packet_handler+0xac/0xc0 [rtl8723be]
rtl8723be_rx_command_packet+0x37/0x5c [rtl8723be]
_rtl_pci_rx_interrupt+0x200/0x6b0 [rtl_pci]
_rtl_pci_interrupt+0x20c/0x5d0 [rtl_pci]
__handle_irq_event_percpu+0x3f/0x1d0
handle_irq_event_percpu+0x23/0x60
handle_irq_event+0x3c/0x60
handle_fasteoi_irq+0xa2/0x170
handle_irq+0x20/0x30
do_IRQ+0x48/0xd0
common_interrupt+0x89/0x89
...

Although commit cceb0a597320 converted most c2h commands to use a work
queue, the Bluetooth coexistence routines can be in atomic mode when
they execute such a call.

Fixes: cceb0a597320 ("rtlwifi: Add work queue for c2h cmd.")
Signed-off-by: Larry Finger <[email protected]>
Cc: Ping-Ke Shih <[email protected]>
---
Kalle,

This patch should be applied to kernel 4.11.

Thanks,

Larry
---
drivers/net/wireless/realtek/rtlwifi/base.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c b/drivers/net/wireless/realtek/rtlwifi/base.c
index 07b4091..c55be12 100644
--- a/drivers/net/wireless/realtek/rtlwifi/base.c
+++ b/drivers/net/wireless/realtek/rtlwifi/base.c
@@ -1755,12 +1755,14 @@ void rtl_c2hcmd_enqueue(struct ieee80211_hw *hw, u8 tag, u8 len, u8 *val)
unsigned long flags;
struct rtl_c2hcmd *c2hcmd;

- c2hcmd = kmalloc(sizeof(*c2hcmd), GFP_KERNEL);
+ c2hcmd = kmalloc(sizeof(*c2hcmd),
+ in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);

if (!c2hcmd)
goto label_err;

- c2hcmd->val = kmalloc(len, GFP_KERNEL);
+ c2hcmd->val = kmalloc(len,
+ in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);

if (!c2hcmd->val)
goto label_err2;
--
2.10.2


2017-03-30 16:43:29

by Kalle Valo

[permalink] [raw]
Subject: Re: rtlwifi: Fix scheduling while atomic splat

Larry Finger <[email protected]> wrote:
> Following commit cceb0a597320 ("rtlwifi: Add work queue for c2h cmd."),
> the following BUG is reported when rtl8723be is used:
>
> BUG: sleeping function called from invalid context at mm/slab.h:432
> in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: swapper/0
> CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W O 4.11.0-rc3-wl+ #276
> Hardware name: TOSHIBA TECRA A50-A/TECRA A50-A, BIOS Version 4.50 09/29/2014
> Call Trace:
> <IRQ>
> dump_stack+0x63/0x89
> ___might_sleep+0xe9/0x130
> __might_sleep+0x4a/0x90
> kmem_cache_alloc_trace+0x19f/0x200
> ? rtl_c2hcmd_enqueue+0x3e/0x110 [rtlwifi]
> rtl_c2hcmd_enqueue+0x3e/0x110 [rtlwifi]
> rtl8723be_c2h_packet_handler+0xac/0xc0 [rtl8723be]
> rtl8723be_rx_command_packet+0x37/0x5c [rtl8723be]
> _rtl_pci_rx_interrupt+0x200/0x6b0 [rtl_pci]
> _rtl_pci_interrupt+0x20c/0x5d0 [rtl_pci]
> __handle_irq_event_percpu+0x3f/0x1d0
> handle_irq_event_percpu+0x23/0x60
> handle_irq_event+0x3c/0x60
> handle_fasteoi_irq+0xa2/0x170
> handle_irq+0x20/0x30
> do_IRQ+0x48/0xd0
> common_interrupt+0x89/0x89
> ...
>
> Although commit cceb0a597320 converted most c2h commands to use a work
> queue, the Bluetooth coexistence routines can be in atomic mode when
> they execute such a call.
>
> Fixes: cceb0a597320 ("rtlwifi: Add work queue for c2h cmd.")
> Signed-off-by: Larry Finger <[email protected]>
> Cc: Ping-Ke Shih <[email protected]>

Patch applied to wireless-drivers.git, thanks.

893dc68f1b18 rtlwifi: Fix scheduling while atomic splat

--
https://patchwork.kernel.org/patch/9636661/

Documentation about submitting wireless patches and checking status
from patchwork:

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

2017-03-21 17:32:08

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] rtlwifi: Fix scheduling while atomic splat

Larry Finger <[email protected]> writes:

> Following commit cceb0a597320 ("rtlwifi: Add work queue for c2h cmd."),
> the following BUG is reported when rtl8723be is used:
>
> BUG: sleeping function called from invalid context at mm/slab.h:432
> in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: swapper/0
> CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W O 4.11.0-rc3-wl+ #276
> Hardware name: TOSHIBA TECRA A50-A/TECRA A50-A, BIOS Version 4.50 09/29/2014
> Call Trace:
> <IRQ>
> dump_stack+0x63/0x89
> ___might_sleep+0xe9/0x130
> __might_sleep+0x4a/0x90
> kmem_cache_alloc_trace+0x19f/0x200
> ? rtl_c2hcmd_enqueue+0x3e/0x110 [rtlwifi]
> rtl_c2hcmd_enqueue+0x3e/0x110 [rtlwifi]
> rtl8723be_c2h_packet_handler+0xac/0xc0 [rtl8723be]
> rtl8723be_rx_command_packet+0x37/0x5c [rtl8723be]
> _rtl_pci_rx_interrupt+0x200/0x6b0 [rtl_pci]
> _rtl_pci_interrupt+0x20c/0x5d0 [rtl_pci]
> __handle_irq_event_percpu+0x3f/0x1d0
> handle_irq_event_percpu+0x23/0x60
> handle_irq_event+0x3c/0x60
> handle_fasteoi_irq+0xa2/0x170
> handle_irq+0x20/0x30
> do_IRQ+0x48/0xd0
> common_interrupt+0x89/0x89
> ...
>
> Although commit cceb0a597320 converted most c2h commands to use a work
> queue, the Bluetooth coexistence routines can be in atomic mode when
> they execute such a call.
>
> Fixes: cceb0a597320 ("rtlwifi: Add work queue for c2h cmd.")
> Signed-off-by: Larry Finger <[email protected]>
> Cc: Ping-Ke Shih <[email protected]>
> ---
> Kalle,
>
> This patch should be applied to kernel 4.11.

Ok, I'll queue this for 4.11.

--
Kalle Valo