[RFC] Use para_fill instead of vmi_get_function for APIC ops
From: Anthony Liguori
Date: Mon Feb 26 2007 - 19:07:46 EST
Hi Zach,
It seems to me that the APIC paravirt_ops should be filled by
para_fill() instead of vmi_get_function(). vmi_get_function() returns a
nop when the relocation type is NONE. para_fill() leaves the native
code in place.
The native version of the apic write ops is more or less *(APIC_BASE +
reg) = value. APIC_BASE is unknown to the ROM so it's impossible to
simulate this in the ROM.
This means that a ROM has no choice but to do APIC emulation (or jump
through seriously hairy loops to get the APIC mapped in it's address
space). Was this the intention?
N.B. attached patch is just to illustrate the point. Has not even been
compile tested.
Regards,
Anthony Liguori
--- linux-2.6.21-rc1/arch/i386/kernel/vmi.c~ 2007-02-20 22:32:30.000000000 -0600
+++ linux-2.6.21-rc1/arch/i386/kernel/vmi.c 2007-02-26 17:58:18.000000000 -0600
@@ -852,9 +852,9 @@
#endif
#ifdef CONFIG_X86_LOCAL_APIC
- paravirt_ops.apic_read = vmi_get_function(VMI_CALL_APICRead);
- paravirt_ops.apic_write = vmi_get_function(VMI_CALL_APICWrite);
- paravirt_ops.apic_write_atomic = vmi_get_function(VMI_CALL_APICWrite);
+ para_fill(apic_read, APICRead);
+ para_fill(apic_write, APICWrite);
+ para_fill(apic_write_atomic, APICWrite);
#endif
/*