Commit d91a1d12 authored by Armin Wolf's avatar Armin Wolf Committed by Rafael J. Wysocki
Browse files

ACPI: fan: Use platform device for devres-related actions



Device-managed resources are cleaned up when the driver unbinds from
the underlying device. In our case this is the platform device as this
driver is a platform driver. Registering device-managed resources on
the associated ACPI device will thus result in a resource leak when
this driver unbinds.

Ensure that any device-managed resources are only registered on the
platform device to ensure that they are cleaned up during removal.

Fixes: 35c50d85 ("ACPI: fan: Add hwmon support")
Signed-off-by: default avatarArmin Wolf <W_Armin@gmx.de>
Cc: 6.11+ <stable@vger.kernel.org> # 6.11+
Link: https://patch.msgid.link/20251007234149.2769-4-W_Armin@gmx.de


Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 58764259
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -65,9 +65,9 @@ int acpi_fan_create_attributes(struct acpi_device *device);
void acpi_fan_delete_attributes(struct acpi_device *device);

#if IS_REACHABLE(CONFIG_HWMON)
int devm_acpi_fan_create_hwmon(struct acpi_device *device);
int devm_acpi_fan_create_hwmon(struct device *dev);
#else
static inline int devm_acpi_fan_create_hwmon(struct acpi_device *device) { return 0; };
static inline int devm_acpi_fan_create_hwmon(struct device *dev) { return 0; };
#endif

#endif
+1 −1
Original line number Diff line number Diff line
@@ -347,7 +347,7 @@ static int acpi_fan_probe(struct platform_device *pdev)
	}

	if (fan->has_fst) {
		result = devm_acpi_fan_create_hwmon(device);
		result = devm_acpi_fan_create_hwmon(&pdev->dev);
		if (result)
			return result;

+4 −4
Original line number Diff line number Diff line
@@ -166,12 +166,12 @@ static const struct hwmon_chip_info acpi_fan_hwmon_chip_info = {
	.info = acpi_fan_hwmon_info,
};

int devm_acpi_fan_create_hwmon(struct acpi_device *device)
int devm_acpi_fan_create_hwmon(struct device *dev)
{
	struct acpi_fan *fan = acpi_driver_data(device);
	struct acpi_fan *fan = dev_get_drvdata(dev);
	struct device *hdev;

	hdev = devm_hwmon_device_register_with_info(&device->dev, "acpi_fan", fan,
						    &acpi_fan_hwmon_chip_info, NULL);
	hdev = devm_hwmon_device_register_with_info(dev, "acpi_fan", fan, &acpi_fan_hwmon_chip_info,
						    NULL);
	return PTR_ERR_OR_ZERO(hdev);
}