PM: Drop pm_flags that is not necessary
The variable pm_flags is used to prevent APM from being enabled along with ACPI, which would lead to problems. However, acpi_init() is always called before apm_init() and after acpi_init() has returned, it is known whether or not ACPI will be used. Namely, if acpi_disabled is not set after acpi_init() has returned, this means that ACPI is enabled. Thus, it is sufficient to check acpi_disabled in apm_init() to prevent APM from being enabled in parallel with ACPI. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Acked-by: Len Brown <len.brown@intel.com>
This commit is contained in:
Родитель
e866500247
Коммит
6831c6edc7
|
@ -227,6 +227,7 @@
|
|||
#include <linux/suspend.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/acpi.h>
|
||||
|
||||
#include <asm/system.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
@ -2331,12 +2332,11 @@ static int __init apm_init(void)
|
|||
apm_info.disabled = 1;
|
||||
return -ENODEV;
|
||||
}
|
||||
if (pm_flags & PM_ACPI) {
|
||||
if (!acpi_disabled) {
|
||||
printk(KERN_NOTICE "apm: overridden by ACPI.\n");
|
||||
apm_info.disabled = 1;
|
||||
return -ENODEV;
|
||||
}
|
||||
pm_flags |= PM_APM;
|
||||
|
||||
/*
|
||||
* Set up the long jump entry point to the APM BIOS, which is called
|
||||
|
@ -2428,7 +2428,6 @@ static void __exit apm_exit(void)
|
|||
kthread_stop(kapmd_task);
|
||||
kapmd_task = NULL;
|
||||
}
|
||||
pm_flags &= ~PM_APM;
|
||||
}
|
||||
|
||||
module_init(apm_init);
|
||||
|
|
|
@ -1007,8 +1007,7 @@ struct kobject *acpi_kobj;
|
|||
|
||||
static int __init acpi_init(void)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
int result;
|
||||
|
||||
if (acpi_disabled) {
|
||||
printk(KERN_INFO PREFIX "Interpreter disabled.\n");
|
||||
|
@ -1023,29 +1022,18 @@ static int __init acpi_init(void)
|
|||
|
||||
init_acpi_device_notify();
|
||||
result = acpi_bus_init();
|
||||
|
||||
if (!result) {
|
||||
pci_mmcfg_late_init();
|
||||
if (pm_apm_enabled()) {
|
||||
printk(KERN_INFO PREFIX
|
||||
"APM is already active, exiting\n");
|
||||
disable_acpi();
|
||||
result = -ENODEV;
|
||||
} else {
|
||||
pm_set_acpi_flag();
|
||||
}
|
||||
} else
|
||||
if (result) {
|
||||
disable_acpi();
|
||||
|
||||
if (acpi_disabled)
|
||||
return result;
|
||||
}
|
||||
|
||||
pci_mmcfg_late_init();
|
||||
acpi_scan_init();
|
||||
acpi_ec_init();
|
||||
acpi_debugfs_init();
|
||||
acpi_sleep_proc_init();
|
||||
acpi_wakeup_device_init();
|
||||
return result;
|
||||
return 0;
|
||||
}
|
||||
|
||||
subsys_initcall(acpi_init);
|
||||
|
|
|
@ -565,15 +565,6 @@ enum dpm_order {
|
|||
DPM_ORDER_DEV_LAST,
|
||||
};
|
||||
|
||||
/*
|
||||
* Global Power Management flags
|
||||
* Used to keep APM and ACPI from both being active
|
||||
*/
|
||||
extern unsigned int pm_flags;
|
||||
|
||||
#define PM_APM 1
|
||||
#define PM_ACPI 2
|
||||
|
||||
extern int pm_generic_suspend(struct device *dev);
|
||||
extern int pm_generic_resume(struct device *dev);
|
||||
extern int pm_generic_freeze(struct device *dev);
|
||||
|
|
|
@ -272,9 +272,6 @@ extern int unregister_pm_notifier(struct notifier_block *nb);
|
|||
register_pm_notifier(&fn##_nb); \
|
||||
}
|
||||
|
||||
extern bool pm_apm_enabled(void);
|
||||
extern void pm_set_acpi_flag(void);
|
||||
|
||||
/* drivers/base/power/wakeup.c */
|
||||
extern bool events_check_enabled;
|
||||
|
||||
|
@ -295,9 +292,6 @@ static inline int unregister_pm_notifier(struct notifier_block *nb)
|
|||
|
||||
#define pm_notifier(fn, pri) do { (void)(fn); } while (0)
|
||||
|
||||
static inline bool pm_apm_enabled(void) { return false; }
|
||||
static inline void pm_set_acpi_flag(void) {}
|
||||
|
||||
static inline bool pm_wakeup_pending(void) { return false; }
|
||||
#endif /* !CONFIG_PM_SLEEP */
|
||||
|
||||
|
|
|
@ -19,19 +19,6 @@ DEFINE_MUTEX(pm_mutex);
|
|||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
|
||||
unsigned int pm_flags;
|
||||
EXPORT_SYMBOL(pm_flags);
|
||||
|
||||
bool pm_apm_enabled(void)
|
||||
{
|
||||
return !!(pm_flags & PM_APM);
|
||||
}
|
||||
|
||||
void pm_set_acpi_flag(void)
|
||||
{
|
||||
pm_flags |= PM_ACPI;
|
||||
}
|
||||
|
||||
/* Routines for PM-transition notifications */
|
||||
|
||||
static BLOCKING_NOTIFIER_HEAD(pm_chain_head);
|
||||
|
|
Загрузка…
Ссылка в новой задаче