Re: infinite spin in RT when booting with DHCP on

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hey Hector,

On Fri, Feb 03, 2012 at 11:23:24AM +0100, Hector Palacios wrote:
> On 02/02/2012 09:13 PM, Uwe Kleine-König wrote:
> >On Thu, Feb 02, 2012 at 01:38:44PM +0100, Tim Sander wrote:
> >>Hi
> >>>When booting my platform with DHCP on, the DHCP request is sent by the
> >>>network driver before the PHY has even started the autonegotiation.
> >>>Since the PHY is not ready, the TX interrupt returns with NETDEV_TX_BUSY
> >>>but the softirq [sirq-net-tx] seems to have entered an infinite spin, as
> >>>my system is practically hung and 'top' reveals [sirq-net-tx/0] is
> >>>consuming 95% of CPU. This is preventing the PHY autonegotiation (which is
> >>>scheduled as a delayed work) to start, so the PHY is never ready and the
> >>>packet never reaches the network.
> >>Mh, i think i am hit by the same problem. I have a i.mx 35 and when dhcp is
> >>enabled the ksoftirq is also running wild with 3.0-rt. This also happens when
> >I fail to reproduce that on a pcm043 machine using 3.0.18-rt34. Can you
> >provide me your config. Does the problem occur on every boot for you? If
> >not, how often do I need to reboot?
> 
> On my ARM iMX51 platform the problem occurs on every boot. Basically
> I'm launching udhcpc on the /etc/network/if-up.d/ifup script, to get
> a dynamic IP for the FEC.
Maybe your environment is special then (pick one or more from: board,
cable, phy, hub/switch, sun erruption, ice cream on your board or your
favourite hardware designer :-).

As the problem occurs for you on every boot you seem to be the one who
can debug that easily. Can you check if mainline is affected, too, after
boosting ksoftirqd? I.e. either use

	chrt -f -p 99 $(pidof ksoftirqd)

or add

diff --git a/kernel/softirq.c b/kernel/softirq.c
index 4eb3a0f..d08c046 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -861,6 +861,10 @@ static int __cpuinit cpu_callback(struct notifier_block *nfb,
 			printk("ksoftirqd for %i failed\n", hotcpu);
 			return notifier_from_errno(PTR_ERR(p));
 		}
+		sched_setscheduler_nocheck(p, SCHED_FIFO, &(struct sched_param){
+				.sched_priority = MAX_RT_PRIO-1,
+				});
+
 		kthread_bind(p, hotcpu);
   		per_cpu(ksoftirqd, hotcpu) = p;
  		break;

to your tree, whatever is easier for you.

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux