|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] x86: ioapic_write() must check for weird
# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1181727588 -3600
# Node ID 0f9d683a83ed59785d79ce0f895acb2e3a2a82a0
# Parent c56ebab69b84f85626fb9945a43ff5ac1c778626
x86: ioapic_write() must check for weird redir entries with special
delivery mode yet apparently valid vectoring information.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/arch/x86/io_apic.c | 9 +++++++++
1 files changed, 9 insertions(+)
diff -r c56ebab69b84 -r 0f9d683a83ed xen/arch/x86/io_apic.c
--- a/xen/arch/x86/io_apic.c Tue Jun 12 14:06:37 2007 +0100
+++ b/xen/arch/x86/io_apic.c Wed Jun 13 10:39:48 2007 +0100
@@ -2114,6 +2114,15 @@ int ioapic_guest_write(unsigned long phy
return 0;
}
+ /* Special delivery modes (SMI,NMI,INIT,ExtInt) should have no vector. */
+ if ( (old_rte.delivery_mode > dest_LowestPrio) && (old_rte.vector != 0) )
+ {
+ WARN_BOGUS_WRITE("Special delivery mode %d with non-zero vector "
+ "%02x\n", old_rte.delivery_mode, old_rte.vector);
+ /* Nobble the vector here as it does not relate to a valid irq. */
+ old_rte.vector = 0;
+ }
+
if ( old_rte.vector >= FIRST_DYNAMIC_VECTOR )
old_irq = vector_irq[old_rte.vector];
if ( new_rte.vector >= FIRST_DYNAMIC_VECTOR )
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] x86: ioapic_write() must check for weird redir entries with special,
Xen patchbot-unstable <=
|
|
|
|
|