xen/apic: implement io apic read with hypercall
Subsystems (2)
PATCH v2 1/1 xen/apic: implement io apic read with hypercall
Implements xen_io_apic_read with hypercall, so it returns proper IO-APIC information instead of fabricated one.
Fallback to return an emulated IO_APIC values if hypercall fails.
Signed-off-by Lin Ming <[email protected]>
---
v2: fallback to return an emulated IO_APIC values if hypercall fails
arch/x86/xen/apic.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletions(-)
arch/x86/xen/apic.c +14 -1
@@ -1,14 +1,27 @@#include <linux/init.h> #include <asm/x86_init.h> +#include <asm/apic.h> +#include <xen/interface/physdev.h> +#include <asm/xen/hypercall.h> unsigned int xen_io_apic_read (unsigned apic,unsigned reg) { +struct physdev_apic apic_op; +int ret; + + apic_op.apic_physbase =mpc_ioapic_addr (apic); + apic_op.reg = reg; + ret =HYPERVISOR_physdev_op (PHYSDEVOP_apic_read, &apic_op); +if (!ret) +return apic_op.value; + +/* fallback to return an emulated IO_APIC values */ if (reg ==0x1 )return 0x00170020 ;else if (reg ==0x0 )return apic <<24 ; -return 0xff ; +return 0xfd ; }void __init xen_init_apic (void )
Signature · 1 line
1.7.9
Quoted 2 lines · Lin Ming
Implements
xen_io_apic_readwith hypercall, so it returns proper IO-APIC information instead of fabricated one.
Looks good. I queued it up and sending the git pull to Ingo shortly.
Quoted 54 lines
Fallback to return an emulated
IO_APICvalues if hypercall fails.Signed-off-by Lin Ming <[email protected]>---
v2: fallback to return an emulated
IO_APICvalues if hypercall failsarch/x86/xen/apic.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletions(-)arch/x86/xen/apic.c +14
-1@@ -1,14 +1,27 @@#include <linux/init.h> #include <asm/x86_init.h> +#include <asm/apic.h> +#include <xen/interface/physdev.h> +#include <asm/xen/hypercall.h> unsigned int xen_io_apic_read (unsigned apic,unsigned reg) { +struct physdev_apic apic_op; +int ret; + + apic_op.apic_physbase =mpc_ioapic_addr (apic); + apic_op.reg = reg; + ret =HYPERVISOR_physdev_op (PHYSDEVOP_apic_read, &apic_op); +if (!ret) +return apic_op.value; + +/* fallback to return an emulated IO_APIC values */ if (reg ==0x1 )return 0x00170020 ;else if (reg ==0x0 )return apic <<24 ; -return 0xff ; +return 0xfd ; }void __init xen_init_apic (void )Signature · 9 lines
1.7.9 _______________________________________________ Xen-devel mailing list [email protected] http://lists.xen.org/xen-devel