提交 bbc3d14e 编写于 作者: R Russell King

ARM: SMP: move CPU number sanity checks to smp_init_cpus()

Ensure that the number of CPUs is sanity checked before setting
the number of possible CPUs.  This avoids any chance of overflowing
the cpu_possible bitmap.
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
上级 28e18293
...@@ -120,16 +120,6 @@ void __init smp_init_cpus(void) ...@@ -120,16 +120,6 @@ void __init smp_init_cpus(void)
ncores = get_core_count(); ncores = get_core_count();
for (i = 0; i < ncores; i++)
set_cpu_possible(i, true);
}
void __init smp_prepare_cpus(unsigned int max_cpus)
{
unsigned int ncores = get_core_count();
unsigned int cpu = smp_processor_id();
int i;
/* sanity check */ /* sanity check */
if (ncores == 0) { if (ncores == 0) {
printk(KERN_ERR printk(KERN_ERR
...@@ -144,6 +134,17 @@ void __init smp_prepare_cpus(unsigned int max_cpus) ...@@ -144,6 +134,17 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
ncores, NR_CPUS); ncores, NR_CPUS);
ncores = NR_CPUS; ncores = NR_CPUS;
} }
for (i = 0; i < ncores; i++)
set_cpu_possible(i, true);
}
void __init smp_prepare_cpus(unsigned int max_cpus)
{
unsigned int ncores = num_possible_cpus();
unsigned int cpu = smp_processor_id();
int i;
smp_store_cpu_info(cpu); smp_store_cpu_info(cpu);
/* /*
......
...@@ -160,16 +160,6 @@ void __init smp_init_cpus(void) ...@@ -160,16 +160,6 @@ void __init smp_init_cpus(void)
{ {
unsigned int i, ncores = get_core_count(); unsigned int i, ncores = get_core_count();
for (i = 0; i < ncores; i++)
set_cpu_possible(i, true);
}
void __init smp_prepare_cpus(unsigned int max_cpus)
{
unsigned int ncores = get_core_count();
unsigned int cpu = smp_processor_id();
int i;
/* sanity check */ /* sanity check */
if (ncores == 0) { if (ncores == 0) {
printk(KERN_ERR printk(KERN_ERR
...@@ -186,6 +176,16 @@ void __init smp_prepare_cpus(unsigned int max_cpus) ...@@ -186,6 +176,16 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
ncores = NR_CPUS; ncores = NR_CPUS;
} }
for (i = 0; i < ncores; i++)
set_cpu_possible(i, true);
}
void __init smp_prepare_cpus(unsigned int max_cpus)
{
unsigned int ncores = num_possible_cpus();
unsigned int cpu = smp_processor_id();
int i;
smp_store_cpu_info(cpu); smp_store_cpu_info(cpu);
/* /*
......
...@@ -128,16 +128,6 @@ void __init smp_init_cpus(void) ...@@ -128,16 +128,6 @@ void __init smp_init_cpus(void)
{ {
unsigned int i, ncores = get_core_count(); unsigned int i, ncores = get_core_count();
for (i = 0; i < ncores; i++)
set_cpu_possible(i, true);
}
void __init smp_prepare_cpus(unsigned int max_cpus)
{
unsigned int ncores = get_core_count();
unsigned int cpu = smp_processor_id();
int i;
/* sanity check */ /* sanity check */
if (ncores == 0) { if (ncores == 0) {
printk(KERN_ERR printk(KERN_ERR
...@@ -145,14 +135,24 @@ void __init smp_prepare_cpus(unsigned int max_cpus) ...@@ -145,14 +135,24 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
ncores = 1; ncores = 1;
} }
if (ncores > num_possible_cpus()) { if (ncores > NR_CPUS) {
printk(KERN_WARNING printk(KERN_WARNING
"U8500: no. of cores (%d) greater than configured " "U8500: no. of cores (%d) greater than configured "
"maximum of %d - clipping\n", "maximum of %d - clipping\n",
ncores, num_possible_cpus()); ncores, NR_CPUS);
ncores = num_possible_cpus(); ncores = NR_CPUS;
} }
for (i = 0; i < ncores; i++)
set_cpu_possible(i, true);
}
void __init smp_prepare_cpus(unsigned int max_cpus)
{
unsigned int ncores = num_possible_cpus();
unsigned int cpu = smp_processor_id();
int i;
smp_store_cpu_info(cpu); smp_store_cpu_info(cpu);
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册