From: Larry Finger Date: Mon, 19 Mar 2012 20:44:31 +0000 (-0500) Subject: rtlwifi: Preallocate USB read buffers and eliminate kalloc in read routine X-Git-Tag: v3.2.19~12 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e290f74d471e775b61f5639b4c03c5cc71114578;p=pandora-kernel.git 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 Signed-off-by: John W. Linville [This version will apply to 3.2 and earlier. - Larry] Signed-off-by: Ben Hutchings --- Reading git-diff-tree failed