Re: [PATCH 00/49] iio: Tree wide switch from CONFIG_PM* to __maybe_unused etc.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 23 Nov 2021 22:11:08 +0000
Paul Cercueil <paul@xxxxxxxxxxxxxxx> wrote:

> Hi Jonathan,
> 
> Cc'd Arnd who may have some interest in the topic.
> 
> Le mar., nov. 23 2021 at 21:09:30 +0000, Jonathan Cameron 
> <jic23@xxxxxxxxxx> a écrit :
> > From: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
> > 
> > Note this series includes many drivers that are quite old and I'm not
> > sure have active maintainers.  Hence if anyone has time to look at 
> > some
> > of these beyond their own drivers and sanity check them it would be 
> > much
> > appreciated!
> > 
> > Two motivations behind this set.
> > 1 - General code reduction and improvement in readability in these 
> > drivers.
> > 2 - Reduce change I'll have to ask people to change how they do this 
> > in
> >     future patches.
> > 
> > Mostly this is just a case of letting the compiler work out it can 
> > remove
> > the PM related functions rather than using #ifdefs in the code to do 
> > so.
> > 
> > The __maybe_unused markings make it clear we are intentionally 
> > building
> > functions that the compiler can see are unused and remove in some 
> > build
> > configurations.
> > 
> > The new pm_ptr() macro is rather convenient to got futher than many of
> > the drivers were and when CONFIG_PM is not define ensure that the
> > struct dev_pm_ops can also be removed.  Note there is a subtlty in 
> > that
> > we only remove that whe CONFIG_PM is not defined whereas a few of 
> > these
> > drivers were using CONFIG_PM_SLEEP which is a tighter condition (will
> > remove the structure in more configurations).  I think that's a small
> > price to pay for the convenience this macro brings.
> > 
> > I did this set as one patch per driver, as personally I prefer that
> > option for all but the most trivial patches because it makes backports
> > that cross with this series simpler and also avoid the complex
> > tag giving we get for sets touching code from many authors.
> > 
> > All comments welcome.  
> 
> One word about the pm_ptr() macro. Right now it's defined as:
>   #ifdef CONFIG_PM
>   #define pm_ptr(_ptr) (_ptr)
>   #else
>   #define pm_ptr(_ptr) NULL
>   #endif
> 
> It could be possible to define it like this instead:
>   #define pm_ptr(_ptr) PTR_IF(IS_ENABLED(CONFIG_PM), (_ptr))
> 
> The difference is that if !CONFIG_PM, in the first case the (_ptr) is 
> not visible by the compiler and the __maybe_unused is required, while 
> in the second case the (_ptr) is always visible by the compiler, but 
> discarded as dead code. The reason we'd want that is the same reason we 
> use IS_ENABLED() instead of macro guards; and you wouldn't need the 
> __maybe_unused attribute anywhere.
> 
> The problem then is that the SET_*_PM_OPS macros are defined 
> differently according to CONFIG_PM, so their definition would need to 
> be changed to use the (redefined) pm_ptr() macro and a corresponding 
> pm_sleep_ptr() macro.

Small question here.  Why would these macros need to use pm_ptr() macro at all?

Why not just stop them being conditional on CONFIG_PM at all and let dead
code removal kill them off for us?  You might want to do something different
for the CONFIG_PM_SLEEP ones though if we care about having it that fine
grained.

Obviously still need new macros to do this, so doesn't change the
fundamental question.

> Unfortunately since the SET_*_PM_OPS macros are 
> used everywhere with code wrapped around #ifdef CONFIG_PM guards, it 
> wouldn't be easy to change them, and it would just be easier to 
> introduce new macros.
> 
> The patchset looks fine as-is and I am not asking you to work on 
> anything I just said, I just thought it was worth mentioning.
> 
> Cheers,
> -Paul
> 
> > Cc: Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx>
> > Cc: Anson Huang <anson.huang@xxxxxxx>
> > Cc: Brian Masney <masneyb@xxxxxxxxxxxxx>
> > Cc: Fabrice Gasnier <fabrice.gasnier@xxxxxxxxxxx>
> > Cc: Hans de Goede <hdegoede@xxxxxxxxxx>
> > Cc: Heiko Stuebner <heiko.stuebner@xxxxxxxxxxxxxxxxxxxxx>
> > Cc: Icenowy Zheng <icenowy@xxxxxxx>
> > Cc: Jonathan Albrieux <jonathan.albrieux@xxxxxxxxx>
> > Cc: Krzysztof Kozlowski <krzk@xxxxxxxxxx>
> > Cc: Linus Walleij <linus.walleij@xxxxxxxxxx>
> > Cc: Luca Weiss <luca@xxxxxxxxx>
> > Cc: Ludovic Desroches <ludovic.desroches@xxxxxxxxxxxxx>
> > Cc: Manivannan Sadhasivam <mani@xxxxxxxxxx>
> > Cc: Martijn Braam <martijn@xxxxxxxxx>
> > Cc: Maslov Dmitry <maslovdmitry@xxxxxxxx>
> > Cc: Matt Ranostay <matt.ranostay@xxxxxxxxxxxx
> > Cc: Olivier Moysan <olivier.moysan@xxxxxxxxxxx>
> > Cc: Stefan-Gabriel Mirea <stefan-gabriel.mirea@xxxxxxx>
> > Cc: Vaishnav M A <vaishnav@xxxxxxxxxxxxxxx>
> > 
> > 
> > Jonathan Cameron (49):
> >   iio:accel:da311: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:accel:da280: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:accel:dmard06: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:accel:dmard10: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:accel:mc3230: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:accel:mma7660: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:accel:mma9551: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:accel:mma9553: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:accel:stk8ba50: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:accel:kxsd9: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:adc:ab8500: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:adc:ad7606: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:adc:at91-adc: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:adc:exynos_adc: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:adc:palmas_gpadc: Switch from CONFIG_PM_SLEEP guards to 
> > pm_ptr() /
> >     __maybe_unused
> >   iio:adc:stm32:Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:adc:rcar: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:adc:rockchip: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:adc:twl6030: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:adc:vf610: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:common:ssp: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:dac:vf610: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:apds9300: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:bh1780: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:cm3232: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:isl29018: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:isl29125: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:jsa1212: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:ltr501: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:stk3310: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:tcs3414: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:tcs3472: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:tsl2563: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:tsl4531: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:light:us5182: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:magn:ak8975: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:magn:hmc5843: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:magn:mag3110: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:magn:mmc35240: Switch from CONFIG_PM_SLEEP guards to pm_ptr() /
> >     __maybe_unused
> >   iio:pressure:mpl3115: Switch from CONFIG_PM_SLEEP guards to 
> > pm_ptr() /
> >     __maybe_unused
> >   iio:pressure:bmp280: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:proximity:as3935: Switch from CONFIG_PM_SLEEP guards to 
> > pm_ptr() /
> >     __maybe_unused
> >   iio:proximity:pulsedlight: Switch from CONFIG_PM guards to pm_ptr() 
> > /
> >     __maybe_unused
> >   iio:proximity:rfd77492: Switch from CONFIG_PM_SLEEP guards to 
> > pm_ptr()
> >     / __maybe_unused
> >   iio:proximity:sx9500: Switch from CONFIG_PM_SLEEP guards to 
> > pm_ptr() /
> >     __maybe_unused
> >   iio:temperature:tmp006: Switch from CONFIG_PM_SLEEP guards to 
> > pm_ptr()
> >     / __maybe_unused
> >   iio:temperature:tmp007: Switch from CONFIG_PM_SLEEP guards to 
> > pm_ptr()
> >     / __maybe_unused
> >   iio:gyro:mpu3050: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> >   iio:chemical:atlas: Switch from CONFIG_PM guards to pm_ptr() /
> >     __maybe_unused
> > 
> >  drivers/iio/accel/da280.c                        |  6 ++----
> >  drivers/iio/accel/da311.c                        |  8 +++-----
> >  drivers/iio/accel/dmard06.c                      | 12 ++++--------
> >  drivers/iio/accel/dmard10.c                      |  9 ++++-----
> >  drivers/iio/accel/kxsd9-i2c.c                    |  2 +-
> >  drivers/iio/accel/kxsd9-spi.c                    |  2 +-
> >  drivers/iio/accel/kxsd9.c                        |  8 +++-----
> >  drivers/iio/accel/mc3230.c                       |  8 +++-----
> >  drivers/iio/accel/mma7660.c                      | 12 +++---------
> >  drivers/iio/accel/mma9551.c                      | 16 
> > ++++++----------
> >  drivers/iio/accel/mma9553.c                      | 16 
> > ++++++----------
> >  drivers/iio/accel/stk8ba50.c                     | 12 +++---------
> >  drivers/iio/adc/ab8500-gpadc.c                   | 10 ++++------
> >  drivers/iio/adc/ad7606.c                         |  8 ++------
> >  drivers/iio/adc/ad7606.h                         |  5 -----
> >  drivers/iio/adc/ad7606_par.c                     |  2 +-
> >  drivers/iio/adc/ad7606_spi.c                     |  2 +-
> >  drivers/iio/adc/at91_adc.c                       |  8 +++-----
> >  drivers/iio/adc/exynos_adc.c                     |  8 +++-----
> >  drivers/iio/adc/palmas_gpadc.c                   | 14 ++++++--------
> >  drivers/iio/adc/rcar-gyroadc.c                   | 10 ++++------
> >  drivers/iio/adc/rockchip_saradc.c                |  8 +++-----
> >  drivers/iio/adc/stm32-adc-core.c                 | 12 +++++-------
> >  drivers/iio/adc/stm32-adc.c                      | 16 
> > ++++++----------
> >  drivers/iio/adc/twl6030-gpadc.c                  |  8 +++-----
> >  drivers/iio/adc/vf610_adc.c                      |  8 +++-----
> >  drivers/iio/chemical/atlas-sensor.c              | 10 ++++------
> >  drivers/iio/common/ssp_sensors/ssp_dev.c         | 12 ++++--------
> >  drivers/iio/dac/vf610_dac.c                      |  8 +++-----
> >  drivers/iio/gyro/mpu3050-core.c                  |  8 +++-----
> >  drivers/iio/gyro/mpu3050-i2c.c                   |  2 +-
> >  drivers/iio/light/apds9300.c                     | 11 +++--------
> >  drivers/iio/light/bh1780.c                       | 10 ++++------
> >  drivers/iio/light/cm3232.c                       | 13 ++++---------
> >  drivers/iio/light/isl29018.c                     | 11 +++--------
> >  drivers/iio/light/isl29125.c                     |  8 +++-----
> >  drivers/iio/light/jsa1212.c                      | 12 +++---------
> >  drivers/iio/light/ltr501.c                       |  8 +++-----
> >  drivers/iio/light/stk3310.c                      | 12 +++---------
> >  drivers/iio/light/tcs3414.c                      |  8 +++-----
> >  drivers/iio/light/tcs3472.c                      |  8 +++-----
> >  drivers/iio/light/tsl2563.c                      | 11 +++--------
> >  drivers/iio/light/tsl4531.c                      | 11 +++--------
> >  drivers/iio/light/us5182d.c                      | 10 ++++------
> >  drivers/iio/magnetometer/ak8975.c                | 10 ++++------
> >  drivers/iio/magnetometer/hmc5843.h               |  5 -----
> >  drivers/iio/magnetometer/hmc5843_i2c.c           |  2 +-
> >  drivers/iio/magnetometer/hmc5843_spi.c           |  2 +-
> >  drivers/iio/magnetometer/mag3110.c               | 11 +++--------
> >  drivers/iio/magnetometer/mmc35240.c              | 12 ++++--------
> >  drivers/iio/pressure/bmp280-core.c               |  6 ++----
> >  drivers/iio/pressure/bmp280-i2c.c                |  2 +-
> >  drivers/iio/pressure/bmp280-spi.c                |  2 +-
> >  drivers/iio/pressure/mpl3115.c                   | 11 +++--------
> >  drivers/iio/proximity/as3935.c                   | 12 +++---------
> >  .../iio/proximity/pulsedlight-lidar-lite-v2.c    | 10 ++++------
> >  drivers/iio/proximity/rfd77402.c                 |  8 +++-----
> >  drivers/iio/proximity/sx9500.c                   | 12 ++++--------
> >  drivers/iio/temperature/tmp006.c                 |  8 +++-----
> >  drivers/iio/temperature/tmp007.c                 |  8 +++-----
> >  60 files changed, 180 insertions(+), 344 deletions(-)
> > 
> > --
> > 2.34.0
> >   
> 
> 




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux