diff options
author | Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> | 2013-07-21 11:34:36 +0300 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-07-22 16:54:44 -0400 |
commit | c2a146f61014543fc4b52acaddcaa31b9f17453d (patch) | |
tree | 831090e251d6135077dfd8a1deedbb232b1ee5ee /drivers/net/wireless/ath | |
parent | f291f7deeeef84bd113ff3c309862a888e8f181b (diff) |
wil6210: fix error path in wil_tx_vring
Release fragments in the order of allocation; including one for skb head
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r-- | drivers/net/wireless/ath/wil6210/txrx.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c index 2a9d56a5fd0..e563af13740 100644 --- a/drivers/net/wireless/ath/wil6210/txrx.c +++ b/drivers/net/wireless/ath/wil6210/txrx.c @@ -730,12 +730,13 @@ static int wil_tx_vring(struct wil6210_priv *wil, struct vring *vring, return 0; dma_error: /* unmap what we have mapped */ - /* Note: increment @f to operate with positive index */ - for (f++; f > 0; f--) { + nr_frags = f + 1; /* frags mapped + one for skb head */ + for (f = 0; f < nr_frags; f++) { u16 dmalen; - struct wil_ctx *ctx = &vring->ctx[i]; + struct wil_ctx *ctx; i = (swhead + f) % vring->size; + ctx = &vring->ctx[i]; _d = &(vring->va[i].tx); *d = *_d; _d->dma.status = TX_DMA_STATUS_DU; |