Linux Input/HID development
 help / color / mirror / Atom feed
* [PATCH] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
@ 2026-08-21  2:42 Triet Hoang
  2026-08-21  2:50 ` sashiko-bot
  0 siblings, 1 reply; 4+ messages in thread
From: Triet Hoang @ 2026-08-21  2:42 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: linux-input, linux-kernel, Triet Hoang

Convert deprecated SIMPLE_DEV_PM_OPS
to DEFINE_SIMPLE_DEV_PM_OPS and pm_sleep_ptr().

This lets us drop the __maybe_unused annotations
from the resume callbacks and reduces kernel size
when CONFIG_PM or CONFIG_PM_SLEEP is disabled.

Signed-off-by: Triet Hoang <triet.hoang.dev@gmail.com>
---
 drivers/input/misc/88pm80x_onkey.c    | 4 ++--
 drivers/input/misc/nxp-bbnsm-pwrkey.c | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/input/misc/88pm80x_onkey.c b/drivers/input/misc/88pm80x_onkey.c
index fee28e537898..d4f344e2bf5c 100644
--- a/drivers/input/misc/88pm80x_onkey.c
+++ b/drivers/input/misc/88pm80x_onkey.c
@@ -47,7 +47,7 @@ static irqreturn_t pm80x_onkey_handler(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
+static DEFINE_SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
 			 pm80x_dev_resume);
 
 static int pm80x_onkey_probe(struct platform_device *pdev)
@@ -138,7 +138,7 @@ static void pm80x_onkey_remove(struct platform_device *pdev)
 static struct platform_driver pm80x_onkey_driver = {
 	.driver = {
 		   .name = "88pm80x-onkey",
-		   .pm = &pm80x_onkey_pm_ops,
+		   .pm = pm_sleep_ptr(&pm80x_onkey_pm_ops),
 		   },
 	.probe = pm80x_onkey_probe,
 	.remove = pm80x_onkey_remove,
diff --git a/drivers/input/misc/nxp-bbnsm-pwrkey.c b/drivers/input/misc/nxp-bbnsm-pwrkey.c
index 0c7b8f8ef4a5..6af6e0f6395f 100644
--- a/drivers/input/misc/nxp-bbnsm-pwrkey.c
+++ b/drivers/input/misc/nxp-bbnsm-pwrkey.c
@@ -193,7 +193,7 @@ static void bbnsm_pwrkey_remove(struct platform_device *pdev)
 	device_init_wakeup(&pdev->dev, false);
 }
 
-static int __maybe_unused bbnsm_pwrkey_suspend(struct device *dev)
+static int bbnsm_pwrkey_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
@@ -203,7 +203,7 @@ static int __maybe_unused bbnsm_pwrkey_suspend(struct device *dev)
 	return 0;
 }
 
-static int __maybe_unused bbnsm_pwrkey_resume(struct device *dev)
+static int bbnsm_pwrkey_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
@@ -213,7 +213,7 @@ static int __maybe_unused bbnsm_pwrkey_resume(struct device *dev)
 	return 0;
 }
 
-static SIMPLE_DEV_PM_OPS(bbnsm_pwrkey_pm_ops, bbnsm_pwrkey_suspend,
+static DEFINE_SIMPLE_DEV_PM_OPS(bbnsm_pwrkey_pm_ops, bbnsm_pwrkey_suspend,
 		bbnsm_pwrkey_resume);
 
 static const struct of_device_id bbnsm_pwrkey_ids[] = {
@@ -225,7 +225,7 @@ MODULE_DEVICE_TABLE(of, bbnsm_pwrkey_ids);
 static struct platform_driver bbnsm_pwrkey_driver = {
 	.driver = {
 		.name = "bbnsm_pwrkey",
-		.pm = &bbnsm_pwrkey_pm_ops,
+		.pm = pm_sleep_ptr(&bbnsm_pwrkey_pm_ops),
 		.of_match_table = bbnsm_pwrkey_ids,
 	},
 	.probe = bbnsm_pwrkey_probe,
-- 
2.53.0


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

* Re: [PATCH] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
  2026-08-21  2:42 [PATCH] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS() Triet Hoang
@ 2026-08-21  2:50 ` sashiko-bot
  2026-08-21  4:15   ` [PATCH v2] " Triet Hoang
  0 siblings, 1 reply; 4+ messages in thread
From: sashiko-bot @ 2026-08-21  2:50 UTC (permalink / raw)
  To: Triet Hoang; +Cc: linux-input, dmitry.torokhov

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] The patch breaks the build when `CONFIG_PM` is disabled because `pm80x_dev_suspend` and `pm80x_dev_resume` become undeclared identifiers.
--

--- Patch [1]: [PATCH] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS() ---
commit 831b6a38a335cea06b4312be1068bf63ef9bd3c9
Author: Triet Hoang <triet.hoang.dev@gmail.com>

input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()

Convert deprecated SIMPLE_DEV_PM_OPS to DEFINE_SIMPLE_DEV_PM_OPS and
pm_sleep_ptr(). This drops the __maybe_unused annotations from the resume
callbacks and reduces kernel size when PM is disabled.

> diff --git a/drivers/input/misc/88pm80x_onkey.c b/drivers/input/misc/88pm80x_onkey.c
> index fee28e537898a..d4f344e2bf5c4 100644
> --- a/drivers/input/misc/88pm80x_onkey.c
> +++ b/drivers/input/misc/88pm80x_onkey.c
[ ... ]
> @@ -47,7 +47,7 @@ static irqreturn_t pm80x_onkey_handler(int irq, void *data)
>  	return IRQ_HANDLED;
>  }
>  
> -static SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
> +static DEFINE_SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
>  			 pm80x_dev_resume);

[Severity: Low]
Does this break the build when CONFIG_PM is disabled?

Unlike SIMPLE_DEV_PM_OPS, DEFINE_SIMPLE_DEV_PM_OPS uses pm_sleep_ptr() which
evaluates the C ternary operator with IS_ENABLED(). This means the compiler
still parses the arguments and requires them to be declared, even if they are
ultimately discarded.

Looking at include/linux/mfd/88pm80x.h, pm80x_dev_suspend and pm80x_dev_resume
are wrapped in #ifdef CONFIG_PM without providing empty fallback stubs:

#ifdef CONFIG_PM
static inline int pm80x_dev_suspend(struct device *dev)
{
...

Will this result in undeclared identifier compilation errors when building with
CONFIG_PM=n?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260821024215.55188-1-triet.hoang.dev@gmail.com?part=1

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

* [PATCH v2] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
  2026-08-21  2:50 ` sashiko-bot
@ 2026-08-21  4:15   ` Triet Hoang
  2026-08-21  4:25     ` sashiko-bot
  0 siblings, 1 reply; 4+ messages in thread
From: Triet Hoang @ 2026-08-21  4:15 UTC (permalink / raw)
  To: sashiko-bot
  Cc: dmitry.torokhov, linux-input, sashiko-reviews, triet.hoang.dev

Convert deprecated SIMPLE_DEV_PM_OPS
to DEFINE_SIMPLE_DEV_PM_OPS and pm_ptr/pm_sleep_ptr().

This lets us drop the __maybe_unused annotations
from the resume callbacks and reduces kernel size
when CONFIG_PM or CONFIG_PM_SLEEP is disabled.

Signed-off-by: Triet Hoang <triet.hoang.dev@gmail.com>
---
Changes in v2:
- Use pm_ptr() for pm80x_onkey_pm_ops
- Remove #ifdef CONFIG_PM
---

 drivers/input/misc/88pm80x_onkey.c    | 4 ++--
 drivers/input/misc/nxp-bbnsm-pwrkey.c | 8 ++++----
 include/linux/mfd/88pm80x.h           | 2 --
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/input/misc/88pm80x_onkey.c b/drivers/input/misc/88pm80x_onkey.c
index fee28e537898..3d8fe0b4ed50 100644
--- a/drivers/input/misc/88pm80x_onkey.c
+++ b/drivers/input/misc/88pm80x_onkey.c
@@ -47,7 +47,7 @@ static irqreturn_t pm80x_onkey_handler(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
+static DEFINE_SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
 			 pm80x_dev_resume);
 
 static int pm80x_onkey_probe(struct platform_device *pdev)
@@ -138,7 +138,7 @@ static void pm80x_onkey_remove(struct platform_device *pdev)
 static struct platform_driver pm80x_onkey_driver = {
 	.driver = {
 		   .name = "88pm80x-onkey",
-		   .pm = &pm80x_onkey_pm_ops,
+		   .pm = pm_ptr(&pm80x_onkey_pm_ops),
 		   },
 	.probe = pm80x_onkey_probe,
 	.remove = pm80x_onkey_remove,
diff --git a/drivers/input/misc/nxp-bbnsm-pwrkey.c b/drivers/input/misc/nxp-bbnsm-pwrkey.c
index 0c7b8f8ef4a5..6af6e0f6395f 100644
--- a/drivers/input/misc/nxp-bbnsm-pwrkey.c
+++ b/drivers/input/misc/nxp-bbnsm-pwrkey.c
@@ -193,7 +193,7 @@ static void bbnsm_pwrkey_remove(struct platform_device *pdev)
 	device_init_wakeup(&pdev->dev, false);
 }
 
-static int __maybe_unused bbnsm_pwrkey_suspend(struct device *dev)
+static int bbnsm_pwrkey_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
@@ -203,7 +203,7 @@ static int __maybe_unused bbnsm_pwrkey_suspend(struct device *dev)
 	return 0;
 }
 
-static int __maybe_unused bbnsm_pwrkey_resume(struct device *dev)
+static int bbnsm_pwrkey_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
@@ -213,7 +213,7 @@ static int __maybe_unused bbnsm_pwrkey_resume(struct device *dev)
 	return 0;
 }
 
-static SIMPLE_DEV_PM_OPS(bbnsm_pwrkey_pm_ops, bbnsm_pwrkey_suspend,
+static DEFINE_SIMPLE_DEV_PM_OPS(bbnsm_pwrkey_pm_ops, bbnsm_pwrkey_suspend,
 		bbnsm_pwrkey_resume);
 
 static const struct of_device_id bbnsm_pwrkey_ids[] = {
@@ -225,7 +225,7 @@ MODULE_DEVICE_TABLE(of, bbnsm_pwrkey_ids);
 static struct platform_driver bbnsm_pwrkey_driver = {
 	.driver = {
 		.name = "bbnsm_pwrkey",
-		.pm = &bbnsm_pwrkey_pm_ops,
+		.pm = pm_sleep_ptr(&bbnsm_pwrkey_pm_ops),
 		.of_match_table = bbnsm_pwrkey_ids,
 	},
 	.probe = bbnsm_pwrkey_probe,
diff --git a/include/linux/mfd/88pm80x.h b/include/linux/mfd/88pm80x.h
index 551ef1c367d6..be1b0d961e01 100644
--- a/include/linux/mfd/88pm80x.h
+++ b/include/linux/mfd/88pm80x.h
@@ -339,7 +339,6 @@ static inline void pm80x_free_irq(struct pm80x_chip *pm80x, int irq, void *data)
 	free_irq(regmap_irq_get_virq(pm80x->irq_data, irq), data);
 }
 
-#ifdef CONFIG_PM
 static inline int pm80x_dev_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
@@ -363,7 +362,6 @@ static inline int pm80x_dev_resume(struct device *dev)
 
 	return 0;
 }
-#endif
 
 extern int pm80x_init(struct i2c_client *client);
 extern int pm80x_deinit(void);
-- 
2.53.0


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

* Re: [PATCH v2] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
  2026-08-21  4:15   ` [PATCH v2] " Triet Hoang
@ 2026-08-21  4:25     ` sashiko-bot
  0 siblings, 0 replies; 4+ messages in thread
From: sashiko-bot @ 2026-08-21  4:25 UTC (permalink / raw)
  To: Triet Hoang; +Cc: linux-input, dmitry.torokhov

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [High] Out-of-bounds memory access in `pm80x_dev_suspend` and `pm80x_dev_resume` due to using a virtual IRQ number as a bit index.
--

--- Patch [1]: [PATCH v2] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS() ---
commit 34551f878a1e83fc07284971e8c372f8a5be3f46
Author: Triet Hoang <triet.hoang.dev@gmail.com>

input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()

This commit converts the deprecated SIMPLE_DEV_PM_OPS to
DEFINE_SIMPLE_DEV_PM_OPS and uses pm_ptr/pm_sleep_ptr(). This allows
dropping the __maybe_unused annotations from the resume callbacks and
reduces kernel size when PM options are disabled.

[ ... ]
> diff --git a/include/linux/mfd/88pm80x.h b/include/linux/mfd/88pm80x.h
> index 551ef1c367d65..be1b0d961e01a 100644
> --- a/include/linux/mfd/88pm80x.h
> +++ b/include/linux/mfd/88pm80x.h
> @@ -339,7 +339,6 @@ static inline void pm80x_free_irq(struct pm80x_chip *pm80x, int irq, void *data)
>  	free_irq(regmap_irq_get_virq(pm80x->irq_data, irq), data);
>  }
>  
> -#ifdef CONFIG_PM
>  static inline int pm80x_dev_suspend(struct device *dev)
>  {
>  	struct platform_device *pdev = to_platform_device(dev);

[Severity: High]
This is a pre-existing issue, but does using the virtual IRQ as a bit
index here lead to out-of-bounds memory accesses?

Looking at the body of pm80x_dev_suspend():

    int irq = platform_get_irq(pdev, 0);

    if (device_may_wakeup(dev))
        set_bit(irq, &chip->wu_flag);

Since platform_get_irq() returns a virtual IRQ number dynamically assigned
by the kernel, can this value exceed the capacity of the unsigned long
wu_flag?

Also, if platform_get_irq() returns a negative error code such as -ENXIO,
would passing it as an unsigned bit index to set_bit() cause a massive
out-of-bounds memory write and corrupt memory?

The same pattern exists in pm80x_dev_resume() with clear_bit().

> @@ -363,7 +362,6 @@ static inline int pm80x_dev_resume(struct device *dev)
>  
>  	return 0;
>  }
> -#endif

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260821041546.110119-1-triet.hoang.dev@gmail.com?part=1

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

end of thread, other threads:[~2026-08-21  4:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-21  2:42 [PATCH] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS() Triet Hoang
2026-08-21  2:50 ` sashiko-bot
2026-08-21  4:15   ` [PATCH v2] " Triet Hoang
2026-08-21  4:25     ` sashiko-bot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox