diff mbox

[v2,11/22] arm64: Populate cpuinfo after notify_cpu_starting

Message ID 1444064531-25607-12-git-send-email-suzuki.poulose@arm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Suzuki K Poulose Oct. 5, 2015, 5:02 p.m. UTC
This patch delays populating the cpuinfo for a new (hotplugged)
CPU until the notifiers have executed. This will enable us to verify
if the new (hotplugged) CPU has all the capabilities which the system
already has. If it doesn't, we could prevent it from turning online and
also modifying the system wide feature register status.

Signed-off-by: Suzuki K. Poulose <suzuki.poulose@arm.com>
---
 arch/arm64/kernel/smp.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Catalin Marinas Oct. 8, 2015, 10:15 a.m. UTC | #1
On Mon, Oct 05, 2015 at 06:02:00PM +0100, Suzuki K. Poulose wrote:
> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
> index cb3e0d8..6987de4 100644
> --- a/arch/arm64/kernel/smp.c
> +++ b/arch/arm64/kernel/smp.c
> @@ -163,14 +163,14 @@ asmlinkage void secondary_start_kernel(void)
>  		cpu_ops[cpu]->cpu_postboot();
>  
>  	/*
> -	 * Log the CPU info before it is marked online and might get read.
> +	 * Enable GIC and timers.
>  	 */
> -	cpuinfo_store_cpu();
> +	notify_cpu_starting(cpu);
>  
>  	/*
> -	 * Enable GIC and timers.
> +	 * Log the CPU info before it is marked online and might get read.
>  	 */
> -	notify_cpu_starting(cpu);
> +	cpuinfo_store_cpu();
>  
>  	smp_store_cpu_info(cpu);

You can move the cpuinfo_store_cpu() call directly to
smp_store_cpu_info().
Suzuki K Poulose Oct. 8, 2015, 10:46 a.m. UTC | #2
On 08/10/15 11:15, Catalin Marinas wrote:
> On Mon, Oct 05, 2015 at 06:02:00PM +0100, Suzuki K. Poulose wrote:
>> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
>> index cb3e0d8..6987de4 100644
>> --- a/arch/arm64/kernel/smp.c
>> +++ b/arch/arm64/kernel/smp.c
>> @@ -163,14 +163,14 @@ asmlinkage void secondary_start_kernel(void)
>>   		cpu_ops[cpu]->cpu_postboot();
>>
>>   	/*
>> -	 * Log the CPU info before it is marked online and might get read.
>> +	 * Enable GIC and timers.
>>   	 */
>> -	cpuinfo_store_cpu();
>> +	notify_cpu_starting(cpu);
>>
>>   	/*
>> -	 * Enable GIC and timers.
>> +	 * Log the CPU info before it is marked online and might get read.
>>   	 */
>> -	notify_cpu_starting(cpu);
>> +	cpuinfo_store_cpu();
>>
>>   	smp_store_cpu_info(cpu);
>
> You can move the cpuinfo_store_cpu() call directly to
> smp_store_cpu_info().
>

That looks better, Thanks.

Suzuki
Suzuki K Poulose Oct. 9, 2015, 3:01 p.m. UTC | #3
On 08/10/15 11:46, Suzuki K. Poulose wrote:
> On 08/10/15 11:15, Catalin Marinas wrote:
>> On Mon, Oct 05, 2015 at 06:02:00PM +0100, Suzuki K. Poulose wrote:
>>> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
>>> index cb3e0d8..6987de4 100644
>>> --- a/arch/arm64/kernel/smp.c
>>> +++ b/arch/arm64/kernel/smp.c
>>> @@ -163,14 +163,14 @@ asmlinkage void secondary_start_kernel(void)
>>>           cpu_ops[cpu]->cpu_postboot();
>>>
>>>       /*
>>> -     * Log the CPU info before it is marked online and might get read.
>>> +     * Enable GIC and timers.
>>>        */
>>> -    cpuinfo_store_cpu();
>>> +    notify_cpu_starting(cpu);
>>>
>>>       /*
>>> -     * Enable GIC and timers.
>>> +     * Log the CPU info before it is marked online and might get read.
>>>        */
>>> -    notify_cpu_starting(cpu);
>>> +    cpuinfo_store_cpu();
>>>
>>>       smp_store_cpu_info(cpu);
>>
>> You can move the cpuinfo_store_cpu() call directly to
>> smp_store_cpu_info().
>>
>
> That looks better, Thanks.

On a second look, smp_store_cpu_info() is also called from
smp_prepare_cpus() by the Boot CPU to update its topology
information, just after init_cpu_topology(). So moving the
cpuinfo_store_cpu() could be called for the boot CPU (which
we don't want, as it takes a different route to storing the
info).

One thing we could do is:

- Move init_cpu_topology() to setup_processor()
- Have the boot CPU update the topology from setup_processor()
   there, without going via the smp_store_cpu_info()
- Remove the smp_store_cpu_info() from smp_prepare_cpus().

Should we do that ? Or retain the code as above ?

Suzuki
diff mbox

Patch

diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index cb3e0d8..6987de4 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -163,14 +163,14 @@  asmlinkage void secondary_start_kernel(void)
 		cpu_ops[cpu]->cpu_postboot();
 
 	/*
-	 * Log the CPU info before it is marked online and might get read.
+	 * Enable GIC and timers.
 	 */
-	cpuinfo_store_cpu();
+	notify_cpu_starting(cpu);
 
 	/*
-	 * Enable GIC and timers.
+	 * Log the CPU info before it is marked online and might get read.
 	 */
-	notify_cpu_starting(cpu);
+	cpuinfo_store_cpu();
 
 	smp_store_cpu_info(cpu);