[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] x86: ioapic_write() must check for weird redir entries with special



# 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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.