PM: Convert PM notifiers to out-of-line code
This patch (as1008b) converts the PM notifier routines from inline calls to out-of-line code. It also prevents pm_chain_head from being created when CONFIG_PM_SLEEP isn't enabled, and EXPORTs the notifier registration and unregistration routines. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
90dda1cb6a
commit
8252575693
|
@ -213,17 +213,8 @@ void save_processor_state(void);
|
||||||
void restore_processor_state(void);
|
void restore_processor_state(void);
|
||||||
|
|
||||||
/* kernel/power/main.c */
|
/* kernel/power/main.c */
|
||||||
extern struct blocking_notifier_head pm_chain_head;
|
extern int register_pm_notifier(struct notifier_block *nb);
|
||||||
|
extern int unregister_pm_notifier(struct notifier_block *nb);
|
||||||
static inline int register_pm_notifier(struct notifier_block *nb)
|
|
||||||
{
|
|
||||||
return blocking_notifier_chain_register(&pm_chain_head, nb);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int unregister_pm_notifier(struct notifier_block *nb)
|
|
||||||
{
|
|
||||||
return blocking_notifier_chain_unregister(&pm_chain_head, nb);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define pm_notifier(fn, pri) { \
|
#define pm_notifier(fn, pri) { \
|
||||||
static struct notifier_block fn##_nb = \
|
static struct notifier_block fn##_nb = \
|
||||||
|
|
|
@ -24,13 +24,37 @@
|
||||||
|
|
||||||
#include "power.h"
|
#include "power.h"
|
||||||
|
|
||||||
BLOCKING_NOTIFIER_HEAD(pm_chain_head);
|
|
||||||
|
|
||||||
DEFINE_MUTEX(pm_mutex);
|
DEFINE_MUTEX(pm_mutex);
|
||||||
|
|
||||||
unsigned int pm_flags;
|
unsigned int pm_flags;
|
||||||
EXPORT_SYMBOL(pm_flags);
|
EXPORT_SYMBOL(pm_flags);
|
||||||
|
|
||||||
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
|
||||||
|
/* Routines for PM-transition notifications */
|
||||||
|
|
||||||
|
static BLOCKING_NOTIFIER_HEAD(pm_chain_head);
|
||||||
|
|
||||||
|
int register_pm_notifier(struct notifier_block *nb)
|
||||||
|
{
|
||||||
|
return blocking_notifier_chain_register(&pm_chain_head, nb);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(register_pm_notifier);
|
||||||
|
|
||||||
|
int unregister_pm_notifier(struct notifier_block *nb)
|
||||||
|
{
|
||||||
|
return blocking_notifier_chain_unregister(&pm_chain_head, nb);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(unregister_pm_notifier);
|
||||||
|
|
||||||
|
int pm_notifier_call_chain(unsigned long val)
|
||||||
|
{
|
||||||
|
return (blocking_notifier_call_chain(&pm_chain_head, val, NULL)
|
||||||
|
== NOTIFY_BAD) ? -EINVAL : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_PM_SLEEP */
|
||||||
|
|
||||||
#ifdef CONFIG_PM_DEBUG
|
#ifdef CONFIG_PM_DEBUG
|
||||||
int pm_test_level = TEST_NONE;
|
int pm_test_level = TEST_NONE;
|
||||||
|
|
||||||
|
|
|
@ -172,14 +172,10 @@ static inline int suspend_devices_and_enter(suspend_state_t state)
|
||||||
}
|
}
|
||||||
#endif /* !CONFIG_SUSPEND */
|
#endif /* !CONFIG_SUSPEND */
|
||||||
|
|
||||||
/* kernel/power/common.c */
|
#ifdef CONFIG_PM_SLEEP
|
||||||
extern struct blocking_notifier_head pm_chain_head;
|
/* kernel/power/main.c */
|
||||||
|
extern int pm_notifier_call_chain(unsigned long val);
|
||||||
static inline int pm_notifier_call_chain(unsigned long val)
|
#endif
|
||||||
{
|
|
||||||
return (blocking_notifier_call_chain(&pm_chain_head, val, NULL)
|
|
||||||
== NOTIFY_BAD) ? -EINVAL : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
unsigned int count_highmem_pages(void);
|
unsigned int count_highmem_pages(void);
|
||||||
|
|
Loading…
Reference in New Issue