[patch 1/4] introduce get_cpu_sysdev() to retrieve a sysfs entry for a cpu.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



some modules creating sysfs entries under /sys/devices/system/cpu/cpuX/
need to know the parent sysfs entry to make devices under them. This will
just return the sysfs entry for a given cpu.

sysfs entries showing under each cpu sysfs can be easily created if such
entries can be created by registering a sysfs driver for cpuclass. The issue
is when the entry is created the CPU may not be online, hence we would need to 
defer the creation until the online notification comes.

Current users: cache entries for Intel CPU's and cpufreq subsystem.

Signed-off-by: Ashok Raj <[email protected]>
Signed-off-by: Venkatesh Pallipadi <[email protected]>
----------------------------------------------------
 drivers/base/cpu.c  |   17 +++++++++++++++++
 include/linux/cpu.h |    1 +
 2 files changed, 18 insertions(+)

Index: linux-2.6.14-rc4-mm1/drivers/base/cpu.c
===================================================================
--- linux-2.6.14-rc4-mm1.orig/drivers/base/cpu.c
+++ linux-2.6.14-rc4-mm1/drivers/base/cpu.c
@@ -9,6 +9,16 @@
 #include <linux/topology.h>
 #include <linux/device.h>
 
+static struct sys_device	*cpu_sys_devices[NR_CPUS];
+
+struct sys_device *get_cpu_sysdev(int cpu)
+{
+	if (cpu < NR_CPUS)
+		return cpu_sys_devices[cpu];
+	else
+		return NULL;
+}
+EXPORT_SYMBOL(get_cpu_sysdev);
 
 struct sysdev_class cpu_sysdev_class = {
 	set_kset_name("cpu"),
@@ -64,12 +74,15 @@ static void __devinit register_cpu_contr
 void unregister_cpu(struct cpu *cpu, struct node *root)
 {
 
+	int logical_cpu = cpu->sysdev.id;
+
 	if (root)
 		sysfs_remove_link(&root->sysdev.kobj,
 				  kobject_name(&cpu->sysdev.kobj));
 	sysdev_remove_file(&cpu->sysdev, &attr_online);
 
 	sysdev_unregister(&cpu->sysdev);
+	cpu_sys_devices[logical_cpu] = NULL;
 
 	return;
 }
@@ -102,6 +115,10 @@ int __devinit register_cpu(struct cpu *c
 					  kobject_name(&cpu->sysdev.kobj));
 	if (!error && !cpu->no_control)
 		register_cpu_control(cpu);
+
+	if (!error)
+		cpu_sys_devices[num] = &cpu->sysdev;
+
 	return error;
 }
 
Index: linux-2.6.14-rc4-mm1/include/linux/cpu.h
===================================================================
--- linux-2.6.14-rc4-mm1.orig/include/linux/cpu.h
+++ linux-2.6.14-rc4-mm1/include/linux/cpu.h
@@ -32,6 +32,7 @@ struct cpu {
 };
 
 extern int register_cpu(struct cpu *, int, struct node *);
+extern struct sys_device *get_cpu_sysdev(int cpu);
 #ifdef CONFIG_HOTPLUG_CPU
 extern void unregister_cpu(struct cpu *, struct node *);
 #endif

--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux