* r8169 MTU greater than 1500 causes corruption for other controllers @ 2008-08-20 17:09 Timothy J Fontaine 2008-08-20 19:21 ` Ilpo Järvinen 0 siblings, 1 reply; 5+ messages in thread From: Timothy J Fontaine @ 2008-08-20 17:09 UTC (permalink / raw) To: netdev; +Cc: linux-kernel [-- Attachment #1: Type: text/plain, Size: 2560 bytes --] Setting the MTU to greater than 1500 causes the host system to run out of SW-IOMMU space for the transfer. This results in corruption for other controllers like my AAR-2410SA or IDE controller. Host system: ASUS P5M2 w/ Intel Core 2 Duo 6320 Linux version 2.6.24-19-server (buildd@king) (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #1 SMP Fri Jul 11 21:50:43 UTC 2008 r8169 chipset pci card Connected via Cross-Over cable to: SuperMicro 6014Hi Onboard Intel 82546GB e1000 chipset Running latest VMware ESXi or Vanilla 2.6.26 Initially I presumed the issue was with my aacraid because of the trace[1], so I built a vanilla 2.6.26.2 and hit the same bug. I have another system running 2.6.20 and the same card working so I tried 2.6.22 and had no problem. However, 2.6.23 failed. I sifted through the ChangeLog for 2.6.23 and narrowed the field to some potential problem commits regarding aacraid. I then proceeded to do a git bisect and found commit b449655ff52ff8a29c66c5fc3fc03617e61182ee[2] which had nothing to do with aacraid. Instead, the commit deals with large packets so I reset the MTU to 1500 and retried on 2.6.24 and found that there was no corruption, I then proceeded to try with various different size MTU only to find that an MTU greater than 1500 triggers the corruption. After initially encountering the bug with VMware ESXi I booted into a vanilla 2.6.26 live cd and mounted an nfs share from the host with the r8169 card and used dd_rescue to generate large files and transfers on the host to expose the bug. [1] http://tophat.atxconsulting.com/~tjfontaine/r8169_bug_report/oops_trace.txt [2] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=b449655ff52ff8a29c66c5fc3fc03617e61182ee Below you'll find a list of files referenced from REPORTING-BUGS that are meant to be helpful, including the lspci and module information, they can all be reached from the toplevel directory index http://tophat.atxconsulting.com/~tjfontaine/r8169_bug_report/ http://tophat.atxconsulting.com/~tjfontaine/r8169_bug_report/cpuinfo http://tophat.atxconsulting.com/~tjfontaine/r8169_bug_report/iomem http://tophat.atxconsulting.com/~tjfontaine/r8169_bug_report/ioports http://tophat.atxconsulting.com/~tjfontaine/r8169_bug_report/lspci http://tophat.atxconsulting.com/~tjfontaine/r8169_bug_report/modules http://tophat.atxconsulting.com/~tjfontaine/r8169_bug_report/oops_trace.txt http://tophat.atxconsulting.com/~tjfontaine/r8169_bug_report/scsi http://tophat.atxconsulting.com/~tjfontaine/r8169_bug_report/ver_linux [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: r8169 MTU greater than 1500 causes corruption for other controllers 2008-08-20 17:09 r8169 MTU greater than 1500 causes corruption for other controllers Timothy J Fontaine @ 2008-08-20 19:21 ` Ilpo Järvinen 2008-08-20 21:17 ` Timothy J Fontaine 2008-08-20 21:43 ` Francois Romieu 0 siblings, 2 replies; 5+ messages in thread From: Ilpo Järvinen @ 2008-08-20 19:21 UTC (permalink / raw) To: Timothy J Fontaine; +Cc: Netdev, LKML On Wed, 20 Aug 2008, Timothy J Fontaine wrote: > Setting the MTU to greater than 1500 causes the host system to run out > of SW-IOMMU space for the transfer. This results in corruption for other > controllers like my AAR-2410SA or IDE controller. > > Host system: > ASUS P5M2 w/ Intel Core 2 Duo 6320 > Linux version 2.6.24-19-server (buildd@king) (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #1 SMP Fri Jul 11 21:50:43 UTC 2008 > r8169 chipset pci card > > Connected via Cross-Over cable to: > SuperMicro 6014Hi > Onboard Intel 82546GB e1000 chipset > Running latest VMware ESXi or Vanilla 2.6.26 > > Initially I presumed the issue was with my aacraid because of the > trace[1], so I built a vanilla 2.6.26.2 and hit the same bug. I have > another system running 2.6.20 and the same card working so I tried > 2.6.22 and had no problem. However, 2.6.23 failed. I sifted through the > ChangeLog for 2.6.23 and narrowed the field to some potential problem > commits regarding aacraid. I then proceeded to do a git bisect and found > commit b449655ff52ff8a29c66c5fc3fc03617e61182ee[2] which had nothing to > do with aacraid. Instead, the commit deals with large packets so I reset > the MTU to 1500 and retried on 2.6.24 and found that there was no > corruption, I then proceeded to try with various different size MTU only > to find that an MTU greater than 1500 triggers the corruption. Hmm, there was no explanation why the tp->rx_buf_sz to pkt_size change was made in that commit (I have no idea whether those sizes have to match to other places that use tp->rx_buf_sz)... Below is a patch to revert that part of the change fully though it could be enough to change just pci_unmap_single arg (but that would probably need also rtl8169_mark_to_asic arg to be changed to match pkt_size). > Below you'll find a list of files referenced from REPORTING-BUGS that > are meant to be helpful, including the lspci and module information, > they can all be reached from the toplevel directory index Thanks for the detailed report btw... :-) -- i. ---- diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index a3e3895..44961ef 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c @@ -2720,7 +2720,7 @@ static inline bool rtl8169_try_rx_copy(struct sk_buff **sk_buff, if (!skb) goto out; - pci_dma_sync_single_for_cpu(tp->pci_dev, addr, pkt_size, + pci_dma_sync_single_for_cpu(tp->pci_dev, addr, tp->rx_buf_sz, PCI_DMA_FROMDEVICE); skb_reserve(skb, NET_IP_ALIGN); skb_copy_from_linear_data(*sk_buff, skb->data, pkt_size); @@ -2789,10 +2789,10 @@ static int rtl8169_rx_interrupt(struct net_device *dev, if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) { pci_dma_sync_single_for_device(pdev, addr, - pkt_size, PCI_DMA_FROMDEVICE); + tp->rx_buf_sz, PCI_DMA_FROMDEVICE); rtl8169_mark_to_asic(desc, tp->rx_buf_sz); } else { - pci_unmap_single(pdev, addr, pkt_size, + pci_unmap_single(pdev, addr, tp->rx_buf_sz, PCI_DMA_FROMDEVICE); tp->Rx_skbuff[entry] = NULL; } ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: r8169 MTU greater than 1500 causes corruption for other controllers 2008-08-20 19:21 ` Ilpo Järvinen @ 2008-08-20 21:17 ` Timothy J Fontaine 2008-08-20 21:43 ` Francois Romieu 1 sibling, 0 replies; 5+ messages in thread From: Timothy J Fontaine @ 2008-08-20 21:17 UTC (permalink / raw) To: =?ISO-8859-1?Q?Ilpo_J=E4rvinen_, ?=; +Cc: Netdev, LKML [-- Attachment #1: Type: text/plain, Size: 1230 bytes --] On Wed, Aug 20, 2008 at 10:21:11PM +0300, =?ISO-8859-1?Q?Ilpo_J=E4rvinen_ wrote: > Hmm, there was no explanation why the tp->rx_buf_sz to pkt_size change > was made in that commit (I have no idea whether those sizes have to match > to other places that use tp->rx_buf_sz)... Below is a patch to revert > that part of the change fully though it could be enough to change just > pci_unmap_single arg (but that would probably need also > rtl8169_mark_to_asic arg to be changed to match pkt_size). > Excellent, with the patch applied transfers over NFS seem to be going smoothly. > > Below you'll find a list of files referenced from REPORTING-BUGS that > > are meant to be helpful, including the lspci and module information, > > they can all be reached from the toplevel directory index > > Thanks for the detailed report btw... :-) Thanks :) I was more than just a little intimidated by my first post to LKML, and I wanted to make sure the first reply to my report wasn't that I didn't have enough info, or that I presented it in the wrong way, or hadn't done enough testing with it. I was also more than prepared to wait weeks for someone to reply, so thanks for the quick return! :D tjfontaine [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: r8169 MTU greater than 1500 causes corruption for other controllers 2008-08-20 19:21 ` Ilpo Järvinen 2008-08-20 21:17 ` Timothy J Fontaine @ 2008-08-20 21:43 ` Francois Romieu 2008-08-21 15:20 ` Timothy J Fontaine 1 sibling, 1 reply; 5+ messages in thread From: Francois Romieu @ 2008-08-20 21:43 UTC (permalink / raw) To: Ilpo =?unknown-8bit?B?SsOkcnZpbmVu?=; +Cc: Timothy J Fontaine, Netdev, LKML [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain; charset=unknown-8bit, Size: 892 bytes --] Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> : [...] > Hmm, there was no explanation why the tp->rx_buf_sz to pkt_size change > was made in that commit (I have no idea whether those sizes have to match > to other places that use tp->rx_buf_sz)... Because there is no need to sync data that has not been used ? Timothy, could you check if the patch below does the job too ? It should fix at least one pci_map / pci_unmap unbalance. @@ -2789,10 +2789,10 @@ static int rtl8169_rx_interrupt(struct net_device *dev, if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) { pci_dma_sync_single_for_device(pdev, addr, pkt_size, PCI_DMA_FROMDEVICE); rtl8169_mark_to_asic(desc, tp->rx_buf_sz); } else { - pci_unmap_single(pdev, addr, pkt_size, + pci_unmap_single(pdev, addr, tp->rx_buf_sz, PCI_DMA_FROMDEVICE); tp->Rx_skbuff[entry] = NULL; } -- Ueimor ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: r8169 MTU greater than 1500 causes corruption for other controllers 2008-08-20 21:43 ` Francois Romieu @ 2008-08-21 15:20 ` Timothy J Fontaine 0 siblings, 0 replies; 5+ messages in thread From: Timothy J Fontaine @ 2008-08-21 15:20 UTC (permalink / raw) To: Francois Romieu; +Cc: Ilpo Järvinen, Netdev, LKML [-- Attachment #1: Type: text/plain, Size: 1080 bytes --] On Wed, Aug 20, 2008 at 11:43:50PM +0200, Francois Romieu wrote: > Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> : > [...] > > Hmm, there was no explanation why the tp->rx_buf_sz to pkt_size change > > was made in that commit (I have no idea whether those sizes have to match > > to other places that use tp->rx_buf_sz)... > > Because there is no need to sync data that has not been used ? > > Timothy, could you check if the patch below does the job too ? It should > fix at least one pci_map / pci_unmap unbalance. > > @@ -2789,10 +2789,10 @@ static int rtl8169_rx_interrupt(struct net_device *dev, > > if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) { > pci_dma_sync_single_for_device(pdev, addr, > pkt_size, PCI_DMA_FROMDEVICE); > rtl8169_mark_to_asic(desc, tp->rx_buf_sz); > } else { > - pci_unmap_single(pdev, addr, pkt_size, > + pci_unmap_single(pdev, addr, tp->rx_buf_sz, > PCI_DMA_FROMDEVICE); > tp->Rx_skbuff[entry] = NULL; > } > > -- > Ueimor Yup, this patch also works. tjfontaine [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-08-21 15:20 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2008-08-20 17:09 r8169 MTU greater than 1500 causes corruption for other controllers Timothy J Fontaine 2008-08-20 19:21 ` Ilpo Järvinen 2008-08-20 21:17 ` Timothy J Fontaine 2008-08-20 21:43 ` Francois Romieu 2008-08-21 15:20 ` Timothy J Fontaine
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®