diff --git a/srcpkgs/linux4.6/patches/0001-rtlwifi-Fix-scheduling-while-atomic-error-from-commi.patch b/srcpkgs/linux4.6/patches/0001-rtlwifi-Fix-scheduling-while-atomic-error-from-commi.patch new file mode 100644 index 0000000000..a10476c8a9 --- /dev/null +++ b/srcpkgs/linux4.6/patches/0001-rtlwifi-Fix-scheduling-while-atomic-error-from-commi.patch @@ -0,0 +1,71 @@ +From de26859dcf363d520cc44e59f6dcaf20ebe0aadf Mon Sep 17 00:00:00 2001 +From: Larry Finger +Date: Sat, 21 May 2016 11:50:35 -0500 +Subject: [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 +[...] + [] __schedule+0x899/0xad0 + [] schedule+0x3c/0x90 + [] schedule_hrtimeout_range_clock+0xa2/0x120 + [] ? hrtimer_init+0x120/0x120 + [] ? schedule_hrtimeout_range_clock+0x96/0x120 + [] schedule_hrtimeout_range+0x13/0x20 + [] usleep_range+0x4f/0x70 + [] rtl_rfreg_delay+0x38/0x50 [rtlwifi] + [] 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. + +Fixes: 49f86ec21c01 ("rtlwifi: Change long delays to sleeps") +Reported-by: James Feeney +Signed-off-by: Larry Finger +Cc: James Feeney +Cc: Stable [4.6+] +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/realtek/rtlwifi/core.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git drivers/net/wireless/realtek/rtlwifi/core.c drivers/net/wireless/realtek/rtlwifi/core.c +index 0f48048..3a0faa8 100644 +--- drivers/net/wireless/realtek/rtlwifi/core.c ++++ 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); +-- +2.8.4 + diff --git a/srcpkgs/linux4.6/template b/srcpkgs/linux4.6/template index 2bf598a82d..d3d268f711 100644 --- a/srcpkgs/linux4.6/template +++ b/srcpkgs/linux4.6/template @@ -1,7 +1,7 @@ # Template file for 'linux4.6' pkgname=linux4.6 version=4.6.2 -revision=2 +revision=3 wrksrc="linux-${version}" maintainer="Juan RP " homepage="http://www.kernel.org"