* [PATCH 00/14] drivers: use __maybe_unused to hide pm functions
@ 2016-03-02 15:58 Arnd Bergmann
2016-03-02 15:58 ` [PATCH 03/14] power: ipaq-micro-battery: " Arnd Bergmann
2016-03-02 15:58 ` [PATCH 04/14] power: pm2301-charger: " Arnd Bergmann
0 siblings, 2 replies; 5+ messages in thread
From: Arnd Bergmann @ 2016-03-02 15:58 UTC (permalink / raw)
Cc: linux-arm-kernel, Arnd Bergmann, herbert, k.kozlowski,
dan.j.williams, vinod.koul, baohua, dmitry.torokhov, tglx, jason,
marc.zyngier, laurent.pinchart, mchehab, lee.jones, kvalo,
ludovic.desroches, linus.walleij, sre, dbaryshkov, JBottomley,
martin.petersen, broonie, linux-crypto, linux-samsung-soc,
linux-kernel, dmaengine, linux-input, linux-media, netdev,
linux-wireless, linux-gpio, linux-pm, linux-scsi, alsa-devel
I found many variations of the bug in these device drivers (and some
USB drivers I already send patches for in a separate series).
In each case, the power management operations structure conditionally
references suspend/resume functions, but the functions are hidden
in an incorrect #ifdef or not hidden at all.
We could try to correct the #ifdefs, but it seems easier to just
mark those functions as __maybe_unused, which has the same effect
but provides better compile-time test coverage and (subjectively)
looks a bit nicer.
I have a patch series that avoids all warnings in ARM randconfig
builds, and I have verified that all these patches fix a warning that
is still present in today's linux-next, and that they do not
introduce new warnings in any configuration I found.
Note that all these drivers are ARM specific, so I assume that
all portable drivers got fixed already when someone rand into
the problem on x86.
There are no dependencies between the patches, so I'd appreciate
subsystem maintainers to put them directly into their git trees.
Arnd
Arnd Bergmann (14):
pinctrl: at91: use __maybe_unused to hide pm functions
irqchip: st: use __maybe_unused to hide st_irq_syscfg_resume
power: ipaq-micro-battery: use __maybe_unused to hide pm functions
power: pm2301-charger: use __maybe_unused to hide pm functions
mfd: ipaq-micro: use __maybe_unused to hide pm functions
dma: sirf: use __maybe_unused to hide pm functions
hw_random: exynos: use __maybe_unused to hide pm functions
scsi: mvumi: use __maybe_unused to hide pm functions
amd-xgbe: use __maybe_unused to hide pm functions
wireless: cw1200: use __maybe_unused to hide pm functions_
input: spear-keyboard: use __maybe_unused to hide pm functions
keyboard: snvs-pwrkey: use __maybe_unused to hide pm functions
[media] omap3isp: use IS_ENABLED() to hide pm functions
ASoC: rockchip: use __maybe_unused to hide st_irq_syscfg_resume
drivers/char/hw_random/exynos-rng.c | 10 ++++------
drivers/dma/sirf-dma.c | 10 ++++------
drivers/input/keyboard/snvs_pwrkey.c | 4 ++--
drivers/input/keyboard/spear-keyboard.c | 6 ++----
drivers/irqchip/irq-st.c | 2 +-
drivers/media/platform/omap3isp/isp.c | 13 +------------
drivers/mfd/ipaq-micro.c | 2 +-
drivers/net/ethernet/amd/xgbe/xgbe-main.c | 6 ++----
drivers/net/wireless/st/cw1200/cw1200_spi.c | 9 ++-------
drivers/net/wireless/st/cw1200/pm.h | 9 +++++++--
drivers/pinctrl/pinctrl-at91-pio4.c | 4 ++--
drivers/power/ipaq_micro_battery.c | 4 ++--
drivers/power/pm2301_charger.c | 22 ++++++----------------
drivers/scsi/mvumi.c | 4 ++--
sound/soc/rockchip/rockchip_spdif.c | 4 ++--
15 files changed, 40 insertions(+), 69 deletions(-)
--
2.7.0
Cc: herbert@gondor.apana.org.au
Cc: k.kozlowski@samsung.com
Cc: dan.j.williams@intel.com
Cc: vinod.koul@intel.com
Cc: baohua@kernel.org
Cc: dmitry.torokhov@gmail.com
Cc: tglx@linutronix.de
Cc: jason@lakedaemon.net
Cc: marc.zyngier@arm.com
Cc: laurent.pinchart@ideasonboard.com
Cc: mchehab@osg.samsung.com
Cc: lee.jones@linaro.org
Cc: kvalo@codeaurora.org
Cc: ludovic.desroches@atmel.com
Cc: linus.walleij@linaro.org
Cc: sre@kernel.org
Cc: dbaryshkov@gmail.com
Cc: JBottomley@odin.com
Cc: martin.petersen@oracle.com
Cc: broonie@kernel.org
Cc: linux-crypto@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-samsung-soc@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: dmaengine@vger.kernel.org
Cc: linux-input@vger.kernel.org
Cc: linux-media@vger.kernel.org
Cc: netdev@vger.kernel.org
Cc: linux-wireless@vger.kernel.org
Cc: linux-gpio@vger.kernel.org
Cc: linux-pm@vger.kernel.org
Cc: linux-scsi@vger.kernel.org
Cc: alsa-devel@alsa-project.org
Cc: linux-rockchip@lists.infradead.org
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 03/14] power: ipaq-micro-battery: use __maybe_unused to hide pm functions
2016-03-02 15:58 [PATCH 00/14] drivers: use __maybe_unused to hide pm functions Arnd Bergmann
@ 2016-03-02 15:58 ` Arnd Bergmann
2016-03-03 14:23 ` Sebastian Reichel
2016-03-02 15:58 ` [PATCH 04/14] power: pm2301-charger: " Arnd Bergmann
1 sibling, 1 reply; 5+ messages in thread
From: Arnd Bergmann @ 2016-03-02 15:58 UTC (permalink / raw)
To: Sebastian Reichel, Dmitry Eremin-Solenikov, David Woodhouse
Cc: linux-kernel, Arnd Bergmann, linux-arm-kernel, linux-pm
The ipaq micro battery driver has suspend/resume functions that
are accessed using SIMPLE_DEV_PM_OPS, which hide the reference
when CONFIG_PM_SLEEP is not set, resulting in a warning about
unused functions:
drivers/power/ipaq_micro_battery.c:284:12: error: 'micro_batt_suspend' defined but not used [-Werror=unused-function]
drivers/power/ipaq_micro_battery.c:292:12: error: 'micro_batt_resume' defined but not used [-Werror=unused-function]
This adds __maybe_unused annotations to let the compiler know
it can silently drop the function definition.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
drivers/power/ipaq_micro_battery.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/power/ipaq_micro_battery.c b/drivers/power/ipaq_micro_battery.c
index f03014ea1dc4..3f314b1a30d7 100644
--- a/drivers/power/ipaq_micro_battery.c
+++ b/drivers/power/ipaq_micro_battery.c
@@ -281,7 +281,7 @@ static int micro_batt_remove(struct platform_device *pdev)
return 0;
}
-static int micro_batt_suspend(struct device *dev)
+static int __maybe_unused micro_batt_suspend(struct device *dev)
{
struct micro_battery *mb = dev_get_drvdata(dev);
@@ -289,7 +289,7 @@ static int micro_batt_suspend(struct device *dev)
return 0;
}
-static int micro_batt_resume(struct device *dev)
+static int __maybe_unused micro_batt_resume(struct device *dev)
{
struct micro_battery *mb = dev_get_drvdata(dev);
--
2.7.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 04/14] power: pm2301-charger: use __maybe_unused to hide pm functions
2016-03-02 15:58 [PATCH 00/14] drivers: use __maybe_unused to hide pm functions Arnd Bergmann
2016-03-02 15:58 ` [PATCH 03/14] power: ipaq-micro-battery: " Arnd Bergmann
@ 2016-03-02 15:58 ` Arnd Bergmann
2016-03-03 14:23 ` Sebastian Reichel
1 sibling, 1 reply; 5+ messages in thread
From: Arnd Bergmann @ 2016-03-02 15:58 UTC (permalink / raw)
To: Sebastian Reichel, Dmitry Eremin-Solenikov, David Woodhouse
Cc: linux-kernel, Arnd Bergmann, linux-arm-kernel, linux-pm
The pm2301 charger driver uses nested #ifdefs to check for both
CONFIG_PM and CONFIG_PM_SLEEP in an attempt to hide its
suspend and runtime-pm operations when they are unused, but
it does not hide the clear_lpn_pin() function in the same
way, so we get a build warning when everything is
disabled:
drivers/power/pm2301_charger.c:123:13: error: 'clear_lpn_pin' defined but not used [-Werror=unused-function]
This removes all the #ifdef and instead uses __maybe_unused
annotations to let the compiler know it can silently drop
the function definition.
For the PM2XXX_PM_OPS, we can use an IS_ENABLED() check
to avoid defining the structure when CONFIG_PM is not set without
the #ifdef.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
drivers/power/pm2301_charger.c | 22 ++++++----------------
1 file changed, 6 insertions(+), 16 deletions(-)
diff --git a/drivers/power/pm2301_charger.c b/drivers/power/pm2301_charger.c
index 8f9bd1d0eeb6..fb62ed3fc38c 100644
--- a/drivers/power/pm2301_charger.c
+++ b/drivers/power/pm2301_charger.c
@@ -911,11 +911,7 @@ static struct pm2xxx_irq pm2xxx_charger_irq[] = {
{"PM2XXX_IRQ_INT", pm2xxx_irq_int},
};
-#ifdef CONFIG_PM
-
-#ifdef CONFIG_PM_SLEEP
-
-static int pm2xxx_wall_charger_resume(struct device *dev)
+static int __maybe_unused pm2xxx_wall_charger_resume(struct device *dev)
{
struct i2c_client *i2c_client = to_i2c_client(dev);
struct pm2xxx_charger *pm2;
@@ -931,7 +927,7 @@ static int pm2xxx_wall_charger_resume(struct device *dev)
return 0;
}
-static int pm2xxx_wall_charger_suspend(struct device *dev)
+static int __maybe_unused pm2xxx_wall_charger_suspend(struct device *dev)
{
struct i2c_client *i2c_client = to_i2c_client(dev);
struct pm2xxx_charger *pm2;
@@ -949,9 +945,7 @@ static int pm2xxx_wall_charger_suspend(struct device *dev)
return 0;
}
-#endif
-
-static int pm2xxx_runtime_suspend(struct device *dev)
+static int __maybe_unused pm2xxx_runtime_suspend(struct device *dev)
{
struct i2c_client *pm2xxx_i2c_client = to_i2c_client(dev);
struct pm2xxx_charger *pm2;
@@ -962,7 +956,7 @@ static int pm2xxx_runtime_suspend(struct device *dev)
return 0;
}
-static int pm2xxx_runtime_resume(struct device *dev)
+static int __maybe_unused pm2xxx_runtime_resume(struct device *dev)
{
struct i2c_client *pm2xxx_i2c_client = to_i2c_client(dev);
struct pm2xxx_charger *pm2;
@@ -975,15 +969,11 @@ static int pm2xxx_runtime_resume(struct device *dev)
return 0;
}
-static const struct dev_pm_ops pm2xxx_pm_ops = {
+static const struct dev_pm_ops pm2xxx_pm_ops __maybe_unused = {
SET_SYSTEM_SLEEP_PM_OPS(pm2xxx_wall_charger_suspend,
pm2xxx_wall_charger_resume)
SET_RUNTIME_PM_OPS(pm2xxx_runtime_suspend, pm2xxx_runtime_resume, NULL)
};
-#define PM2XXX_PM_OPS (&pm2xxx_pm_ops)
-#else
-#define PM2XXX_PM_OPS NULL
-#endif
static int pm2xxx_wall_charger_probe(struct i2c_client *i2c_client,
const struct i2c_device_id *id)
@@ -1244,7 +1234,7 @@ static struct i2c_driver pm2xxx_charger_driver = {
.remove = pm2xxx_wall_charger_remove,
.driver = {
.name = "pm2xxx-wall_charger",
- .pm = PM2XXX_PM_OPS,
+ .pm = IS_ENABLED(CONFIG_PM) ? &pm2xxx_pm_ops : NULL,
},
.id_table = pm2xxx_id,
};
--
2.7.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 03/14] power: ipaq-micro-battery: use __maybe_unused to hide pm functions
2016-03-02 15:58 ` [PATCH 03/14] power: ipaq-micro-battery: " Arnd Bergmann
@ 2016-03-03 14:23 ` Sebastian Reichel
0 siblings, 0 replies; 5+ messages in thread
From: Sebastian Reichel @ 2016-03-03 14:23 UTC (permalink / raw)
To: Arnd Bergmann
Cc: Dmitry Eremin-Solenikov, David Woodhouse, linux-arm-kernel,
linux-pm, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 688 bytes --]
Hi,
On Wed, Mar 02, 2016 at 04:58:55PM +0100, Arnd Bergmann wrote:
> The ipaq micro battery driver has suspend/resume functions that
> are accessed using SIMPLE_DEV_PM_OPS, which hide the reference
> when CONFIG_PM_SLEEP is not set, resulting in a warning about
> unused functions:
>
> drivers/power/ipaq_micro_battery.c:284:12: error: 'micro_batt_suspend' defined but not used [-Werror=unused-function]
> drivers/power/ipaq_micro_battery.c:292:12: error: 'micro_batt_resume' defined but not used [-Werror=unused-function]
>
> This adds __maybe_unused annotations to let the compiler know
> it can silently drop the function definition.
Thanks, queued.
-- Sebastian
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 04/14] power: pm2301-charger: use __maybe_unused to hide pm functions
2016-03-02 15:58 ` [PATCH 04/14] power: pm2301-charger: " Arnd Bergmann
@ 2016-03-03 14:23 ` Sebastian Reichel
0 siblings, 0 replies; 5+ messages in thread
From: Sebastian Reichel @ 2016-03-03 14:23 UTC (permalink / raw)
To: Arnd Bergmann
Cc: Dmitry Eremin-Solenikov, David Woodhouse, linux-arm-kernel,
linux-pm, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 841 bytes --]
Hi,
On Wed, Mar 02, 2016 at 04:58:56PM +0100, Arnd Bergmann wrote:
> The pm2301 charger driver uses nested #ifdefs to check for both
> CONFIG_PM and CONFIG_PM_SLEEP in an attempt to hide its
> suspend and runtime-pm operations when they are unused, but
> it does not hide the clear_lpn_pin() function in the same
> way, so we get a build warning when everything is
> disabled:
>
> drivers/power/pm2301_charger.c:123:13: error: 'clear_lpn_pin' defined but not used [-Werror=unused-function]
>
> This removes all the #ifdef and instead uses __maybe_unused
> annotations to let the compiler know it can silently drop
> the function definition.
>
> For the PM2XXX_PM_OPS, we can use an IS_ENABLED() check
> to avoid defining the structure when CONFIG_PM is not set without
> the #ifdef.
Thanks, queued.
-- Sebastian
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-03-03 14:23 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-02 15:58 [PATCH 00/14] drivers: use __maybe_unused to hide pm functions Arnd Bergmann
2016-03-02 15:58 ` [PATCH 03/14] power: ipaq-micro-battery: " Arnd Bergmann
2016-03-03 14:23 ` Sebastian Reichel
2016-03-02 15:58 ` [PATCH 04/14] power: pm2301-charger: " Arnd Bergmann
2016-03-03 14:23 ` Sebastian Reichel
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).