diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-07-01 20:22:29 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-07-01 20:22:29 +0100 |
commit | 89c6cf58e8adffa03ae33da6af2a5590a5d03054 (patch) | |
tree | 477b72d6e1f18fec540c23c585b7a0db5b4cb1ec /xen/arch/x86/hvm/vioapic.c | |
parent | 70116ff26048b92a3a2e808806a79d6fb44505aa (diff) | |
download | xen-89c6cf58e8adffa03ae33da6af2a5590a5d03054.tar.gz xen-89c6cf58e8adffa03ae33da6af2a5590a5d03054.tar.bz2 xen-89c6cf58e8adffa03ae33da6af2a5590a5d03054.zip |
x86 hvm: Allow delivery of legacy 8259 interrupts to VCPUs != 0.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/arch/x86/hvm/vioapic.c')
-rw-r--r-- | xen/arch/x86/hvm/vioapic.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index 4860b74941..9afbe75655 100644 --- a/xen/arch/x86/hvm/vioapic.c +++ b/xen/arch/x86/hvm/vioapic.c @@ -146,10 +146,14 @@ static void vioapic_write_redirent( *pent = ent; - if ( (ent.fields.trig_mode == VIOAPIC_LEVEL_TRIG) && - !ent.fields.mask && - !ent.fields.remote_irr && - hvm_irq->gsi_assert_count[idx] ) + if ( idx == 0 ) + { + vlapic_adjust_i8259_target(d); + } + else if ( (ent.fields.trig_mode == VIOAPIC_LEVEL_TRIG) && + !ent.fields.mask && + !ent.fields.remote_irr && + hvm_irq->gsi_assert_count[idx] ) { pent->fields.remote_irr = 1; vioapic_deliver(vioapic, idx); @@ -159,8 +163,7 @@ static void vioapic_write_redirent( } static void vioapic_write_indirect( - struct hvm_hw_vioapic *vioapic, unsigned long addr, - unsigned long length, unsigned long val) + struct hvm_hw_vioapic *vioapic, unsigned long length, unsigned long val) { switch ( vioapic->ioregsel ) { @@ -213,7 +216,7 @@ static int vioapic_write( break; case VIOAPIC_REG_WINDOW: - vioapic_write_indirect(vioapic, addr, length, val); + vioapic_write_indirect(vioapic, length, val); break; #if VIOAPIC_IS_IOSAPIC |