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@unisys.com>
This commit is contained in:
kaf24@firebug.cl.cam.ac.uk committed 2005-08-23 09:49:12 +00:00
1 parent cf4b88f454
commit 88ec00fa72
1 file changed
+23 -1
+23 -1
View File
@@ -1751,8 +1751,30 @@ int ioapic_guest_write(int apicid, int address, u32 val)
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 )
{
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.