Loading arch/blackfin/mach-common/interrupt.S +25 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
arch/blackfin/mach-common/interrupt.S +25 −0 Original line number Diff line number Diff line Loading @@ -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; Loading