aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2013-05-02 16:48:22 +0200
committerJan Beulich <jbeulich@suse.com>2013-05-02 16:48:22 +0200
commitf6b533308cd8a776bbb947f6084efc63218ad28b (patch)
tree917512e121c4841d84b686c5a84822156835367a
parentc2f79c464849e5f796aa9d1d0f26fe356abd1a1a (diff)
downloadxen-f6b533308cd8a776bbb947f6084efc63218ad28b.tar.gz
xen-f6b533308cd8a776bbb947f6084efc63218ad28b.tar.bz2
xen-f6b533308cd8a776bbb947f6084efc63218ad28b.zip
x86/HVM: fix legacy PIC check in pt_update_irq()
Depending on the IRQ we need to - not look at the PIC at all is this is the LAPIC timer (in that case we're dealing with a vector number rather than an IRQ one), - not look at the PIC for any non-legacy interrupt, - look at the correct PIC for the IRQ (which will always be PIC 2 for the RTC, and possibly also for HPET). Signed-off-by: Jan Beulich <jbeulich@suse.com> Tested-by: Roger Pau Monné <roger.pau@citrix.com> (FreeBSD guest) Reviewed-by: Tim Deegan <tim@xen.org>
-rw-r--r--xen/arch/x86/hvm/vpt.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c
index 46d3ec6c97..3fb040654f 100644
--- a/xen/arch/x86/hvm/vpt.c
+++ b/xen/arch/x86/hvm/vpt.c
@@ -272,8 +272,9 @@ int pt_update_irq(struct vcpu *v)
* IRR is returned and used to set eoi_exit_bitmap for virtual
* interrupt delivery case. Otherwise return -1 to do nothing.
*/
- if ( vlapic_accept_pic_intr(v) &&
- (&v->domain->arch.hvm_domain)->vpic[0].int_output )
+ if ( !is_lapic &&
+ platform_legacy_irq(irq) && vlapic_accept_pic_intr(v) &&
+ (&v->domain->arch.hvm_domain)->vpic[irq >> 3].int_output )
return -1;
else
return pt_irq_vector(earliest_pt, hvm_intsrc_lapic);