diff options
Diffstat (limited to 'arch/powerpc/platforms/pseries/dlpar.c')
-rw-r--r-- | arch/powerpc/platforms/pseries/dlpar.c | 34 |
1 files changed, 6 insertions, 28 deletions
diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c index 0f1b706506ed..a1a7b9a67ffd 100644 --- a/arch/powerpc/platforms/pseries/dlpar.c +++ b/arch/powerpc/platforms/pseries/dlpar.c | |||
@@ -13,17 +13,16 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/kref.h> | 14 | #include <linux/kref.h> |
15 | #include <linux/notifier.h> | 15 | #include <linux/notifier.h> |
16 | #include <linux/proc_fs.h> | ||
17 | #include <linux/spinlock.h> | 16 | #include <linux/spinlock.h> |
18 | #include <linux/cpu.h> | 17 | #include <linux/cpu.h> |
19 | #include <linux/slab.h> | 18 | #include <linux/slab.h> |
19 | #include <linux/of.h> | ||
20 | #include "offline_states.h" | 20 | #include "offline_states.h" |
21 | 21 | ||
22 | #include <asm/prom.h> | 22 | #include <asm/prom.h> |
23 | #include <asm/machdep.h> | 23 | #include <asm/machdep.h> |
24 | #include <asm/uaccess.h> | 24 | #include <asm/uaccess.h> |
25 | #include <asm/rtas.h> | 25 | #include <asm/rtas.h> |
26 | #include <asm/pSeries_reconfig.h> | ||
27 | 26 | ||
28 | struct cc_workarea { | 27 | struct cc_workarea { |
29 | u32 drc_index; | 28 | u32 drc_index; |
@@ -255,9 +254,6 @@ static struct device_node *derive_parent(const char *path) | |||
255 | 254 | ||
256 | int dlpar_attach_node(struct device_node *dn) | 255 | int dlpar_attach_node(struct device_node *dn) |
257 | { | 256 | { |
258 | #ifdef CONFIG_PROC_DEVICETREE | ||
259 | struct proc_dir_entry *ent; | ||
260 | #endif | ||
261 | int rc; | 257 | int rc; |
262 | 258 | ||
263 | of_node_set_flag(dn, OF_DYNAMIC); | 259 | of_node_set_flag(dn, OF_DYNAMIC); |
@@ -266,44 +262,26 @@ int dlpar_attach_node(struct device_node *dn) | |||
266 | if (!dn->parent) | 262 | if (!dn->parent) |
267 | return -ENOMEM; | 263 | return -ENOMEM; |
268 | 264 | ||
269 | rc = pSeries_reconfig_notify(PSERIES_RECONFIG_ADD, dn); | 265 | rc = of_attach_node(dn); |
270 | if (rc) { | 266 | if (rc) { |
271 | printk(KERN_ERR "Failed to add device node %s\n", | 267 | printk(KERN_ERR "Failed to add device node %s\n", |
272 | dn->full_name); | 268 | dn->full_name); |
273 | return rc; | 269 | return rc; |
274 | } | 270 | } |
275 | 271 | ||
276 | of_attach_node(dn); | ||
277 | |||
278 | #ifdef CONFIG_PROC_DEVICETREE | ||
279 | ent = proc_mkdir(strrchr(dn->full_name, '/') + 1, dn->parent->pde); | ||
280 | if (ent) | ||
281 | proc_device_tree_add_node(dn, ent); | ||
282 | #endif | ||
283 | |||
284 | of_node_put(dn->parent); | 272 | of_node_put(dn->parent); |
285 | return 0; | 273 | return 0; |
286 | } | 274 | } |
287 | 275 | ||
288 | int dlpar_detach_node(struct device_node *dn) | 276 | int dlpar_detach_node(struct device_node *dn) |
289 | { | 277 | { |
290 | #ifdef CONFIG_PROC_DEVICETREE | 278 | int rc; |
291 | struct device_node *parent = dn->parent; | ||
292 | struct property *prop = dn->properties; | ||
293 | |||
294 | while (prop) { | ||
295 | remove_proc_entry(prop->name, dn->pde); | ||
296 | prop = prop->next; | ||
297 | } | ||
298 | 279 | ||
299 | if (dn->pde) | 280 | rc = of_detach_node(dn); |
300 | remove_proc_entry(dn->pde->name, parent->pde); | 281 | if (rc) |
301 | #endif | 282 | return rc; |
302 | 283 | ||
303 | pSeries_reconfig_notify(PSERIES_RECONFIG_REMOVE, dn); | ||
304 | of_detach_node(dn); | ||
305 | of_node_put(dn); /* Must decrement the refcount */ | 284 | of_node_put(dn); /* Must decrement the refcount */ |
306 | |||
307 | return 0; | 285 | return 0; |
308 | } | 286 | } |
309 | 287 | ||