Re: lockups with netconsole on e1000 on media insertion

From: Andi Kleen
Date: Fri Aug 05 2005 - 06:47:00 EST


John Bäckstrand <sandos@xxxxxxx> writes:

> I've been trying to hunt down a hard lockup issue with some hardware
> of mine, but I've possibly hit a kernel bug instead. When using
> netconsole on my e1000, if I unplug the cable and then re-plug it, the
> machine locks up hard. It manages to print the "link up" message on
> the screen, but nothing after that. Now, I wonder if this is supposed
> to be so? I tried this on 4 different configurations, 2.6.13-rc5 and
> 2.6.12 with and without "noapic acpi=off", same result on all of
> them. I've tried with 1 and 3 other NICs in the machine at the same
> time.

I ran into the same problem some time ago on e1000. The problem was
that if the link doesn't come up netconsole ends up waiting forever
for it.

The patch was for 2.6.12, did a quick untested port to 2.6.13rc5.

-Andi

Only try a limited number to send packets in netpoll

Avoids hangs on e1000 when link is not up.

Signed-off-by: Andi Kleen <ak@xxxxxxx>

Index: linux/net/core/netpoll.c
===================================================================
--- linux.orig/net/core/netpoll.c
+++ linux/net/core/netpoll.c
@@ -247,9 +247,11 @@ static void netpoll_send_skb(struct netp
{
int status;
struct netpoll_info *npinfo;
+ /* Only try 5 times in case the link is down etc. */
+ int try = 5;

repeat:
- if(!np || !np->dev || !netif_running(np->dev)) {
+ if(try-- == 0 || !np || !np->dev || !netif_running(np->dev)) {
__kfree_skb(skb);
return;
}
@@ -286,6 +288,9 @@ repeat:

/* transmit busy */
if(status) {
+ /* Don't count spinlock as try */
+ if (status == NETDEV_TX_LOCKED)
+ try++;
netpoll_poll(np);
goto repeat;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/