| To: | Andi Kleen <ak@xxxxxx> |
|---|---|
| Subject: | Re: bug: excess context switches on read() of tcp sockets |
| From: | Ben LaHaise <bcrl@xxxxxxxxxx> |
| Date: | Tue, 28 Aug 2001 15:33:12 -0400 (EDT) |
| Cc: | <netdev@xxxxxxxxxxx> |
| In-reply-to: | <20010828210719.08488@colin.muc.de> |
| Sender: | owner-netdev@xxxxxxxxxxx |
On Tue, 28 Aug 2001, Andi Kleen wrote:
> The likely suspect is ksoftirqd. Add counters to the ksoftirqd loop.
That was my original thinking, but I applied the patch below. It doesn't
seem to be triggering the "oh, bother" message at all, so our friendly
scapegoat is not to be. What's the next dead chicken I should offer up?
-ben
--- /md0/kernels/2.4/v2.4.9-ac2/kernel/softirq.c Mon Aug 13 15:12:09 2001
+++ kernel/softirq.c Tue Aug 28 15:24:48 2001
@@ -63,7 +63,7 @@
int cpu = smp_processor_id();
__u32 pending;
long flags;
- __u32 mask;
+ int i = 0;
if (in_interrupt())
return;
@@ -75,7 +75,6 @@
if (pending) {
struct softirq_action *h;
- mask = ~pending;
local_bh_disable();
restart:
/* Reset the pending bitmask before enabling irqs */
@@ -95,14 +94,15 @@
local_irq_disable();
pending = softirq_pending(cpu);
- if (pending & mask) {
- mask &= ~pending;
+ if (pending && (i++ < 16))
goto restart;
- }
+
__local_bh_enable();
- if (pending)
+ if (pending) {
+ printk("oh bother\n");
wakeup_softirqd(cpu);
+ }
}
local_irq_restore(flags);
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | Re: bug: excess context switches on read() of tcp sockets, Andi Kleen |
|---|---|
| Next by Date: | [Patch 1of2] IPv6 addrconf_forward_change() bug, David Stevens |
| Previous by Thread: | Re: bug: excess context switches on read() of tcp sockets, Andi Kleen |
| Next by Thread: | [Patch 1of2] IPv6 addrconf_forward_change() bug, David Stevens |
| Indexes: | [Date] [Thread] [Top] [All Lists] |