Re: wcn36xx: Introduce mutual exclusion of fw configuration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> wrote:

> As the association status changes the driver needs to configure the
> hardware. This is done based on information in the "sta" acquired by
> ieee80211_find_sta(), which requires the caller to ensure that the "sta"
> is valid while its being used; generally by entering an rcu read
> section.
> 
> But the operations acting on the "sta" has to communicate with the
> firmware and may therefor sleep, resulting in the following report:
> 
> [   31.418190] BUG: sleeping function called from invalid context at
> kernel/locking/mutex.c:238
> [   31.425919] in_atomic(): 0, irqs_disabled(): 0, pid: 34, name:
> kworker/u8:1
> [   31.434609] CPU: 0 PID: 34 Comm: kworker/u8:1 Tainted: G        W
> 4.12.0-rc4-next-20170607+ #993
> [   31.441002] Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC
> (DT)
> [   31.450380] Workqueue: phy0 ieee80211_iface_work
> [   31.457226] Call trace:
> [   31.461830] [<ffffff8008088c58>] dump_backtrace+0x0/0x260
> [   31.464004] [<ffffff8008088f7c>] show_stack+0x14/0x20
> [   31.469557] [<ffffff8008392e70>] dump_stack+0x98/0xb8
> [   31.474592] [<ffffff80080e4330>] ___might_sleep+0xf0/0x118
> [   31.479626] [<ffffff80080e43a8>] __might_sleep+0x50/0x88
> [   31.485010] [<ffffff80088ff9a4>] mutex_lock+0x24/0x60
> [   31.490479] [<ffffff8008595c38>] wcn36xx_smd_set_link_st+0x30/0x130
> [   31.495428] [<ffffff8008591ed8>] wcn36xx_bss_info_changed+0x148/0x448
> [   31.501504] [<ffffff80088ab3c4>]
> ieee80211_bss_info_change_notify+0xbc/0x118
> [   31.508102] [<ffffff80088f841c>] ieee80211_assoc_success+0x664/0x7f8
> [   31.515220] [<ffffff80088e13d4>]
> ieee80211_rx_mgmt_assoc_resp+0x144/0x2d8
> [   31.521555] [<ffffff80088e1e20>]
> ieee80211_sta_rx_queued_mgmt+0x190/0x698
> [   31.528239] [<ffffff80088bc44c>] ieee80211_iface_work+0x234/0x368
> [   31.535011] [<ffffff80080d81ac>] process_one_work+0x1cc/0x340
> [   31.541086] [<ffffff80080d8368>] worker_thread+0x48/0x430
> [   31.546814] [<ffffff80080de448>] kthread+0x108/0x138
> [   31.552195] [<ffffff8008082ec0>] ret_from_fork+0x10/0x50
> 
> In order to ensure that the "sta" remains alive (and consistent) for the
> duration of bss_info_changed() mutual exclusion has to be ensured with
> sta_remove().
> 
> This is done by introducing a mutex to cover firmware configuration
> changes, which is made to also ensure mutual exclusion between other
> operations changing the state or configuration of the firmware. With
> this we can drop the rcu read lock.
> 
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx>
> Signed-off-by: Kalle Valo <kvalo@xxxxxxxxxxxxxxxx>

Patch applied to ath-next branch of ath.git, thanks.

39efc7cc7ccf wcn36xx: Introduce mutual exclusion of fw configuration

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

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




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]