Linux IIO development
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: linux-iio@vger.kernel.org, "Nuno Sá" <nuno.sa@analog.com>,
	"Andy Shevchenko" <andy@kernel.org>,
	"David Lechner" <dlechner@baylibre.com>,
	"Matti Vaittinen" <mazziesaccount@gmail.com>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Subject: Re: [PATCH] iio: accel: kionix-kx022a: Apply approximate iwyu principles to includes
Date: Sun, 29 Jun 2025 19:43:36 +0100	[thread overview]
Message-ID: <20250629194336.34a03946@jic23-huawei> (raw)
In-Reply-To: <20250629183649.184479-1-jic23@kernel.org>

On Sun, 29 Jun 2025 19:36:49 +0100
Jonathan Cameron <jic23@kernel.org> wrote:

> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> Motivated by the W=1 warning about export.h that was introduced this cycle
> this is an attempt to apply an approximation of the principles of including
> whatever is used in the file directly.
> 
> Helped by the include-what-you-use tool.
> 
> Reasoning:
> - Drop linux/moduleparam.h as completely unused.
> - linux/array_size.h for ARRAY_SIZE()
> - linux/bitmap.h for for_each_set_bit
> - linux/errno.h for error codes.
> - linux/export.h for EXPORT_SYMBOL*()
> - linux/math64.h for do_div - alternative would be asm/div64.h
> - linux/minmax.h for min()
> - linux/sysfs.h for sysfs_emit()
> - linux/time64.h for USEC_PER_MSEC
> - linux/iio/buffer.h for iio_push_to_buffers_with_timestamp()
> - asm/byteorder.h for le16_to_cpu()
> 
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
> 
> I picked this one fairly randomly as an example but longer term I'd like
> to look through at least all new drivers with this in mind + all the ones
> that are currently messing up my W=1 build logs.
> 
> Note I've been very descriptive in this patch to allow people to suggest
> better alternatives for some of the ones that aren't entirely obvious.
> 
Helpfully I had a script lying around from 2021:
https://lore.kernel.org/all/20211003153306.391766-1-jic23@kernel.org/

Just for reference I used iwyu with: 

make LLVM=1 LOCALVERSION= W=1 -j12 C=1 CHECK=include-what-you-use CHECKFLAGS="-Xiwyu --no_default_mappings -Xiwyu --mapping_file=iio.imp"

where iio.imp is from a few years ago and contains:
	{ include: ["\"linux/sizes.h\"", "private", <linux/sizes.h>, "public"] },
	{ include: ["\"linux/slab.h\"", "private", <linux/slab.h>, "public"] },
	{ include: ["\"linux/spinlock.h\"", "private", <linux/spinlock.h>, "public"] },
	{ include: ["\"linux/spinlock_types.h\"", "private", <linux/spinlock.h>, "public"] },
	{ include: ["\"linux/spi/spi.h\"", "private", <linux/spi/spi.h>, "public"] },
	{ include: ["\"linux/stat.h\"", "private", <linux/stat.h>, "public"] },
	{ include: ["\"linux/stdarg.h\"", "private", <linux/stdarg.h>, "public"] },
	{ include: ["\"linux/stddef.h\"", "private", <linux/stddef.h>, "public"] },
	{ include: ["\"linux/string.h\"", "private", <linux/string.h>, "public"] },
	{ include: ["\"linux/stringify.h\"", "private", <linux/stringify.h>, "public"] },
	{ include: ["\"linux/sysfs.h\"", "private", <linux/sysfs.h>, "public"] },
	{ include: ["\"linux/types.h\"", "private", <linux/types.h>, "public"] },
	{ include: ["\"linux/uuid.h\"", "private", <linux/uuid.h>, "public"] },
	{ include: ["\"linux/sched.h\"", "private", <linux/sched.h>, "public"] },
	{ include: ["\"linux/wait.h\"", "private", <linux/wait.h>, "public"] },
	{ include: ["\"linux/workqueue.h\"", "private", <linux/workqueue.h>, "public"] },
	{ include: ["\"asm-generic/int-ll64.h\"", "private", <linux/types.h>, "public"] },	
	{ include: ["\"linux/device.h\"", "private", <linux/device.h>, "public"] },
	{ include: ["\"linux/dev_printk.h\"", "private", <linux/device.h>, "public"] },
	{ include: ["\"linux/device/bus.h\"", "private", <linux/device.h>, "public"] },
	{ include: ["\"linux/device/driver.h\"", "private", <linux/device.h>, "public"] },
	{ include: ["\"linux/bits.h\"", "private", <linux/bits.h>, "public"] },	
	{ include: ["\"vdso/bits.h\"", "private", <linux/bits.h>, "public"] },
	{ include: ["\"vdso/limits.h\"", "private", <linux/limits.h>, "public"] },
	{ include: ["\"linux/limits.h\"", "private", <linux/limits.h>, "public"] },
	{ include: ["\"vdso/ktime.h\"", "private", <linux/ktime.h>, "public"] },
	{ include: ["\"linux/ktime.h\"", "private", <linux/ktime.h>, "public"] },
	{ include: ["\"vdso/time64.h\"", "private", <linux/time64.h>, "public"] },
	{ include: ["\"linux/time.h\"", "private", <linux/time.h>, "public"] },
	{ include: ["\"linux/timer.h\"", "private", <linux/timer.h>, "public"] }
]

Clear this needs a few upates, like mutex_types.h -> mutex.h and
probably devres.h->device.h


output was:

drivers/iio/accel/kionix-kx022a.c should add these lines:                                                                               
#include <asm/byteorder.h>               // for le16_to_cpu                                                                             
#include <asm/div64.h>                   // for do_div                                                                                  
#include <linux/bitmap.h>                // for for_each_set_bit                                                                        
#include <linux/compiler.h>              // for __aligned                                                                               
#include <linux/errno.h>                 // for EINVAL, EBUSY, ENOMEM, ENODEV                                     
#include <linux/export.h>                // for EXPORT_SYMBOL_NS_GPL                                                      
#include <linux/iio/buffer.h>            // for iio_push_to_buffers_with_tim...                                         
#include <linux/minmax.h>                // for __cmp_op_min, min, __cmp_op_max                                           
#include <linux/stddef.h>                // for false, true, NULL                                                                       
#include <linux/sysfs.h>                 // for sysfs_emit                                                                              
#include <linux/time64.h>                // for USEC_PER_MSEC, NSEC_PER_MSEC                                            
#include "linux/array_size.h"            // for ARRAY_SIZE                                                                              
#include "linux/device/devres.h"         // for devm_kasprintf                                                                          
#include "linux/gfp_types.h"             // for GFP_KERNEL                                                                              
#include "linux/mutex_types.h"           // for mutex                                                                                   
                                                                                                                                        
drivers/iio/accel/kionix-kx022a.c should remove these lines:                                                                            
- #include <linux/moduleparam.h>  // lines 13-13                                                                                        
                                                                                                                                        
The full include-list for drivers/iio/accel/kionix-kx022a.c:                                                                            
#include "kionix-kx022a.h"                                                                                                              
#include <asm/byteorder.h>               // for le16_to_cpu                                                                             
#include <asm/div64.h>                   // for do_div                                                                                  
#include <linux/bitmap.h>                // for for_each_set_bit                                                                        
#include <linux/cleanup.h>               // for guard                                                                                   
#include <linux/compiler.h>              // for __aligned                                                                               
#include <linux/delay.h>                 // for msleep                                                                                  
#include <linux/device.h>                // for dev_err_probe, dev_err, dev_...                                           
#include <linux/errno.h>                 // for EINVAL, EBUSY, ENOMEM, ENODEV                                    
#include <linux/export.h>                // for EXPORT_SYMBOL_NS_GPL                                                        
#include <linux/iio/buffer.h>            // for iio_push_to_buffers_with_tim...                                         
#include <linux/iio/iio.h>               // for iio_chan_info_enum, iio_endian                                      
#include <linux/iio/sysfs.h>             // for IIO_DEVICE_ATTR_RO                                                                      
#include <linux/iio/trigger.h>           // for devm_iio_trigger_register                                                  
#include <linux/iio/trigger_consumer.h>  // for iio_trigger_notify_done, iio...                                        
#include <linux/iio/triggered_buffer.h>  // for devm_iio_triggered_buffer_se...                                         
#include <linux/interrupt.h>             // for irqreturn, irqreturn_t, devm...                                 
#include <linux/minmax.h>                // for __cmp_op_min, min, __cmp_op_max                                      
#include <linux/module.h>                // for MODULE_AUTHOR, MODULE_DESCRI...                                   
#include <linux/mutex.h>                 // for mutex_unlock, mutex_lock                                     
#include <linux/property.h>              // for fwnode_irq_get_byname, dev_f...                                  
#include <linux/regmap.h>                // for regmap_range, regmap_set_bits                              
#include <linux/regulator/consumer.h>    // for devm_regulator_bulk_get_enable                                           
#include <linux/slab.h>                  // for kfree, kmalloc_array                                                                
#include <linux/stddef.h>                // for false, true, NULL                                                                       
#include <linux/string_choices.h>        // for str_on_off                                                                              
#include <linux/sysfs.h>                 // for sysfs_emit                                                                              
#include <linux/time64.h>                // for USEC_PER_MSEC, NSEC_PER_MSEC                                 
#include <linux/types.h>                 // for __le16, bool, int64_t, ssize_t                                   
#include <linux/units.h>                 // for MEGA                                                                                    
#include "linux/array_size.h"            // for ARRAY_SIZE                                                                              
#include "linux/device/devres.h"         // for devm_kasprintf                                                                          
#include "linux/gfp_types.h"             // for GFP_KERNEL                                                                              
#include "linux/mutex_types.h"           // for mutex
> ---
>  drivers/iio/accel/kionix-kx022a.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/accel/kionix-kx022a.c b/drivers/iio/accel/kionix-kx022a.c
> index 07dcf5f0599f..39485572a76b 100644
> --- a/drivers/iio/accel/kionix-kx022a.c
> +++ b/drivers/iio/accel/kionix-kx022a.c
> @@ -5,27 +5,37 @@
>   * ROHM/KIONIX accelerometer driver
>   */
>  
> +#include <linux/array_size.h>
> +#include <linux/bitmap.h>
>  #include <linux/cleanup.h>
>  #include <linux/delay.h>
>  #include <linux/device.h>
> +#include <linux/errno.h>
> +#include <linux/export.h>
>  #include <linux/interrupt.h>
> +#include <linux/math64.h>
> +#include <linux/minmax.h>
>  #include <linux/module.h>
> -#include <linux/moduleparam.h>
>  #include <linux/mutex.h>
>  #include <linux/property.h>
>  #include <linux/regmap.h>
>  #include <linux/regulator/consumer.h>
>  #include <linux/slab.h>
>  #include <linux/string_choices.h>
> +#include <linux/sysfs.h>
> +#include <linux/time64.h>
>  #include <linux/types.h>
>  #include <linux/units.h>
>  
>  #include <linux/iio/iio.h>
> +#include <linux/iio/buffer.h>
>  #include <linux/iio/sysfs.h>
>  #include <linux/iio/trigger.h>
>  #include <linux/iio/trigger_consumer.h>
>  #include <linux/iio/triggered_buffer.h>
>  
> +#include <asm/byteorder.h>
> +
>  #include "kionix-kx022a.h"
>  
>  /*


  reply	other threads:[~2025-06-29 18:43 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-29 18:36 [PATCH] iio: accel: kionix-kx022a: Apply approximate iwyu principles to includes Jonathan Cameron
2025-06-29 18:43 ` Jonathan Cameron [this message]
2025-06-30 10:42   ` Andy Shevchenko
2025-06-30 14:06     ` Jonathan Cameron
2025-07-12 16:52       ` Tanzir Hasan
2025-06-30 10:40 ` Andy Shevchenko
2025-07-06 17:13   ` Jonathan Cameron
2025-07-10  6:53     ` Matti Vaittinen
2025-07-07 19:53 ` Andy Shevchenko
2025-07-09 13:32   ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250629194336.34a03946@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=andy@kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=linux-iio@vger.kernel.org \
    --cc=mazziesaccount@gmail.com \
    --cc=nuno.sa@analog.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox