int dlpar_attach_node(struct device_node *dn) { #ifdef CONFIG_PROC_DEVICETREE struct proc_dir_entry *ent; #endif int rc; of_node_set_flag(dn, OF_DYNAMIC); kref_init(&dn->kref); dn->parent = derive_parent(dn->full_name); if (!dn->parent) return -ENOMEM; rc = pSeries_reconfig_notify(PSERIES_RECONFIG_ADD, dn); if (rc) { printk(KERN_ERR "Failed to add device node %s\n", dn->full_name); return rc; } of_attach_node(dn); #ifdef CONFIG_PROC_DEVICETREE ent = proc_mkdir(strrchr(dn->full_name, '/') + 1, dn->parent->pde); if (ent) proc_device_tree_add_node(dn, ent); #endif of_node_put(dn->parent); return 0; }
int dlpar_detach_node(struct device_node *dn) { #ifdef CONFIG_PROC_DEVICETREE struct device_node *parent = dn->parent; struct property *prop = dn->properties; while (prop) { remove_proc_entry(prop->name, dn->pde); prop = prop->next; } if (dn->pde) remove_proc_entry(dn->pde->name, parent->pde); #endif pSeries_reconfig_notify(PSERIES_RECONFIG_REMOVE, dn); of_detach_node(dn); of_node_put(dn); /* Must decrement the refcount */ return 0; }
#ifdef CONFIG_PROC_DEVICETREE struct proc_dir_entry *ent; #endif int rc; of_node_set_flag(dn, OF_DYNAMIC); kref_init(&dn->kref); dn->parent = derive_parent(dn->full_name); if (!dn->parent) return -ENOMEM; <<<<<<< HEAD ======= <<<<<<< HEAD >>>>>>> ae1773bb70f3d7cf73324ce8fba787e01d8fa9f2 rc = pSeries_reconfig_notify(PSERIES_RECONFIG_ADD, dn); if (rc) { printk(KERN_ERR "Failed to add device node %s\n", dn->full_name); return rc; <<<<<<< HEAD ======= ======= rc = blocking_notifier_call_chain(&pSeries_reconfig_chain, PSERIES_RECONFIG_ADD, dn); if (rc == NOTIFY_BAD) { printk(KERN_ERR "Failed to add device node %s\n", dn->full_name); return -ENOMEM; /* For now, safe to assume kmalloc failure */ >>>>>>> 58a75b6a81be54a8b491263ca1af243e9d8617b9 >>>>>>> ae1773bb70f3d7cf73324ce8fba787e01d8fa9f2