lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 6 May 2009 14:37:41 -0600 From: Grant Likely <grant.likely@...retlab.ca> To: Wolfgang Denk <wd@...x.de> Cc: linuxppc-dev@...abs.org, John Rigby <jrigby@...escale.com>, Piotr Ziecik <kosmo@...ihalf.com>, netdev@...r.kernel.org, John Rigby <jcrigby@...il.com> Subject: Re: [PATCH 03/12] fs_enet: Add FEC TX Alignment workaround for MPC5121. On Wed, May 6, 2009 at 2:15 PM, Wolfgang Denk <wd@...x.de> wrote: > From: John Rigby <jrigby@...escale.com> > > The FEC on 5121 has problems with misaligned tx buffers. > The RM says any alignment is ok but empirical results > show that packet buffers ending in 0x1E will sometimes > hang the FEC. Other bad alignment does not hang but will > cause silent TX failures resulting in about a 1% packet > loss as tested by ping -f from a remote host. > > This patch is a work around that copies every tx packet > to an aligned skb before sending. OUCH! > diff --git a/drivers/net/fs_enet/fs_enet-main.c b/drivers/net/fs_enet/fs_enet-main.c > index 4170d33..c83ffc3 100644 > --- a/drivers/net/fs_enet/fs_enet-main.c > +++ b/drivers/net/fs_enet/fs_enet-main.c > @@ -594,6 +594,37 @@ void fs_cleanup_bds(struct net_device *dev) > > /**********************************************************************************/ > > +#ifdef CONFIG_FS_ENET_FEC_TX_ALIGN_WORKAROUND > +static struct sk_buff *tx_skb_align_workaround(struct net_device *dev, > + struct sk_buff *skb) > +{ > + struct sk_buff *new_skb; > + > + /* Alloc new skb */ > + new_skb = dev_alloc_skb(ENET_RX_FRSIZE + 32); > + if (!new_skb) { > + printk(KERN_WARNING DRV_MODULE_NAME > + ": %s Memory squeeze, dropping tx packet.\n", > + dev->name); > + return NULL; > + } > + > + /* Make sure new skb is properly aligned */ > + skb_align(new_skb, 32); > + > + /* Copy data to new skb ... */ > + skb_copy_from_linear_data(skb, new_skb->data, skb->len); > + skb_put(new_skb, skb->len); > + > + /* ... and free an old one */ > + dev_kfree_skb_any(skb); > + > + return new_skb; > +} > +#else > +#define tx_skb_align_workaround(dev, skb) (skb) > +#endif Another use of #ifdef blocks. What is the multiplatform impact? g. -- Grant Likely, B.Sc., P.Eng. Secret Lab Technologies Ltd. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists