Re: [PATCH v2] platform/x86/amd/hsmp: switch to use device_add_groups()

From: Hans de Goede
Date: Fri Feb 02 2024 - 02:49:54 EST


Hi Greg,

On 2/2/24 03:44, Greg Kroah-Hartman wrote:
> The use of devm_*() functions works properly for when the device
> structure itself is dynamic, but the hsmp driver is attempting to have a
> local, static, struct device and then calls devm_() functions attaching
> memory to the device that will never be freed.

As I mentioned in my reply to v1, this is not correct.

There is a global data struct, but that holds a struct device
pointer, not the device struct.

The device itself is created with platform_device_alloc() +
platform_device_add() from module-init and it is removed
on module-exit by calling platform_device_unregister()

So AFAICT this should keep using the devm_ variant to properly
cleanup the sysfs attributes.

But what this really needs is to be converted to using
amd_hsmp_driver.driver.dev_groups rather then manually
calling devm_device_add_groups() I have already asked
Suma Hegde (AMD) to take a look at this.

Regards,

Hans





>
> The logic of having a static struct device is almost never a wise
> choice, but for now, just remove the use of devm_device_add_groups() in
> this driver as it obviously is not needed.
>
> Cc: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@xxxxxxx>
> Cc: Carlos Bilbao <carlos.bilbao@xxxxxxx>
> Cc: Hans de Goede <hdegoede@xxxxxxxxxx>
> Cc: "Ilpo Järvinen" <ilpo.jarvinen@xxxxxxxxxxxxxxx>
> Cc: platform-driver-x86@xxxxxxxxxxxxxxx
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> ---
> v2: rebased against platform/for-next
>
> drivers/platform/x86/amd/hsmp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/platform/x86/amd/hsmp.c b/drivers/platform/x86/amd/hsmp.c
> index 1927be901108..d84ea66eecc6 100644
> --- a/drivers/platform/x86/amd/hsmp.c
> +++ b/drivers/platform/x86/amd/hsmp.c
> @@ -693,7 +693,7 @@ static int hsmp_create_non_acpi_sysfs_if(struct device *dev)
> hsmp_create_attr_list(attr_grp, dev, i);
> }
>
> - return devm_device_add_groups(dev, hsmp_attr_grps);
> + return device_add_groups(dev, hsmp_attr_grps);
> }
>
> static int hsmp_create_acpi_sysfs_if(struct device *dev)