aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2012-03-07 08:50:55 +0000
committerJan Beulich <jbeulich@suse.com>2012-03-07 08:50:55 +0000
commit36b9ba8ed050cfb64fa1a7c3bc3d003b86c5b13f (patch)
treeaf5cc4698cad44eb1fe66c7aad4bee46cb1f634b
parent5dd9fdd20c123f3d20f0942d505e6c1072241006 (diff)
downloadxen-36b9ba8ed050cfb64fa1a7c3bc3d003b86c5b13f.tar.gz
xen-36b9ba8ed050cfb64fa1a7c3bc3d003b86c5b13f.tar.bz2
xen-36b9ba8ed050cfb64fa1a7c3bc3d003b86c5b13f.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> xen-unstable changeset: 24168:9c350ab8d3ea xen-unstable date: Mon Nov 21 09:29:31 2011 +0100 Committed-by: Keir Fraser <keir@xen.org>
-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 9c0033a23e..1d6c3dffc6 100644
--- a/xen/arch/x86/hvm/vioapic.c
+++ b/xen/arch/x86/hvm/vioapic.c
@@ -153,8 +153,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] )
{