mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
MIPS: CPS: Improve mips_cps_first_online_in_cluster()
The initial implementation of this function goes through all the CPUs in a cluster to determine if the current CPU is the only one running. This process occurs every time the function is called. However, during boot, we already perform this task, so let's take advantage of this opportunity to create and fill a CPU bitmask that can be easily and efficiently used later. This patch modifies the function to allow providing the first available online CPU when one already exists, which is necessary for delay CPU calibration optimization. Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com> Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
This commit is contained in:
committed by
Thomas Bogendoerfer
parent
07f8888ee7
commit
c71085f2c0
@@ -283,7 +283,7 @@ static void __init cps_smp_setup(void)
|
||||
|
||||
static void __init cps_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
unsigned int nclusters, ncores, core_vpes, c, cl, cca;
|
||||
unsigned int nclusters, ncores, core_vpes, nvpe = 0, c, cl, cca;
|
||||
bool cca_unsuitable, cores_limited;
|
||||
struct cluster_boot_config *cluster_bootcfg;
|
||||
struct core_boot_config *core_bootcfg;
|
||||
@@ -356,10 +356,13 @@ static void __init cps_prepare_cpus(unsigned int max_cpus)
|
||||
|
||||
/* Allocate VPE boot configuration structs */
|
||||
for (c = 0; c < ncores; c++) {
|
||||
int v;
|
||||
core_vpes = core_vpe_count(cl, c);
|
||||
core_bootcfg[c].vpe_config = kcalloc(core_vpes,
|
||||
sizeof(*core_bootcfg[c].vpe_config),
|
||||
GFP_KERNEL);
|
||||
for (v = 0; v < core_vpes; v++)
|
||||
cpumask_set_cpu(nvpe++, &mips_cps_cluster_bootcfg[cl].cpumask);
|
||||
if (!core_bootcfg[c].vpe_config)
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user