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 <[email protected]>
Cc: Guenter Roeck <[email protected]>
Cc: [email protected]
Signed-off-by: Jani Nikula <[email protected]>
---
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;
};
/* hwmon_device_register() is deprecated */
--
2.39.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/[email protected]/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 <[email protected]>
| Link: https://lore.kernel.org/oe-kbuild-all/[email protected]/
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
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
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 <[email protected]>
> Cc: Guenter Roeck <[email protected]>
> Cc: [email protected]
> Signed-off-by: Jani Nikula <[email protected]>
> ---
> 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
>
On Thu, 09 Mar 2023, Guenter Roeck <[email protected]> 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 <[email protected]>
>> Cc: Guenter Roeck <[email protected]>
>> Cc: [email protected]
>> Signed-off-by: Jani Nikula <[email protected]>
>> ---
>> 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
>>
--
Jani Nikula, Intel Open Source Graphics Center
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/[email protected]/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 <[email protected]>
| Link: https://lore.kernel.org/oe-kbuild-all/[email protected]/
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
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
On Thu, Mar 09, 2023 at 01:14:28PM +0200, Jani Nikula wrote:
> On Thu, 09 Mar 2023, Guenter Roeck <[email protected]> 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 <[email protected]>
> >> Cc: Guenter Roeck <[email protected]>
> >> Cc: [email protected]
> >> Signed-off-by: Jani Nikula <[email protected]>
> >> ---
> >> 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
On Thu, 09 Mar 2023, Guenter Roeck <[email protected]> wrote:
> On Thu, Mar 09, 2023 at 01:14:28PM +0200, Jani Nikula wrote:
>> On Thu, 09 Mar 2023, Guenter Roeck <[email protected]> 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 <[email protected]>
>> >> Cc: Guenter Roeck <[email protected]>
>> >> Cc: [email protected]
>> >> Signed-off-by: Jani Nikula <[email protected]>
>> >> ---
>> >> 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
--
Jani Nikula, Intel Open Source Graphics Center