- Fix divide-by-zero panic when SMP kernel is used on UP system[1].
- Avoid possible divide-by-zero panic on SMP system when the CPUID is disabled, unsupported, or buggy. Submitted by: pluknet (pluknet at gmail dot com)[1]
This commit is contained in:
parent
54b43614e7
commit
788399cbd9
@ -292,6 +292,10 @@ topo_probe_0x4(void)
|
|||||||
static void
|
static void
|
||||||
topo_probe(void)
|
topo_probe(void)
|
||||||
{
|
{
|
||||||
|
static int cpu_topo_probed = 0;
|
||||||
|
|
||||||
|
if (cpu_topo_probed)
|
||||||
|
return;
|
||||||
|
|
||||||
logical_cpus = logical_cpus_mask = 0;
|
logical_cpus = logical_cpus_mask = 0;
|
||||||
if (cpu_high >= 0xb)
|
if (cpu_high >= 0xb)
|
||||||
@ -299,9 +303,10 @@ topo_probe(void)
|
|||||||
else if (cpu_high)
|
else if (cpu_high)
|
||||||
topo_probe_0x4();
|
topo_probe_0x4();
|
||||||
if (cpu_cores == 0)
|
if (cpu_cores == 0)
|
||||||
cpu_cores = mp_ncpus;
|
cpu_cores = mp_ncpus > 0 ? mp_ncpus : 1;
|
||||||
if (cpu_logical == 0)
|
if (cpu_logical == 0)
|
||||||
cpu_logical = 1;
|
cpu_logical = 1;
|
||||||
|
cpu_topo_probed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cpu_group *
|
struct cpu_group *
|
||||||
@ -313,6 +318,7 @@ cpu_topo(void)
|
|||||||
* Determine whether any threading flags are
|
* Determine whether any threading flags are
|
||||||
* necessry.
|
* necessry.
|
||||||
*/
|
*/
|
||||||
|
topo_probe();
|
||||||
if (cpu_logical > 1 && hyperthreading_cpus)
|
if (cpu_logical > 1 && hyperthreading_cpus)
|
||||||
cg_flags = CG_FLAG_HTT;
|
cg_flags = CG_FLAG_HTT;
|
||||||
else if (cpu_logical > 1)
|
else if (cpu_logical > 1)
|
||||||
|
@ -345,6 +345,10 @@ topo_probe_0x4(void)
|
|||||||
static void
|
static void
|
||||||
topo_probe(void)
|
topo_probe(void)
|
||||||
{
|
{
|
||||||
|
static int cpu_topo_probed = 0;
|
||||||
|
|
||||||
|
if (cpu_topo_probed)
|
||||||
|
return;
|
||||||
|
|
||||||
logical_cpus = logical_cpus_mask = 0;
|
logical_cpus = logical_cpus_mask = 0;
|
||||||
if (cpu_high >= 0xb)
|
if (cpu_high >= 0xb)
|
||||||
@ -352,9 +356,10 @@ topo_probe(void)
|
|||||||
else if (cpu_high)
|
else if (cpu_high)
|
||||||
topo_probe_0x4();
|
topo_probe_0x4();
|
||||||
if (cpu_cores == 0)
|
if (cpu_cores == 0)
|
||||||
cpu_cores = mp_ncpus;
|
cpu_cores = mp_ncpus > 0 ? mp_ncpus : 1;
|
||||||
if (cpu_logical == 0)
|
if (cpu_logical == 0)
|
||||||
cpu_logical = 1;
|
cpu_logical = 1;
|
||||||
|
cpu_topo_probed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cpu_group *
|
struct cpu_group *
|
||||||
@ -366,6 +371,7 @@ cpu_topo(void)
|
|||||||
* Determine whether any threading flags are
|
* Determine whether any threading flags are
|
||||||
* necessry.
|
* necessry.
|
||||||
*/
|
*/
|
||||||
|
topo_probe();
|
||||||
if (cpu_logical > 1 && hyperthreading_cpus)
|
if (cpu_logical > 1 && hyperthreading_cpus)
|
||||||
cg_flags = CG_FLAG_HTT;
|
cg_flags = CG_FLAG_HTT;
|
||||||
else if (cpu_logical > 1)
|
else if (cpu_logical > 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user