* [PATCH v2 0/3] hwmon: scmi: Driver improvements and fixes
@ 2025-08-05 12:43 a.shimko
2025-08-05 12:43 ` [PATCH 1/3] hwmon: scmi: Add default case with debug output a.shimko
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: a.shimko @ 2025-08-05 12:43 UTC (permalink / raw)
To: linux-hwmon
Cc: a.shimko, linux-kernel, sudeep.holla, cristian.marussi, jdelvare,
guenter.roeck
This patch series introduces several improvements to the SCMI HWMON driver:
1. Better handling of unsupported sensor types with debug logging
2. Fixes redundant resource management in thermal registration
3. Enhanced error reporting using dev_err_probe()
The changes maintain backward compatibility while improving:
- Debugging capabilities
- Error reporting clarity
- Code maintenance
ChangeLog:
v1:
https://lore.kernel.org/linux-hwmon/20250805111840.6472-1-artyom.shimko@gmail.com/
v2:
* fix wrong cover letter and patches count in subjects
Artem Shimko (3):
hwmon: scmi: Add default case with debug output
hwmon: scmi: Remove redundant devm_kfree call
hwmon: scmi: Enhance error reporting with dev_err_probe
drivers/hwmon/scmi-hwmon.c | 45 +++++++++++++++++++++++++++-----------
1 file changed, 32 insertions(+), 13 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/3] hwmon: scmi: Add default case with debug output 2025-08-05 12:43 [PATCH v2 0/3] hwmon: scmi: Driver improvements and fixes a.shimko @ 2025-08-05 12:43 ` a.shimko 2025-08-05 13:10 ` Guenter Roeck 2025-08-06 15:12 ` kernel test robot 2025-08-05 12:43 ` [PATCH 2/3] hwmon: scmi: Remove redundant devm_kfree call a.shimko 2025-08-05 12:43 ` [PATCH 3/3] hwmon: scmi: Enhance error reporting with dev_err_probe a.shimko 2 siblings, 2 replies; 8+ messages in thread From: a.shimko @ 2025-08-05 12:43 UTC (permalink / raw) To: linux-hwmon Cc: a.shimko, linux-kernel, sudeep.holla, cristian.marussi, jdelvare, guenter.roeck From: Artem Shimko <artyom.shimko@gmail.com> Improve handling of unsupported sensor types: - Add default case in sensor type switch statement - Log skipped sensors with debug information including: * Sensor ID * Sensor type * Sensor name (if available) - Use rate-limited dev_dbg for safety Debug output format: "Skipping unsupported sensor ID:%d Type:%d (%s)" Signed-off-by: Artem Shimko <artyom.shimko@gmail.com> --- drivers/hwmon/scmi-hwmon.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c index 364199b332c0..a3b5b5c0ec25 100644 --- a/drivers/hwmon/scmi-hwmon.c +++ b/drivers/hwmon/scmi-hwmon.c @@ -275,6 +275,10 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) nr_count[type]++; break; } + default: + dev_dbg(dev, "Skipping unsupported sensor ID:%d Type:%d (%s)\n", + i, sensor->type, sensor->name ? sensor->name : "unnamed"); + continue; } if (nr_count[hwmon_temp]) @@ -323,6 +327,10 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) idx = --nr_count[type]; *(scmi_sensors->info[type] + idx) = sensor; break; + default: + dev_dbg(dev, "Skipping unsupported sensor ID:%d Type:%d (%s)\n", + i, sensor->type, sensor->name ? sensor->name : "unnamed"); + continue; } } -- 2.43.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] hwmon: scmi: Add default case with debug output 2025-08-05 12:43 ` [PATCH 1/3] hwmon: scmi: Add default case with debug output a.shimko @ 2025-08-05 13:10 ` Guenter Roeck 2025-08-06 15:12 ` kernel test robot 1 sibling, 0 replies; 8+ messages in thread From: Guenter Roeck @ 2025-08-05 13:10 UTC (permalink / raw) To: a.shimko, linux-hwmon Cc: linux-kernel, sudeep.holla, cristian.marussi, jdelvare, guenter.roeck On 8/5/25 05:43, a.shimko wrote: > From: Artem Shimko <artyom.shimko@gmail.com> > > Improve handling of unsupported sensor types: > - Add default case in sensor type switch statement > - Log skipped sensors with debug information including: > * Sensor ID > * Sensor type > * Sensor name (if available) > - Use rate-limited dev_dbg for safety > The code doesn't actually do that, and it would be pointless and make the message useless. > Debug output format: > "Skipping unsupported sensor ID:%d Type:%d (%s)" > > Signed-off-by: Artem Shimko <artyom.shimko@gmail.com> > --- > drivers/hwmon/scmi-hwmon.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c > index 364199b332c0..a3b5b5c0ec25 100644 > --- a/drivers/hwmon/scmi-hwmon.c > +++ b/drivers/hwmon/scmi-hwmon.c > @@ -275,6 +275,10 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) > nr_count[type]++; > break; > } > + default: > + dev_dbg(dev, "Skipping unsupported sensor ID:%d Type:%d (%s)\n", > + i, sensor->type, sensor->name ? sensor->name : "unnamed"); > + continue; break; > } > > if (nr_count[hwmon_temp]) > @@ -323,6 +327,10 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) > idx = --nr_count[type]; > *(scmi_sensors->info[type] + idx) = sensor; > break; > + default: > + dev_dbg(dev, "Skipping unsupported sensor ID:%d Type:%d (%s)\n", > + i, sensor->type, sensor->name ? sensor->name : "unnamed"); > + continue; break; > } > } > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] hwmon: scmi: Add default case with debug output 2025-08-05 12:43 ` [PATCH 1/3] hwmon: scmi: Add default case with debug output a.shimko 2025-08-05 13:10 ` Guenter Roeck @ 2025-08-06 15:12 ` kernel test robot 1 sibling, 0 replies; 8+ messages in thread From: kernel test robot @ 2025-08-06 15:12 UTC (permalink / raw) To: a.shimko, linux-hwmon Cc: oe-kbuild-all, a.shimko, linux-kernel, sudeep.holla, cristian.marussi, jdelvare, guenter.roeck Hi a.shimko, kernel test robot noticed the following build errors: [auto build test ERROR on groeck-staging/hwmon-next] [also build test ERROR on linus/master v6.16 next-20250806] [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/a-shimko/hwmon-scmi-Add-default-case-with-debug-output/20250806-122638 base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next patch link: https://lore.kernel.org/r/20250805125003.12573-2-artyom.shimko%40gmail.com patch subject: [PATCH 1/3] hwmon: scmi: Add default case with debug output config: arc-randconfig-001-20250806 (https://download.01.org/0day-ci/archive/20250806/202508062201.bWDZGD03-lkp@intel.com/config) compiler: arc-linux-gcc (GCC) 12.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250806/202508062201.bWDZGD03-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202508062201.bWDZGD03-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/hwmon/scmi-hwmon.c: In function 'scmi_hwmon_probe': >> drivers/hwmon/scmi-hwmon.c:278:17: error: 'default' label not within a switch statement 278 | default: | ^~~~~~~ vim +/default +278 drivers/hwmon/scmi-hwmon.c 228 229 static int scmi_hwmon_probe(struct scmi_device *sdev) 230 { 231 int i, idx; 232 u16 nr_sensors; 233 enum hwmon_sensor_types type; 234 struct scmi_sensors *scmi_sensors; 235 const struct scmi_sensor_info *sensor; 236 int nr_count[hwmon_max] = {0}, nr_types = 0, nr_count_temp = 0; 237 const struct hwmon_chip_info *chip_info; 238 struct device *hwdev, *dev = &sdev->dev; 239 struct hwmon_channel_info *scmi_hwmon_chan; 240 const struct hwmon_channel_info **ptr_scmi_ci; 241 const struct scmi_handle *handle = sdev->handle; 242 struct scmi_protocol_handle *ph; 243 244 if (!handle) 245 return -ENODEV; 246 247 sensor_ops = handle->devm_protocol_get(sdev, SCMI_PROTOCOL_SENSOR, &ph); 248 if (IS_ERR(sensor_ops)) 249 return PTR_ERR(sensor_ops); 250 251 nr_sensors = sensor_ops->count_get(ph); 252 if (!nr_sensors) 253 return -EIO; 254 255 scmi_sensors = devm_kzalloc(dev, sizeof(*scmi_sensors), GFP_KERNEL); 256 if (!scmi_sensors) 257 return -ENOMEM; 258 259 scmi_sensors->ph = ph; 260 261 for (i = 0; i < nr_sensors; i++) { 262 sensor = sensor_ops->info_get(ph, i); 263 if (!sensor) 264 return -EINVAL; 265 266 switch (sensor->type) { 267 case TEMPERATURE_C: 268 case VOLTAGE: 269 case CURRENT: 270 case POWER: 271 case ENERGY: 272 type = scmi_types[sensor->type]; 273 if (!nr_count[type]) 274 nr_types++; 275 nr_count[type]++; 276 break; 277 } > 278 default: 279 dev_dbg(dev, "Skipping unsupported sensor ID:%d Type:%d (%s)\n", 280 i, sensor->type, sensor->name ? sensor->name : "unnamed"); 281 continue; 282 } 283 284 if (nr_count[hwmon_temp]) 285 nr_count_temp = nr_count[hwmon_temp]; 286 287 scmi_hwmon_chan = devm_kcalloc(dev, nr_types, sizeof(*scmi_hwmon_chan), 288 GFP_KERNEL); 289 if (!scmi_hwmon_chan) 290 return -ENOMEM; 291 292 ptr_scmi_ci = devm_kcalloc(dev, nr_types + 1, sizeof(*ptr_scmi_ci), 293 GFP_KERNEL); 294 if (!ptr_scmi_ci) 295 return -ENOMEM; 296 297 scmi_chip_info.info = ptr_scmi_ci; 298 chip_info = &scmi_chip_info; 299 300 for (type = 0; type < hwmon_max; type++) { 301 if (!nr_count[type]) 302 continue; 303 304 scmi_hwmon_add_chan_info(scmi_hwmon_chan, dev, nr_count[type], 305 type, hwmon_attributes[type]); 306 *ptr_scmi_ci++ = scmi_hwmon_chan++; 307 308 scmi_sensors->info[type] = 309 devm_kcalloc(dev, nr_count[type], 310 sizeof(*scmi_sensors->info), GFP_KERNEL); 311 if (!scmi_sensors->info[type]) 312 return -ENOMEM; 313 } 314 315 for (i = nr_sensors - 1; i >= 0 ; i--) { 316 sensor = sensor_ops->info_get(ph, i); 317 if (!sensor) 318 continue; 319 320 switch (sensor->type) { 321 case TEMPERATURE_C: 322 case VOLTAGE: 323 case CURRENT: 324 case POWER: 325 case ENERGY: 326 type = scmi_types[sensor->type]; 327 idx = --nr_count[type]; 328 *(scmi_sensors->info[type] + idx) = sensor; 329 break; 330 default: 331 dev_dbg(dev, "Skipping unsupported sensor ID:%d Type:%d (%s)\n", 332 i, sensor->type, sensor->name ? sensor->name : "unnamed"); 333 continue; 334 } 335 } 336 337 hwdev = devm_hwmon_device_register_with_info(dev, "scmi_sensors", 338 scmi_sensors, chip_info, 339 NULL); 340 if (IS_ERR(hwdev)) 341 return PTR_ERR(hwdev); 342 343 for (i = 0; i < nr_count_temp; i++) { 344 int ret; 345 346 sensor = *(scmi_sensors->info[hwmon_temp] + i); 347 if (!sensor) 348 continue; 349 350 /* 351 * Warn on any misconfiguration related to thermal zones but 352 * bail out of probing only on memory errors. 353 */ 354 ret = scmi_thermal_sensor_register(dev, ph, sensor); 355 if (ret) { 356 if (ret == -ENOMEM) 357 return ret; 358 dev_warn(dev, 359 "Thermal zone misconfigured for %s. err=%d\n", 360 sensor->name, ret); 361 } 362 } 363 364 return 0; 365 } 366 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] hwmon: scmi: Remove redundant devm_kfree call 2025-08-05 12:43 [PATCH v2 0/3] hwmon: scmi: Driver improvements and fixes a.shimko 2025-08-05 12:43 ` [PATCH 1/3] hwmon: scmi: Add default case with debug output a.shimko @ 2025-08-05 12:43 ` a.shimko 2025-08-05 13:13 ` Guenter Roeck 2025-08-05 12:43 ` [PATCH 3/3] hwmon: scmi: Enhance error reporting with dev_err_probe a.shimko 2 siblings, 1 reply; 8+ messages in thread From: a.shimko @ 2025-08-05 12:43 UTC (permalink / raw) To: linux-hwmon Cc: a.shimko, linux-kernel, sudeep.holla, cristian.marussi, jdelvare, guenter.roeck From: Artem Shimko <artyom.shimko@gmail.com> Fix potential resource management issue by: - Removing unnecessary devm_kfree() call in error path - Relying on devres automatic cleanup - Preserving all error handling logic Rationale: - Memory was allocated with devm_kzalloc() - devm_ thermal registration manages its own resources - Double-free could occur during probe failure Signed-off-by: Artem Shimko <artyom.shimko@gmail.com> --- drivers/hwmon/scmi-hwmon.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c index a3b5b5c0ec25..d03174922e65 100644 --- a/drivers/hwmon/scmi-hwmon.c +++ b/drivers/hwmon/scmi-hwmon.c @@ -211,8 +211,6 @@ static int scmi_thermal_sensor_register(struct device *dev, tzd = devm_thermal_of_zone_register(dev, th_sensor->info->id, th_sensor, &scmi_hwmon_thermal_ops); if (IS_ERR(tzd)) { - devm_kfree(dev, th_sensor); - if (PTR_ERR(tzd) != -ENODEV) return PTR_ERR(tzd); -- 2.43.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] hwmon: scmi: Remove redundant devm_kfree call 2025-08-05 12:43 ` [PATCH 2/3] hwmon: scmi: Remove redundant devm_kfree call a.shimko @ 2025-08-05 13:13 ` Guenter Roeck 0 siblings, 0 replies; 8+ messages in thread From: Guenter Roeck @ 2025-08-05 13:13 UTC (permalink / raw) To: a.shimko, linux-hwmon Cc: linux-kernel, sudeep.holla, cristian.marussi, jdelvare, guenter.roeck On 8/5/25 05:43, a.shimko wrote: > From: Artem Shimko <artyom.shimko@gmail.com> > > Fix potential resource management issue by: > - Removing unnecessary devm_kfree() call in error path > - Relying on devres automatic cleanup > - Preserving all error handling logic > > Rationale: > - Memory was allocated with devm_kzalloc() > - devm_ thermal registration manages its own resources > - Double-free could occur during probe failure The reason for calling devm_kfree() is to avoid holding the memory unnecessarily until the driver deregisters. There is no double free since the code calls devm_kfree(), not kfree(). The reasoning is wrong, and the patch does not add value. Guenter > > Signed-off-by: Artem Shimko <artyom.shimko@gmail.com> > --- > drivers/hwmon/scmi-hwmon.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c > index a3b5b5c0ec25..d03174922e65 100644 > --- a/drivers/hwmon/scmi-hwmon.c > +++ b/drivers/hwmon/scmi-hwmon.c > @@ -211,8 +211,6 @@ static int scmi_thermal_sensor_register(struct device *dev, > tzd = devm_thermal_of_zone_register(dev, th_sensor->info->id, th_sensor, > &scmi_hwmon_thermal_ops); > if (IS_ERR(tzd)) { > - devm_kfree(dev, th_sensor); > - > if (PTR_ERR(tzd) != -ENODEV) > return PTR_ERR(tzd); > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] hwmon: scmi: Enhance error reporting with dev_err_probe 2025-08-05 12:43 [PATCH v2 0/3] hwmon: scmi: Driver improvements and fixes a.shimko 2025-08-05 12:43 ` [PATCH 1/3] hwmon: scmi: Add default case with debug output a.shimko 2025-08-05 12:43 ` [PATCH 2/3] hwmon: scmi: Remove redundant devm_kfree call a.shimko @ 2025-08-05 12:43 ` a.shimko 2025-08-05 13:20 ` Guenter Roeck 2 siblings, 1 reply; 8+ messages in thread From: a.shimko @ 2025-08-05 12:43 UTC (permalink / raw) To: linux-hwmon Cc: a.shimko, linux-kernel, sudeep.holla, cristian.marussi, jdelvare, guenter.roeck From: Artem Shimko <artyom.shimko@gmail.com> Replace error returns with dev_err_probe() throughout driver: - Add descriptive error messages for all failure cases - Include relevant context (sensor IDs, types etc) - Standardize error reporting format Improved messages include: - "No valid sensor info for index %d" - "Failed to allocate channel info array" - "SCMI protocol ops not initialized" Signed-off-by: Artem Shimko <artyom.shimko@gmail.com> --- drivers/hwmon/scmi-hwmon.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c index d03174922e65..081502418dfa 100644 --- a/drivers/hwmon/scmi-hwmon.c +++ b/drivers/hwmon/scmi-hwmon.c @@ -240,26 +240,36 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) struct scmi_protocol_handle *ph; if (!handle) - return -ENODEV; + return dev_err_probe(dev, -ENODEV, "SCMI device handle is NULL\n"); sensor_ops = handle->devm_protocol_get(sdev, SCMI_PROTOCOL_SENSOR, &ph); - if (IS_ERR(sensor_ops)) - return PTR_ERR(sensor_ops); + if (IS_ERR_OR_NULL(sensor_ops)) { + if (IS_ERR(sensor_ops)) + return dev_err_probe(dev, PTR_ERR(sensor_ops), + "SCMI sensor protocol acquisition failed\n"); + return dev_err_probe(dev, -EPROTO, + "SCMI sensor protocol ops structure unexpectedly NULL\n"); + } + + if (!sensor_ops->info_get || !sensor_ops->count_get) + return dev_err_probe(dev, -ENOENT, + "SCMI sensor protocol operations are not initialized\n"); nr_sensors = sensor_ops->count_get(ph); if (!nr_sensors) - return -EIO; + return dev_err_probe(dev, -EIO, "No sensors found\n"); scmi_sensors = devm_kzalloc(dev, sizeof(*scmi_sensors), GFP_KERNEL); if (!scmi_sensors) - return -ENOMEM; + return dev_err_probe(dev, -ENOMEM, "Failed to allocate scmi_sensors structure\n"); scmi_sensors->ph = ph; for (i = 0; i < nr_sensors; i++) { sensor = sensor_ops->info_get(ph, i); if (!sensor) - return -EINVAL; + return dev_err_probe(dev, -EINVAL, + "Failed to get sensor info for sensor %d\n", i); switch (sensor->type) { case TEMPERATURE_C: @@ -285,12 +295,12 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) scmi_hwmon_chan = devm_kcalloc(dev, nr_types, sizeof(*scmi_hwmon_chan), GFP_KERNEL); if (!scmi_hwmon_chan) - return -ENOMEM; + return dev_err_probe(dev, -ENOMEM, "Failed to allocate channel info array\n"); ptr_scmi_ci = devm_kcalloc(dev, nr_types + 1, sizeof(*ptr_scmi_ci), GFP_KERNEL); if (!ptr_scmi_ci) - return -ENOMEM; + return dev_err_probe(dev, -ENOMEM, "Failed to allocate channel info pointers\n"); scmi_chip_info.info = ptr_scmi_ci; chip_info = &scmi_chip_info; @@ -307,7 +317,8 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) devm_kcalloc(dev, nr_count[type], sizeof(*scmi_sensors->info), GFP_KERNEL); if (!scmi_sensors->info[type]) - return -ENOMEM; + return dev_err_probe(dev, -ENOMEM, + "Failed to allocate sensor info for type %d\n", type); } for (i = nr_sensors - 1; i >= 0 ; i--) { @@ -336,7 +347,7 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) scmi_sensors, chip_info, NULL); if (IS_ERR(hwdev)) - return PTR_ERR(hwdev); + return dev_err_probe(dev, PTR_ERR(hwdev), "Failed to register hwmon device\n"); for (i = 0; i < nr_count_temp; i++) { int ret; @@ -352,7 +363,9 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) ret = scmi_thermal_sensor_register(dev, ph, sensor); if (ret) { if (ret == -ENOMEM) - return ret; + return dev_err_probe(dev, ret, + "Failed to allocate memory for thermal zone\n"); + dev_warn(dev, "Thermal zone misconfigured for %s. err=%d\n", sensor->name, ret); -- 2.43.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] hwmon: scmi: Enhance error reporting with dev_err_probe 2025-08-05 12:43 ` [PATCH 3/3] hwmon: scmi: Enhance error reporting with dev_err_probe a.shimko @ 2025-08-05 13:20 ` Guenter Roeck 0 siblings, 0 replies; 8+ messages in thread From: Guenter Roeck @ 2025-08-05 13:20 UTC (permalink / raw) To: a.shimko, linux-hwmon Cc: linux-kernel, sudeep.holla, cristian.marussi, jdelvare, guenter.roeck On 8/5/25 05:43, a.shimko wrote: > From: Artem Shimko <artyom.shimko@gmail.com> > > Replace error returns with dev_err_probe() throughout driver: > - Add descriptive error messages for all failure cases > - Include relevant context (sensor IDs, types etc) > - Standardize error reporting format > > Improved messages include: > - "No valid sensor info for index %d" > - "Failed to allocate channel info array" > - "SCMI protocol ops not initialized" > > Signed-off-by: Artem Shimko <artyom.shimko@gmail.com> > --- > drivers/hwmon/scmi-hwmon.c | 35 ++++++++++++++++++++++++----------- > 1 file changed, 24 insertions(+), 11 deletions(-) > > diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c > index d03174922e65..081502418dfa 100644 > --- a/drivers/hwmon/scmi-hwmon.c > +++ b/drivers/hwmon/scmi-hwmon.c > @@ -240,26 +240,36 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) > struct scmi_protocol_handle *ph; > > if (!handle) > - return -ENODEV; > + return dev_err_probe(dev, -ENODEV, "SCMI device handle is NULL\n"); -ENODEV is not supposed to log an error message. > > sensor_ops = handle->devm_protocol_get(sdev, SCMI_PROTOCOL_SENSOR, &ph); > - if (IS_ERR(sensor_ops)) > - return PTR_ERR(sensor_ops); > + if (IS_ERR_OR_NULL(sensor_ops)) { This never returns NULL, and AFAIS no other driver checks for it. Why add this unnecessary check ? > + if (IS_ERR(sensor_ops)) > + return dev_err_probe(dev, PTR_ERR(sensor_ops), > + "SCMI sensor protocol acquisition failed\n"); > + return dev_err_probe(dev, -EPROTO, > + "SCMI sensor protocol ops structure unexpectedly NULL\n"); > + } > + > + if (!sensor_ops->info_get || !sensor_ops->count_get) > + return dev_err_probe(dev, -ENOENT, > + "SCMI sensor protocol operations are not initialized\n"); It is not this driver's responsibility to validate sensor_ops. > > nr_sensors = sensor_ops->count_get(ph); > if (!nr_sensors) > - return -EIO; > + return dev_err_probe(dev, -EIO, "No sensors found\n"); > > scmi_sensors = devm_kzalloc(dev, sizeof(*scmi_sensors), GFP_KERNEL); > if (!scmi_sensors) > - return -ENOMEM; > + return dev_err_probe(dev, -ENOMEM, "Failed to allocate scmi_sensors structure\n"); -ENOMEM is not supposed to log an error message. > > scmi_sensors->ph = ph; > > for (i = 0; i < nr_sensors; i++) { > sensor = sensor_ops->info_get(ph, i); > if (!sensor) > - return -EINVAL; > + return dev_err_probe(dev, -EINVAL, > + "Failed to get sensor info for sensor %d\n", i); > > switch (sensor->type) { > case TEMPERATURE_C: > @@ -285,12 +295,12 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) > scmi_hwmon_chan = devm_kcalloc(dev, nr_types, sizeof(*scmi_hwmon_chan), > GFP_KERNEL); > if (!scmi_hwmon_chan) > - return -ENOMEM; > + return dev_err_probe(dev, -ENOMEM, "Failed to allocate channel info array\n"); Same as above. > > ptr_scmi_ci = devm_kcalloc(dev, nr_types + 1, sizeof(*ptr_scmi_ci), > GFP_KERNEL); > if (!ptr_scmi_ci) > - return -ENOMEM; > + return dev_err_probe(dev, -ENOMEM, "Failed to allocate channel info pointers\n"); Same as above. > > scmi_chip_info.info = ptr_scmi_ci; > chip_info = &scmi_chip_info; > @@ -307,7 +317,8 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) > devm_kcalloc(dev, nr_count[type], > sizeof(*scmi_sensors->info), GFP_KERNEL); > if (!scmi_sensors->info[type]) > - return -ENOMEM; > + return dev_err_probe(dev, -ENOMEM, > + "Failed to allocate sensor info for type %d\n", type); And again. > } > > for (i = nr_sensors - 1; i >= 0 ; i--) { > @@ -336,7 +347,7 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) > scmi_sensors, chip_info, > NULL); > if (IS_ERR(hwdev)) > - return PTR_ERR(hwdev); > + return dev_err_probe(dev, PTR_ERR(hwdev), "Failed to register hwmon device\n"); > > for (i = 0; i < nr_count_temp; i++) { > int ret; > @@ -352,7 +363,9 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) > ret = scmi_thermal_sensor_register(dev, ph, sensor); > if (ret) { > if (ret == -ENOMEM) > - return ret; > + return dev_err_probe(dev, ret, > + "Failed to allocate memory for thermal zone\n"); > + And again. > dev_warn(dev, > "Thermal zone misconfigured for %s. err=%d\n", > sensor->name, ret); ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-08-06 15:12 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-08-05 12:43 [PATCH v2 0/3] hwmon: scmi: Driver improvements and fixes a.shimko 2025-08-05 12:43 ` [PATCH 1/3] hwmon: scmi: Add default case with debug output a.shimko 2025-08-05 13:10 ` Guenter Roeck 2025-08-06 15:12 ` kernel test robot 2025-08-05 12:43 ` [PATCH 2/3] hwmon: scmi: Remove redundant devm_kfree call a.shimko 2025-08-05 13:13 ` Guenter Roeck 2025-08-05 12:43 ` [PATCH 3/3] hwmon: scmi: Enhance error reporting with dev_err_probe a.shimko 2025-08-05 13:20 ` Guenter Roeck
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.