Interrupt starvation points

From: Daniel Walker
Date: Fri Feb 11 2005 - 12:06:49 EST


I found some points during schedule when interrupts are off for
long periods . These two patches seem to help. One enables interrupts
inside schedule() , so that interrupts are enabled after each
need-resched loop, then disabled again before __schedule() is called.

The other patch enabled interrupt before calling up on
kernel_sem ..This one could use some thinking over. I did this cause
up() is very expensive on ARM , and combined with the looping above
interrupts can stay off for a long time ..


Daniel


Index: linux-2.6.10/kernel/sched.c
===================================================================
--- linux-2.6.10.orig/kernel/sched.c 2005-02-08 22:32:48.000000000 +0000
+++ linux-2.6.10/kernel/sched.c 2005-02-08 22:33:58.000000000 +0000
@@ -3038,9 +3038,10 @@
send_sig(SIGUSR2, current, 1);
}
do {
+ local_irq_disable();
__schedule();
+ local_irq_enable(); // TODO: do sti; ret
} while (unlikely(test_thread_flag(TIF_NEED_RESCHED)));
- local_irq_enable(); // TODO: do sti; ret
}

EXPORT_SYMBOL(schedule);


Index: linux-2.6.10/lib/kernel_lock.c
===================================================================
--- linux-2.6.10.orig/lib/kernel_lock.c 2005-02-08 18:16:30.000000000 +0000
+++ linux-2.6.10/lib/kernel_lock.c 2005-02-08 22:53:09.000000000 +0000
@@ -114,7 +114,9 @@

void __lockfunc __release_kernel_lock(void)
{
+ local_irq_enable();
up(&kernel_sem);
+ 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/