To reuse the busreqs in case of hardware restart, they must be
properly reinitialized.  If the scat_req pointer isn't reset to
0, __ath6kl_sdio_write_async() will assume there is sg work to be
done (causing a kernel OOPS).

Signed-off-by: James Minor <[email protected]>
Reviewed-by: Steve deRosier <[email protected]>
---
 drivers/net/wireless/ath/ath6kl/sdio.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath6kl/sdio.c 
b/drivers/net/wireless/ath/ath6kl/sdio.c
index eab0ab9..96ed060 100644
--- a/drivers/net/wireless/ath/ath6kl/sdio.c
+++ b/drivers/net/wireless/ath/ath6kl/sdio.c
@@ -703,8 +703,10 @@ static void ath6kl_sdio_cleanup_scatter(struct ath6kl *ar)
                 * ath6kl_hif_rw_comp_handler() with status -ECANCELED so
                 * that the packet is properly freed?
                 */
-               if (s_req->busrequest)
+               if (s_req->busrequest) {
+                       s_req->busrequest->scat_req = 0;
                        ath6kl_sdio_free_bus_req(ar_sdio, s_req->busrequest);
+               }
                kfree(s_req->virt_dma_buf);
                kfree(s_req->sgentries);
                kfree(s_req);
-- 
1.9.1

Reply via email to