FS#49401 - [linux] scheduling while atomic
Attached to Project:
Arch Linux
Opened by James (thx1138) - Thursday, 19 May 2016, 20:33 GMT
Last edited by Tobias Powalowski (tpowa) - Thursday, 02 June 2016, 13:33 GMT
Opened by James (thx1138) - Thursday, 19 May 2016, 20:33 GMT
Last edited by Tobias Powalowski (tpowa) - Thursday, 02 June 2016, 13:33 GMT
|
Details
linux 4.6-1
On a Toshiba Satellite, circa 2011, with a Pentium Dual-Core Mobile, I am seeing several "kernel: BUG: scheduling while atomic:" errors with kernel 4.6-1. A different laptop with an AMD CPU does not see the problem. If I understand, these are not actually kernel errors, but rather, errors in the failing applications, caused by an application sleeping when it should not. Still, these are associated with 4.6-1, so might be a concern. kernel: BUG: scheduling while atomic: wpa_supplicant/375/0x00000002 <repeated> ... kernel: BUG: scheduling while atomic: ip/453/0x00000002 <repeated> ... systemd-coredump[630]: Process 627 (wpa_supplicant) of user 0 dumped core. ... Others have recently been chasing these kinds of problems as well, triggered with linux 4.6: http://www.gossamer-threads.com/lists/linux/kernel/2435108 We shouldn't be calling clk_prepare_enable()/clk_prepare_disable() in an atomic context. https://www.spinics.net/lists/linux-clk/msg08635.html clk-lpc18xx-creg - scheduling while atomic |
This task depends upon
Closed by Tobias Powalowski (tpowa)
Thursday, 02 June 2016, 13:33 GMT
Reason for closing: Fixed
Additional comments about closing: 4.6.1-2
Thursday, 02 June 2016, 13:33 GMT
Reason for closing: Fixed
Additional comments about closing: 4.6.1-2
This is a kernel bug, not a wpa_supplicant bug. The linux-wireless mailing
list would be a more appropriate venue for this bug report.
...
[Probably due to this kernel change:
commit 49f86ec21c01b654f6ec47f2f4567f4f9ebaa26b
Author: Larry Finger <Larry.Finger@lwfinger.net>
Date: Mon Feb 15 16:12:07 2016 -0600
rtlwifi: Change long delays to sleeps
...apparently this function isn't in sleepable context after all.]
Bug 118571 - kernel: BUG: scheduling while atomic: ip/453/0x00000002
https://bugzilla.kernel.org/show_bug.cgi?id=118571
Commit 49f86ec21c01 ("rtlwifi: Change long delays to sleeps") was correct
for most cases; however, driver rtl8192ce calls the affected routines while
in atomic context. The kernel bug output is as follows:
BUG: scheduling while atomic: wpa_supplicant/627/0x00000002
[...]
[<ffffffff815c2b39>] __schedule+0x899/0xad0
[<ffffffff815c2dac>] schedule+0x3c/0x90
[<ffffffff815c5bb2>] schedule_hrtimeout_range_clock+0xa2/0x120
[<ffffffff810e8b80>] ? hrtimer_init+0x120/0x120
[<ffffffff815c5ba6>] ? schedule_hrtimeout_range_clock+0x96/0x120
[<ffffffff815c5c43>] schedule_hrtimeout_range+0x13/0x20
[<ffffffff815c568f>] usleep_range+0x4f/0x70
[<ffffffffa0667218>] rtl_rfreg_delay+0x38/0x50 [rtlwifi]
[<ffffffffa06dd0e7>] rtl92c_phy_config_rf_with_headerfile+0xc7/0xe0 [rtl8192ce]
To fix this bug, three of the changes from delay to sleep are reverted.
Unfortunately, one of the changes involves a delay of 50 msec. The calling
code will be modified so that this long delay can be avoided; however,
this change is being pushed now to fix the problem in kernel 4.6.0.
...
I'm planning to queue this to 4.7.
Forward from Larry Finger:
That will be good as it will be ported to 4.6 quickly after that.
---
Maybe the patch could be applied in Arch before moving to core?
---
Fixes: 49f86ec21c01 ("rtlwifi: Change long delays to sleeps")
Reported-by: James Feeney <james@nurealm.net>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Cc: James Feeney <james@nurealm.net>
Cc: Stable <stable@vger.kernel.org> [4.6+]
---
drivers/net/wireless/realtek/rtlwifi/core.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
index 0f48048..3a0faa8 100644
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
@@ -54,7 +54,7 @@ EXPORT_SYMBOL(channel5g_80m);
void rtl_addr_delay(u32 addr)
{
if (addr == 0xfe)
- msleep(50);
+ mdelay(50);
else if (addr == 0xfd)
msleep(5);
else if (addr == 0xfc)
@@ -75,7 +75,7 @@ void rtl_rfreg_delay(struct ieee80211_hw *hw, enum radio_path rfpath, u32 addr,
rtl_addr_delay(addr);
} else {
rtl_set_rfreg(hw, rfpath, addr, mask, data);
- usleep_range(1, 2);
+ udelay(1);
}
}
EXPORT_SYMBOL(rtl_rfreg_delay);
@@ -86,7 +86,7 @@ void rtl_bb_delay(struct ieee80211_hw *hw, u32 addr, u32 data)
rtl_addr_delay(addr);
} else {
rtl_set_bbreg(hw, addr, MASKDWORD, data);
- usleep_range(1, 2);
+ udelay(1);
}
}
EXPORT_SYMBOL(rtl_bb_delay);
Thanks, 1 patch applied to wireless-drivers.git:
de26859dcf36 rtlwifi: Fix scheduling while atomic error from commit 49f86ec21c01