From tokunaga.keiich@jp.fujitsu.com Sun May 8 18:23:46 2005 Date: Sun, 08 May 2005 21:28:53 +0900 From: Keiichiro Tokunaga Subject: Driver core: unregister_node() for hotplug use To: Nathan Lynch , gregkh@suse.de Cc: tokunaga.keiich@jp.fujitsu.com, akpm@osdl.org Message-id: <20050508212853.1e71e8a5.tokunaga.keiich@jp.fujitsu.com> This adds a generic function 'unregister_node()'. It is used to remove objects of a node going away for hotplug. All the devices on the node must be unregistered before calling this function. Signed-off-by: Keiichiro Tokunaga Signed-off-by: Greg Kroah-Hartman diff -puN drivers/base/node.c~numa_hp_base drivers/base/node.c --- linux-2.6.12-rc3-mm3/drivers/base/node.c~numa_hp_base 2005-05-07 19:58:15.000000000 +0900 +++ linux-2.6.12-rc3-mm3-kei/drivers/base/node.c 2005-05-08 20:27:32.000000000 +0900 @@ -136,7 +136,7 @@ static SYSDEV_ATTR(distance, S_IRUGO, no * * Initialize and register the node device. */ -int __init register_node(struct node *node, int num, struct node *parent) +int register_node(struct node *node, int num, struct node *parent) { int error; @@ -153,8 +153,24 @@ int __init register_node(struct node *no return error; } +/** + * unregister_node - unregister a node device + * @node: node going away + * + * Unregisters a node device @node. All the devices on the node must be + * unregistered before calling this function. + */ +void unregister_node(struct node *node) +{ + sysdev_remove_file(&node->sysdev, &attr_cpumap); + sysdev_remove_file(&node->sysdev, &attr_meminfo); + sysdev_remove_file(&node->sysdev, &attr_numastat); + sysdev_remove_file(&node->sysdev, &attr_distance); + + sysdev_unregister(&node->sysdev); +} -int __init register_node_type(void) +static int __init register_node_type(void) { return sysdev_class_register(&node_class); } diff -puN include/linux/node.h~numa_hp_base include/linux/node.h --- linux-2.6.12-rc3-mm3/include/linux/node.h~numa_hp_base 2005-05-07 19:58:15.000000000 +0900 +++ linux-2.6.12-rc3-mm3-kei/include/linux/node.h 2005-05-07 19:58:15.000000000 +0900 @@ -27,6 +27,7 @@ struct node { }; extern int register_node(struct node *, int, struct node *); +extern void unregister_node(struct node *node); #define to_node(sys_device) container_of(sys_device, struct node, sysdev) _