aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/hvm/vioapic.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-07-01 20:22:29 +0100
committerKeir Fraser <keir.fraser@citrix.com>2009-07-01 20:22:29 +0100
commit89c6cf58e8adffa03ae33da6af2a5590a5d03054 (patch)
tree477b72d6e1f18fec540c23c585b7a0db5b4cb1ec /xen/arch/x86/hvm/vioapic.c
parent70116ff26048b92a3a2e808806a79d6fb44505aa (diff)
downloadxen-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.c17
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