|
@@ -787,6 +787,10 @@ int device_add(struct device *dev)
|
|
|
parent = get_device(dev->parent);
|
|
|
setup_parent(dev, parent);
|
|
|
|
|
|
+ /* use parent numa_node */
|
|
|
+ if (parent)
|
|
|
+ set_dev_node(dev, dev_to_node(parent));
|
|
|
+
|
|
|
/* first, register with generic layer. */
|
|
|
error = kobject_add(&dev->kobj, dev->kobj.parent, "%s", dev->bus_id);
|
|
|
if (error)
|
|
@@ -1306,8 +1310,11 @@ int device_move(struct device *dev, struct device *new_parent)
|
|
|
dev->parent = new_parent;
|
|
|
if (old_parent)
|
|
|
klist_remove(&dev->knode_parent);
|
|
|
- if (new_parent)
|
|
|
+ if (new_parent) {
|
|
|
klist_add_tail(&dev->knode_parent, &new_parent->klist_children);
|
|
|
+ set_dev_node(dev, dev_to_node(new_parent));
|
|
|
+ }
|
|
|
+
|
|
|
if (!dev->class)
|
|
|
goto out_put;
|
|
|
error = device_move_class_links(dev, old_parent, new_parent);
|
|
@@ -1317,9 +1324,12 @@ int device_move(struct device *dev, struct device *new_parent)
|
|
|
if (!kobject_move(&dev->kobj, &old_parent->kobj)) {
|
|
|
if (new_parent)
|
|
|
klist_remove(&dev->knode_parent);
|
|
|
- if (old_parent)
|
|
|
+ dev->parent = old_parent;
|
|
|
+ if (old_parent) {
|
|
|
klist_add_tail(&dev->knode_parent,
|
|
|
&old_parent->klist_children);
|
|
|
+ set_dev_node(dev, dev_to_node(old_parent));
|
|
|
+ }
|
|
|
}
|
|
|
cleanup_glue_dir(dev, new_parent_kobj);
|
|
|
put_device(new_parent);
|