Kernel boot hangs by parallel flood pings

Johns Daniel jdaniel at adventnetworks.com
Thu Jan 20 05:30:44 EST 2005


I have had better luck with the following fcc_enet.c patch (against the ELDK 2.4.4 kernel):

~~~~~~~~~~~~~
1.) In static void mii_display_status(struct net_device *dev):
 
 	if (!fep->link && !fep->old_link) {
 		/* Link is still down - don't print anything */
 		return;
 	}
 
	printk("%s: status: ", dev->name);
 
 	if (!fep->link) {
+        netif_carrier_off(dev);
		printk("link down");
 	} else {
+        netif_carrier_on(dev);
		printk("link up");
 
 		switch(s & PHY_STAT_SPMASK) {
~~~~~~~~~~~~~

2.) In fcc_enet_open(struct net_device *dev):

 		mii_do_cmd(dev, fep->phy->startup);
 #ifdef	CONFIG_PM826
 		/* Read the autonegotiation results */
 		mii_do_cmd(dev, fep->phy->ack_int);
 		mii_do_cmd(dev, phy_cmd_relink);
 #endif	/* CONFIG_PM826 */
+        if (fep->link) {
+            netif_carrier_on(dev);
+        } else {
+            netif_carrier_off(dev);
+        }
 		netif_start_queue(dev);
 		return 0;		/* Success */
 	}
 	return -ENODEV;		/* No PHY we understand */
 #else
 	fep->link = 1;
~~~~~~~~~~~~~

This communicates the link status to the kernel TCP/IP stack. Obviously, this assumes that MDIO is working!

-- Johns Daniel, Advent Networks, Inc.

-----Original Message-----
From:	linuxppc-embedded-bounces at ozlabs.org on behalf of Ho Lee
Sent:	Wed 1/12/2005 6:14 PM
To:	'linuxppc'
Cc:	'Steffen Rumler'
Subject:	RE: Kernel boot hangs by parallel flood pings



-----Original Message-----
From:	linuxppc-embedded-bounces at ozlabs.org on behalf of Ho Lee
Sent:	Wed 1/12/2005 6:14 PM
To:	'linuxppc'
Cc:	'Steffen Rumler'
Subject:	RE: Kernel boot hangs by parallel flood pings

I met the same problem in CPM driver, and there could be many 
solutions. I think the right place to fix is the fec driver. 
The fec driver registers interrupt handler during the 
initialization not when the device is opened, so it may
receive packets even the device is not up and running (also 
before the network subsystem is initialized) My fix was to 
ignore the received packets if the driver is not opened. 

--- linux-2.4.26.orig/arch/ppc/8xx_io/fec.c
+++ linux-2.4.26/arch/ppc/8xx_io/fec.c 
@@ -587,6 +587,9 @@
                goto rx_processing_done;
        }
 
+       if (!netif_running(dev))
+           goto rx_processing_done;
+
        /* Process the incoming frame.
         */
        fep->stats.rx_packets++;


Regards,
Ho

-----Original Message-----
From: linuxppc-embedded-bounces at ozlabs.org
[mailto:linuxppc-embedded-bounces at ozlabs.org] On Behalf Of Rune Torgersen
Sent: Wednesday, January 12, 2005 7:32 AM
To: Steffen Rumler; linuxppc
Subject: RE: Kernel boot hangs by parallel flood pings

--- Kernel.old/net/ipv4/ip_output.c     Thu Jun  5 09:00:39 2003
+++ Kernel/net/ipv4/ip_output.c Thu Jun  5 09:00:28 2003
@@ -1087,11 +1087,11 @@

 void __init ip_init(void)
 {
-       dev_add_pack(&ip_packet_type);
-
        ip_rt_init();
        inet_initpeers();

+       dev_add_pack(&ip_packet_type);
+
 #ifdef CONFIG_IP_MULTICAST
        proc_net_create("igmp", 0, ip_mc_procinfo);
 #endif
>>


_______________________________________________
Linuxppc-embedded mailing list
Linuxppc-embedded at ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-embedded








More information about the Linuxppc-embedded mailing list