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
Task Type Bug Report
Category Kernel
Status Closed
Assigned To Tobias Powalowski (tpowa)
Thomas Bächler (brain0)
Architecture All
Severity Low
Priority Normal
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No

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
Comment by James (thx1138) - Thursday, 19 May 2016, 23:09 GMT
Bob Copeland offered this on the wpa_supplicant mailing list:

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.]
Comment by James (thx1138) - Thursday, 19 May 2016, 23:50 GMT
I also submitted a bug report about the "ip" "scheduling while atomic":

Bug 118571 - kernel: BUG: scheduling while atomic: ip/453/0x00000002
https://bugzilla.kernel.org/show_bug.cgi?id=118571
Comment by James (thx1138) - Sunday, 22 May 2016, 01:33 GMT
Forward from Larry Finger: [PATCH] rtlwifi: Fix scheduling while atomic error from commit 49f86ec21c01

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.
...
Comment by James (thx1138) - Sunday, 22 May 2016, 16:14 GMT
Forward from Kalle Valo:
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);
Comment by James (thx1138) - Friday, 27 May 2016, 23:48 GMT
Forward from Kalle Valo:
Thanks, 1 patch applied to wireless-drivers.git:

de26859dcf36 rtlwifi: Fix scheduling while atomic error from commit 49f86ec21c01

Loading...