diff options
| author | Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com> | 2012-12-11 16:00:44 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-11 17:22:22 -0800 | 
| commit | fa7194eb99b8e9fefe96f045002648ffb55f53c0 (patch) | |
| tree | d75fdad6d29a53767aad6446c7fc2b3a44a9dd83 /drivers/base/memory.c | |
| parent | b3092b3b734f146d96ca023a75cacf78078f96d5 (diff) | |
| download | olio-linux-3.10-fa7194eb99b8e9fefe96f045002648ffb55f53c0.tar.xz olio-linux-3.10-fa7194eb99b8e9fefe96f045002648ffb55f53c0.zip  | |
memory hotplug: suppress "Device memoryX does not have a release() function" warning
When calling remove_memory_block(), the function shows following message
at device_release().
"Device 'memory528' does not have a release() function, it is broken and
must be fixed."
The reason is memory_block's device struct does not have a release()
function.
So the patch registers memory_block_release() to the device's release()
function for suppressing the warning message.  Additionally, the patch
moves kfree(mem) into the release function since the release function is
prepared as a means to free a memory_block struct.
Signed-off-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Acked-by: David Rientjes <rientjes@google.com>
Cc: Jiang Liu <liuj97@gmail.com>
Cc: Minchan Kim <minchan.kim@gmail.com>
Acked-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Wen Congyang <wency@cn.fujitsu.com>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/base/memory.c')
| -rw-r--r-- | drivers/base/memory.c | 9 | 
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/base/memory.c b/drivers/base/memory.c index 86c88216a50..7eb1211ab68 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -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);  |