]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
rtlwifi: Preallocate USB read buffers and eliminate kalloc in read routine
authorLarry Finger <Larry.Finger@lwfinger.net>
Mon, 19 Mar 2012 20:44:31 +0000 (15:44 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 22 Apr 2012 22:38:54 +0000 (15:38 -0700)
commited63f0fb7775311d675b13606affffae4d094281
tree0ebab018d41bfa303529dd10b410b445de5189ed
parentc30ba23cbb70c00e621ca731fec17ccc01035384
rtlwifi: Preallocate USB read buffers and eliminate kalloc in read routine

commit a7959c1394d4126a70a53b914ce4105f5173d0aa upstream.

The current version of rtlwifi for USB operations uses kmalloc to
acquire a 32-bit buffer for each read of the device. When
_usb_read_sync() is called with the rcu_lock held, the result is
a "sleeping function called from invalid context" BUG. This is
reported for two cases in https://bugzilla.kernel.org/show_bug.cgi?id=42775.
The first case has the lock originating from within rtlwifi and could
be fixed by rearranging the locking; however, the second originates from
within mac80211. The kmalloc() call is removed from _usb_read_sync()
by creating a ring buffer pointer in the private area and
allocating the buffer data in the probe routine.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/wireless/rtlwifi/usb.c
drivers/net/wireless/rtlwifi/wifi.h