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 <[email protected]> > Reported-by: Michael Schmitz <[email protected]> > Tested-by: Stan Johnson <[email protected]> > Fixes: 7f86c765a6a2 ("nubus: Add support for the driver model") > Signed-off-by: Finn Thain <[email protected]> > --- > 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? And then fix your linking error, the bus should come first in link order, before your drivers :) thanks, greg k-h

