Re: [patch] Real-Time Preemption, -RT-2.6.9-mm1-V0.6.8

From: Ingo Molnar
Date: Tue Nov 02 2004 - 14:21:49 EST



* Mark_H_Johnson@xxxxxxxxxxxx <Mark_H_Johnson@xxxxxxxxxxxx> wrote:

> This build appears to run OK and then in the middle of the real time
> tests stops doing useful work (during network test).

weird, the deadlock detector did not trigger, although it is a clear
circular deadlock:

R ksoftirqd/0/ 3 [dffe8020, 105] blocked on: [dfcafc20] {r:0,a:-1,&((sk)->sk_lock.slock)}
.. held by: rcp/ 4791 [d84bd910, 118]
... acquired at: ip_send_reply+0x12b/0x250

D rcp/ 4791 [d84bd910, 118] blocked on: [c03cb900] {r:0,a:-1,ptype_lock}
.. held by: ksoftirqd/0/ 3 [dffe8020, 105]
... acquired at: netif_receive_skb+0xae/0x330

i.e. ksoftirqd blocked on rcp and rcp blocked on ksoftirqd, cleanly
deadlocking each other.

anyway, does the patch below, ontop of -V0.6.8, fix this type of hang?

Ingo

--- linux/net/core/dev.c.orig
+++ linux/net/core/dev.c
@@ -1916,7 +1916,9 @@ static void net_rx_action(struct softirq
dev = list_entry(queue->poll_list.next,
struct net_device, poll_list);

+ rcu_read_lock_read(&ptype_lock);
if (dev->quota <= 0 || dev->poll(dev, &budget)) {
+ rcu_read_unlock_read(&ptype_lock);
local_irq_disable();
list_del(&dev->poll_list);
list_add_tail(&dev->poll_list, &queue->poll_list);
@@ -1926,6 +1928,7 @@ static void net_rx_action(struct softirq
dev->quota = dev->weight;
} else {
dev_put(dev);
+ rcu_read_unlock_read(&ptype_lock);
local_irq_disable();
}

-
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/