summaryrefslogtreecommitdiff
path: root/drivers/atm/he.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-09-18 16:16:05 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-09-18 16:16:05 -0700
commit1d19f176a2884d31c4fe2c7018349ff884a819b1 (patch)
treef0f02160cb954d3d7bd4417548ca997f0a88fd45 /drivers/atm/he.c
parent20bf94e266969f91c623ed8b51da4109e3f57bcb (diff)
parentfe26109a9dfd9327fdbe630fc819e1b7450986b2 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [ATM] CLIP: Do not refer freed skbuff in clip_mkip(). [NET]: Drop tx lock in dev_watchdog_up [PACKET]: Don't truncate non-linear skbs with mmaped IO [NET]: Mark frame diverter for future removal. [NETFILTER]: Add secmark headers to header-y [ATM]: linux-atm-general mailing list is subscribers only [ATM]: [he] when transmit fails, unmap the dma regions [TCP] tcp-lp: update information to MAINTAINERS [TCP] tcp-lp: bug fix for oops in 2.6.18-rc6 [BRIDGE]: random extra bytes on STP TCN packet [IPV6]: Accept -1 for IPV6_TCLASS [IPV6]: Fix tclass setting for raw sockets. [IPVS]: remove the debug option go ip_vs_ftp [IPVS]: Make sure ip_vs_ftp ports are valid [IPVS]: auto-help for ip_vs_ftp [IPVS]: Document the ports option to ip_vs_ftp in kernel-parameters.txt [TCP]: Turn ABC off. [NEIGH]: neigh_table_clear() doesn't free stats
Diffstat (limited to 'drivers/atm/he.c')
-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)
TPDRQ_MASK(he_readl(he_dev, TPDRQ_B_H)));
if (new_tail == he_dev->tpdrq_head) {
+ int slot;
+
hprintk("tpdrq full (cid 0x%x)\n", cid);
/*
* FIXME
@@ -2289,6 +2291,13 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid)
* after service_tbrq, service the backlog
* for now, we just drop the pdu
*/
+ for (slot = 0; slot < TPD_MAXIOV; ++slot) {
+ if (tpd->iovec[slot].addr)
+ pci_unmap_single(he_dev->pci_dev,
+ tpd->iovec[slot].addr,
+ tpd->iovec[slot].len & TPD_LEN_MASK,
+ PCI_DMA_TODEVICE);
+ }
if (tpd->skb) {
if (tpd->vcc->pop)
tpd->vcc->pop(tpd->vcc, tpd->skb);