x86/apic/flat64: Remove the IPI shorthand decision logic
All callers of apic->send_IPI_all() and apic->send_IPI_allbutself() contain the decision logic for shorthand invocation already and invoke send_IPI_mask() if the prereqisites are not satisfied. Remove the now redundant decision logic in the APIC code and the duplicate helper in probe_64.c. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/20190722105221.042964120@linutronix.de
This commit is contained in:
Родитель
dea978632e
Коммит
2510d09e9d
|
@ -468,10 +468,6 @@ static inline unsigned default_get_apic_id(unsigned long x)
|
||||||
#define TRAMPOLINE_PHYS_LOW 0x467
|
#define TRAMPOLINE_PHYS_LOW 0x467
|
||||||
#define TRAMPOLINE_PHYS_HIGH 0x469
|
#define TRAMPOLINE_PHYS_HIGH 0x469
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
|
||||||
extern void apic_send_IPI_self(int vector);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void generic_bigsmp_probe(void);
|
extern void generic_bigsmp_probe(void);
|
||||||
|
|
||||||
#ifdef CONFIG_X86_LOCAL_APIC
|
#ifdef CONFIG_X86_LOCAL_APIC
|
||||||
|
|
|
@ -76,33 +76,6 @@ flat_send_IPI_mask_allbutself(const struct cpumask *cpumask, int vector)
|
||||||
_flat_send_IPI_mask(mask, vector);
|
_flat_send_IPI_mask(mask, vector);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void flat_send_IPI_allbutself(int vector)
|
|
||||||
{
|
|
||||||
int cpu = smp_processor_id();
|
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_HOTPLUG_CPU) || vector == NMI_VECTOR) {
|
|
||||||
if (!cpumask_equal(cpu_online_mask, cpumask_of(cpu))) {
|
|
||||||
unsigned long mask = cpumask_bits(cpu_online_mask)[0];
|
|
||||||
|
|
||||||
if (cpu < BITS_PER_LONG)
|
|
||||||
__clear_bit(cpu, &mask);
|
|
||||||
|
|
||||||
_flat_send_IPI_mask(mask, vector);
|
|
||||||
}
|
|
||||||
} else if (num_online_cpus() > 1) {
|
|
||||||
__default_send_IPI_shortcut(APIC_DEST_ALLBUT, vector);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void flat_send_IPI_all(int vector)
|
|
||||||
{
|
|
||||||
if (vector == NMI_VECTOR) {
|
|
||||||
flat_send_IPI_mask(cpu_online_mask, vector);
|
|
||||||
} else {
|
|
||||||
__default_send_IPI_shortcut(APIC_DEST_ALLINC, vector);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned int flat_get_apic_id(unsigned long x)
|
static unsigned int flat_get_apic_id(unsigned long x)
|
||||||
{
|
{
|
||||||
return (x >> 24) & 0xFF;
|
return (x >> 24) & 0xFF;
|
||||||
|
@ -164,9 +137,9 @@ static struct apic apic_flat __ro_after_init = {
|
||||||
.send_IPI = default_send_IPI_single,
|
.send_IPI = default_send_IPI_single,
|
||||||
.send_IPI_mask = flat_send_IPI_mask,
|
.send_IPI_mask = flat_send_IPI_mask,
|
||||||
.send_IPI_mask_allbutself = flat_send_IPI_mask_allbutself,
|
.send_IPI_mask_allbutself = flat_send_IPI_mask_allbutself,
|
||||||
.send_IPI_allbutself = flat_send_IPI_allbutself,
|
.send_IPI_allbutself = default_send_IPI_allbutself,
|
||||||
.send_IPI_all = flat_send_IPI_all,
|
.send_IPI_all = default_send_IPI_all,
|
||||||
.send_IPI_self = apic_send_IPI_self,
|
.send_IPI_self = default_send_IPI_self,
|
||||||
|
|
||||||
.inquire_remote_apic = default_inquire_remote_apic,
|
.inquire_remote_apic = default_inquire_remote_apic,
|
||||||
|
|
||||||
|
@ -216,16 +189,6 @@ static void physflat_init_apic_ldr(void)
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static void physflat_send_IPI_allbutself(int vector)
|
|
||||||
{
|
|
||||||
default_send_IPI_mask_allbutself_phys(cpu_online_mask, vector);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void physflat_send_IPI_all(int vector)
|
|
||||||
{
|
|
||||||
default_send_IPI_mask_sequence_phys(cpu_online_mask, vector);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int physflat_probe(void)
|
static int physflat_probe(void)
|
||||||
{
|
{
|
||||||
if (apic == &apic_physflat || num_possible_cpus() > 8 ||
|
if (apic == &apic_physflat || num_possible_cpus() > 8 ||
|
||||||
|
@ -267,9 +230,9 @@ static struct apic apic_physflat __ro_after_init = {
|
||||||
.send_IPI = default_send_IPI_single_phys,
|
.send_IPI = default_send_IPI_single_phys,
|
||||||
.send_IPI_mask = default_send_IPI_mask_sequence_phys,
|
.send_IPI_mask = default_send_IPI_mask_sequence_phys,
|
||||||
.send_IPI_mask_allbutself = default_send_IPI_mask_allbutself_phys,
|
.send_IPI_mask_allbutself = default_send_IPI_mask_allbutself_phys,
|
||||||
.send_IPI_allbutself = physflat_send_IPI_allbutself,
|
.send_IPI_allbutself = default_send_IPI_allbutself,
|
||||||
.send_IPI_all = physflat_send_IPI_all,
|
.send_IPI_all = default_send_IPI_all,
|
||||||
.send_IPI_self = apic_send_IPI_self,
|
.send_IPI_self = default_send_IPI_self,
|
||||||
|
|
||||||
.inquire_remote_apic = default_inquire_remote_apic,
|
.inquire_remote_apic = default_inquire_remote_apic,
|
||||||
|
|
||||||
|
|
|
@ -36,13 +36,6 @@ void __init default_setup_apic_routing(void)
|
||||||
x86_platform.apic_post_init();
|
x86_platform.apic_post_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Same for both flat and physical. */
|
|
||||||
|
|
||||||
void apic_send_IPI_self(int vector)
|
|
||||||
{
|
|
||||||
__default_send_IPI_shortcut(APIC_DEST_SELF, vector);
|
|
||||||
}
|
|
||||||
|
|
||||||
int __init default_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
int __init default_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
||||||
{
|
{
|
||||||
struct apic **drv;
|
struct apic **drv;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче