All of lore.kernel.org
 help / color / mirror / Atom feed
From: Carsten Langgaard <carstenl@mips.com>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: Ralf Baechle <ralf@linux-mips.org>,
	linux-mips@linux-mips.org, tsbogend@alpha.franken.de,
	linux-net@vger.kernel.org, kevink@mips.com
Subject: Re: BUG in the PCNET32 ethernet driver
Date: Wed, 13 Nov 2002 21:46:50 +0100	[thread overview]
Message-ID: <3DD2BA39.E1457D67@mips.com> (raw)
In-Reply-To: 3DD2B402.8040508@pobox.com

[-- Attachment #1: Type: text/plain, Size: 1840 bytes --]

Jeff Garzik wrote:

> Carsten Langgaard wrote:
>
> > Jeff Garzik wrote:
> >
> >
> > >Carsten Langgaard wrote:
> > >
> > >
> > >>@@ -1316,13 +1316,13 @@
> > >>                  if ((newskb = dev_alloc_skb (PKT_BUF_SZ))) {
> > >>                      skb_reserve (newskb, 2);
> > >>                      skb = lp->rx_skbuff[entry];
> > >>-                     pci_unmap_single(lp->pci_dev,
> > lp->rx_dma_addr[entry], skb->len,
> > >>PCI_DMA_FROMDEVICE);
> > >>+                     pci_unmap_single(lp->pci_dev,
> > lp->rx_dma_addr[entry], pkt_len +2,
> > >>PCI_DMA_FROMDEVICE);
> > >>                      skb_put (skb, pkt_len);
> > >>                      lp->rx_skbuff[entry] = newskb;
> > >
> > >Why does this line not reference PKT_BUF_SZ when all the others do?
> >
> >
> > In this case we know the size of the packet and therefore only need to
> > handle that.
> > In the other cases we don't know have big the receiving packet is
> > going to be, so we has to
> > take care of the whole buffer.
>
> Well, it's a seriously bad idea to pass different values to map and
> unmap steps, because on some platforms you could wind up telling the
> IOMMU or some other allocator that you are allocating N bytes, but
> freeing N-M bytes.  IOW, a leak.

Ok, fine.
There is actually another place in the code that also need a fix then.


>
> Now that that's been clarified, please fix up the patch and resubmit...
>   with this issue fixed, it looks apply-able.
>

I have made the change and attached a new patch.

>
>         Jeff

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com



[-- Attachment #2: pcnet32.2.patch --]
[-- Type: text/plain, Size: 2444 bytes --]

Index: drivers/net/pcnet32.c
===================================================================
RCS file: /home/cvs/linux/drivers/net/pcnet32.c,v
retrieving revision 1.33.2.3
diff -u -r1.33.2.3 pcnet32.c
--- drivers/net/pcnet32.c	6 Oct 2002 20:49:43 -0000	1.33.2.3
+++ drivers/net/pcnet32.c	13 Nov 2002 20:38:39 -0000
@@ -981,7 +981,7 @@
 	    }
 	    skb_reserve (rx_skbuff, 2);
 	}
-        lp->rx_dma_addr[i] = pci_map_single(lp->pci_dev, rx_skbuff->tail, rx_skbuff->len, PCI_DMA_FROMDEVICE);
+        lp->rx_dma_addr[i] = pci_map_single(lp->pci_dev, rx_skbuff->tail, PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
 	lp->rx_ring[i].base = (u32)le32_to_cpu(lp->rx_dma_addr[i]);
 	lp->rx_ring[i].buf_length = le16_to_cpu(-PKT_BUF_SZ);
 	lp->rx_ring[i].status = le16_to_cpu(0x8000);
@@ -1316,13 +1316,13 @@
 		    if ((newskb = dev_alloc_skb (PKT_BUF_SZ))) {
 			skb_reserve (newskb, 2);
 			skb = lp->rx_skbuff[entry];
-			pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[entry], skb->len, PCI_DMA_FROMDEVICE);
+			pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[entry], PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
 			skb_put (skb, pkt_len);
 			lp->rx_skbuff[entry] = newskb;
 			newskb->dev = dev;
                         lp->rx_dma_addr[entry] = 
 				pci_map_single(lp->pci_dev, newskb->tail,
-					newskb->len, PCI_DMA_FROMDEVICE);
+					PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
 			lp->rx_ring[entry].base = le32_to_cpu(lp->rx_dma_addr[entry]);
 			rx_in_place = 1;
 		    } else
@@ -1349,13 +1349,10 @@
 		if (!rx_in_place) {
 		    skb_reserve(skb,2); /* 16 byte align */
 		    skb_put(skb,pkt_len);	/* Make room */
-                    pci_dma_sync_single(lp->pci_dev, 
-				    lp->rx_dma_addr[entry],
-				    pkt_len,
-				    PCI_DMA_FROMDEVICE);
 		    eth_copy_and_sum(skb,
 				     (unsigned char *)(lp->rx_skbuff[entry]->tail),
 				     pkt_len,0);
+		    lp->rx_dma_addr[entry] = pci_map_single(lp->pci_dev, lp->rx_skbuff[entry]->tail, PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
 		}
 		lp->stats.rx_bytes += skb->len;
 		skb->protocol=eth_type_trans(skb,dev);
@@ -1406,7 +1403,7 @@
     for (i = 0; i < RX_RING_SIZE; i++) {
 	lp->rx_ring[i].status = 0;			    
 	if (lp->rx_skbuff[i]) {
-            pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[i], lp->rx_skbuff[i]->len, PCI_DMA_FROMDEVICE);
+            pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[i], PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
 	    dev_kfree_skb(lp->rx_skbuff[i]);
         }
 	lp->rx_skbuff[i] = NULL;

  reply	other threads:[~2002-11-13 20:47 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-13 13:34 BUG in the PCNET32 ethernet driver Carsten Langgaard
2002-11-13 16:42 ` Jeff Garzik
2002-11-13 20:08   ` Carsten Langgaard
2002-11-14  4:11     ` David S. Miller
2002-11-13 20:20 ` Jeff Garzik
2002-11-13 20:46   ` Carsten Langgaard [this message]
2002-12-11 12:37     ` Carsten Langgaard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3DD2BA39.E1457D67@mips.com \
    --to=carstenl@mips.com \
    --cc=jgarzik@pobox.com \
    --cc=kevink@mips.com \
    --cc=linux-mips@linux-mips.org \
    --cc=linux-net@vger.kernel.org \
    --cc=ralf@linux-mips.org \
    --cc=tsbogend@alpha.franken.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.