Re: Exit ACPI drivers immediately if acpi is disabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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;
 }
 

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux