LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH RFC] introduce pm_call() macro to get rid of most #ifdef CONFIG_PM
@ 2008-03-02 23:43 Anton Vorontsov
  2008-03-03  0:08 ` Arjan van de Ven
  2008-03-03 14:18 ` Pavel Machek
  0 siblings, 2 replies; 8+ messages in thread
From: Anton Vorontsov @ 2008-03-02 23:43 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-pm

Currently drivers handle CONFIG_PM this way:

#ifdef CONFIG_PM
drv_suspend() {}
drv_resume() {}
#else
#define drv_suspend NULL
#define drv_resume NULL
#endif

struct driver drv = {
	.suspend = drv_suspend,
	.resume = drv_resume,
};

With this patch, the code above converts into:

drv_suspend() {}
drv_resume() {}

struct driver drv = {
	.suspend = pm_call(drv_suspend),
	.resume = pm_call(drv_resume),
};

GCC will optimize away suspend/resume calls if they're really
not used.

Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
---
 include/linux/pm.h |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/include/linux/pm.h b/include/linux/pm.h
index 015b735..6e0b9c2 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -114,6 +114,13 @@ typedef struct pm_message {
 	int event;
 } pm_message_t;
 
+#ifdef CONFIG_PM
+#define pm_call(x) (x)
+#else
+/* avoid `defined but not used' warning */
+#define pm_call(x) ((x) - 1 ? NULL : NULL)
+#endif /* CONFIG_PM */
+
 /*
  * Several driver power state transitions are externally visible, affecting
  * the state of pending I/O queues and (for drivers that touch hardware)
-- 
1.5.4.3

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2008-03-03 23:48 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-03-02 23:43 [PATCH RFC] introduce pm_call() macro to get rid of most #ifdef CONFIG_PM Anton Vorontsov
2008-03-03  0:08 ` Arjan van de Ven
2008-03-03  0:29   ` Rafael J. Wysocki
2008-03-03 23:26   ` Anton Vorontsov
2008-03-03 14:18 ` Pavel Machek
2008-03-03 22:42   ` Anton Vorontsov
2008-03-03 22:56   ` [linux-pm] " David Brownell
2008-03-03 23:16     ` Pavel Machek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).