diff mbox

ARM: Allow modules to read cpu_logical_map

Message ID 1360325980-19089-1-git-send-email-dave.martin@linaro.org
State New
Headers show

Commit Message

Dave Martin Feb. 8, 2013, 12:19 p.m. UTC
It is reasonable for loadable modules to be CPU topology aware
(particular examples include cpufreq and cpuidle drivers).

This patch exports a new function cpu_get_hwid(cpu) to provide
suitable read-only access outside vmlinux.

Signed-off-by: Dave Martin <dave.martin@linaro.org>
---
Modules using this function will be arch-dependent and highly coupled to
the kernel, so cpu_get_hwid() shouldn't be considered a stable API,
especially while the details of kernel topology awareness are still
under discussion: therefore, export only to GPL code for now.

 arch/arm/include/asm/smp_plat.h |    3 +++
 arch/arm/kernel/setup.c         |    7 +++++++
 2 files changed, 10 insertions(+), 0 deletions(-)

Comments

Russell King - ARM Linux Feb. 8, 2013, 12:26 p.m. UTC | #1
On Fri, Feb 08, 2013 at 12:19:40PM +0000, Dave Martin wrote:
> It is reasonable for loadable modules to be CPU topology aware
> (particular examples include cpufreq and cpuidle drivers).
> 
> This patch exports a new function cpu_get_hwid(cpu) to provide
> suitable read-only access outside vmlinux.

And we have an export with no user... where are the patches which
illustrate its usage?
Dave Martin Feb. 8, 2013, 2:32 p.m. UTC | #2
On Fri, Feb 08, 2013 at 12:26:04PM +0000, Russell King - ARM Linux wrote:
> On Fri, Feb 08, 2013 at 12:19:40PM +0000, Dave Martin wrote:
> > It is reasonable for loadable modules to be CPU topology aware
> > (particular examples include cpufreq and cpuidle drivers).
> > 
> > This patch exports a new function cpu_get_hwid(cpu) to provide
> > suitable read-only access outside vmlinux.
> 
> And we have an export with no user... where are the patches which
> illustrate its usage?

That's a fair point.

The background is that ARM have an out-of-tree profiling driver,
which may need to look at cpu_logical_map in the presence of the
big.LITTLE in-kernel switcher code.

Although there is no in-tree code using this yet, the usage seems
legitimate.

If there are outstanding concerns about this, this patch could stay
out-of-tree too, but said driver would only work with a modified
kernel in that case.

If this is not considered relevant to the kernel proper yet, then
it could be posted via the big.LITTLE in-kernel switcher series
when those are finally published, since it is this that causes
cpu_logical_map to change in ways that a few specialised drivers
may need to respond to.  Without the switcher, no code should need
to look at cpu_logical_map (the present situation).

(Nico, please shout if you have any concerns about that approach.)

Cheers
---Dave
diff mbox

Patch

diff --git a/arch/arm/include/asm/smp_plat.h b/arch/arm/include/asm/smp_plat.h
index aaa61b6..518e466 100644
--- a/arch/arm/include/asm/smp_plat.h
+++ b/arch/arm/include/asm/smp_plat.h
@@ -66,4 +66,7 @@  static inline int get_logical_index(u32 mpidr)
 	return -EINVAL;
 }
 
+/* Read-only accessor for use by modules: */
+int cpu_get_hwid(int cpu);
+
 #endif
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 3f6cbb2..1ac5e8b 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -429,6 +429,13 @@  void cpu_init(void)
 
 int __cpu_logical_map[NR_CPUS];
 
+/* Read-only accessor for use by modules: */
+int cpu_get_hwid(int cpu)
+{
+	return cpu_logical_map(cpu);
+}
+EXPORT_SYMBOL_GPL(cpu_get_hwid);
+
 void __init smp_setup_processor_id(void)
 {
 	int i;