From: Tang Liang Date: Wed, 19 Oct 2011 09:01:20 +0000 (+0800) Subject: ACPI: processor: add __acpi_processor_[un]register_driver helpers. X-Git-Tag: v2.6.39-400.9.0~830^2~1^2~4 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=831072e2c6335be1e35c10e01098f6cadb3a20c7;p=users%2Fjedix%2Flinux-maple.git ACPI: processor: add __acpi_processor_[un]register_driver helpers. This patch implement __acpi_processor_[un]register_driver helper, so we can registry override processor driver function. Specifically the Xen processor driver. By default the values are set to the native one. Signed-off-by: Tang Liang Signed-off-by: Konrad Rzeszutek Wilk --- diff --git a/drivers/acpi/processor_driver.c b/drivers/acpi/processor_driver.c index bd6288ba1554..f76b00e303b9 100644 --- a/drivers/acpi/processor_driver.c +++ b/drivers/acpi/processor_driver.c @@ -90,6 +90,11 @@ static const struct acpi_device_id processor_device_ids[] = { }; MODULE_DEVICE_TABLE(acpi, processor_device_ids); +int (*__acpi_processor_register_driver)(void) = acpi_processor_register_driver; +void (*__acpi_processor_unregister_driver)(void) \ + = acpi_processor_unregister_driver; + + static struct acpi_driver acpi_processor_driver = { .name = "processor", .class = ACPI_PROCESSOR_CLASS, @@ -780,6 +785,29 @@ void acpi_processor_uninstall_hotplug_notify(void) unregister_hotcpu_notifier(&acpi_cpu_notifier); } +int acpi_processor_register_driver(void) +{ + int result = 0; + if (!cpuidle_register_driver(&acpi_idle_driver)) { + printk(KERN_DEBUG "ACPI: %s registered with cpuidle\n", + acpi_idle_driver.name); + } else { + printk(KERN_DEBUG "ACPI: acpi_idle yielding to %s\n", + cpuidle_get_driver()->name); + } + + result = acpi_bus_register_driver(&acpi_processor_driver); + return result; +} + +void acpi_processor_unregister_driver(void) +{ + acpi_bus_unregister_driver(&acpi_processor_driver); + + cpuidle_unregister_driver(&acpi_idle_driver); + + return; +} /* * We keep the driver loaded even when ACPI is not running. * This is needed for the powernow-k8 driver, that works even without @@ -795,18 +823,12 @@ static int __init acpi_processor_init(void) memset(&errata, 0, sizeof(errata)); - if (!cpuidle_register_driver(&acpi_idle_driver)) { - printk(KERN_DEBUG "ACPI: %s registered with cpuidle\n", - acpi_idle_driver.name); - } else { - printk(KERN_DEBUG "ACPI: acpi_idle yielding to %s\n", - cpuidle_get_driver()->name); + if (__acpi_processor_register_driver) { + result = __acpi_processor_register_driver(); + if (result < 0) + goto out_cpuidle; } - result = acpi_bus_register_driver(&acpi_processor_driver); - if (result < 0) - goto out_cpuidle; - acpi_processor_install_hotplug_notify(); acpi_thermal_cpufreq_init(); @@ -823,6 +845,7 @@ out_cpuidle: return result; } + static void __exit acpi_processor_exit(void) { if (acpi_disabled) @@ -834,9 +857,8 @@ static void __exit acpi_processor_exit(void) acpi_processor_uninstall_hotplug_notify(); - acpi_bus_unregister_driver(&acpi_processor_driver); - - cpuidle_unregister_driver(&acpi_idle_driver); + if (__acpi_processor_unregister_driver) + __acpi_processor_unregister_driver(); return; } diff --git a/include/acpi/processor.h b/include/acpi/processor.h index 94b10a14aafb..b84bc2bcfa3e 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h @@ -242,7 +242,8 @@ int acpi_processor_notify_smm(struct module *calling_module); void acpi_processor_install_hotplug_notify(void); void acpi_processor_uninstall_hotplug_notify(void); - +int acpi_processor_register_driver(void); +void acpi_processor_unregister_driver(void); int acpi_processor_add(struct acpi_device *device); int acpi_processor_remove(struct acpi_device *device, int type); void acpi_processor_notify(struct acpi_device *device, u32 event);