|
@@ -208,6 +208,25 @@ static ssize_t print_cpus_offline(struct device *dev,
|
|
|
}
|
|
|
static DEVICE_ATTR(offline, 0444, print_cpus_offline, NULL);
|
|
|
|
|
|
+static void cpu_device_release(struct device *dev)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * This is an empty function to prevent the driver core from spitting a
|
|
|
+ * warning at us. Yes, I know this is directly opposite of what the
|
|
|
+ * documentation for the driver core and kobjects say, and the author
|
|
|
+ * of this code has already been publically ridiculed for doing
|
|
|
+ * something as foolish as this. However, at this point in time, it is
|
|
|
+ * the only way to handle the issue of statically allocated cpu
|
|
|
+ * devices. The different architectures will have their cpu device
|
|
|
+ * code reworked to properly handle this in the near future, so this
|
|
|
+ * function will then be changed to correctly free up the memory held
|
|
|
+ * by the cpu device.
|
|
|
+ *
|
|
|
+ * Never copy this way of doing things, or you too will be made fun of
|
|
|
+ * on the linux-kerenl list, you have been warned.
|
|
|
+ */
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* register_cpu - Setup a sysfs device for a CPU.
|
|
|
* @cpu - cpu->hotpluggable field set to 1 will generate a control file in
|
|
@@ -223,6 +242,7 @@ int __cpuinit register_cpu(struct cpu *cpu, int num)
|
|
|
cpu->node_id = cpu_to_node(num);
|
|
|
cpu->dev.id = num;
|
|
|
cpu->dev.bus = &cpu_subsys;
|
|
|
+ cpu->dev.release = cpu_device_release;
|
|
|
error = device_register(&cpu->dev);
|
|
|
if (!error && cpu->hotpluggable)
|
|
|
register_cpu_control(cpu);
|