[PATCH V10 2/6] arm: arm64: Add routine to determine cpuid of other cpus
Jeremy Linton
jeremy.linton at arm.com
Tue Nov 29 10:25:43 PST 2016
Hi,
On 11/29/2016 04:46 AM, Russell King - ARM Linux wrote:
> On Tue, Nov 29, 2016 at 10:31:12AM +0000, Will Deacon wrote:
>> [adding Russell]
>>
>> On Wed, Nov 09, 2016 at 05:39:49PM -0600, Jeremy Linton wrote:
>>> It is helpful if we can read the cpuid/midr of other CPUs
>>> in the system independent of arm/arm64.
>>>
>>> Signed-off-by: Jeremy Linton <jeremy.linton at arm.com>
>>> ---
>>> arch/arm/include/asm/cputype.h | 2 ++
>>> arch/arm64/include/asm/cputype.h | 3 +++
>>> 2 files changed, 5 insertions(+)
>>>
>>> diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h
>>> index 522b5fe..31fb273 100644
>>> --- a/arch/arm/include/asm/cputype.h
>>> +++ b/arch/arm/include/asm/cputype.h
>>> @@ -235,6 +235,8 @@ static inline unsigned int __attribute_const__ read_cpuid_mpidr(void)
>>> #define cpu_is_sa1100() (read_cpuid_part() == ARM_CPU_PART_SA1100)
>>> #define cpu_is_sa1110() (read_cpuid_part() == ARM_CPU_PART_SA1110)
>>>
>>> +#define read_specific_cpuid(cpu_num) per_cpu_ptr(&cpu_data, cpu_num)->cpuid
>>> +
>>> /*
>>> * Intel's XScale3 core supports some v6 features (supersections, L2)
>>> * but advertises itself as v5 as it does not support the v6 ISA. For
>>
>> Russell -- are you ok with adding this macro to arch/arm/? It will get used
>> by the CPU PMU driver, which needs a portable (i.e. between arm and arm64)
>> way to convert a logical CPU ID into the MIDR register for that CPU.
>
> No, because we don't set the cpuid member in uniprocessor configurations,
> so it's going to be a fragile macro - it'll return zero for kernels
> configured without SMP support.
By itself is easy enough to fix, it could be tweaked to do the same
thing as c_show()
#define read_specific_cpuid(cpu_num) is_smp() ? per_cpu(&cpu_data,
cpu_num)->cpuid : read_cpuid_id()
c_show could then be updated to use read_specific_cpuid().
>
> I'd ideally like cpuid for the boot CPU to be set early, so that we can
> get rid of many ifdefs in this area, but haven't convinced myself that
> it's safe to do so in all configurations with the percpu stuff not being
> up and running in setup_arch().
As the above change is a little ugly... It seems something like
smp_prepare_boot_cpu() call would be perfect if it were available for
!SMP. Although this is getting a little off base for the PMU changes.
The alternative to all this, is yet another #ifdef in the pmu code,
which is IMHO the worse choice.
Suggestions?
More information about the linux-arm-kernel
mailing list