|
@@ -70,6 +70,13 @@ void unregister_memory_isolate_notifier(struct notifier_block *nb)
|
|
|
}
|
|
|
EXPORT_SYMBOL(unregister_memory_isolate_notifier);
|
|
|
|
|
|
+static void memory_block_release(struct device *dev)
|
|
|
+{
|
|
|
+ struct memory_block *mem = container_of(dev, struct memory_block, dev);
|
|
|
+
|
|
|
+ kfree(mem);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* register_memory - Setup a sysfs device for a memory block
|
|
|
*/
|
|
@@ -80,6 +87,7 @@ int register_memory(struct memory_block *memory)
|
|
|
|
|
|
memory->dev.bus = &memory_subsys;
|
|
|
memory->dev.id = memory->start_section_nr / sections_per_block;
|
|
|
+ memory->dev.release = memory_block_release;
|
|
|
|
|
|
error = device_register(&memory->dev);
|
|
|
return error;
|
|
@@ -635,7 +643,6 @@ int remove_memory_block(unsigned long node_id, struct mem_section *section,
|
|
|
mem_remove_simple_file(mem, phys_device);
|
|
|
mem_remove_simple_file(mem, removable);
|
|
|
unregister_memory(mem);
|
|
|
- kfree(mem);
|
|
|
} else
|
|
|
kobject_put(&mem->dev.kobj);
|
|
|
|