diff options
author | Jan Beulich <jbeulich@suse.com> | 2013-02-26 10:15:56 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2013-02-26 10:15:56 +0100 |
commit | 2f8c55ccefe49bb526df0eaf5fa9b7b788422208 (patch) | |
tree | 8033d7e89278598690f358db62859b5477634b2f /xen/arch/x86/irq.c | |
parent | 0f8adcb2a7183bea5063f6fffba7d7e1aa14fc84 (diff) | |
download | xen-2f8c55ccefe49bb526df0eaf5fa9b7b788422208.tar.gz xen-2f8c55ccefe49bb526df0eaf5fa9b7b788422208.tar.bz2 xen-2f8c55ccefe49bb526df0eaf5fa9b7b788422208.zip |
x86: fix CMCI injection
This fixes the wrong use of literal vector 0xF7 with an "int"
instruction (invalidated by 25113:14609be41f36) and the fact that doing
the injection via a software interrupt was never valid anyway (because
cmci_interrupt() acks the LAPIC, which does the wrong thing if the
interrupt didn't get delivered though it).
In order to do latter, the patch introduces send_IPI_self(), at once
removing two opend coded uses of "genapic" in the IRQ handling code.
Reported-by: Yongjie Ren <yongjie.ren@intel.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Tested-by: Yongjie Ren <yongjie.ren@intel.com>
Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/irq.c')
-rw-r--r-- | xen/arch/x86/irq.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c index b98deb58f6..ca829bb0f4 100644 --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -646,7 +646,7 @@ void irq_move_cleanup_interrupt(struct cpu_user_regs *regs) * to myself. */ if (irr & (1 << (vector % 32))) { - genapic->send_IPI_self(IRQ_MOVE_CLEANUP_VECTOR); + send_IPI_self(IRQ_MOVE_CLEANUP_VECTOR); TRACE_3D(TRC_HW_IRQ_MOVE_CLEANUP_DELAY, irq, vector, smp_processor_id()); goto unlock; @@ -692,7 +692,7 @@ static void send_cleanup_vector(struct irq_desc *desc) cpumask_and(&cleanup_mask, desc->arch.old_cpu_mask, &cpu_online_map); desc->arch.move_cleanup_count = cpumask_weight(&cleanup_mask); - genapic->send_IPI_mask(&cleanup_mask, IRQ_MOVE_CLEANUP_VECTOR); + send_IPI_mask(&cleanup_mask, IRQ_MOVE_CLEANUP_VECTOR); desc->arch.move_in_progress = 0; } |