diff options
author | Jan Beulich <jbeulich@suse.com> | 2011-11-21 09:29:31 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2011-11-21 09:29:31 +0100 |
commit | 74424351709ecedc057583588fc4a64688e63376 (patch) | |
tree | 1f1f5526ba31dbbdd11ed78724e6673628ee3d26 /xen/arch/x86/hvm/vioapic.c | |
parent | 28e312a8b710d2208ee9ce2c25e5dfc11bc1c1b0 (diff) | |
download | xen-74424351709ecedc057583588fc4a64688e63376.tar.gz xen-74424351709ecedc057583588fc4a64688e63376.tar.bz2 xen-74424351709ecedc057583588fc4a64688e63376.zip |
x86/vioapic: clear remote IRR when switching RTE to edge triggered mode
Xen itself (as much as Linux) relies on this behavior, so it should
also emulate it properly. Not doing so reportedly gets in the way of
kexec inside a HVM guest.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Tested-by: Olaf Hering <olaf@aepfle.de>
Diffstat (limited to 'xen/arch/x86/hvm/vioapic.c')
-rw-r--r-- | xen/arch/x86/hvm/vioapic.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index 1d5cbc8514..403224f828 100644 --- a/xen/arch/x86/hvm/vioapic.c +++ b/xen/arch/x86/hvm/vioapic.c @@ -154,8 +154,9 @@ static void vioapic_write_redirent( { vlapic_adjust_i8259_target(d); } - else if ( (ent.fields.trig_mode == VIOAPIC_LEVEL_TRIG) && - !ent.fields.mask && + else if ( ent.fields.trig_mode == VIOAPIC_EDGE_TRIG ) + pent->fields.remote_irr = 0; + else if ( !ent.fields.mask && !ent.fields.remote_irr && hvm_irq->gsi_assert_count[idx] ) { |