Message ID | 20241130140454.455-3-mario.limonciello@amd.com |
---|---|
State | Superseded |
Headers | show |
Series | Add support for binding ACPI platform profile to multiple drivers | expand |
Hi Mario, kernel test robot noticed the following build warnings: [auto build test WARNING on 2ba9f676d0a2e408aef14d679984c26373bf37b7] url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/ACPI-platform-profile-Add-a-name-member-to-handlers/20241130-221102 base: 2ba9f676d0a2e408aef14d679984c26373bf37b7 patch link: https://lore.kernel.org/r/20241130140454.455-3-mario.limonciello%40amd.com patch subject: [PATCH v8 02/22] platform/x86/dell: dell-pc: Create platform device config: i386-buildonly-randconfig-003-20241130 (https://download.01.org/0day-ci/archive/20241201/202412010129.zSeGQmOm-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241201/202412010129.zSeGQmOm-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/202412010129.zSeGQmOm-lkp@intel.com/ All warnings (new ones prefixed by >>): drivers/platform/x86/dell/dell-pc.c: In function 'thermal_init': >> drivers/platform/x86/dell/dell-pc.c:252:32: warning: passing argument 1 of 'ERR_PTR' makes integer from pointer without a cast [-Wint-conversion] 252 | return ERR_PTR(platform_device); | ^~~~~~~~~~~~~~~ | | | struct platform_device * In file included from include/linux/kernfs.h:9, from include/linux/sysfs.h:16, from include/linux/kobject.h:20, from include/linux/dmi.h:6, from drivers/platform/x86/dell/dell-pc.c:15: include/linux/err.h:39:48: note: expected 'long int' but argument is of type 'struct platform_device *' 39 | static inline void * __must_check ERR_PTR(long error) | ~~~~~^~~~~ >> drivers/platform/x86/dell/dell-pc.c:252:24: warning: returning 'void *' from a function with return type 'int' makes integer from pointer without a cast [-Wint-conversion] 252 | return ERR_PTR(platform_device); | ^~~~~~~~~~~~~~~~~~~~~~~~ vim +/ERR_PTR +252 drivers/platform/x86/dell/dell-pc.c 233 234 static int thermal_init(void) 235 { 236 int ret; 237 int supported_modes; 238 239 /* If thermal commands are not supported, exit without error */ 240 if (!dell_smbios_class_is_supported(CLASS_INFO)) 241 return 0; 242 243 /* If thermal modes are not supported, exit without error */ 244 ret = thermal_get_supported_modes(&supported_modes); 245 if (ret < 0) 246 return ret; 247 if (!supported_modes) 248 return 0; 249 250 platform_device = platform_device_register_simple("dell-pc", PLATFORM_DEVID_NONE, NULL, 0); 251 if (IS_ERR(platform_device)) > 252 return ERR_PTR(platform_device); 253 254 thermal_handler = devm_kzalloc(&platform_device->dev, sizeof(*thermal_handler), GFP_KERNEL); 255 if (!thermal_handler) { 256 ret = -ENOMEM; 257 goto cleanup_platform_device; 258 } 259 thermal_handler->name = "dell-pc"; 260 thermal_handler->profile_get = thermal_platform_profile_get; 261 thermal_handler->profile_set = thermal_platform_profile_set; 262 263 if (supported_modes & DELL_QUIET) 264 set_bit(PLATFORM_PROFILE_QUIET, thermal_handler->choices); 265 if (supported_modes & DELL_COOL_BOTTOM) 266 set_bit(PLATFORM_PROFILE_COOL, thermal_handler->choices); 267 if (supported_modes & DELL_BALANCED) 268 set_bit(PLATFORM_PROFILE_BALANCED, thermal_handler->choices); 269 if (supported_modes & DELL_PERFORMANCE) 270 set_bit(PLATFORM_PROFILE_PERFORMANCE, thermal_handler->choices); 271 272 /* Clean up if failed */ 273 ret = platform_profile_register(thermal_handler); 274 if (ret) 275 goto cleanup_thermal_handler; 276 277 return 0; 278 279 cleanup_thermal_handler: 280 thermal_handler = NULL; 281 282 cleanup_platform_device: 283 platform_device_unregister(platform_device); 284 285 return ret; 286 } 287
Hi Mario, kernel test robot noticed the following build warnings: [auto build test WARNING on 2ba9f676d0a2e408aef14d679984c26373bf37b7] url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/ACPI-platform-profile-Add-a-name-member-to-handlers/20241130-221102 base: 2ba9f676d0a2e408aef14d679984c26373bf37b7 patch link: https://lore.kernel.org/r/20241130140454.455-3-mario.limonciello%40amd.com patch subject: [PATCH v8 02/22] platform/x86/dell: dell-pc: Create platform device config: x86_64-randconfig-121-20241201 (https://download.01.org/0day-ci/archive/20241201/202412011002.Hb0aRIsM-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241201/202412011002.Hb0aRIsM-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/202412011002.Hb0aRIsM-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/platform/x86/dell/dell-pc.c:252:32: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected long error @@ got struct platform_device *static [assigned] [toplevel] platform_device @@ drivers/platform/x86/dell/dell-pc.c:252:32: sparse: expected long error drivers/platform/x86/dell/dell-pc.c:252:32: sparse: got struct platform_device *static [assigned] [toplevel] platform_device >> drivers/platform/x86/dell/dell-pc.c:252:31: sparse: sparse: incorrect type in return expression (different base types) @@ expected int @@ got void * @@ drivers/platform/x86/dell/dell-pc.c:252:31: sparse: expected int drivers/platform/x86/dell/dell-pc.c:252:31: sparse: got void * vim +252 drivers/platform/x86/dell/dell-pc.c 233 234 static int thermal_init(void) 235 { 236 int ret; 237 int supported_modes; 238 239 /* If thermal commands are not supported, exit without error */ 240 if (!dell_smbios_class_is_supported(CLASS_INFO)) 241 return 0; 242 243 /* If thermal modes are not supported, exit without error */ 244 ret = thermal_get_supported_modes(&supported_modes); 245 if (ret < 0) 246 return ret; 247 if (!supported_modes) 248 return 0; 249 250 platform_device = platform_device_register_simple("dell-pc", PLATFORM_DEVID_NONE, NULL, 0); 251 if (IS_ERR(platform_device)) > 252 return ERR_PTR(platform_device); 253 254 thermal_handler = devm_kzalloc(&platform_device->dev, sizeof(*thermal_handler), GFP_KERNEL); 255 if (!thermal_handler) { 256 ret = -ENOMEM; 257 goto cleanup_platform_device; 258 } 259 thermal_handler->name = "dell-pc"; 260 thermal_handler->profile_get = thermal_platform_profile_get; 261 thermal_handler->profile_set = thermal_platform_profile_set; 262 263 if (supported_modes & DELL_QUIET) 264 set_bit(PLATFORM_PROFILE_QUIET, thermal_handler->choices); 265 if (supported_modes & DELL_COOL_BOTTOM) 266 set_bit(PLATFORM_PROFILE_COOL, thermal_handler->choices); 267 if (supported_modes & DELL_BALANCED) 268 set_bit(PLATFORM_PROFILE_BALANCED, thermal_handler->choices); 269 if (supported_modes & DELL_PERFORMANCE) 270 set_bit(PLATFORM_PROFILE_PERFORMANCE, thermal_handler->choices); 271 272 /* Clean up if failed */ 273 ret = platform_profile_register(thermal_handler); 274 if (ret) 275 goto cleanup_thermal_handler; 276 277 return 0; 278 279 cleanup_thermal_handler: 280 thermal_handler = NULL; 281 282 cleanup_platform_device: 283 platform_device_unregister(platform_device); 284 285 return ret; 286 } 287
Am 30.11.24 um 15:04 schrieb Mario Limonciello: > In order to have a device for the platform profile core to reference > create a platform device for dell-pc. > > While doing this change the memory allocation for the thermal handler > to be device managed to follow the lifecycle of that device. > > Reviewed-by: Armin Wolf <W_Armin@gmx.de> > Tested-by: Mark Pearson <mpearson-lenovo@squebb.ca> > Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> > Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca> > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> > --- > v8: > * Use IS_ERR()/ERR_PTR() > --- > drivers/platform/x86/dell/dell-pc.c | 34 ++++++++++++++++++++--------- > 1 file changed, 24 insertions(+), 10 deletions(-) > > diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c > index 3cf79e55e3129..8bacbde0f0506 100644 > --- a/drivers/platform/x86/dell/dell-pc.c > +++ b/drivers/platform/x86/dell/dell-pc.c > @@ -18,10 +18,13 @@ > #include <linux/kernel.h> > #include <linux/module.h> > #include <linux/platform_profile.h> > +#include <linux/platform_device.h> > #include <linux/slab.h> > > #include "dell-smbios.h" > > +static struct platform_device *platform_device; > + > static const struct dmi_system_id dell_device_table[] __initconst = { > { > .ident = "Dell Inc.", > @@ -244,9 +247,15 @@ static int thermal_init(void) > if (!supported_modes) > return 0; > > - thermal_handler = kzalloc(sizeof(*thermal_handler), GFP_KERNEL); > - if (!thermal_handler) > - return -ENOMEM; > + platform_device = platform_device_register_simple("dell-pc", PLATFORM_DEVID_NONE, NULL, 0); > + if (IS_ERR(platform_device)) > + return ERR_PTR(platform_device); ERR_PTR() -> PTR_ERR() With that being fixed: Reviewed-by: Armin Wolf <W_Armin@gmx.de> > + > + thermal_handler = devm_kzalloc(&platform_device->dev, sizeof(*thermal_handler), GFP_KERNEL); > + if (!thermal_handler) { > + ret = -ENOMEM; > + goto cleanup_platform_device; > + } > thermal_handler->name = "dell-pc"; > thermal_handler->profile_get = thermal_platform_profile_get; > thermal_handler->profile_set = thermal_platform_profile_set; > @@ -262,20 +271,25 @@ static int thermal_init(void) > > /* Clean up if failed */ > ret = platform_profile_register(thermal_handler); > - if (ret) { > - kfree(thermal_handler); > - thermal_handler = NULL; > - } > + if (ret) > + goto cleanup_thermal_handler; > + > + return 0; > + > +cleanup_thermal_handler: > + thermal_handler = NULL; > + > +cleanup_platform_device: > + platform_device_unregister(platform_device); > > return ret; > } > > static void thermal_cleanup(void) > { > - if (thermal_handler) { > + if (thermal_handler) > platform_profile_remove(); > - kfree(thermal_handler); > - } > + platform_device_unregister(platform_device); > } > > static int __init dell_init(void)
diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c index 3cf79e55e3129..8bacbde0f0506 100644 --- a/drivers/platform/x86/dell/dell-pc.c +++ b/drivers/platform/x86/dell/dell-pc.c @@ -18,10 +18,13 @@ #include <linux/kernel.h> #include <linux/module.h> #include <linux/platform_profile.h> +#include <linux/platform_device.h> #include <linux/slab.h> #include "dell-smbios.h" +static struct platform_device *platform_device; + static const struct dmi_system_id dell_device_table[] __initconst = { { .ident = "Dell Inc.", @@ -244,9 +247,15 @@ static int thermal_init(void) if (!supported_modes) return 0; - thermal_handler = kzalloc(sizeof(*thermal_handler), GFP_KERNEL); - if (!thermal_handler) - return -ENOMEM; + platform_device = platform_device_register_simple("dell-pc", PLATFORM_DEVID_NONE, NULL, 0); + if (IS_ERR(platform_device)) + return ERR_PTR(platform_device); + + thermal_handler = devm_kzalloc(&platform_device->dev, sizeof(*thermal_handler), GFP_KERNEL); + if (!thermal_handler) { + ret = -ENOMEM; + goto cleanup_platform_device; + } thermal_handler->name = "dell-pc"; thermal_handler->profile_get = thermal_platform_profile_get; thermal_handler->profile_set = thermal_platform_profile_set; @@ -262,20 +271,25 @@ static int thermal_init(void) /* Clean up if failed */ ret = platform_profile_register(thermal_handler); - if (ret) { - kfree(thermal_handler); - thermal_handler = NULL; - } + if (ret) + goto cleanup_thermal_handler; + + return 0; + +cleanup_thermal_handler: + thermal_handler = NULL; + +cleanup_platform_device: + platform_device_unregister(platform_device); return ret; } static void thermal_cleanup(void) { - if (thermal_handler) { + if (thermal_handler) platform_profile_remove(); - kfree(thermal_handler); - } + platform_device_unregister(platform_device); } static int __init dell_init(void)