From: Tang Liang <liang.tang@xxxxxxxxxx> 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 <liang.tang@xxxxxxxxxx> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> --- drivers/acpi/processor_driver.c | 35 +++++++++++++++++++++++++++++------ include/acpi/processor.h | 6 +++++- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/drivers/acpi/processor_driver.c b/drivers/acpi/processor_driver.c index 211c078..55f0b89 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, @@ -779,6 +784,22 @@ void acpi_processor_uninstall_hotplug_notify(void) unregister_hotcpu_notifier(&acpi_cpu_notifier); } +int acpi_processor_register_driver(void) +{ + int result = 0; + + 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 @@ -794,9 +815,11 @@ static int __init acpi_processor_init(void) memset(&errata, 0, sizeof(errata)); - result = acpi_bus_register_driver(&acpi_processor_driver); - if (result < 0) - return result; + if (__acpi_processor_register_driver) { + result = __acpi_processor_register_driver(); + if (result < 0) + return result; + } acpi_processor_install_hotplug_notify(); @@ -809,6 +832,7 @@ static int __init acpi_processor_init(void) return 0; } + static void __exit acpi_processor_exit(void) { if (acpi_disabled) @@ -820,9 +844,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 bd99fb6..969cbc9 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h @@ -225,6 +225,9 @@ struct acpi_processor_errata { } piix4; }; +extern int (*__acpi_processor_register_driver)(void); +extern void (*__acpi_processor_unregister_driver)(void); + extern int acpi_processor_preregister_performance(struct acpi_processor_performance __percpu *performance); @@ -242,7 +245,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); -- 1.7.7.3 -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html