[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] This patch extends I/O APIC guest writes so that the correct destination
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID b0d820178b8109f2d081e50920aac2c6b8273af6 # Parent 36cf17b654235c62c60fd7834102005493b1396c This patch extends I/O APIC guest writes so that the correct destination fields are written in the redirection table entry. Signed-off-by: Aravindh Puthiyaparambil <aravindh.puthiyaparambil@xxxxxxxxxx> diff -r 36cf17b65423 -r b0d820178b81 xen/arch/x86/io_apic.c --- a/xen/arch/x86/io_apic.c Tue Aug 23 09:28:05 2005 +++ b/xen/arch/x86/io_apic.c Tue Aug 23 09:49:12 2005 @@ -1751,8 +1751,30 @@ pin = (address - 0x10) >> 1; + *(u32 *)&rte = val; rte.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS); - *(int *)&rte = val; + + /* + * What about weird destination types? + * SMI: Ignore? Ought to be set up by the BIOS. + * NMI: Ignore? Watchdog functionality is Xen's concern. + * INIT: Definitely ignore: probably a guest OS bug. + * ExtINT: Ignore? Linux only asserts this at start of day. + * For now, print a message and return an error. We can fix up on demand. + */ + if ( rte.delivery_mode > dest_LowestPrio ) + { + printk("ERROR: Attempt to write weird IOAPIC destination mode!\n"); + printk(" APIC=%d/%d, lo-reg=%x\n", apicid, pin, val); + return -EINVAL; + } + + /* + * The guest does not know physical APIC arrangement (flat vs. cluster). + * Apply genapic conventions for this platform. + */ + rte.delivery_mode = INT_DELIVERY_MODE; + rte.dest_mode = INT_DEST_MODE; if ( rte.vector >= FIRST_DEVICE_VECTOR ) { _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |