Message ID | 3284830.aeNJFYEL58@kreacher |
---|---|
State | Superseded |
Headers | show |
Series | thermal: Store trips table and ops in thermal_zone_device | expand |
On Mon, Feb 05, 2024 at 10:20:32PM +0100, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > Because thermal zone operations are now stored directly in struct > thermal_zone_device, thermal zone creators can discard the operations > structure after the zone registration is complete, or it can be made > read-only. > > Accordingly, make int340x_thermal_zone_add() use a local variable to > represent thermal zone operations, so it is freed automatically upon the > function exit, and make the other Intel thermal drivers use const zone > operations structures. > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com> > --- > drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c | 26 ++-------- > drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h | 1 > drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c | 2 > drivers/thermal/intel/intel_pch_thermal.c | 2 > drivers/thermal/intel/intel_quark_dts_thermal.c | 2 > drivers/thermal/intel/intel_soc_dts_iosf.c | 2 > drivers/thermal/intel/x86_pkg_temp_thermal.c | 2 > 7 files changed, 11 insertions(+), 26 deletions(-) > > Index: linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c > =================================================================== > --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c > +++ linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c > @@ -61,12 +61,6 @@ static void int340x_thermal_critical(str > dev_dbg(&zone->device, "%s: critical temperature reached\n", zone->type); > } > > -static struct thermal_zone_device_ops int340x_thermal_zone_ops = { > - .get_temp = int340x_thermal_get_zone_temp, > - .set_trip_temp = int340x_thermal_set_trip_temp, > - .critical = int340x_thermal_critical, > -}; > - > static inline void *int_to_trip_priv(int i) > { > return (void *)(long)i; > @@ -126,6 +120,11 @@ static struct thermal_zone_params int340 > struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev, > int (*get_temp) (struct thermal_zone_device *, int *)) > { > + const struct thermal_zone_device_ops zone_ops = { > + .set_trip_temp = int340x_thermal_set_trip_temp, > + .critical = int340x_thermal_critical, > + .get_temp = get_temp ? get_temp : int340x_thermal_get_zone_temp, > + }; > struct int34x_thermal_zone *int34x_zone; > struct thermal_trip *zone_trips; > unsigned long long trip_cnt = 0; > @@ -140,16 +139,6 @@ struct int34x_thermal_zone *int340x_ther > > int34x_zone->adev = adev; > > - int34x_zone->ops = kmemdup(&int340x_thermal_zone_ops, > - sizeof(int340x_thermal_zone_ops), GFP_KERNEL); > - if (!int34x_zone->ops) { > - ret = -ENOMEM; > - goto err_ops_alloc; > - } > - > - if (get_temp) > - int34x_zone->ops->get_temp = get_temp; > - > status = acpi_evaluate_integer(adev->handle, "PATC", NULL, &trip_cnt); > if (ACPI_SUCCESS(status)) { > int34x_zone->aux_trip_nr = trip_cnt; > @@ -185,7 +174,7 @@ struct int34x_thermal_zone *int340x_ther > acpi_device_bid(adev), > zone_trips, trip_cnt, > trip_mask, int34x_zone, > - int34x_zone->ops, > + &zone_ops, > &int340x_thermal_params, > 0, 0); > kfree(zone_trips); > @@ -205,8 +194,6 @@ err_enable: > err_thermal_zone: > acpi_lpat_free_conversion_table(int34x_zone->lpat_table); > err_trips_alloc: > - kfree(int34x_zone->ops); > -err_ops_alloc: > kfree(int34x_zone); > return ERR_PTR(ret); > } > @@ -216,7 +203,6 @@ void int340x_thermal_zone_remove(struct > { > thermal_zone_device_unregister(int34x_zone->zone); > acpi_lpat_free_conversion_table(int34x_zone->lpat_table); > - kfree(int34x_zone->ops); > kfree(int34x_zone); > } > EXPORT_SYMBOL_GPL(int340x_thermal_zone_remove); > Index: linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h > =================================================================== > --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h > +++ linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h > @@ -22,7 +22,6 @@ struct int34x_thermal_zone { > struct acpi_device *adev; > int aux_trip_nr; > struct thermal_zone_device *zone; > - struct thermal_zone_device_ops *ops; > void *priv_data; > struct acpi_lpat_conversion_table *lpat_table; > }; > Index: linux-pm/drivers/thermal/intel/intel_pch_thermal.c > =================================================================== > --- linux-pm.orig/drivers/thermal/intel/intel_pch_thermal.c > +++ linux-pm/drivers/thermal/intel/intel_pch_thermal.c > @@ -131,7 +131,7 @@ static void pch_critical(struct thermal_ > thermal_zone_device_type(tzd)); > } > > -static struct thermal_zone_device_ops tzd_ops = { > +static const struct thermal_zone_device_ops tzd_ops = { > .get_temp = pch_thermal_get_temp, > .critical = pch_critical, > }; > Index: linux-pm/drivers/thermal/intel/intel_quark_dts_thermal.c > =================================================================== > --- linux-pm.orig/drivers/thermal/intel/intel_quark_dts_thermal.c > +++ linux-pm/drivers/thermal/intel/intel_quark_dts_thermal.c > @@ -292,7 +292,7 @@ static int sys_change_mode(struct therma > return ret; > } > > -static struct thermal_zone_device_ops tzone_ops = { > +static const struct thermal_zone_device_ops tzone_ops = { > .get_temp = sys_get_curr_temp, > .set_trip_temp = sys_set_trip_temp, > .change_mode = sys_change_mode, > Index: linux-pm/drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c > =================================================================== > --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c > +++ linux-pm/drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c > @@ -233,7 +233,7 @@ static int get_trip_temp(struct proc_the > return temp; > } > > -static struct thermal_zone_device_ops tzone_ops = { > +static const struct thermal_zone_device_ops tzone_ops = { > .get_temp = sys_get_curr_temp, > .set_trip_temp = sys_set_trip_temp, > }; > Index: linux-pm/drivers/thermal/intel/intel_soc_dts_iosf.c > =================================================================== > --- linux-pm.orig/drivers/thermal/intel/intel_soc_dts_iosf.c > +++ linux-pm/drivers/thermal/intel/intel_soc_dts_iosf.c > @@ -168,7 +168,7 @@ static int sys_get_curr_temp(struct ther > return 0; > } > > -static struct thermal_zone_device_ops tzone_ops = { > +static const struct thermal_zone_device_ops tzone_ops = { > .get_temp = sys_get_curr_temp, > .set_trip_temp = sys_set_trip_temp, > }; > Index: linux-pm/drivers/thermal/intel/x86_pkg_temp_thermal.c > =================================================================== > --- linux-pm.orig/drivers/thermal/intel/x86_pkg_temp_thermal.c > +++ linux-pm/drivers/thermal/intel/x86_pkg_temp_thermal.c > @@ -166,7 +166,7 @@ sys_set_trip_temp(struct thermal_zone_de > } > > /* Thermal zone callback registry */ > -static struct thermal_zone_device_ops tzone_ops = { > +static const struct thermal_zone_device_ops tzone_ops = { > .get_temp = sys_get_curr_temp, > .set_trip_temp = sys_set_trip_temp, > }; > > >
Index: linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c +++ linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c @@ -61,12 +61,6 @@ static void int340x_thermal_critical(str dev_dbg(&zone->device, "%s: critical temperature reached\n", zone->type); } -static struct thermal_zone_device_ops int340x_thermal_zone_ops = { - .get_temp = int340x_thermal_get_zone_temp, - .set_trip_temp = int340x_thermal_set_trip_temp, - .critical = int340x_thermal_critical, -}; - static inline void *int_to_trip_priv(int i) { return (void *)(long)i; @@ -126,6 +120,11 @@ static struct thermal_zone_params int340 struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev, int (*get_temp) (struct thermal_zone_device *, int *)) { + const struct thermal_zone_device_ops zone_ops = { + .set_trip_temp = int340x_thermal_set_trip_temp, + .critical = int340x_thermal_critical, + .get_temp = get_temp ? get_temp : int340x_thermal_get_zone_temp, + }; struct int34x_thermal_zone *int34x_zone; struct thermal_trip *zone_trips; unsigned long long trip_cnt = 0; @@ -140,16 +139,6 @@ struct int34x_thermal_zone *int340x_ther int34x_zone->adev = adev; - int34x_zone->ops = kmemdup(&int340x_thermal_zone_ops, - sizeof(int340x_thermal_zone_ops), GFP_KERNEL); - if (!int34x_zone->ops) { - ret = -ENOMEM; - goto err_ops_alloc; - } - - if (get_temp) - int34x_zone->ops->get_temp = get_temp; - status = acpi_evaluate_integer(adev->handle, "PATC", NULL, &trip_cnt); if (ACPI_SUCCESS(status)) { int34x_zone->aux_trip_nr = trip_cnt; @@ -185,7 +174,7 @@ struct int34x_thermal_zone *int340x_ther acpi_device_bid(adev), zone_trips, trip_cnt, trip_mask, int34x_zone, - int34x_zone->ops, + &zone_ops, &int340x_thermal_params, 0, 0); kfree(zone_trips); @@ -205,8 +194,6 @@ err_enable: err_thermal_zone: acpi_lpat_free_conversion_table(int34x_zone->lpat_table); err_trips_alloc: - kfree(int34x_zone->ops); -err_ops_alloc: kfree(int34x_zone); return ERR_PTR(ret); } @@ -216,7 +203,6 @@ void int340x_thermal_zone_remove(struct { thermal_zone_device_unregister(int34x_zone->zone); acpi_lpat_free_conversion_table(int34x_zone->lpat_table); - kfree(int34x_zone->ops); kfree(int34x_zone); } EXPORT_SYMBOL_GPL(int340x_thermal_zone_remove); Index: linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h +++ linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h @@ -22,7 +22,6 @@ struct int34x_thermal_zone { struct acpi_device *adev; int aux_trip_nr; struct thermal_zone_device *zone; - struct thermal_zone_device_ops *ops; void *priv_data; struct acpi_lpat_conversion_table *lpat_table; }; Index: linux-pm/drivers/thermal/intel/intel_pch_thermal.c =================================================================== --- linux-pm.orig/drivers/thermal/intel/intel_pch_thermal.c +++ linux-pm/drivers/thermal/intel/intel_pch_thermal.c @@ -131,7 +131,7 @@ static void pch_critical(struct thermal_ thermal_zone_device_type(tzd)); } -static struct thermal_zone_device_ops tzd_ops = { +static const struct thermal_zone_device_ops tzd_ops = { .get_temp = pch_thermal_get_temp, .critical = pch_critical, }; Index: linux-pm/drivers/thermal/intel/intel_quark_dts_thermal.c =================================================================== --- linux-pm.orig/drivers/thermal/intel/intel_quark_dts_thermal.c +++ linux-pm/drivers/thermal/intel/intel_quark_dts_thermal.c @@ -292,7 +292,7 @@ static int sys_change_mode(struct therma return ret; } -static struct thermal_zone_device_ops tzone_ops = { +static const struct thermal_zone_device_ops tzone_ops = { .get_temp = sys_get_curr_temp, .set_trip_temp = sys_set_trip_temp, .change_mode = sys_change_mode, Index: linux-pm/drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c +++ linux-pm/drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c @@ -233,7 +233,7 @@ static int get_trip_temp(struct proc_the return temp; } -static struct thermal_zone_device_ops tzone_ops = { +static const struct thermal_zone_device_ops tzone_ops = { .get_temp = sys_get_curr_temp, .set_trip_temp = sys_set_trip_temp, }; Index: linux-pm/drivers/thermal/intel/intel_soc_dts_iosf.c =================================================================== --- linux-pm.orig/drivers/thermal/intel/intel_soc_dts_iosf.c +++ linux-pm/drivers/thermal/intel/intel_soc_dts_iosf.c @@ -168,7 +168,7 @@ static int sys_get_curr_temp(struct ther return 0; } -static struct thermal_zone_device_ops tzone_ops = { +static const struct thermal_zone_device_ops tzone_ops = { .get_temp = sys_get_curr_temp, .set_trip_temp = sys_set_trip_temp, }; Index: linux-pm/drivers/thermal/intel/x86_pkg_temp_thermal.c =================================================================== --- linux-pm.orig/drivers/thermal/intel/x86_pkg_temp_thermal.c +++ linux-pm/drivers/thermal/intel/x86_pkg_temp_thermal.c @@ -166,7 +166,7 @@ sys_set_trip_temp(struct thermal_zone_de } /* Thermal zone callback registry */ -static struct thermal_zone_device_ops tzone_ops = { +static const struct thermal_zone_device_ops tzone_ops = { .get_temp = sys_get_curr_temp, .set_trip_temp = sys_set_trip_temp, };