]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
x86/apic: Unify interrupt mode setup for UP system
authorDou Liyang <douly.fnst@cn.fujitsu.com>
Wed, 13 Sep 2017 09:12:50 +0000 (17:12 +0800)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 25 Sep 2017 13:03:16 +0000 (15:03 +0200)
In UniProcessor kernel with UP_LATE_INIT=y, the interrupt delivery mode is
initialized in up_late_init().

Use the new unified apic_intr_mode_init() function and remove
APIC_init_uniprocessor().

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-8-git-send-email-douly.fnst@cn.fujitsu.com
arch/x86/include/asm/apic.h
arch/x86/kernel/apic/apic.c

index 01f3fc8f8691fc848e8196aa348483bf29cdff7e..983a0dc564b30ac82e77d1f050b6bf06330792c2 100644 (file)
@@ -144,7 +144,6 @@ void register_lapic_address(unsigned long address);
 extern void setup_boot_APIC_clock(void);
 extern void setup_secondary_APIC_clock(void);
 extern void lapic_update_tsc_freq(void);
-extern int APIC_init_uniprocessor(void);
 
 #ifdef CONFIG_X86_64
 static inline int apic_force_enable(unsigned long addr)
index 21d584d82f1f77499560f9f7c846994acf6f0d44..efc5fbd1c40c5eea8610f66ce28115593b60beeb 100644 (file)
@@ -1334,7 +1334,7 @@ void __init init_bsp_APIC(void)
 /* Init the interrupt delivery mode for the BSP */
 void __init apic_intr_mode_init(void)
 {
-       bool upmode = false;
+       bool upmode = IS_ENABLED(CONFIG_UP_LATE_INIT);
 
        apic_intr_mode = apic_intr_mode_select();
 
@@ -2420,51 +2420,16 @@ void __init apic_bsp_setup(bool upmode)
        setup_IO_APIC();
 }
 
-/*
- * This initializes the IO-APIC and APIC hardware if this is
- * a UP kernel.
- */
-int __init APIC_init_uniprocessor(void)
+#ifdef CONFIG_UP_LATE_INIT
+void __init up_late_init(void)
 {
-       if (disable_apic) {
-               pr_info("Apic disabled\n");
-               return -1;
-       }
-#ifdef CONFIG_X86_64
-       if (!boot_cpu_has(X86_FEATURE_APIC)) {
-               disable_apic = 1;
-               pr_info("Apic disabled by BIOS\n");
-               return -1;
-       }
-#else
-       if (!smp_found_config && !boot_cpu_has(X86_FEATURE_APIC))
-               return -1;
+       apic_intr_mode_init();
 
-       /*
-        * Complain if the BIOS pretends there is one.
-        */
-       if (!boot_cpu_has(X86_FEATURE_APIC) &&
-           APIC_INTEGRATED(boot_cpu_apic_version)) {
-               pr_err("BIOS bug, local APIC 0x%x not detected!...\n",
-                       boot_cpu_physical_apicid);
-               return -1;
-       }
-#endif
-
-       if (!smp_found_config)
-               disable_ioapic_support();
+       if (apic_intr_mode == APIC_PIC)
+               return;
 
-       default_setup_apic_routing();
-       apic_bsp_setup(true);
        /* Setup local timer */
        x86_init.timers.setup_percpu_clockev();
-       return 0;
-}
-
-#ifdef CONFIG_UP_LATE_INIT
-void __init up_late_init(void)
-{
-       APIC_init_uniprocessor();
 }
 #endif