diff options
author | Jan Beulich <jbeulich@suse.com> | 2013-05-02 16:48:22 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2013-05-02 16:48:22 +0200 |
commit | f6b533308cd8a776bbb947f6084efc63218ad28b (patch) | |
tree | 917512e121c4841d84b686c5a84822156835367a | |
parent | c2f79c464849e5f796aa9d1d0f26fe356abd1a1a (diff) | |
download | xen-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.c | 5 |
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); |