[PATCH 4/6] ARM: smp: set thread_info->cpu to hardware CPU number for boot thread

Sergei Shtylyov sshtylyov at mvista.com
Tue Aug 9 07:48:05 EDT 2011


Hello.

On 08-08-2011 21:10, Will Deacon wrote:

> On ARM, Linux assumes that the boot CPU has ID 0. If this ends up being
> out of sync with the hardware CPU number, we will configure the GIC
> incorrectly and route interrupts to the CPU with hardware ID 0.

> This patch implements smp_setup_processor_id for ARM, using the MPIDR to
> set the CPU of the boot thread.

> Signed-off-by: Will Deacon<will.deacon at arm.com>
> ---
>   arch/arm/kernel/smp.c |   16 ++++++++++++++++
>   1 files changed, 16 insertions(+), 0 deletions(-)

> diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
> index d88ff02..8e60a4f 100644
> --- a/arch/arm/kernel/smp.c
> +++ b/arch/arm/kernel/smp.c
> @@ -259,6 +259,22 @@ void __ref cpu_die(void)
>   }
>   #endif /* CONFIG_HOTPLUG_CPU */
>
> +void __init smp_setup_processor_id(void)
> +{
> +	u32 mpidr;
> +
> +	/* Read the MPIDR to find the hardware ID of the current CPU. */
> +	asm("1:		mrc	p15, 0, %0, c0, c0, 5\n"
> +	    "		.pushsection \".alt.smp.init\", \"a\"\n"
> +	    "		.long	1b\n"
> +	    "		mov	%0, #0\n"
> +	    "		.popsection"
> +	    : "=r" (mpidr));
> +
> +	current_thread_info()->cpu = mpidr&  0xff;
> +	printk("Booting Linux on CPU %d\n", current_thread_info()->cpu);

    printk() should have the KERN_* logging facility.

WBR, Sergei



More information about the linux-arm-kernel mailing list