mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
s390/smp: improve setup of possible cpu mask
Since under z/VM we cannot have more than 64 cpus, make sure the cpu_possible_mask does not contain more bits. This avoids wasting memory for dynamic per-cpu allocations if CONFIG_NR_CPUS is larger than 64. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
319e2e3f63
commit
d80512f874
4 changed files with 19 additions and 10 deletions
|
@ -135,7 +135,6 @@ config S390
|
|||
select HAVE_SYSCALL_TRACEPOINTS
|
||||
select HAVE_UID16 if 32BIT
|
||||
select HAVE_VIRT_CPU_ACCOUNTING
|
||||
select INIT_ALL_POSSIBLE
|
||||
select KTIME_SCALAR if 32BIT
|
||||
select MODULES_USE_ELF_RELA
|
||||
select OLD_SIGACTION
|
||||
|
|
|
@ -31,6 +31,7 @@ extern void smp_yield(void);
|
|||
extern void smp_stop_cpu(void);
|
||||
extern void smp_cpu_set_polarization(int cpu, int val);
|
||||
extern int smp_cpu_get_polarization(int cpu);
|
||||
extern void smp_fill_possible_mask(void);
|
||||
|
||||
#else /* CONFIG_SMP */
|
||||
|
||||
|
@ -50,6 +51,7 @@ static inline int smp_vcpu_scheduled(int cpu) { return 1; }
|
|||
static inline void smp_yield_cpu(int cpu) { }
|
||||
static inline void smp_yield(void) { }
|
||||
static inline void smp_stop_cpu(void) { }
|
||||
static inline void smp_fill_possible_mask(void) { }
|
||||
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
|
|
|
@ -1023,6 +1023,7 @@ void __init setup_arch(char **cmdline_p)
|
|||
setup_vmcoreinfo();
|
||||
setup_lowcore();
|
||||
|
||||
smp_fill_possible_mask();
|
||||
cpu_init();
|
||||
s390_init_cpu_topology();
|
||||
|
||||
|
|
|
@ -721,18 +721,14 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int __init setup_possible_cpus(char *s)
|
||||
{
|
||||
int max, cpu;
|
||||
static unsigned int setup_possible_cpus __initdata;
|
||||
|
||||
if (kstrtoint(s, 0, &max) < 0)
|
||||
return 0;
|
||||
init_cpu_possible(cpumask_of(0));
|
||||
for (cpu = 1; cpu < max && cpu < nr_cpu_ids; cpu++)
|
||||
set_cpu_possible(cpu, true);
|
||||
static int __init _setup_possible_cpus(char *s)
|
||||
{
|
||||
get_option(&s, &setup_possible_cpus);
|
||||
return 0;
|
||||
}
|
||||
early_param("possible_cpus", setup_possible_cpus);
|
||||
early_param("possible_cpus", _setup_possible_cpus);
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
|
||||
|
@ -775,6 +771,17 @@ void __noreturn cpu_die(void)
|
|||
|
||||
#endif /* CONFIG_HOTPLUG_CPU */
|
||||
|
||||
void __init smp_fill_possible_mask(void)
|
||||
{
|
||||
unsigned int possible, cpu;
|
||||
|
||||
possible = setup_possible_cpus;
|
||||
if (!possible)
|
||||
possible = MACHINE_IS_VM ? 64 : nr_cpu_ids;
|
||||
for (cpu = 0; cpu < possible && cpu < nr_cpu_ids; cpu++)
|
||||
set_cpu_possible(cpu, true);
|
||||
}
|
||||
|
||||
void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
/* request the 0x1201 emergency signal external interrupt */
|
||||
|
|
Loading…
Reference in a new issue