Commit 82525756 authored by Alan Stern's avatar Alan Stern Committed by Len Brown

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: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 90dda1cb
...@@ -213,17 +213,8 @@ void save_processor_state(void); ...@@ -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 @@ ...@@ -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) ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment