Message ID | 1352471654-20207-2-git-send-email-lorenzo.pieralisi@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Nov 09, 2012 at 02:34:10PM +0000, Lorenzo Pieralisi wrote: > This patch applies some basic changes to the smp_setup_processor_id() > ARM implementation to make the code that builds cpu_logical_map more > uniform across the kernel. > > The function now prints the full extent of the boot CPU MPIDR[23:0] and > initializes the cpu_logical_map for CPUs up to nr_cpu_ids. > > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > --- > arch/arm/kernel/setup.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c > index da1d1aa..ede7c84 100644 > --- a/arch/arm/kernel/setup.c > +++ b/arch/arm/kernel/setup.c > @@ -426,13 +426,14 @@ int __cpu_logical_map[NR_CPUS]; > void __init smp_setup_processor_id(void) > { > int i; > - u32 cpu = is_smp() ? read_cpuid_mpidr() & 0xff : 0; > + u32 mpidr = read_cpuid_mpidr() & 0xffffff; We need that is_smp() check, otherwise we'll go and do a funky CP15 operation on CPU's that might not be too happy about it. Will
On Fri, Nov 09, 2012 at 02:44:46PM +0000, Will Deacon wrote: > On Fri, Nov 09, 2012 at 02:34:10PM +0000, Lorenzo Pieralisi wrote: > > This patch applies some basic changes to the smp_setup_processor_id() > > ARM implementation to make the code that builds cpu_logical_map more > > uniform across the kernel. > > > > The function now prints the full extent of the boot CPU MPIDR[23:0] and > > initializes the cpu_logical_map for CPUs up to nr_cpu_ids. > > > > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > > --- > > arch/arm/kernel/setup.c | 7 ++++--- > > 1 file changed, 4 insertions(+), 3 deletions(-) > > > > diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c > > index da1d1aa..ede7c84 100644 > > --- a/arch/arm/kernel/setup.c > > +++ b/arch/arm/kernel/setup.c > > @@ -426,13 +426,14 @@ int __cpu_logical_map[NR_CPUS]; > > void __init smp_setup_processor_id(void) > > { > > int i; > > - u32 cpu = is_smp() ? read_cpuid_mpidr() & 0xff : 0; > > + u32 mpidr = read_cpuid_mpidr() & 0xffffff; > > We need that is_smp() check, otherwise we'll go and do a funky CP15 > operation on CPU's that might not be too happy about it. It is there :-) I just added a local variable for mpidr to avoid reading it again later on when printing. The change moved the is_smp() check one line down. Thanks, Lorenzo
On Fri, Nov 09, 2012 at 02:44:46PM +0000, Will Deacon wrote: > On Fri, Nov 09, 2012 at 02:34:10PM +0000, Lorenzo Pieralisi wrote: > > This patch applies some basic changes to the smp_setup_processor_id() > > ARM implementation to make the code that builds cpu_logical_map more > > uniform across the kernel. > > > > The function now prints the full extent of the boot CPU MPIDR[23:0] and > > initializes the cpu_logical_map for CPUs up to nr_cpu_ids. > > > > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > > --- > > arch/arm/kernel/setup.c | 7 ++++--- > > 1 file changed, 4 insertions(+), 3 deletions(-) > > > > diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c > > index da1d1aa..ede7c84 100644 > > --- a/arch/arm/kernel/setup.c > > +++ b/arch/arm/kernel/setup.c > > @@ -426,13 +426,14 @@ int __cpu_logical_map[NR_CPUS]; > > void __init smp_setup_processor_id(void) > > { > > int i; > > - u32 cpu = is_smp() ? read_cpuid_mpidr() & 0xff : 0; > > + u32 mpidr = read_cpuid_mpidr() & 0xffffff; > > We need that is_smp() check, otherwise we'll go and do a funky CP15 > operation on CPU's that might not be too happy about it. You are right, sorry my apologies. I will have to check it even when parsing the DT then. Lorenzo
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index da1d1aa..ede7c84 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -426,13 +426,14 @@ int __cpu_logical_map[NR_CPUS]; void __init smp_setup_processor_id(void) { int i; - u32 cpu = is_smp() ? read_cpuid_mpidr() & 0xff : 0; + u32 mpidr = read_cpuid_mpidr() & 0xffffff; + u32 cpu = is_smp() ? mpidr & 0xff : 0; cpu_logical_map(0) = cpu; - for (i = 1; i < NR_CPUS; ++i) + for (i = 1; i < nr_cpu_ids; ++i) cpu_logical_map(i) = i == cpu ? 0 : i; - printk(KERN_INFO "Booting Linux on physical CPU %d\n", cpu); + printk(KERN_INFO "Booting Linux on physical CPU 0x%x\n", mpidr); } static void __init setup_processor(void)
This patch applies some basic changes to the smp_setup_processor_id() ARM implementation to make the code that builds cpu_logical_map more uniform across the kernel. The function now prints the full extent of the boot CPU MPIDR[23:0] and initializes the cpu_logical_map for CPUs up to nr_cpu_ids. Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> --- arch/arm/kernel/setup.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)