diff mbox

Corrupt Network Packets -- 3.17-rc5/rc6

Message ID 20140922.133831.220769383344675250.davem@davemloft.net
State Not Applicable, archived
Delegated to: David Miller
Headers show

Commit Message

David Miller Sept. 22, 2014, 5:38 p.m. UTC
From: Pete Clements <clem@clem.clem-digital.net>
Date: Mon, 22 Sep 2014 13:24:59 -0400 (EDT)

> Quoting Cong Wang
>   > <clem@clem.clem-digital.net> wrote:
>   > > Heads up fyi: system is i386 UP.
>   > >
>   > > Started getting some pop3 reception errors from the above system.
>   > > Investigating the problem discovered scp of the mailbox failed
>   > > with "Corrupted MAC on input"
>   > >
>   > > Problem started with rc5, still in rc6. Running rc4 with no
>   > > problem.
>   > >
>   > > Sorry for lack of better definition.
>   > 
>   > 
>   > Which driver are you using?
>   > 
> Here's the output from boot log:
> 
>  PCI: setting IRQ 11 as level-triggered
>  3c59x 0000:00:0d.0: found PCI INT A -> IRQ 11
>  3c59x: Donald Becker and others.
>  0000:00:0d.0: 3Com PCI 3c900 Cyclone 10Mbps TPC at d8812000.

Should be fixed by:

commit 8400dd029e764e30361a51a7ae35900ae0032b43
Author: Neil Horman <nhorman@tuxdriver.com>
Date:   Wed Sep 17 09:04:45 2014 -0400

    3c59x: Fix bad offset spec in skb_frag_dma_map
    
    Recently aded the use of skb_frag_dma_map to 3c59x, but didn't realize it
    automatically included the frag_offset internally, as well as provided an option
    to specify an extra offset in the parameter list.  We need to specify an offset
    of 0 in the parameter list to avoid skb corruption that results in lost
    connections.
    
    Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
    CC: Linux Kernel list <linux-kernel@vger.kernel.org>
    CC: "David S. Miller" <davem@davemloft.net>
    CC: Meelis Roos <mroos@linux.ee>
    Tested-by: Meelis Roos <mroos@linux.ee>

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Pete Clements Sept. 22, 2014, 6:30 p.m. UTC | #1
Thanks. Does not patch. Code looks not to be in the rc6 that Linus
put out. Guess there is more to come.  (This is what I believe is
the segment in rc6 -- at line 2179.)

	vp->tx_ring[entry].frag[i+1].addr =
		cpu_to_le32(skb_frag_dma_map(
		&VORTEX_PCI(vp)->dev,
		frag,
		frag->page_offset, frag->size, DMA_TO_DEVICE));
--
Pete Clements 

Quoting David Miller
  > From: Pete Clements <clem@clem.clem-digital.net>
  > Date: Mon, 22 Sep 2014 13:24:59 -0400 (EDT)
  > 
  > > Quoting Cong Wang
  > >   > <clem@clem.clem-digital.net> wrote:
  > >   > > Heads up fyi: system is i386 UP.
  > >   > >
  > >   > > Started getting some pop3 reception errors from the above system.
  > >   > > Investigating the problem discovered scp of the mailbox failed
  > >   > > with "Corrupted MAC on input"
  > >   > >
  > >   > > Problem started with rc5, still in rc6. Running rc4 with no
  > >   > > problem.
  > >   > >
  > >   > > Sorry for lack of better definition.
  > >   > 
  > >   > 
  > >   > Which driver are you using?
  > >   > 
  > > Here's the output from boot log:
  > > 
  > >  PCI: setting IRQ 11 as level-triggered
  > >  3c59x 0000:00:0d.0: found PCI INT A -> IRQ 11
  > >  3c59x: Donald Becker and others.
  > >  0000:00:0d.0: 3Com PCI 3c900 Cyclone 10Mbps TPC at d8812000.
  > 
  > Should be fixed by:
  > 
  > commit 8400dd029e764e30361a51a7ae35900ae0032b43
  > Author: Neil Horman <nhorman@tuxdriver.com>
  > Date:   Wed Sep 17 09:04:45 2014 -0400
  > 
  >     3c59x: Fix bad offset spec in skb_frag_dma_map
  >     
  >     Recently aded the use of skb_frag_dma_map to 3c59x, but didn't realize it
  >     automatically included the frag_offset internally, as well as provided an option
  >     to specify an extra offset in the parameter list.  We need to specify an offset
  >     of 0 in the parameter list to avoid skb corruption that results in lost
  >     connections.
  >     
  >     Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
  >     CC: Linux Kernel list <linux-kernel@vger.kernel.org>
  >     CC: "David S. Miller" <davem@davemloft.net>
  >     CC: Meelis Roos <mroos@linux.ee>
  >     Tested-by: Meelis Roos <mroos@linux.ee>
  > 
  > diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
  > index 8ab87ff..8ca49f04 100644
  > --- a/drivers/net/ethernet/3com/3c59x.c
  > +++ b/drivers/net/ethernet/3com/3c59x.c
  > @@ -2186,7 +2186,7 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
  >  			skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
  >  
  >  			dma_addr = skb_frag_dma_map(&VORTEX_PCI(vp)->dev, frag,
  > -						    frag->page_offset,
  > +						    0,
  >  						    frag->size,
  >  						    DMA_TO_DEVICE);
  >  			if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr)) {
  > 
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller Sept. 22, 2014, 7:07 p.m. UTC | #2
From: Pete Clements <clem@clem.clem-digital.net>
Date: Mon, 22 Sep 2014 14:30:36 -0400 (EDT)

> 
> Thanks. Does not patch. Code looks not to be in the rc6 that Linus
> put out. Guess there is more to come.  (This is what I believe is
> the segment in rc6 -- at line 2179.)
> 
> 	vp->tx_ring[entry].frag[i+1].addr =
> 		cpu_to_le32(skb_frag_dma_map(
> 		&VORTEX_PCI(vp)->dev,
> 		frag,
> 		frag->page_offset, frag->size, DMA_TO_DEVICE));

Just simply change the frag->page_offset argument to zero.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
index 8ab87ff..8ca49f04 100644
--- a/drivers/net/ethernet/3com/3c59x.c
+++ b/drivers/net/ethernet/3com/3c59x.c
@@ -2186,7 +2186,7 @@  boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
 			skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
 
 			dma_addr = skb_frag_dma_map(&VORTEX_PCI(vp)->dev, frag,
-						    frag->page_offset,
+						    0,
 						    frag->size,
 						    DMA_TO_DEVICE);
 			if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr)) {