From mboxrd@z Thu Jan 1 00:00:00 1970 From: catalin.marinas@arm.com (Catalin Marinas) Date: Mon, 18 May 2015 18:09:13 +0100 Subject: [PATCHv2 02/12] arm64: smp_plat: add get_logical_index In-Reply-To: <1431945503-6939-3-git-send-email-mark.rutland@arm.com> References: <1431945503-6939-1-git-send-email-mark.rutland@arm.com> <1431945503-6939-3-git-send-email-mark.rutland@arm.com> Message-ID: <20150518170912.GI21251@e104818-lin.cambridge.arm.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Mon, May 18, 2015 at 11:38:13AM +0100, Mark Rutland wrote: > The PSCI MIGRATE_INFO_UP_CPU call returns a physical ID, which we will > need to map back to a Linux logical ID. > > Implement a reusable get_logical_index to map from a physical ID to a > logical ID. > > Signed-off-by: Mark Rutland > Acked-by: Lorenzo Pieralisi > Cc: Catalin Marinas > Cc: Will Deacon > --- > arch/arm64/include/asm/smp_plat.h | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/arch/arm64/include/asm/smp_plat.h b/arch/arm64/include/asm/smp_plat.h > index 8dcd61e..7abf757 100644 > --- a/arch/arm64/include/asm/smp_plat.h > +++ b/arch/arm64/include/asm/smp_plat.h > @@ -19,6 +19,8 @@ > #ifndef __ASM_SMP_PLAT_H > #define __ASM_SMP_PLAT_H > > +#include > + > #include > > struct mpidr_hash { > @@ -39,6 +41,20 @@ static inline u32 mpidr_hash_size(void) > */ > extern u64 __cpu_logical_map[NR_CPUS]; > #define cpu_logical_map(cpu) __cpu_logical_map[cpu] > +/* > + * Retrieve logical cpu index corresponding to a given MPIDR.Aff* > + * - mpidr: MPIDR.Aff* bits to be used for the look-up > + * > + * Returns the cpu logical index or -EINVAL on look-up error > + */ > +static inline int get_logical_index(u64 mpidr) > +{ > + int cpu; > + for (cpu = 0; cpu < nr_cpu_ids; cpu++) > + if (cpu_logical_map(cpu) == mpidr) > + return cpu; > + return -EINVAL; > +} Do we guarantee that mpidr here only contains the affinity bits (i.e. no masking)? If yes: Acked-by: Catalin Marinas