Use the new PM macros for the suspend and resume functions to be
automatically dropped by the compiler when CONFIG_PM or
CONFIG_PM_SLEEP are disabled, without having to use #ifdef guards.
This has the advantage of always compiling these functions in,
independently of any Kconfig option. Thanks to that, bugs and other
regressions are subsequently easier to catch.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
---
Cc: Conghui Chen <conghui.chen@intel.com>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
Cc: virtualization@lists.linux-foundation.org
---
drivers/i2c/busses/i2c-virtio.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/i2c/busses/i2c-virtio.c b/drivers/i2c/busses/i2c-virtio.c
index 4b9536f50800..c60ae531ba57 100644
--- a/drivers/i2c/busses/i2c-virtio.c
+++ b/drivers/i2c/busses/i2c-virtio.c
@@ -243,7 +243,6 @@ static struct virtio_device_id id_table[] = {
};
MODULE_DEVICE_TABLE(virtio, id_table);
-#ifdef CONFIG_PM_SLEEP
static int virtio_i2c_freeze(struct virtio_device *vdev)
{
virtio_i2c_del_vqs(vdev);
@@ -254,7 +253,6 @@ static int virtio_i2c_restore(struct virtio_device *vdev)
{
return virtio_i2c_setup_vqs(vdev->priv);
}
-#endif
static const unsigned int features[] = {
VIRTIO_I2C_F_ZERO_LENGTH_REQUEST,
@@ -269,10 +267,8 @@ static struct virtio_driver virtio_i2c_driver = {
.driver = {
.name = "i2c_virtio",
},
-#ifdef CONFIG_PM_SLEEP
- .freeze = virtio_i2c_freeze,
- .restore = virtio_i2c_restore,
-#endif
+ .freeze = pm_sleep_ptr(virtio_i2c_freeze),
+ .restore = pm_sleep_ptr(virtio_i2c_restore),
};
module_virtio_driver(virtio_i2c_driver);
--
2.40.1
As the build bot noticed - this patch is invalid as the
virtio_driver.{freeze,restore} callbacks are guarded by #ifdefs.
Feel free to apply the rest (if everybody is happy with them) and I'll
respin this one.
Cheers,
-Paul
Le samedi 22 juillet 2023 à 13:53 +0200, Paul Cercueil a écrit :
> Use the new PM macros for the suspend and resume functions to be
> automatically dropped by the compiler when CONFIG_PM or
> CONFIG_PM_SLEEP are disabled, without having to use #ifdef guards.
>
> This has the advantage of always compiling these functions in,
> independently of any Kconfig option. Thanks to that, bugs and other
> regressions are subsequently easier to catch.
>
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
>
> ---
> Cc: Conghui Chen <conghui.chen@intel.com>
> Cc: Viresh Kumar <viresh.kumar@linaro.org>
> Cc: virtualization@lists.linux-foundation.org
> ---
> drivers/i2c/busses/i2c-virtio.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-virtio.c
> b/drivers/i2c/busses/i2c-virtio.c
> index 4b9536f50800..c60ae531ba57 100644
> --- a/drivers/i2c/busses/i2c-virtio.c
> +++ b/drivers/i2c/busses/i2c-virtio.c
> @@ -243,7 +243,6 @@ static struct virtio_device_id id_table[] = {
> };
> MODULE_DEVICE_TABLE(virtio, id_table);
>
> -#ifdef CONFIG_PM_SLEEP
> static int virtio_i2c_freeze(struct virtio_device *vdev)
> {
> virtio_i2c_del_vqs(vdev);
> @@ -254,7 +253,6 @@ static int virtio_i2c_restore(struct
> virtio_device *vdev)
> {
> return virtio_i2c_setup_vqs(vdev->priv);
> }
> -#endif
>
> static const unsigned int features[] = {
> VIRTIO_I2C_F_ZERO_LENGTH_REQUEST,
> @@ -269,10 +267,8 @@ static struct virtio_driver virtio_i2c_driver =
> {
> .driver = {
> .name = "i2c_virtio",
> },
> -#ifdef CONFIG_PM_SLEEP
> - .freeze = virtio_i2c_freeze,
> - .restore = virtio_i2c_restore,
> -#endif
> + .freeze = pm_sleep_ptr(virtio_i2c_freeze),
> + .restore = pm_sleep_ptr(virtio_i2c_restore),
> };
> module_virtio_driver(virtio_i2c_driver);
>
Hi Paul,
kernel test robot noticed the following build errors:
[auto build test ERROR on wsa/i2c/for-next]
[also build test ERROR on brgl/gpio/for-next krzk/for-next linus/master v6.5-rc2 next-20230721]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Paul-Cercueil/i2c-au1550-Remove-ifdef-guards-for-PM-related-functions/20230722-200209
base: https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next
patch link: https://lore.kernel.org/r/20230722115310.27681-5-paul%40crapouillou.net
patch subject: [PATCH v2 21/22] i2c: virtio: Remove #ifdef guards for PM related functions
config: i386-randconfig-r015-20230722 (https://download.01.org/0day-ci/archive/20230722/202307222246.K1GYOGCB-lkp@intel.com/config)
compiler: clang version 15.0.7 (https://github.com/llvm/llvm-project.git 8dfdcc7b7bf66834a761bd8de445840ef68e4d1a)
reproduce: (https://download.01.org/0day-ci/archive/20230722/202307222246.K1GYOGCB-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202307222246.K1GYOGCB-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/i2c/busses/i2c-virtio.c:270:3: error: field designator 'freeze' does not refer to any field in type 'struct virtio_driver'
.freeze = pm_sleep_ptr(virtio_i2c_freeze),
^
>> drivers/i2c/busses/i2c-virtio.c:271:3: error: field designator 'restore' does not refer to any field in type 'struct virtio_driver'
.restore = pm_sleep_ptr(virtio_i2c_restore),
^
2 errors generated.
vim +270 drivers/i2c/busses/i2c-virtio.c
260
261 static struct virtio_driver virtio_i2c_driver = {
262 .feature_table = features,
263 .feature_table_size = ARRAY_SIZE(features),
264 .id_table = id_table,
265 .probe = virtio_i2c_probe,
266 .remove = virtio_i2c_remove,
267 .driver = {
268 .name = "i2c_virtio",
269 },
> 270 .freeze = pm_sleep_ptr(virtio_i2c_freeze),
> 271 .restore = pm_sleep_ptr(virtio_i2c_restore),
272 };
273 module_virtio_driver(virtio_i2c_driver);
274
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Paul,
kernel test robot noticed the following build errors:
[auto build test ERROR on wsa/i2c/for-next]
[also build test ERROR on brgl/gpio/for-next krzk/for-next linus/master v6.5-rc2 next-20230721]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Paul-Cercueil/i2c-au1550-Remove-ifdef-guards-for-PM-related-functions/20230722-200209
base: https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next
patch link: https://lore.kernel.org/r/20230722115310.27681-5-paul%40crapouillou.net
patch subject: [PATCH v2 21/22] i2c: virtio: Remove #ifdef guards for PM related functions
config: nios2-randconfig-r005-20230722 (https://download.01.org/0day-ci/archive/20230722/202307222129.Q7WjPurG-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230722/202307222129.Q7WjPurG-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202307222129.Q7WjPurG-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/i2c/busses/i2c-virtio.c:270:10: error: 'struct virtio_driver' has no member named 'freeze'
270 | .freeze = pm_sleep_ptr(virtio_i2c_freeze),
| ^~~~~~
In file included from include/linux/cpumask.h:10,
from include/linux/smp.h:13,
from include/linux/lockdep.h:14,
from include/linux/spinlock.h:63,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:7,
from include/linux/slab.h:16,
from include/linux/resource_ext.h:11,
from include/linux/acpi.h:13,
from drivers/i2c/busses/i2c-virtio.c:11:
>> include/linux/kernel.h:58:33: error: initialization of 'const struct virtio_device_id *' from incompatible pointer type 'int (*)(struct virtio_device *)' [-Werror=incompatible-pointer-types]
58 | #define PTR_IF(cond, ptr) ((cond) ? (ptr) : NULL)
| ^
include/linux/pm.h:452:28: note: in expansion of macro 'PTR_IF'
452 | #define pm_sleep_ptr(_ptr) PTR_IF(IS_ENABLED(CONFIG_PM_SLEEP), (_ptr))
| ^~~~~~
drivers/i2c/busses/i2c-virtio.c:270:35: note: in expansion of macro 'pm_sleep_ptr'
270 | .freeze = pm_sleep_ptr(virtio_i2c_freeze),
| ^~~~~~~~~~~~
include/linux/kernel.h:58:33: note: (near initialization for 'virtio_i2c_driver.id_table')
58 | #define PTR_IF(cond, ptr) ((cond) ? (ptr) : NULL)
| ^
include/linux/pm.h:452:28: note: in expansion of macro 'PTR_IF'
452 | #define pm_sleep_ptr(_ptr) PTR_IF(IS_ENABLED(CONFIG_PM_SLEEP), (_ptr))
| ^~~~~~
drivers/i2c/busses/i2c-virtio.c:270:35: note: in expansion of macro 'pm_sleep_ptr'
270 | .freeze = pm_sleep_ptr(virtio_i2c_freeze),
| ^~~~~~~~~~~~
include/linux/kernel.h:58:33: warning: initialized field overwritten [-Woverride-init]
58 | #define PTR_IF(cond, ptr) ((cond) ? (ptr) : NULL)
| ^
include/linux/pm.h:452:28: note: in expansion of macro 'PTR_IF'
452 | #define pm_sleep_ptr(_ptr) PTR_IF(IS_ENABLED(CONFIG_PM_SLEEP), (_ptr))
| ^~~~~~
drivers/i2c/busses/i2c-virtio.c:270:35: note: in expansion of macro 'pm_sleep_ptr'
270 | .freeze = pm_sleep_ptr(virtio_i2c_freeze),
| ^~~~~~~~~~~~
include/linux/kernel.h:58:33: note: (near initialization for 'virtio_i2c_driver.id_table')
58 | #define PTR_IF(cond, ptr) ((cond) ? (ptr) : NULL)
| ^
include/linux/pm.h:452:28: note: in expansion of macro 'PTR_IF'
452 | #define pm_sleep_ptr(_ptr) PTR_IF(IS_ENABLED(CONFIG_PM_SLEEP), (_ptr))
| ^~~~~~
drivers/i2c/busses/i2c-virtio.c:270:35: note: in expansion of macro 'pm_sleep_ptr'
270 | .freeze = pm_sleep_ptr(virtio_i2c_freeze),
| ^~~~~~~~~~~~
>> drivers/i2c/busses/i2c-virtio.c:271:10: error: 'struct virtio_driver' has no member named 'restore'
271 | .restore = pm_sleep_ptr(virtio_i2c_restore),
| ^~~~~~~
>> include/linux/kernel.h:58:33: error: initialization of 'const unsigned int *' from incompatible pointer type 'int (*)(struct virtio_device *)' [-Werror=incompatible-pointer-types]
58 | #define PTR_IF(cond, ptr) ((cond) ? (ptr) : NULL)
| ^
include/linux/pm.h:452:28: note: in expansion of macro 'PTR_IF'
452 | #define pm_sleep_ptr(_ptr) PTR_IF(IS_ENABLED(CONFIG_PM_SLEEP), (_ptr))
| ^~~~~~
drivers/i2c/busses/i2c-virtio.c:271:35: note: in expansion of macro 'pm_sleep_ptr'
271 | .restore = pm_sleep_ptr(virtio_i2c_restore),
| ^~~~~~~~~~~~
include/linux/kernel.h:58:33: note: (near initialization for 'virtio_i2c_driver.feature_table')
58 | #define PTR_IF(cond, ptr) ((cond) ? (ptr) : NULL)
| ^
include/linux/pm.h:452:28: note: in expansion of macro 'PTR_IF'
452 | #define pm_sleep_ptr(_ptr) PTR_IF(IS_ENABLED(CONFIG_PM_SLEEP), (_ptr))
| ^~~~~~
drivers/i2c/busses/i2c-virtio.c:271:35: note: in expansion of macro 'pm_sleep_ptr'
271 | .restore = pm_sleep_ptr(virtio_i2c_restore),
| ^~~~~~~~~~~~
include/linux/kernel.h:58:33: warning: initialized field overwritten [-Woverride-init]
58 | #define PTR_IF(cond, ptr) ((cond) ? (ptr) : NULL)
| ^
include/linux/pm.h:452:28: note: in expansion of macro 'PTR_IF'
452 | #define pm_sleep_ptr(_ptr) PTR_IF(IS_ENABLED(CONFIG_PM_SLEEP), (_ptr))
| ^~~~~~
drivers/i2c/busses/i2c-virtio.c:271:35: note: in expansion of macro 'pm_sleep_ptr'
271 | .restore = pm_sleep_ptr(virtio_i2c_restore),
| ^~~~~~~~~~~~
include/linux/kernel.h:58:33: note: (near initialization for 'virtio_i2c_driver.feature_table')
58 | #define PTR_IF(cond, ptr) ((cond) ? (ptr) : NULL)
| ^
include/linux/pm.h:452:28: note: in expansion of macro 'PTR_IF'
452 | #define pm_sleep_ptr(_ptr) PTR_IF(IS_ENABLED(CONFIG_PM_SLEEP), (_ptr))
| ^~~~~~
drivers/i2c/busses/i2c-virtio.c:271:35: note: in expansion of macro 'pm_sleep_ptr'
271 | .restore = pm_sleep_ptr(virtio_i2c_restore),
| ^~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +270 drivers/i2c/busses/i2c-virtio.c
260
261 static struct virtio_driver virtio_i2c_driver = {
262 .feature_table = features,
263 .feature_table_size = ARRAY_SIZE(features),
264 .id_table = id_table,
265 .probe = virtio_i2c_probe,
266 .remove = virtio_i2c_remove,
267 .driver = {
268 .name = "i2c_virtio",
269 },
> 270 .freeze = pm_sleep_ptr(virtio_i2c_freeze),
> 271 .restore = pm_sleep_ptr(virtio_i2c_restore),
272 };
273 module_virtio_driver(virtio_i2c_driver);
274
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2026 Red Hat, Inc.