aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChas Williams <chas@cmf.nrl.navy.mil>2006-09-13 23:33:40 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2006-09-18 02:21:11 -0400
commitd730e1033f81fefd3176f53e070b2b64cd146db0 (patch)
tree3370c9194e2d35165a5dca3e1ae394b0f6b98d47
parent5067f08abad451661dd154be4193ba231a61e747 (diff)
[ATM]: [he] when transmit fails, unmap the dma regions
Signed-off-by: Chas Williams <chas@cmf.nrl.navy.mil> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/atm/he.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/atm/he.c b/drivers/atm/he.c
index d369130f4235..dd96123a2b7f 100644
--- a/drivers/atm/he.c
+++ b/drivers/atm/he.c
@@ -2282,6 +2282,8 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid)
2282 TPDRQ_MASK(he_readl(he_dev, TPDRQ_B_H))); 2282 TPDRQ_MASK(he_readl(he_dev, TPDRQ_B_H)));
2283 2283
2284 if (new_tail == he_dev->tpdrq_head) { 2284 if (new_tail == he_dev->tpdrq_head) {
2285 int slot;
2286
2285 hprintk("tpdrq full (cid 0x%x)\n", cid); 2287 hprintk("tpdrq full (cid 0x%x)\n", cid);
2286 /* 2288 /*
2287 * FIXME 2289 * FIXME
@@ -2289,6 +2291,13 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid)
2289 * after service_tbrq, service the backlog 2291 * after service_tbrq, service the backlog
2290 * for now, we just drop the pdu 2292 * for now, we just drop the pdu
2291 */ 2293 */
2294 for (slot = 0; slot < TPD_MAXIOV; ++slot) {
2295 if (tpd->iovec[slot].addr)
2296 pci_unmap_single(he_dev->pci_dev,
2297 tpd->iovec[slot].addr,
2298 tpd->iovec[slot].len & TPD_LEN_MASK,
2299 PCI_DMA_TODEVICE);
2300 }
2292 if (tpd->skb) { 2301 if (tpd->skb) {
2293 if (tpd->vcc->pop) 2302 if (tpd->vcc->pop)
2294 tpd->vcc->pop(tpd->vcc, tpd->skb); 2303 tpd->vcc->pop(tpd->vcc, tpd->skb);