|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] This patch extends I/O APIC guest writes so that the cor
# 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
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] This patch extends I/O APIC guest writes so that the correct destination,
Xen patchbot -unstable <=
|
|
|
|
|