Re: [PATCH v4 03/11] iio: amplifiers: ad8366: remove unused include headers

Rodrigo Alencar
2026-02-11T12:55:40Z

On 26/02/10 09:57PM, Andy Shevchenko wrote:
> On Tue, Feb 10, 2026 at 07:42:03PM +0000, Rodrigo Alencar via B4 Relay wrote:
>
> > Apply IWYU principle, removing the following headers:
> > - linux/device.h: no usage of devm_add_action_or_reset, device_attr...
> > - linux/kernel.h: no usage of container_of, kasprintf, ...
> > - linux/slab.h: memory management handled by iio
> > - linux/sysfs.h: sysfs interaction is managed by iio
> > - linux/iio/sysfs.h: not using iio device attributes in this driver
>
> Yeah, but it also means to add (a lot of) missed headers...
>
> array_size,h
> dev_printk.h
> mod_devicetable.h
> mutex.h
> stddef.h

Are there proper guidelines for IWYU in the kernel?
Include headers end up including a bunch of others, so
the build finishes successfully anyways.
I understand that the concern is build time, so we better
include all small parts that are needed rather than a generic
header that includes that and much more.

This is the output of the iwyu tool without this patch series:

drivers/iio/amplifiers/ad8366.c should add these lines:
#include <stddef.h> // for NULL
#include "asm-generic/errno-base.h" // for EINVAL, ENOMEM
#include "linux/array_size.h" // for ARRAY_SIZE
#include "linux/compiler_attributes.h" // for __aligned
#include "linux/dev_printk.h" // for dev_err
#include "linux/iio/types.h" // for iio_chan_info_enum, iio_chan_...
#include "linux/math.h" // for abs
#include "linux/minmax.h" // for __cmp_op_max
#include "linux/mod_devicetable.h" // for spi_device_id
#include "linux/mutex.h" // for mutex_lock, mutex_unlock, mut...
#include "linux/mutex_types.h" // for mutex
#include "vdso/bits.h" // for BIT

drivers/iio/amplifiers/ad8366.c should remove these lines:
- #include <linux/device.h> // lines 14-14
- #include <linux/iio/sysfs.h> // lines 26-26
- #include <linux/kernel.h> // lines 15-15
- #include <linux/slab.h> // lines 16-16
- #include <linux/sysfs.h> // lines 17-17

The full include-list for drivers/iio/amplifiers/ad8366.c:
#include <linux/bitrev.h> // for bitrev8
#include <linux/err.h> // for IS_ERR, PTR_ERR
#include <linux/gpio/consumer.h> // for devm_gpiod_get_optional, gpio...
#include <linux/iio/iio.h> // for iio_priv, iio_dev, iio_chan_spec
#include <linux/module.h> // for MODULE_AUTHOR, MODULE_DESCRIP...
#include <linux/regulator/consumer.h> // for regulator_disable, devm_regul...
#include <linux/spi/spi.h> // for spi_device, spi_get_device_id
#include <stddef.h> // for NULL
#include "asm-generic/errno-base.h" // for EINVAL, ENOMEM
#include "linux/array_size.h" // for ARRAY_SIZE
#include "linux/compiler_attributes.h" // for __aligned
#include "linux/dev_printk.h" // for dev_err
#include "linux/iio/types.h" // for iio_chan_info_enum, iio_chan_...
#include "linux/math.h" // for abs
#include "linux/minmax.h" // for __cmp_op_max
#include "linux/mod_devicetable.h" // for spi_device_id
#include "linux/mutex.h" // for mutex_lock, mutex_unlock, mut...
#include "linux/mutex_types.h" // for mutex
#include "vdso/bits.h" // for BIT

After all the patches are applied the output is slightly different:

drivers/iio/amplifiers/ad8366.c should add these lines:
#include <stddef.h> // for size_t, NULL
#include "asm-generic/errno-base.h" // for EINVAL, ENOMEM
#include "asm-generic/int-ll64.h" // for u8
#include "linux/compiler_attributes.h" // for __aligned
#include "linux/dev_printk.h" // for dev_err_probe
#include "linux/iio/types.h" // for iio_chan_info_enum, iio_chan_...
#include "linux/math.h" // for DIV_ROUND_CLOSEST
#include "linux/minmax.h" // for __cmp_op_max
#include "linux/mutex_types.h" // for mutex
#include "linux/types.h" // for __be16
#include "vdso/bits.h" // for BIT

The full include-list for drivers/iio/amplifiers/ad8366.c:
#include <linux/bitrev.h> // for bitrev8
#include <linux/err.h> // for IS_ERR, PTR_ERR
#include <linux/gpio/consumer.h> // for devm_gpiod_get_optional, gpio...
#include <linux/iio/iio.h> // for iio_priv, iio_dev, iio_chan_spec
#include <linux/mod_devicetable.h> // for kernel_ulong_t, spi_device_id
#include <linux/module.h> // for MODULE_DEVICE_TABLE, MODULE_A...
#include <linux/mutex.h> // for mutex_lock, mutex_unlock, dev...
#include <linux/regulator/consumer.h> // for devm_regulator_get_enable
#include <linux/reset.h> // for devm_reset_control_get_option...
#include <linux/spi/spi.h> // for spi_write, spi_get_device_id
#include <linux/unaligned.h> // for put_unaligned_be16
#include <stddef.h> // for size_t, NULL
#include "asm-generic/errno-base.h" // for EINVAL, ENOMEM
#include "asm-generic/int-ll64.h" // for u8
#include "linux/compiler_attributes.h" // for __aligned
#include "linux/dev_printk.h" // for dev_err_probe
#include "linux/iio/types.h" // for iio_chan_info_enum, iio_chan_...
#include "linux/math.h" // for DIV_ROUND_CLOSEST
#include "linux/minmax.h" // for __cmp_op_max
#include "linux/mutex_types.h" // for mutex
#include "linux/types.h" // for __be16
#include "vdso/bits.h" // for BIT

--
Kind regards,

Rodrigo Alencar