From 19f8b268c74452d538726d1eb779ef57b669284d Mon Sep 17 00:00:00 2001 From: Philippe Gerum Date: Mon, 22 Jun 2009 18:25:52 +0200 Subject: [PATCH] --- yaml --- r: 162679 b: refs/heads/master c: 7a7967dc1b606f8c88e33bbec773bf82b4a52e6e h: refs/heads/master i: 162677: 497ad860d9e27133e3b352fa68b3b1a1fefe7e60 162675: 9a5f37798ca0c3e4664d83f2b2174d8e11ea14de 162671: 21c6c68860c2a3cb42727dbc817ca3d2129006b7 v: v3 --- [refs] | 2 +- trunk/arch/blackfin/mach-common/interrupt.S | 25 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 4e29c6f36e2f..ae2540ac9436 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 70f47202320623270f327e249df0121c09e45c09 +refs/heads/master: 7a7967dc1b606f8c88e33bbec773bf82b4a52e6e diff --git a/trunk/arch/blackfin/mach-common/interrupt.S b/trunk/arch/blackfin/mach-common/interrupt.S index 29fbf67f47fa..c754ff74bd5d 100644 --- a/trunk/arch/blackfin/mach-common/interrupt.S +++ b/trunk/arch/blackfin/mach-common/interrupt.S @@ -261,6 +261,31 @@ ENTRY(_evt_system_call) ENDPROC(_evt_system_call) #ifdef CONFIG_IPIPE +/* + * __ipipe_call_irqtail: lowers the current priority level to EVT15 + * before running a user-defined routine, then raises the priority + * level to EVT14 to prepare the caller for a normal interrupt + * return through RTI. + * + * We currently use this facility in two occasions: + * + * - to branch to __ipipe_irq_tail_hook as requested by a high + * priority domain after the pipeline delivered an interrupt, + * e.g. such as Xenomai, in order to start its rescheduling + * procedure, since we may not switch tasks when IRQ levels are + * nested on the Blackfin, so we have to fake an interrupt return + * so that we may reschedule immediately. + * + * - to branch to sync_root_irqs, in order to play any interrupt + * pending for the root domain (i.e. the Linux kernel). This lowers + * the core priority level enough so that Linux IRQ handlers may + * never delay interrupts handled by high priority domains; we defer + * those handlers until this point instead. This is a substitute + * to using a threaded interrupt model for the Linux kernel. + * + * r0: address of user-defined routine + * context: caller must have preempted EVT15, hw interrupts must be off. + */ ENTRY(___ipipe_call_irqtail) p0 = r0; r0.l = 1f;