aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/hvm/vioapic.c
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2011-11-21 09:29:31 +0100
committerJan Beulich <jbeulich@suse.com>2011-11-21 09:29:31 +0100
commit74424351709ecedc057583588fc4a64688e63376 (patch)
tree1f1f5526ba31dbbdd11ed78724e6673628ee3d26 /xen/arch/x86/hvm/vioapic.c
parent28e312a8b710d2208ee9ce2c25e5dfc11bc1c1b0 (diff)
downloadxen-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.c5
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] )
{