On Wed, 17 Feb 2010 16:17:16 +0100 Eric Dumazet <eric.duma...@gmail.com> wrote:
> Le mercredi 17 février 2010 à 15:55 +0100, Anatolij Gustschin a écrit : ... > > +static struct sk_buff *tx_skb_align_workaround(struct net_device *dev, > > + struct sk_buff *skb) > > +{ > > + struct sk_buff *new_skb; > > + struct fs_enet_private *fep = netdev_priv(dev); > > + > > + /* Alloc new skb */ > > + new_skb = dev_alloc_skb(ENET_RX_FRSIZE + 4); > > > ENET_RX_FRSIZE looks strange in TX path > > Why not using skb->len + 4 instead of ENET_RX_FRSIZE + 4 ? I will fix it. > > + if (!new_skb) { > > + dev_warn(fep->dev, "Memory squeeze, dropping tx packet.\n"); > > I am just wondering if this is ratelimited ? Right, it should be ratelimited, will fix it, too. ... > > static int fs_enet_start_xmit(struct sk_buff *skb, struct net_device *dev) > > { > > struct fs_enet_private *fep = netdev_priv(dev); > > @@ -588,6 +619,19 @@ static int fs_enet_start_xmit(struct sk_buff *skb, > > struct net_device *dev) > > u16 sc; > > unsigned long flags; > > > > +#ifdef CONFIG_FS_ENET_MPC5121_FEC > > + if (((unsigned long)skb->data) & 0x3) { > > + skb = tx_skb_align_workaround(dev, skb); > > + if (!skb) { > > + /* > > + * We have lost packet due to memory allocation error > > + * in tx_skb_align_workaround(). Hopefully original > > + * skb is still valid, so try transmit it later. > > + */ > > Could you define 'try to transmit later' ? > Who is responsible to trigger this event ? The function returns NETDEV_TX_BUSY here, skb is not consumed and will be requeued by sch_direct_xmit(), so it is scheduled for resending later. Thanks, Anatolij _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev