On Friday 21 April 2006 18:53, Thomas Renninger wrote: > On Friday 21 April 2006 17:18, Bjorn Helgaas wrote: > > On Friday 21 April 2006 04:43, Thomas Renninger wrote: > > > If booting with acpi=off and loading the processor module, it > > > may happen that the kernel oopses when trying to unload the module again. > > > Better exit all ACPI modules immediately if booted with acpi=off. > > > ... > > > @@ -289,31 +289,28 @@ static int __init acpi_ac_init(void) > > > { > > > int result = 0; > > > > > > - ACPI_FUNCTION_TRACE("acpi_ac_init"); > > > + if (acpi_disabled) > > > + return -ENODEV; > > > > This doesn't feel like the right solution to me. > > acpi_bus_register_driver() already returns -ENODEV > > if acpi_disabled, and that ought to be enough so the > > drivers can handle this correctly. > > > > I don't think we should clutter every ACPI driver with > > the same check for acpi_disabled. > Yes, you are right. > > > > Did you investigate the oops when unloading the processor module? > It's in unregister_driver. > > I wonder if that driver has a bug there. It has a mysterious > > comment that "we keep the driver loaded even when ACPI is not > > running" for powernow-k8. Arggh, I didn't see this. Next try: Subject: Exit ACPI processor module gracefully if acpi is disabled Signed-off-by: Thomas Renninger <trenn@xxxxxxx> drivers/acpi/processor_core.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletion(-) Index: linux-2.6.16/drivers/acpi/processor_core.c =================================================================== --- linux-2.6.16.orig/drivers/acpi/processor_core.c +++ linux-2.6.16/drivers/acpi/processor_core.c @@ -906,6 +906,8 @@ void acpi_processor_uninstall_hotplug_no * ACPI, but needs symbols from this driver */ +static int driver_registered = 0; + static int __init acpi_processor_init(void) { int result = 0; @@ -926,6 +928,8 @@ static int __init acpi_processor_init(vo return_VALUE(0); } + driver_registered = 1; + acpi_processor_install_hotplug_notify(); acpi_thermal_cpufreq_init(); @@ -943,12 +947,13 @@ static void __exit acpi_processor_exit(v acpi_thermal_cpufreq_exit(); + if (driver_registered){ acpi_processor_uninstall_hotplug_notify(); acpi_bus_unregister_driver(&acpi_processor_driver); remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir); - + } return_VOID; }
Subject: Exit ACPI processor module gracefully if acpi is disabled Signed-off-by: Thomas Renninger <trenn@xxxxxxx> drivers/acpi/processor_core.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletion(-) Index: linux-2.6.16/drivers/acpi/processor_core.c =================================================================== --- linux-2.6.16.orig/drivers/acpi/processor_core.c +++ linux-2.6.16/drivers/acpi/processor_core.c @@ -906,6 +906,8 @@ void acpi_processor_uninstall_hotplug_no * ACPI, but needs symbols from this driver */ +static int driver_registered = 0; + static int __init acpi_processor_init(void) { int result = 0; @@ -926,6 +928,8 @@ static int __init acpi_processor_init(vo return_VALUE(0); } + driver_registered = 1; + acpi_processor_install_hotplug_notify(); acpi_thermal_cpufreq_init(); @@ -943,12 +947,13 @@ static void __exit acpi_processor_exit(v acpi_thermal_cpufreq_exit(); + if (driver_registered){ acpi_processor_uninstall_hotplug_notify(); acpi_bus_unregister_driver(&acpi_processor_driver); remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir); - + } return_VOID; }