David,

Is there an impact of your change on the board doing a netboot and
loading the rootfs from a nfs mount?

Thanks
Amit

David Ashley wrote:
> I found a bug which was manifest when linux boots and lots of ethernet
> packets are coming in. I think the problem is because the fcc_enet.c
> adds the network device in very early during the boot, and the driver is
> happily calling netif_rx() on the received packets even though the interface
> isn't officially "up". Linux appears not to like this, and would crash
> sporadically, or predictibly if I have a program on another computer running
> just blasting packets at the first one.
>
> The fix is to just put an if around this section in fcc_enet_rx:
>               skb = dev_alloc_skb(pkt_len-4);
>
>               if (skb == NULL) {
>                       printk("%s: Memory squeeze, dropping packet.\n", 
> dev->name);
>                       cep->stats.rx_dropped++;
>               }
>               else {
>                       skb->dev = dev;
>                       skb_put(skb,pkt_len-4); /* Make room */
>                       eth_copy_and_sum(skb,
>                               (unsigned char *)__va(bdp->cbd_bufaddr),
>                               pkt_len-4, 0);
>                       skb->protocol=eth_type_trans(skb,dev);
>                       netif_rx(skb);
>               }
>
> So it becomes:
>               if(dev->flags & IFF_UP) { /* only do if iface is up */
>                       skb = dev_alloc_skb(pkt_len-4);
>
>                       if (skb == NULL) {
>                               printk("%s: Memory squeeze, dropping 
> packet.\n", dev->name);
>                               cep->stats.rx_dropped++;
>                       }
>                       else {
>                               skb->dev = dev;
>                               skb_put(skb,pkt_len-4); /* Make room */
>                               eth_copy_and_sum(skb,
>                                       (unsigned char *)__va(bdp->cbd_bufaddr),
>                                       pkt_len-4, 0);
>                               skb->protocol=eth_type_trans(skb,dev);
>                               netif_rx(skb);
>                       }
>               }
>
> This fixes the crash bug.
>
> -Dave
>
>
>
>
>


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/



Reply via email to