Skip to content

Commit

Permalink
OF-device: Don't overwrite numa_node in device registration
Browse files Browse the repository at this point in the history
Currently, the numa_node of OF-devices will be overwritten during
device_register, which simply sets the node to -1.  On cell machines,
this means that devices can't find their IOMMU, which is referenced
through the device's numa node.

Set the numa node for OF devices with no parent, and use the
lower-level device_initialize and device_add functions, so that the
node is preserved.

We can remove the call to set_dev_node in of_device_alloc, as it
will be overwritten during register.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Jeremy Kerr authored and Paul Mackerras committed Oct 31, 2008
1 parent 16c29d1 commit 6098e2e
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
1 change: 0 additions & 1 deletion arch/powerpc/kernel/of_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ struct of_device *of_device_alloc(struct device_node *np,
dev->dev.parent = parent;
dev->dev.release = of_release_dev;
dev->dev.archdata.of_node = np;
set_dev_node(&dev->dev, of_node_to_nid(np));

if (bus_id)
strlcpy(dev->dev.bus_id, bus_id, BUS_ID_SIZE);
Expand Down
11 changes: 10 additions & 1 deletion drivers/of/device.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,16 @@ EXPORT_SYMBOL(of_release_dev);
int of_device_register(struct of_device *ofdev)
{
BUG_ON(ofdev->node == NULL);
return device_register(&ofdev->dev);

device_initialize(&ofdev->dev);

/* device_add will assume that this device is on the same node as
* the parent. If there is no parent defined, set the node
* explicitly */
if (!ofdev->dev.parent)
set_dev_node(&ofdev->dev, of_node_to_nid(ofdev->node));

return device_add(&ofdev->dev);
}
EXPORT_SYMBOL(of_device_register);

Expand Down

0 comments on commit 6098e2e

Please sign in to comment.