On Sat, 5 May 2018, Greg Kroah-Hartman wrote:
On Sun, May 06, 2018 at 11:47:52AM +1000, Finn Thain wrote:
Loading a NuBus driver module on a non-NuBus machine triggers the
BUG_ON(!drv->bus->p) in driver_register() because the bus does not get
registered unless MACH_IS_MAC(). Avoid this by registering the bus
unconditionally using postcore_initcall().
Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
Reported-by: Michael Schmitz <schmitzmic@xxxxxxxxx>
Tested-by: Stan Johnson <userm57@xxxxxxxxx>
Fixes: 7f86c765a6a2 ("nubus: Add support for the driver model")
Signed-off-by: Finn Thain <fthain@xxxxxxxxxxxxxxxxxxx>
---
drivers/nubus/bus.c | 3 ++-
drivers/nubus/nubus.c | 5 -----
include/linux/nubus.h | 1 -
3 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/nubus/bus.c b/drivers/nubus/bus.c
index d306c348c857..27ca9f1a281b 100644
--- a/drivers/nubus/bus.c
+++ b/drivers/nubus/bus.c
@@ -63,7 +63,7 @@ static struct device nubus_parent = {
.init_name = "nubus",
};
-int __init nubus_bus_register(void)
+static int __init nubus_bus_register(void)
{
int err;
@@ -78,6 +78,7 @@ int __init nubus_bus_register(void)
device_unregister(&nubus_parent);
return err;
}
+postcore_initcall(nubus_bus_register);
Why not just have an "bus is registered" flag in your driver register
function that refuses to let drivers register with the driver core if it
isn't set?
Perhaps that should happen in the core driver_register() function. BUG_ON
is frowned upon, after all. Would that be acceptable?
I found a few drivers that set a flag the way you describe, which could
then be simplified.
But that pattern is rare. Most buses use the postcore_initcall() pattern,
and so my patch took the conventional approach.
And then fix your linking error, the bus should come first in link
order, before your drivers :)
I didn't encounter any errors. How shall I reproduce this?
Thanks.
--
thanks,
greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html