ia64/xen-unstable
changeset 15347:0f9d683a83ed
x86: ioapic_write() must check for weird redir entries with special
delivery mode yet apparently valid vectoring information.
Signed-off-by: Keir Fraser <keir@xensource.com>
delivery mode yet apparently valid vectoring information.
Signed-off-by: Keir Fraser <keir@xensource.com>
author | kfraser@localhost.localdomain |
---|---|
date | Wed Jun 13 10:39:48 2007 +0100 (2007-06-13) |
parents | c56ebab69b84 |
children | c484106e44bd |
files | xen/arch/x86/io_apic.c |
line diff
1.1 --- a/xen/arch/x86/io_apic.c Tue Jun 12 14:06:37 2007 +0100 1.2 +++ b/xen/arch/x86/io_apic.c Wed Jun 13 10:39:48 2007 +0100 1.3 @@ -2114,6 +2114,15 @@ int ioapic_guest_write(unsigned long phy 1.4 return 0; 1.5 } 1.6 1.7 + /* Special delivery modes (SMI,NMI,INIT,ExtInt) should have no vector. */ 1.8 + if ( (old_rte.delivery_mode > dest_LowestPrio) && (old_rte.vector != 0) ) 1.9 + { 1.10 + WARN_BOGUS_WRITE("Special delivery mode %d with non-zero vector " 1.11 + "%02x\n", old_rte.delivery_mode, old_rte.vector); 1.12 + /* Nobble the vector here as it does not relate to a valid irq. */ 1.13 + old_rte.vector = 0; 1.14 + } 1.15 + 1.16 if ( old_rte.vector >= FIRST_DYNAMIC_VECTOR ) 1.17 old_irq = vector_irq[old_rte.vector]; 1.18 if ( new_rte.vector >= FIRST_DYNAMIC_VECTOR )