> -----Original Message-----
> From: linuxppc-dev-bounces+bharat.bhushan=freescale....@lists.ozlabs.org
> [mailto:linuxppc-dev-
> bounces+bharat.bhushan=freescale....@lists.ozlabs.org] On Behalf Of Kumar
> Gala
> Sent: Friday, October 14, 2011 1:23 PM
> To: linuxppc-...@ozlabs.org
> Subject: [PATCH] powerpc/85xx: Setup secondary cores PIR with hard SMP id
> 
> Normally logical and hard cpu ID are the same, however in same cases like
> on the P3060 they may differ.  Where the logical is 0..5, the hard id
> goes 0,1,4..7.  This can causes issues for places we utilize PIR to index
> into array like in debug exception handlers for finding the exception
> stack.

Kumar, What should be the CONFIG_NR_CPUS for this? 8 or 6 ?

Thanks
-Bharat

> 
> Move to setting up PIR with hard_smp_processor_id fixes the issue.
> 
> Signed-off-by: Kumar Gala <ga...@kernel.crashing.org>
> ---
>  arch/powerpc/platforms/85xx/smp.c |    9 +++++----
>  1 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/85xx/smp.c
> b/arch/powerpc/platforms/85xx/smp.c
> index d6e4746..190d111 100644
> --- a/arch/powerpc/platforms/85xx/smp.c
> +++ b/arch/powerpc/platforms/85xx/smp.c
> @@ -48,10 +48,11 @@ smp_85xx_kick_cpu(int nr)
>       const u64 *cpu_rel_addr;
>       __iomem u32 *bptr_vaddr;
>       struct device_node *np;
> -     int n = 0;
> +     int n = 0, hw_cpu = get_hard_smp_processor_id(nr);
>       int ioremappable;
> 
> -     WARN_ON (nr < 0 || nr >= NR_CPUS);
> +     WARN_ON(nr < 0 || nr >= NR_CPUS);
> +     WARN_ON(hw_cpu < 0 || hw_cpu >= NR_CPUS);
> 
>       pr_debug("smp_85xx_kick_cpu: kick CPU #%d\n", nr);
> 
> @@ -79,7 +80,7 @@ smp_85xx_kick_cpu(int nr)
> 
>       local_irq_save(flags);
> 
> -     out_be32(bptr_vaddr + BOOT_ENTRY_PIR, nr);
> +     out_be32(bptr_vaddr + BOOT_ENTRY_PIR, hw_cpu);
>  #ifdef CONFIG_PPC32
>       out_be32(bptr_vaddr + BOOT_ENTRY_ADDR_LOWER, __pa(__early_start));
> 
> @@ -88,7 +89,7 @@ smp_85xx_kick_cpu(int nr)
>                               (ulong)(bptr_vaddr + SIZE_BOOT_ENTRY));
> 
>       /* Wait a bit for the CPU to ack. */
> -     while ((__secondary_hold_acknowledge != nr) && (++n < 1000))
> +     while ((__secondary_hold_acknowledge != hw_cpu) && (++n < 1000))
>               mdelay(1);
>  #else
>       smp_generic_kick_cpu(nr);
> --
> 1.7.3.4
> 
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to