summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaya Erez <qca_merez@qca.qualcomm.com>2016-02-03 17:34:55 +0200
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 19:58:06 -0700
commitf4309fe27e3e24f477ea69b4ee5a7aa2c1f26664 (patch)
tree50eed16cc28b505bef68491ed0e3eecc12a9fb8c
parent92009e80209a95fea1cfaaa597638fe9d15c08ef (diff)
wil6210: handle tx completions only if vring tx data is enabled
wil_vring_fini_tx is called in disconnect in order to free the allocated vrings. wil_vring_fini_tx is disabling the vring_tx_data before napi_synchronize is called in order to avoid the tx handling of this vring, while wil_vring_free is called only after napi finished the current handling of the tx completed packets. Due to that, in case of disconnect, wil6210_netdev_poll_tx can be called when vring->va is not NULL but vring_tx_data[i]->enabled is already disabled. This patch checks vring_tx_data[i]->enabled in wil6210_netdev_poll_tx to prevent handling of disabled vrings. Change-Id: I6c38be5b47eb3c34ccb4b503545fccada26806e4 Signed-off-by: Maya Erez <qca_merez@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> Git-commit: 640751ac30b2ddfbe06ad712aa7d57a8d89a7eef Git-repo: https://github.com/kvalo/ath.git CRs-Fixed: 971604 Signed-off-by: Maya Erez <merez@codeaurora.org>
-rw-r--r--drivers/net/wireless/ath/wil6210/netdev.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/wil6210/netdev.c b/drivers/net/wireless/ath/wil6210/netdev.c
index e3b3c8fb4605..3b0e7e28121c 100644
--- a/drivers/net/wireless/ath/wil6210/netdev.c
+++ b/drivers/net/wireless/ath/wil6210/netdev.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2015 Qualcomm Atheros, Inc.
+ * Copyright (c) 2012-2016 Qualcomm Atheros, Inc.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -108,8 +108,9 @@ static int wil6210_netdev_poll_tx(struct napi_struct *napi, int budget)
/* always process ALL Tx complete, regardless budget - it is fast */
for (i = 0; i < WIL6210_MAX_TX_RINGS; i++) {
struct vring *vring = &wil->vring_tx[i];
+ struct vring_tx_data *txdata = &wil->vring_tx_data[i];
- if (!vring->va)
+ if (!vring->va || !txdata->enabled)
continue;
tx_done += wil_tx_complete(wil, i);