ACPI: Use syscore_ops instead of sysdev class and sysdev
ACPI uses a sysdev class and a sysdev for executing irqrouter_resume() before turning on interrupts on the boot CPU. However, since irqrouter_resume() ignores its argument, the entire mechanism may be replaced with a struct syscore_ops object which is considerably simpler. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
4d3fbff26c
commit
c3146df2b7
@ -29,7 +29,7 @@
|
|||||||
* for IRQ management (e.g. start()->_SRS).
|
* for IRQ management (e.g. start()->_SRS).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/sysdev.h>
|
#include <linux/syscore_ops.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
@ -757,14 +757,13 @@ static int acpi_pci_link_resume(struct acpi_pci_link *link)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int irqrouter_resume(struct sys_device *dev)
|
static void irqrouter_resume(void)
|
||||||
{
|
{
|
||||||
struct acpi_pci_link *link;
|
struct acpi_pci_link *link;
|
||||||
|
|
||||||
list_for_each_entry(link, &acpi_link_list, list) {
|
list_for_each_entry(link, &acpi_link_list, list) {
|
||||||
acpi_pci_link_resume(link);
|
acpi_pci_link_resume(link);
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int acpi_pci_link_remove(struct acpi_device *device, int type)
|
static int acpi_pci_link_remove(struct acpi_device *device, int type)
|
||||||
@ -871,32 +870,19 @@ static int __init acpi_irq_balance_set(char *str)
|
|||||||
|
|
||||||
__setup("acpi_irq_balance", acpi_irq_balance_set);
|
__setup("acpi_irq_balance", acpi_irq_balance_set);
|
||||||
|
|
||||||
/* FIXME: we will remove this interface after all drivers call pci_disable_device */
|
static struct syscore_ops irqrouter_syscore_ops = {
|
||||||
static struct sysdev_class irqrouter_sysdev_class = {
|
|
||||||
.name = "irqrouter",
|
|
||||||
.resume = irqrouter_resume,
|
.resume = irqrouter_resume,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sys_device device_irqrouter = {
|
static int __init irqrouter_init_ops(void)
|
||||||
.id = 0,
|
|
||||||
.cls = &irqrouter_sysdev_class,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int __init irqrouter_init_sysfs(void)
|
|
||||||
{
|
{
|
||||||
int error;
|
if (!acpi_disabled && !acpi_noirq)
|
||||||
|
register_syscore_ops(&irqrouter_syscore_ops);
|
||||||
|
|
||||||
if (acpi_disabled || acpi_noirq)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error = sysdev_class_register(&irqrouter_sysdev_class);
|
|
||||||
if (!error)
|
|
||||||
error = sysdev_register(&device_irqrouter);
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
device_initcall(irqrouter_init_sysfs);
|
device_initcall(irqrouter_init_ops);
|
||||||
|
|
||||||
static int __init acpi_pci_link_init(void)
|
static int __init acpi_pci_link_init(void)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user