x86/apic: Move no_ipi_broadcast() out of 32bit
authorThomas Gleixner <tglx@linutronix.de>
Mon, 22 Jul 2019 18:47:21 +0000 (20:47 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 25 Jul 2019 14:12:00 +0000 (16:12 +0200)
For the upcoming shorthand support for all APIC incarnations the command
line option needs to be available for 64 bit as well.

While at it, rename the control variable, make it static and mark it
__ro_after_init.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20190722105220.278327940@linutronix.de
arch/x86/kernel/apic/ipi.c
arch/x86/kernel/apic/local.h
arch/x86/kernel/apic/probe_32.c

index 7236fefde396a8bb78618bcef841679bffd944a9..ca3bcdb7c4a893b893b4d300b5bb0fb844830654 100644 (file)
@@ -5,6 +5,31 @@
 
 #include "local.h"
 
+#ifdef CONFIG_SMP
+#ifdef CONFIG_HOTPLUG_CPU
+#define DEFAULT_SEND_IPI       (1)
+#else
+#define DEFAULT_SEND_IPI       (0)
+#endif
+
+static int apic_ipi_shorthand_off __ro_after_init = DEFAULT_SEND_IPI;
+
+static __init int apic_ipi_shorthand(char *str)
+{
+       get_option(&str, &apic_ipi_shorthand_off);
+       return 1;
+}
+__setup("no_ipi_broadcast=", apic_ipi_shorthand);
+
+static int __init print_ipi_mode(void)
+{
+       pr_info("IPI shorthand broadcast: %s\n",
+               apic_ipi_shorthand_off ? "disabled" : "enabled");
+       return 0;
+}
+late_initcall(print_ipi_mode);
+#endif
+
 static inline int __prepare_ICR2(unsigned int mask)
 {
        return SET_APIC_DEST_FIELD(mask);
@@ -203,7 +228,7 @@ void default_send_IPI_allbutself(int vector)
        if (num_online_cpus() < 2)
                return;
 
-       if (no_broadcast || vector == NMI_VECTOR) {
+       if (apic_ipi_shorthand_off || vector == NMI_VECTOR) {
                apic->send_IPI_mask_allbutself(cpu_online_mask, vector);
        } else {
                __default_send_IPI_shortcut(APIC_DEST_ALLBUT, vector);
@@ -212,7 +237,7 @@ void default_send_IPI_allbutself(int vector)
 
 void default_send_IPI_all(int vector)
 {
-       if (no_broadcast || vector == NMI_VECTOR) {
+       if (apic_ipi_shorthand_off || vector == NMI_VECTOR) {
                apic->send_IPI_mask(cpu_online_mask, vector);
        } else {
                __default_send_IPI_shortcut(APIC_DEST_ALLINC, vector);
index 47c43381b444f1e1e8ad0c08b70917bff364444c..bd074e5997b07b203d97132628f39ef67ca2151c 100644 (file)
@@ -51,8 +51,6 @@ void default_send_IPI_single_phys(int cpu, int vector);
 void default_send_IPI_mask_sequence_phys(const struct cpumask *mask, int vector);
 void default_send_IPI_mask_allbutself_phys(const struct cpumask *mask, int vector);
 
-extern int no_broadcast;
-
 #ifdef CONFIG_X86_32
 void default_send_IPI_mask_sequence_logical(const struct cpumask *mask, int vector);
 void default_send_IPI_mask_allbutself_logical(const struct cpumask *mask, int vector);
index 7cc961d4f51f54ac242b69824f23670f64987ca1..0ac9fd667c99fa66a26ee5e15decbabd825b66c9 100644 (file)
 
 #include "local.h"
 
-#ifdef CONFIG_HOTPLUG_CPU
-#define DEFAULT_SEND_IPI       (1)
-#else
-#define DEFAULT_SEND_IPI       (0)
-#endif
-
-int no_broadcast = DEFAULT_SEND_IPI;
-
-static __init int no_ipi_broadcast(char *str)
-{
-       get_option(&str, &no_broadcast);
-       pr_info("Using %s mode\n",
-               no_broadcast ? "No IPI Broadcast" : "IPI Broadcast");
-       return 1;
-}
-__setup("no_ipi_broadcast=", no_ipi_broadcast);
-
-static int __init print_ipi_mode(void)
-{
-       pr_info("Using IPI %s mode\n",
-               no_broadcast ? "No-Shortcut" : "Shortcut");
-       return 0;
-}
-late_initcall(print_ipi_mode);
-
 static int default_x86_32_early_logical_apicid(int cpu)
 {
        return 1 << cpu;