diff mbox series

hwmon: constify struct hwmon_chip_info info member harder

Message ID 20230309082841.400118-1-jani.nikula@intel.com (mailing list archive)
State Changes Requested
Headers show
Series hwmon: constify struct hwmon_chip_info info member harder | expand

Commit Message

Jani Nikula March 9, 2023, 8:28 a.m. UTC
Let the struct hwmon_chip_info info member be a pointer to a const array
of const pointers, rather than mutable array of const pointers.

Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: linux-hwmon@vger.kernel.org
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 include/linux/hwmon.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

kernel test robot March 9, 2023, 10:53 a.m. UTC | #1
Hi Jani,

I love your patch! Yet something to improve:

[auto build test ERROR on groeck-staging/hwmon-next]
[also build test ERROR on linus/master v6.3-rc1 next-20230309]
[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/Jani-Nikula/hwmon-constify-struct-hwmon_chip_info-info-member-harder/20230309-163328
base:   https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link:    https://lore.kernel.org/r/20230309082841.400118-1-jani.nikula%40intel.com
patch subject: [PATCH] hwmon: constify struct hwmon_chip_info info member harder
config: x86_64-randconfig-a003 (https://download.01.org/0day-ci/archive/20230309/202303091814.jyOAXX4n-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/1ec9eaf0281f0a40044492700b7cdfe99d35d35e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Jani-Nikula/hwmon-constify-struct-hwmon_chip_info-info-member-harder/20230309-163328
        git checkout 1ec9eaf0281f0a40044492700b7cdfe99d35d35e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/hwmon/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303091814.jyOAXX4n-lkp@intel.com/

All errors (new ones prefixed by >>):

>> drivers/hwmon/hwmon.c:177:36: error: initializing 'const struct hwmon_channel_info **' with an expression of type 'const struct hwmon_channel_info *const *const' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
           const struct hwmon_channel_info **info = chip->info;
                                             ^      ~~~~~~~~~~
   drivers/hwmon/hwmon.c:256:36: error: initializing 'const struct hwmon_channel_info **' with an expression of type 'const struct hwmon_channel_info *const *const' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
           const struct hwmon_channel_info **info = chip->info;
                                             ^      ~~~~~~~~~~
   2 errors generated.


vim +177 drivers/hwmon/hwmon.c

d560168b5d0fb4 Guenter Roeck   2015-08-26  171  
e5181331359d93 Daniel Lezcano  2022-08-05  172  static int hwmon_thermal_set_trips(struct thermal_zone_device *tz, int low, int high)
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  173  {
e5181331359d93 Daniel Lezcano  2022-08-05  174  	struct hwmon_thermal_data *tdata = tz->devdata;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  175  	struct hwmon_device *hwdev = to_hwmon_device(tdata->dev);
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  176  	const struct hwmon_chip_info *chip = hwdev->chip;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23 @177  	const struct hwmon_channel_info **info = chip->info;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  178  	unsigned int i;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  179  	int err;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  180  
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  181  	if (!chip->ops->write)
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  182  		return 0;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  183  
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  184  	for (i = 0; info[i] && info[i]->type != hwmon_temp; i++)
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  185  		continue;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  186  
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  187  	if (!info[i])
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  188  		return 0;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  189  
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  190  	if (info[i]->config[tdata->index] & HWMON_T_MIN) {
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  191  		err = chip->ops->write(tdata->dev, hwmon_temp,
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  192  				       hwmon_temp_min, tdata->index, low);
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  193  		if (err && err != -EOPNOTSUPP)
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  194  			return err;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  195  	}
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  196  
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  197  	if (info[i]->config[tdata->index] & HWMON_T_MAX) {
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  198  		err = chip->ops->write(tdata->dev, hwmon_temp,
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  199  				       hwmon_temp_max, tdata->index, high);
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  200  		if (err && err != -EOPNOTSUPP)
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  201  			return err;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  202  	}
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  203  
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  204  	return 0;
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  205  }
a5f6c0f85a09f4 Dmitry Osipenko 2021-06-23  206
Guenter Roeck March 9, 2023, 11:06 a.m. UTC | #2
On Thu, Mar 09, 2023 at 10:28:41AM +0200, Jani Nikula wrote:
> Let the struct hwmon_chip_info info member be a pointer to a const array
> of const pointers, rather than mutable array of const pointers.
> 
> Cc: Jean Delvare <jdelvare@suse.com>
> Cc: Guenter Roeck <linux@roeck-us.net>
> Cc: linux-hwmon@vger.kernel.org
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  include/linux/hwmon.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h
> index c1b62384b6ee..492dd27a5dd8 100644
> --- a/include/linux/hwmon.h
> +++ b/include/linux/hwmon.h
> @@ -430,7 +430,7 @@ struct hwmon_channel_info {
>   */
>  struct hwmon_chip_info {
>  	const struct hwmon_ops *ops;
> -	const struct hwmon_channel_info **info;
> +	const struct hwmon_channel_info * const *info;

As pointed out by 0-day, you's also have to change each
instance where this is is assigned to another variable.

Guenter

>  };
>  
>  /* hwmon_device_register() is deprecated */
> -- 
> 2.39.1
>
Jani Nikula March 9, 2023, 11:14 a.m. UTC | #3
On Thu, 09 Mar 2023, Guenter Roeck <linux@roeck-us.net> wrote:
> On Thu, Mar 09, 2023 at 10:28:41AM +0200, Jani Nikula wrote:
>> Let the struct hwmon_chip_info info member be a pointer to a const array
>> of const pointers, rather than mutable array of const pointers.
>> 
>> Cc: Jean Delvare <jdelvare@suse.com>
>> Cc: Guenter Roeck <linux@roeck-us.net>
>> Cc: linux-hwmon@vger.kernel.org
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>  include/linux/hwmon.h | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h
>> index c1b62384b6ee..492dd27a5dd8 100644
>> --- a/include/linux/hwmon.h
>> +++ b/include/linux/hwmon.h
>> @@ -430,7 +430,7 @@ struct hwmon_channel_info {
>>   */
>>  struct hwmon_chip_info {
>>  	const struct hwmon_ops *ops;
>> -	const struct hwmon_channel_info **info;
>> +	const struct hwmon_channel_info * const *info;
>
> As pointed out by 0-day, you's also have to change each
> instance where this is is assigned to another variable.

Ah, sorry, I had THERMAL_OF=n.

BR,
Jani.


>
> Guenter
>
>>  };
>>  
>>  /* hwmon_device_register() is deprecated */
>> -- 
>> 2.39.1
>>
kernel test robot March 9, 2023, 11:44 a.m. UTC | #4
Hi Jani,

I love your patch! Perhaps something to improve:

[auto build test WARNING on groeck-staging/hwmon-next]
[also build test WARNING on linus/master v6.3-rc1 next-20230309]
[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/Jani-Nikula/hwmon-constify-struct-hwmon_chip_info-info-member-harder/20230309-163328
base:   https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link:    https://lore.kernel.org/r/20230309082841.400118-1-jani.nikula%40intel.com
patch subject: [PATCH] hwmon: constify struct hwmon_chip_info info member harder
config: x86_64-randconfig-a011 (https://download.01.org/0day-ci/archive/20230309/202303091901.0BoQeZI2-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-8) 11.3.0
reproduce (this is a W=1 build):
        # https://github.com/intel-lab-lkp/linux/commit/1ec9eaf0281f0a40044492700b7cdfe99d35d35e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Jani-Nikula/hwmon-constify-struct-hwmon_chip_info-info-member-harder/20230309-163328
        git checkout 1ec9eaf0281f0a40044492700b7cdfe99d35d35e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 O=build_dir ARCH=x86_64 olddefconfig
        make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/hwmon/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303091901.0BoQeZI2-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/hwmon/hwmon.c: In function 'hwmon_thermal_set_trips':
>> drivers/hwmon/hwmon.c:177:50: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
     177 |         const struct hwmon_channel_info **info = chip->info;
         |                                                  ^~~~
   drivers/hwmon/hwmon.c: In function 'hwmon_thermal_register_sensors':
   drivers/hwmon/hwmon.c:256:50: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
     256 |         const struct hwmon_channel_info **info = chip->info;
         |                                                  ^~~~


vim +/const +177 drivers/hwmon/hwmon.c

d560168b5d0fb4a Guenter Roeck   2015-08-26  171  
e5181331359d931 Daniel Lezcano  2022-08-05  172  static int hwmon_thermal_set_trips(struct thermal_zone_device *tz, int low, int high)
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  173  {
e5181331359d931 Daniel Lezcano  2022-08-05  174  	struct hwmon_thermal_data *tdata = tz->devdata;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  175  	struct hwmon_device *hwdev = to_hwmon_device(tdata->dev);
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  176  	const struct hwmon_chip_info *chip = hwdev->chip;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23 @177  	const struct hwmon_channel_info **info = chip->info;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  178  	unsigned int i;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  179  	int err;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  180  
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  181  	if (!chip->ops->write)
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  182  		return 0;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  183  
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  184  	for (i = 0; info[i] && info[i]->type != hwmon_temp; i++)
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  185  		continue;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  186  
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  187  	if (!info[i])
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  188  		return 0;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  189  
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  190  	if (info[i]->config[tdata->index] & HWMON_T_MIN) {
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  191  		err = chip->ops->write(tdata->dev, hwmon_temp,
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  192  				       hwmon_temp_min, tdata->index, low);
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  193  		if (err && err != -EOPNOTSUPP)
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  194  			return err;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  195  	}
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  196  
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  197  	if (info[i]->config[tdata->index] & HWMON_T_MAX) {
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  198  		err = chip->ops->write(tdata->dev, hwmon_temp,
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  199  				       hwmon_temp_max, tdata->index, high);
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  200  		if (err && err != -EOPNOTSUPP)
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  201  			return err;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  202  	}
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  203  
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  204  	return 0;
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  205  }
a5f6c0f85a09f46 Dmitry Osipenko 2021-06-23  206
Guenter Roeck March 9, 2023, 4:13 p.m. UTC | #5
On Thu, Mar 09, 2023 at 01:14:28PM +0200, Jani Nikula wrote:
> On Thu, 09 Mar 2023, Guenter Roeck <linux@roeck-us.net> wrote:
> > On Thu, Mar 09, 2023 at 10:28:41AM +0200, Jani Nikula wrote:
> >> Let the struct hwmon_chip_info info member be a pointer to a const array
> >> of const pointers, rather than mutable array of const pointers.
> >> 
> >> Cc: Jean Delvare <jdelvare@suse.com>
> >> Cc: Guenter Roeck <linux@roeck-us.net>
> >> Cc: linux-hwmon@vger.kernel.org
> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> >> ---
> >>  include/linux/hwmon.h | 2 +-
> >>  1 file changed, 1 insertion(+), 1 deletion(-)
> >> 
> >> diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h
> >> index c1b62384b6ee..492dd27a5dd8 100644
> >> --- a/include/linux/hwmon.h
> >> +++ b/include/linux/hwmon.h
> >> @@ -430,7 +430,7 @@ struct hwmon_channel_info {
> >>   */
> >>  struct hwmon_chip_info {
> >>  	const struct hwmon_ops *ops;
> >> -	const struct hwmon_channel_info **info;
> >> +	const struct hwmon_channel_info * const *info;
> >
> > As pointed out by 0-day, you's also have to change each
> > instance where this is is assigned to another variable.
> 
> Ah, sorry, I had THERMAL_OF=n.
> 

You also didn't test compile drivers/hwmon/hwmon.c.
I had wondered about that, and 0-day now confirmed it.

Guenter

> BR,
> Jani.
> 
> 
> >
> > Guenter
> >
> >>  };
> >>  
> >>  /* hwmon_device_register() is deprecated */
> >> -- 
> >> 2.39.1
> >> 
> 
> -- 
> Jani Nikula, Intel Open Source Graphics Center
Jani Nikula March 9, 2023, 4:41 p.m. UTC | #6
On Thu, 09 Mar 2023, Guenter Roeck <linux@roeck-us.net> wrote:
> On Thu, Mar 09, 2023 at 01:14:28PM +0200, Jani Nikula wrote:
>> On Thu, 09 Mar 2023, Guenter Roeck <linux@roeck-us.net> wrote:
>> > On Thu, Mar 09, 2023 at 10:28:41AM +0200, Jani Nikula wrote:
>> >> Let the struct hwmon_chip_info info member be a pointer to a const array
>> >> of const pointers, rather than mutable array of const pointers.
>> >> 
>> >> Cc: Jean Delvare <jdelvare@suse.com>
>> >> Cc: Guenter Roeck <linux@roeck-us.net>
>> >> Cc: linux-hwmon@vger.kernel.org
>> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> >> ---
>> >>  include/linux/hwmon.h | 2 +-
>> >>  1 file changed, 1 insertion(+), 1 deletion(-)
>> >> 
>> >> diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h
>> >> index c1b62384b6ee..492dd27a5dd8 100644
>> >> --- a/include/linux/hwmon.h
>> >> +++ b/include/linux/hwmon.h
>> >> @@ -430,7 +430,7 @@ struct hwmon_channel_info {
>> >>   */
>> >>  struct hwmon_chip_info {
>> >>  	const struct hwmon_ops *ops;
>> >> -	const struct hwmon_channel_info **info;
>> >> +	const struct hwmon_channel_info * const *info;
>> >
>> > As pointed out by 0-day, you's also have to change each
>> > instance where this is is assigned to another variable.
>> 
>> Ah, sorry, I had THERMAL_OF=n.
>> 
>
> You also didn't test compile drivers/hwmon/hwmon.c.
> I had wondered about that, and 0-day now confirmed it.

I most certainly did. And as I looked into why I didn't see the failure
0-day hits I noticed THERMAL_OF=n like I said.

BR,
Jani.

>
> Guenter
>
>> BR,
>> Jani.
>> 
>> 
>> >
>> > Guenter
>> >
>> >>  };
>> >>  
>> >>  /* hwmon_device_register() is deprecated */
>> >> -- 
>> >> 2.39.1
>> >> 
>> 
>> -- 
>> Jani Nikula, Intel Open Source Graphics Center
diff mbox series

Patch

diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h
index c1b62384b6ee..492dd27a5dd8 100644
--- a/include/linux/hwmon.h
+++ b/include/linux/hwmon.h
@@ -430,7 +430,7 @@  struct hwmon_channel_info {
  */
 struct hwmon_chip_info {
 	const struct hwmon_ops *ops;
-	const struct hwmon_channel_info **info;
+	const struct hwmon_channel_info * const *info;
 };
 
 /* hwmon_device_register() is deprecated */