x86/smpboot: Move synchronization masks to SMP boot code
The usage is in smpboot.c and not in the CPU initialization code. The XEN_PV usage of cpu_callout_mask is obsolete as cpu_init() not longer waits and cacheinfo has its own CPU mask now, so cpu_callout_mask can be made static too. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Tested-by: Michael Kelley <mikelley@microsoft.com> Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name> Tested-by: Helge Deller <deller@gmx.de> # parisc Tested-by: Guilherme G. Piccoli <gpiccoli@igalia.com> # Steam Deck Link: https://lore.kernel.org/r/20230512205256.091511483@linutronix.de
This commit is contained in:
parent
a32226fa3b
commit
d4f28f07c2
@ -4,11 +4,6 @@
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <linux/cpumask.h>
|
||||
|
||||
extern cpumask_var_t cpu_callin_mask;
|
||||
extern cpumask_var_t cpu_callout_mask;
|
||||
extern cpumask_var_t cpu_initialized_mask;
|
||||
extern cpumask_var_t cpu_sibling_setup_mask;
|
||||
|
||||
extern void setup_cpu_local_masks(void);
|
||||
|
||||
/*
|
||||
|
@ -67,14 +67,6 @@
|
||||
|
||||
u32 elf_hwcap2 __read_mostly;
|
||||
|
||||
/* all of these masks are initialized in setup_cpu_local_masks() */
|
||||
cpumask_var_t cpu_initialized_mask;
|
||||
cpumask_var_t cpu_callout_mask;
|
||||
cpumask_var_t cpu_callin_mask;
|
||||
|
||||
/* representing cpus for which sibling maps can be computed */
|
||||
cpumask_var_t cpu_sibling_setup_mask;
|
||||
|
||||
/* Number of siblings per CPU package */
|
||||
int smp_num_siblings = 1;
|
||||
EXPORT_SYMBOL(smp_num_siblings);
|
||||
@ -169,15 +161,6 @@ clear_ppin:
|
||||
clear_cpu_cap(c, info->feature);
|
||||
}
|
||||
|
||||
/* correctly size the local cpu masks */
|
||||
void __init setup_cpu_local_masks(void)
|
||||
{
|
||||
alloc_bootmem_cpumask_var(&cpu_initialized_mask);
|
||||
alloc_bootmem_cpumask_var(&cpu_callin_mask);
|
||||
alloc_bootmem_cpumask_var(&cpu_callout_mask);
|
||||
alloc_bootmem_cpumask_var(&cpu_sibling_setup_mask);
|
||||
}
|
||||
|
||||
static void default_init(struct cpuinfo_x86 *c)
|
||||
{
|
||||
#ifdef CONFIG_X86_64
|
||||
|
@ -101,6 +101,13 @@ EXPORT_PER_CPU_SYMBOL(cpu_die_map);
|
||||
DEFINE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info);
|
||||
EXPORT_PER_CPU_SYMBOL(cpu_info);
|
||||
|
||||
/* All of these masks are initialized in setup_cpu_local_masks() */
|
||||
static cpumask_var_t cpu_initialized_mask;
|
||||
static cpumask_var_t cpu_callout_mask;
|
||||
static cpumask_var_t cpu_callin_mask;
|
||||
/* Representing CPUs for which sibling maps can be computed */
|
||||
static cpumask_var_t cpu_sibling_setup_mask;
|
||||
|
||||
/* Logical package management. We might want to allocate that dynamically */
|
||||
unsigned int __max_logical_packages __read_mostly;
|
||||
EXPORT_SYMBOL(__max_logical_packages);
|
||||
@ -1545,6 +1552,15 @@ __init void prefill_possible_map(void)
|
||||
set_cpu_possible(i, true);
|
||||
}
|
||||
|
||||
/* correctly size the local cpu masks */
|
||||
void __init setup_cpu_local_masks(void)
|
||||
{
|
||||
alloc_bootmem_cpumask_var(&cpu_initialized_mask);
|
||||
alloc_bootmem_cpumask_var(&cpu_callin_mask);
|
||||
alloc_bootmem_cpumask_var(&cpu_callout_mask);
|
||||
alloc_bootmem_cpumask_var(&cpu_sibling_setup_mask);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
|
||||
/* Recompute SMT state for all CPUs on offline */
|
||||
|
@ -254,15 +254,12 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
|
||||
struct desc_struct *gdt;
|
||||
unsigned long gdt_mfn;
|
||||
|
||||
/* used to tell cpu_init() that it can proceed with initialization */
|
||||
cpumask_set_cpu(cpu, cpu_callout_mask);
|
||||
if (cpumask_test_and_set_cpu(cpu, xen_cpu_initialized_map))
|
||||
return 0;
|
||||
|
||||
ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
|
||||
if (ctxt == NULL) {
|
||||
cpumask_clear_cpu(cpu, xen_cpu_initialized_map);
|
||||
cpumask_clear_cpu(cpu, cpu_callout_mask);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user