[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