netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Olaf Hering <olh@suse.de>
To: Ganesh Venkatesan <ganesh.venkatesan@intel.com>, netdev@oss.sgi.com
Cc: linuxppc64-dev@ozlabs.org
Subject: [PATCH] e1000, errata 2{3, 4} - possible EEH or memory corruption when DMA crosses a 64k boundary
Date: Tue, 1 Feb 2005 20:27:35 +0100	[thread overview]
Message-ID: <20050201192735.GB7433@suse.de> (raw)


We have this patch in SLES9 SP1.
I asked google about 'fix for errata 23, cant cross 64kB boundary', and
it shhows such a patch is also part of RH 2.6.9.
It still applies to current Linus tree.
Can you check wether this is still required for the current driver?


References: SUSE48368 LTC12567

Need to check 64k boundary on DMA address as well.

We also need to have 64k boundary checking on the DMA address
that comes back from pci_map_single(). This address is what will
be passed to the adapter on ppc64 for it to DMA into.  It's the
address that the adapter sees which will trip erratum 23. 

The so patched driver passed a quick netperf run and a weekend
long stress test.

diff -puN drivers/net/e1000-new/e1000_main.c~64k-align-check-dma-suse drivers/net/e1000-new/e1000_main.c
--- linux-2.6.5-7.127/drivers/net/e1000-new/e1000_main.c~64k-align-check-dma-suse	Wed Dec  8 16:55:46 2004
+++ linux-2.6.5-7.127-moilanen/drivers/net/e1000-new/e1000_main.c	Thu Dec  9 15:46:04 2004
@@ -2579,6 +2579,29 @@ e1000_alloc_rx_buffers(struct e1000_adap
 						  adapter->rx_buffer_len,
 						  PCI_DMA_FROMDEVICE);
 
+		if(adapter->hw.mac_type == e1000_82545 ||
+		   adapter->hw.mac_type == e1000_82546)   {
+			/* fix for errata 23, cant cross 64kB boundary */
+			begin = (unsigned long)buffer_info->dma;
+			end   = (unsigned long)(adapter->rx_buffer_len) - 1;
+
+			if(!e1000_check_64k_alignment(adapter, begin, end)) {
+
+				DPRINTK(RX_ERR,ERR,"dma align check failed: "
+				        "begin: 0x%lx, end: 0x%lx\n", begin, end);
+
+				dev_kfree_skb(skb);
+				buffer_info->skb = NULL;
+				
+				pci_unmap_single(pdev,
+						 buffer_info->dma,
+						 adapter->rx_buffer_len,
+						 PCI_DMA_FROMDEVICE);
+
+				break; /* while !buffer_info->skb */
+			}
+		}
+
 		rx_desc = E1000_RX_DESC(*rx_ring, i);
 		rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);

             reply	other threads:[~2005-02-01 19:27 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-01 19:27 Olaf Hering [this message]
2005-02-01 19:33 ` [PATCH] e1000, errata 2{3, 4} - possible EEH or memory corruption when DMA crosses a 64k boundary Jon Mason
  -- strict thread matches above, loose matches on Subject: below --
2005-02-01 19:36 Venkatesan, Ganesh
2005-02-01 19:40 ` Olaf Hering

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=20050201192735.GB7433@suse.de \
    --to=olh@suse.de \
    --cc=ganesh.venkatesan@intel.com \
    --cc=linuxppc64-dev@ozlabs.org \
    --cc=netdev@oss.sgi.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).