• Larry Finger's avatar
    rtlwifi: Fix scheduling while atomic error from commit 49f86ec2 · de26859d
    Larry Finger authored
    Commit 49f86ec2 ("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.
    
    Fixes: 49f86ec2 ("rtlwifi: Change long delays to sleeps")
    Reported-by: default avatarJames Feeney <james@nurealm.net>
    Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
    Cc: James Feeney <james@nurealm.net>
    Cc: Stable <stable@vger.kernel.org> [4.6+]
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    de26859d
core.c 54.4 KB