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:
Alan Stern 2007-11-19 23:49:18 +01:00 committed by Len Brown
parent 90dda1cb6a
commit 8252575693
3 changed files with 32 additions and 21 deletions

View File

@ -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 = \

View File

@ -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;

View File

@ -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);