Re: [PATCH 2.6.11-rc1] add local_irq_enable() to cpu_idle()

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

 



There have been times when having local_irq_enable() in my idle loop
would have prevented a hang in some of my experimental kernels, too,
but it's always been because I had screwed up somewhere else and
forgotten to re-enable interrupts.  Is there some good reason why
the kernel should end up in idle with interrupts turned off?

		Regards,

		Kevin K.

Yoichi Yuasa wrote:
Hi Ralf,

We need to add local_irq_enable() to cpu_idle().
Please add this patch to v2.6.

I don't have any information about R3081.
I didn't fix r3081_wait().

Yoichi

Signed-off-by: Yoichi Yuasa <yuasa@xxxxxxxxxxxxxx>

diff -urN -X dontdiff a-orig/arch/mips/kernel/cpu-probe.c a/arch/mips/kernel/cpu-probe.c
--- a-orig/arch/mips/kernel/cpu-probe.c Sun Oct 31 21:49:07 2004
+++ a/arch/mips/kernel/cpu-probe.c Tue Jan 18 00:26:12 2005
@@ -42,10 +42,12 @@
{
unsigned long cfg = read_c0_conf();
write_c0_conf(cfg | TX39_CONF_HALT);
+ local_irq_enable();
}
static void r4k_wait(void)
{
+ local_irq_enable();
__asm__(".set\tmips3\n\t"
"wait\n\t"
".set\tmips0");
@@ -61,6 +63,7 @@
void au1k_wait(void)
{
+ local_irq_enable();
#ifdef CONFIG_PM
/* using the wait instruction makes CP0 counter unusable */
__asm__(".set\tmips3\n\t"
diff -urN -X dontdiff a-orig/arch/mips/kernel/process.c a/arch/mips/kernel/process.c
--- a-orig/arch/mips/kernel/process.c Sat Jan 8 23:19:16 2005
+++ a/arch/mips/kernel/process.c Mon Jan 17 21:43:08 2005
@@ -58,6 +58,8 @@
while (!need_resched())
if (cpu_wait)
(*cpu_wait)();
+ else
+ local_irq_enable();
schedule();
}
}





[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux