lkml.org 
[lkml]   [2012]   [Mar]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH 3/3] xen/x86: Implement x86_apic_ops
    From
    Date
    On Tue, 2012-03-20 at 20:12 -0400, Konrad Rzeszutek Wilk wrote:
    > Or rather just implement one different function as opposed
    > to the native one : the read function.
    >
    > We synthesize the values.
    >
    > Suggested-by: Suresh Siddha <suresh.b.siddha@intel.com>
    > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    > ---
    > arch/x86/xen/Makefile | 2 +-
    > arch/x86/xen/apic.c | 17 +++++++++++++++++
    > arch/x86/xen/enlighten.c | 2 ++
    > arch/x86/xen/xen-ops.h | 4 ++++
    > 4 files changed, 24 insertions(+), 1 deletions(-)
    > create mode 100644 arch/x86/xen/apic.c
    >
    > diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile
    > index add2c2d..96ab2c0 100644
    > --- a/arch/x86/xen/Makefile
    > +++ b/arch/x86/xen/Makefile
    > @@ -20,5 +20,5 @@ obj-$(CONFIG_EVENT_TRACING) += trace.o
    > obj-$(CONFIG_SMP) += smp.o
    > obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o
    > obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o
    > -obj-$(CONFIG_XEN_DOM0) += vga.o
    > +obj-$(CONFIG_XEN_DOM0) += apic.o vga.o
    > obj-$(CONFIG_SWIOTLB_XEN) += pci-swiotlb-xen.o
    > diff --git a/arch/x86/xen/apic.c b/arch/x86/xen/apic.c
    > new file mode 100644
    > index 0000000..c53b3ef
    > --- /dev/null
    > +++ b/arch/x86/xen/apic.c
    > @@ -0,0 +1,17 @@
    > +#include <linux/init.h>
    > +#include <asm/x86_init.h>
    > +
    > +unsigned int xen_io_apic_read(unsigned apic, unsigned reg)
    > +{
    > + if (reg == 0x1)
    > + return 0x00170020;
    > + else if (reg == 0x0)
    > + return 0x00000000;

    For IO-APIC ID register (0), you can probably use the argument 'apic' to
    set the ID bits in the returned register.

    > +
    > + return 0xfd;

    0xff might be better.

    If something breaks in future, then we can add that register
    implementation here.

    thanks,
    suresh

    > +}
    > +
    > +void __init xen_init_apic(void)
    > +{
    > + x86_apic.read = xen_io_apic_read;
    > +}
    > diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
    > index 0732326..591ee69 100644
    > --- a/arch/x86/xen/enlighten.c
    > +++ b/arch/x86/xen/enlighten.c
    > @@ -1381,6 +1381,8 @@ asmlinkage void __init xen_start_kernel(void)
    > pci_request_acs();
    >
    > xen_acpi_sleep_register();
    > +
    > + xen_init_apic();
    > }
    >
    >
    > diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
    > index b095739..45c0c06 100644
    > --- a/arch/x86/xen/xen-ops.h
    > +++ b/arch/x86/xen/xen-ops.h
    > @@ -92,11 +92,15 @@ struct dom0_vga_console_info;
    >
    > #ifdef CONFIG_XEN_DOM0
    > void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size);
    > +void __init xen_init_apic(void);
    > #else
    > static inline void __init xen_init_vga(const struct dom0_vga_console_info *info,
    > size_t size)
    > {
    > }
    > +static inline void __init xen_init_apic(void)
    > +{
    > +}
    > #endif
    >
    > /* Declare an asm function, along with symbols needed to make it




    \
     
     \ /
      Last update: 2012-03-21 02:33    [W:4.183 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site