With CONFIG_MCA=y and no MCA bus present, drivers go oops deep in the kobject code when calling mca_register_driver(). Because there is no MCA subsystem registered against the driver. Plug this in mca_register_driver(). drivers/mca/mca-driver.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) diff -puN drivers/mca/mca-driver.c~no-mca-oops-fix drivers/mca/mca-driver.c --- 25/drivers/mca/mca-driver.c~no-mca-oops-fix 2003-10-18 18:18:32.000000000 -0700 +++ 25-akpm/drivers/mca/mca-driver.c 2003-10-18 18:19:11.000000000 -0700 @@ -32,9 +32,11 @@ int mca_register_driver(struct mca_drive { int r; - mca_drv->driver.bus = &mca_bus_type; - if ((r = driver_register(&mca_drv->driver)) < 0) - return r; + if (MCA_bus) { + mca_drv->driver.bus = &mca_bus_type; + if ((r = driver_register(&mca_drv->driver)) < 0) + return r; + } return 0; } @@ -42,6 +44,7 @@ EXPORT_SYMBOL(mca_register_driver); void mca_unregister_driver(struct mca_driver *mca_drv) { - driver_unregister(&mca_drv->driver); + if (MCA_bus) + driver_unregister(&mca_drv->driver); } EXPORT_SYMBOL(mca_unregister_driver); _