public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Jingoo Han <jg1.han@samsung.com>
Cc: "'Andrew Morton'" <akpm@linux-foundation.org>,
	"'Shuah Khan'" <shuah.kh@samsung.com>,
	linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	shuahkhan@gmail.com, rpurdie@rpsys.net, FlorianSchandinat@gmx.de,
	plagnioj@jcrosoft.com, tomi.valkeinen@ti.com,
	rafael.j.wysocki@intel.com
Subject: Re: [PATCH] backlight: add CONFIG_PM_SLEEP to suspend/resume functions
Date: Fri, 07 Jun 2013 12:02:31 +0200	[thread overview]
Message-ID: <1944274.r5ID26zhWd@wuerfel> (raw)
In-Reply-To: <000201ce631f$d4ad0d50$7e0727f0$@samsung.com>

On Friday 07 June 2013 10:39:20 Jingoo Han wrote:
> Add CONFIG_PM_SLEEP to suspend/resume functions to fix the following
> build warning when CONFIG_PM_SLEEP is not selected. This is because
> sleep PM callbacks defined by SIMPLE_DEV_PM_OPS are only used when
> the CONFIG_PM_SLEEP is enabled.
> 
> drivers/video/backlight/backlight.c:211:12: warning: 'backlight_suspend' defined but not used [-Wunused-function]
> drivers/video/backlight/backlight.c:225:12: warning: 'backlight_resume' defined but not used [-Wunused-function]
> 
> Signed-off-by: Jingoo Han <jg1.han@samsung.com>
> ---
>  drivers/video/backlight/backlight.c |    2 ++
>  1 file changed, 2 insertions(+)

Your patch looks ok, but I find it extremely annoying to have new warnings
like this one come up every single day in linux-next. It really shouldn't
be this hard to use a macro called SIMPLE_DEV_PM_OPS() correctly.

Below is an implementation of SIMPLE_DEV_PM_OPS and UNIVERSAL_DEV_PM_OPS
that avoids this issue by introducing an unused reference to the suspend
and resume functions. gcc is smart enough to leave out that unused code
by itself, and it would actually improve compile-time coverage to have
something like this, besides being harder to misuse.

This would be a better approach if we didn't already have all the "#ifdef
CONFIG_PM_SLEEP" in place that hide the functions now. Unfortunately we
already have over 300 uses of SIMPLE_DEV_PM_OPS/UNIVERSAL_DEV_PM_OPS
in the kernel today, so removing all the #ifdef atomically without
creating more build errors is rather hard to do.

Maybe someone has an idea how to extend my approach so it works with
and without the #ifdef, to let us transition to a situation that no
longer needs them.

	Arnd

diff --git a/include/linux/pm.h b/include/linux/pm.h
index a224c7f..5a801bd 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -320,6 +320,9 @@ struct dev_pm_ops {
 #define SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn)
 #endif
 
+#define UNUSED_DEV_PM_OPS(name, func...) \
+static const int (*__unused_ ## name[])(struct device*) __maybe_unused = { func };
+
 /*
  * Use this if you want to use the same suspend and resume callbacks for suspend
  * to RAM and hibernation.
@@ -327,7 +332,8 @@ struct dev_pm_ops {
 #define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
 const struct dev_pm_ops name = { \
 	SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
-}
+}; \
+UNUSED_DEV_PM_OPS(name, suspend_fn, resume_fn)
 
 /*
  * Use this for defining a set of PM operations to be used in all situations
@@ -346,7 +352,8 @@ const struct dev_pm_ops name = { \
 const struct dev_pm_ops name = { \
 	SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
 	SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
-}
+}; \
+UNUSED_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn)
 
 /**
  * PM_EVENT_ messages


  reply	other threads:[~2013-06-07 10:02 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-07  1:39 [PATCH] backlight: add CONFIG_PM_SLEEP to suspend/resume functions Jingoo Han
2013-06-07 10:02 ` Arnd Bergmann [this message]
2013-06-10 23:31   ` Andrew Morton
2013-06-12 12:08     ` Jean-Christophe PLAGNIOL-VILLARD
2013-06-07 10:22 ` Arnd Bergmann
2013-06-10 15:34   ` Shuah Khan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1944274.r5ID26zhWd@wuerfel \
    --to=arnd@arndb.de \
    --cc=FlorianSchandinat@gmx.de \
    --cc=akpm@linux-foundation.org \
    --cc=jg1.han@samsung.com \
    --cc=linux-fbdev@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=plagnioj@jcrosoft.com \
    --cc=rafael.j.wysocki@intel.com \
    --cc=rpurdie@rpsys.net \
    --cc=shuah.kh@samsung.com \
    --cc=shuahkhan@gmail.com \
    --cc=tomi.valkeinen@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox