* [Adeos-main] [PATCH] ipipe: Restore root state before disabling hw irqs
@ 2011-04-29 18:11 Jan Kiszka
0 siblings, 0 replies; only message in thread
From: Jan Kiszka @ 2011-04-29 18:11 UTC (permalink / raw)
To: Philippe Gerum; +Cc: adeos-main
root_stall_after_handler is a fixup for the root state, required when
CONFIG_TRACE_IRQFLAGS is enabled. It then calls local_irq_disable which
reenables hard irqs as a side effect. This causes all types of
corruptions after return from __ipipe_sync_stage which is supposed to
leave hard irqs off.
Fix it by reordering root_stall_after_handler and local_irq_disable_hw.
Signed-off-by: Jan Kiszka <jan.kiszka@domain.hid>
---
kernel/ipipe/core.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/ipipe/core.c b/kernel/ipipe/core.c
index 9ad7757..9aa4800 100644
--- a/kernel/ipipe/core.c
+++ b/kernel/ipipe/core.c
@@ -1277,14 +1277,14 @@ void __ipipe_sync_stage(void)
irq_enter();
ipd->irqs[irq].handler(irq, ipd->irqs[irq].cookie);
irq_exit();
- local_irq_disable_hw();
root_stall_after_handler();
+ local_irq_disable_hw();
while (__ipipe_check_root_resched())
__ipipe_preempt_schedule_irq();
} else {
__ipipe_do_root_xirq(ipd, irq);
- local_irq_disable_hw();
root_stall_after_handler();
+ local_irq_disable_hw();
}
p = ipipe_cpudom_ptr(__ipipe_current_domain);
--
1.7.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2011-04-29 18:11 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-29 18:11 [Adeos-main] [PATCH] ipipe: Restore root state before disabling hw irqs Jan Kiszka
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.