OSDN Git Service

x86/init: Add intr_mode_init to x86_init_ops
authorDou Liyang <douly.fnst@cn.fujitsu.com>
Wed, 13 Sep 2017 09:12:52 +0000 (17:12 +0800)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 25 Sep 2017 13:03:17 +0000 (15:03 +0200)
X86 and XEN initialize interrupt delivery mode in different way.

To avoid conditionals, add a new x86_init_ops function which defaults to
the standard function and can be overridden by the early XEN platform code.

[ tglx: Folded the XEN part which was a separate patch to preserve
   bisectability ]

Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: yinghai@kernel.org
Cc: bhe@redhat.com
Link: https://lkml.kernel.org/r/1505293975-26005-10-git-send-email-douly.fnst@cn.fujitsu.com
arch/x86/include/asm/x86_init.h
arch/x86/kernel/apic/apic.c
arch/x86/kernel/smpboot.c
arch/x86/kernel/x86_init.c
arch/x86/xen/enlighten_pv.c

index 7ba7e90..f45acdf 100644 (file)
@@ -50,11 +50,13 @@ struct x86_init_resources {
  *                             are set up.
  * @intr_init:                 interrupt init code
  * @trap_init:                 platform specific trap setup
+ * @intr_mode_init:            interrupt delivery mode setup
  */
 struct x86_init_irqs {
        void (*pre_vector_init)(void);
        void (*intr_init)(void);
        void (*trap_init)(void);
+       void (*intr_mode_init)(void);
 };
 
 /**
index efc5fbd..8dbcff2 100644 (file)
@@ -2423,7 +2423,7 @@ void __init apic_bsp_setup(bool upmode)
 #ifdef CONFIG_UP_LATE_INIT
 void __init up_late_init(void)
 {
-       apic_intr_mode_init();
+       x86_init.irqs.intr_mode_init();
 
        if (apic_intr_mode == APIC_PIC)
                return;
index 161935c..3d045e8 100644 (file)
@@ -1296,7 +1296,7 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
 
        set_cpu_sibling_map(0);
 
-       apic_intr_mode_init();
+       x86_init.irqs.intr_mode_init();
 
        smp_sanity_check();
 
index a088b2c..a7889b9 100644 (file)
@@ -55,6 +55,7 @@ struct x86_init_ops x86_init __initdata = {
                .pre_vector_init        = init_ISA_irqs,
                .intr_init              = native_init_IRQ,
                .trap_init              = x86_init_noop,
+               .intr_mode_init         = apic_intr_mode_init
        },
 
        .oem = {
index 69b9def..73f809a 100644 (file)
@@ -1230,6 +1230,7 @@ asmlinkage __visible void __init xen_start_kernel(void)
        x86_platform.get_nmi_reason = xen_get_nmi_reason;
 
        x86_init.resources.memory_setup = xen_memory_setup;
+       x86_init.irqs.intr_mode_init    = x86_init_noop;
        x86_init.oem.arch_setup = xen_arch_setup;
        x86_init.oem.banner = xen_banner;