From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <4B61C591.7030403@domain.hid> Date: Thu, 28 Jan 2010 18:12:49 +0100 From: Jan Kiszka MIME-Version: 1.0 References: <4B615E0E.7070601@domain.hid> <4B61C195.8000500@domain.hid> In-Reply-To: <4B61C195.8000500@domain.hid> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: [Adeos-main] [PATCH v3] x86: Fix handling of IRQ_MOVE_CLEANUP_VECTOR List-Id: General discussion about Adeos List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Philippe Gerum Cc: adeos-main IRQ_MOVE_CLEANUP_VECTOR is at 0x20, ie. far below FIRST_SYSTEM_VECTOR. So we must not translate it when calling ipipe_virtualize_irq, and we have to demux it properly in __ipipe_handle_irq. Signed-off-by: Jan Kiszka --- Changes in v3: - special demux only required for SMP Changes in v2: - special demux code for __ipipe_handle_irq arch/x86/kernel/ipipe.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/ipipe.c b/arch/x86/kernel/ipipe.c index b471355..b5b0966 100644 --- a/arch/x86/kernel/ipipe.c +++ b/arch/x86/kernel/ipipe.c @@ -289,7 +289,7 @@ void __init __ipipe_enable_pipeline(void) IPIPE_STDROOT_MASK); ipipe_virtualize_irq(ipipe_root_domain, - ipipe_apic_vector_irq(IRQ_MOVE_CLEANUP_VECTOR), + IRQ_MOVE_CLEANUP_VECTOR, (ipipe_irq_handler_t)&smp_irq_move_cleanup_interrupt, NULL, &__ipipe_ack_apic, @@ -311,7 +311,10 @@ void __init __ipipe_enable_pipeline(void) * IPIPE_SYSTEM_MASK has been passed for them, that's ok. */ for (irq = 0; irq < NR_IRQS; irq++) - /* Fails for IPIPE_CRITICAL_IPI but that's ok. */ + /* + * Fails for IPIPE_CRITICAL_IPI and IRQ_MOVE_CLEANUP_VECTOR, + * but that's ok. + */ ipipe_virtualize_irq(ipipe_root_domain, irq, (ipipe_irq_handler_t)&do_IRQ, @@ -900,8 +903,12 @@ int __ipipe_handle_irq(struct pt_regs *regs) #ifdef CONFIG_X86_LOCAL_APIC if (vector >= FIRST_SYSTEM_VECTOR) irq = ipipe_apic_vector_irq(vector); +#ifdef CONFIG_SMP + else if (vector == IRQ_MOVE_CLEANUP_VECTOR) + irq = vector; +#endif /* CONFIG_SMP */ else -#endif +#endif /* CONFIG_X86_LOCAL_APIC */ irq = __get_cpu_var(vector_irq)[vector]; m_ack = 0; } else { /* This is a self-triggered one. */ -- 1.6.0.2