[PATCH] nubus: switch to dynamic root device

Johan Hovold
2026-04-24T10:40:18Z

Driver core expects devices to be dynamically allocated and will, for
example, complain loudly if a device that lacks a release function is
ever freed.

Use root_device_register() to allocate and register the root device
instead of open coding using a static device.

Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/nubus/nubus.c | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/drivers/nubus/nubus.c b/drivers/nubus/nubus.c
index 559dce302d06..40ce4991c356 100644
--- a/drivers/nubus/nubus.c
+++ b/drivers/nubus/nubus.c
@@ -41,9 +41,7 @@ module_param_named(populate_procfs, nubus_populate_procfs, bool, 0);

LIST_HEAD(nubus_func_rsrcs);

-static struct device nubus_parent = {
- .init_name = "nubus",
-};
+static struct device *nubus_parent;

/* Meaning of "bytelanes":

@@ -833,7 +831,7 @@ static void __init nubus_add_board(int slot, int bytelanes)
list_add_tail(&fres->list, &nubus_func_rsrcs);
}

- if (nubus_device_register(&nubus_parent, board))
+ if (nubus_device_register(nubus_parent, board))
put_device(&board->dev);
}

@@ -880,18 +878,17 @@ static void __init nubus_scan_bus(void)

static int __init nubus_init(void)
{
- int err;
-
if (!MACH_IS_MAC)
return 0;

nubus_proc_init();
- err = device_register(&nubus_parent);
- if (err) {
- put_device(&nubus_parent);
- return err;
- }
+
+ nubus_parent = root_device_register("nubus");
+ if (IS_ERR(nubus_parent))
+ return PTR_ERR(nubus_parent);
+
nubus_scan_bus();
+
return 0;
}

--
2.53.0