* [PATCH] nubus: switch to dynamic root device
@ 2026-04-24 10:40 Johan Hovold
2026-04-25 4:07 ` Finn Thain
0 siblings, 1 reply; 4+ messages in thread
From: Johan Hovold @ 2026-04-24 10:40 UTC (permalink / raw)
To: Finn Thain; +Cc: linux-m68k, linux-kernel, Johan Hovold
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
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] nubus: switch to dynamic root device
2026-04-24 10:40 [PATCH] nubus: switch to dynamic root device Johan Hovold
@ 2026-04-25 4:07 ` Finn Thain
2026-04-27 15:30 ` Johan Hovold
0 siblings, 1 reply; 4+ messages in thread
From: Finn Thain @ 2026-04-25 4:07 UTC (permalink / raw)
To: Johan Hovold; +Cc: linux-m68k, linux-kernel
On Fri, 24 Apr 2026, Johan Hovold wrote:
> 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.
>
Yes, in drivers/base/core.c, there is a warning in device_release().
WARN(1, KERN_ERR "Device '%s' does not have a release()
function, it is broken and must be fixed. See
Documentation/core-api/kobject.rst.\n",
But there's no way for the refcount for the nubus parent device to reach
zero that I can see. Did I miss something?
> Use root_device_register() to allocate and register the root device
> instead of open coding using a static device.
>
Well, dynamic allocation makes sense for busses that might be instantiated
more than once. But I don't know of any hardware like that. The nubus
parent device is a singleton.
I suppose I could see some benefit to converting CONFIG_NUBUS into a
tristate. Maybe the module link in root_device_register() would become
applicable if someone wanted to do that conversion.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] nubus: switch to dynamic root device
2026-04-25 4:07 ` Finn Thain
@ 2026-04-27 15:30 ` Johan Hovold
2026-04-28 7:24 ` Finn Thain
0 siblings, 1 reply; 4+ messages in thread
From: Johan Hovold @ 2026-04-27 15:30 UTC (permalink / raw)
To: Finn Thain; +Cc: linux-m68k, linux-kernel
On Sat, Apr 25, 2026 at 02:07:10PM +1000, Finn Thain wrote:
> On Fri, 24 Apr 2026, Johan Hovold wrote:
>
> > 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.
> >
>
> Yes, in drivers/base/core.c, there is a warning in device_release().
>
> WARN(1, KERN_ERR "Device '%s' does not have a release()
> function, it is broken and must be fixed. See
> Documentation/core-api/kobject.rst.\n",
>
> But there's no way for the refcount for the nubus parent device to reach
> zero that I can see. Did I miss something?
It will if registration ever fails (e.g. due to fault injection or name
collision):
err = device_register(&nubus_parent);
if (err) {
put_device(&nubus_parent);
return err;
}
Johan
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] nubus: switch to dynamic root device
2026-04-27 15:30 ` Johan Hovold
@ 2026-04-28 7:24 ` Finn Thain
0 siblings, 0 replies; 4+ messages in thread
From: Finn Thain @ 2026-04-28 7:24 UTC (permalink / raw)
To: Johan Hovold; +Cc: linux-m68k, linux-kernel
On Mon, 27 Apr 2026, Johan Hovold wrote:
> On Sat, Apr 25, 2026 at 02:07:10PM +1000, Finn Thain wrote:
> > On Fri, 24 Apr 2026, Johan Hovold wrote:
> >
> > > 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.
> > >
> >
> > Yes, in drivers/base/core.c, there is a warning in device_release().
> >
> > WARN(1, KERN_ERR "Device '%s' does not have a release()
> > function, it is broken and must be fixed. See
> > Documentation/core-api/kobject.rst.\n",
> >
> > But there's no way for the refcount for the nubus parent device to
> > reach zero that I can see. Did I miss something?
>
> It will if registration ever fails (e.g. due to fault injection or name
> collision):
>
> err = device_register(&nubus_parent);
> if (err) {
> put_device(&nubus_parent);
> return err;
> }
>
In that situation the kernel error message would say the device "is broken
and must be fixed" when it was deliberately broken by fault injection.
I think the commit log should state that the aim of your patch is to avoid
that error message for that use-case.
Aside from that quibble, the patch looks fine to me.
Acked-by: Finn Thain <fthain@linux-m68k.org>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-04-28 7:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-24 10:40 [PATCH] nubus: switch to dynamic root device Johan Hovold
2026-04-25 4:07 ` Finn Thain
2026-04-27 15:30 ` Johan Hovold
2026-04-28 7:24 ` Finn Thain
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox