Messages in this thread | | | Date | Wed, 19 Oct 2022 21:53:50 +0200 | Subject | Re: [PATCH v5 01/33] thermal/of: Rework the thermal device tree initialization | From | Daniel Lezcano <> |
| |
Hi Ido,
On 18/10/2022 12:29, Ido Schimmel wrote: > On Fri, Aug 05, 2022 at 12:43:17AM +0200, Daniel Lezcano wrote: >> +struct thermal_zone_device *thermal_of_zone_register(struct device_node *sensor, int id, void *data, >> + const struct thermal_zone_device_ops *ops) >> +{ >> + struct thermal_zone_device *tz; >> + struct thermal_trip *trips; >> + struct thermal_zone_params *tzp; >> + struct thermal_zone_device_ops *of_ops; >> + struct device_node *np; >> + int delay, pdelay; >> + int ntrips, mask; >> + int ret; >> + >> + of_ops = kmemdup(ops, sizeof(*ops), GFP_KERNEL); >> + if (!of_ops) >> + return ERR_PTR(-ENOMEM); >> + >> + np = of_thermal_zone_find(sensor, id); >> + if (IS_ERR(np)) { >> + pr_err("Failed to find thermal zone for %pOFn id=%d\n", sensor, id); >> + return ERR_CAST(np); >> + } >> + >> + trips = thermal_of_trips_init(np, &ntrips); >> + if (IS_ERR(trips)) { >> + pr_err("Failed to find trip points for %pOFn id=%d\n", sensor, id); >> + return ERR_CAST(trips); >> + } >> + >> + ret = thermal_of_monitor_init(np, &delay, &pdelay); >> + if (ret) { >> + pr_err("Failed to initialize monitoring delays from %pOFn\n", np); >> + goto out_kfree_trips; >> + } >> + >> + tzp = thermal_of_parameters_init(np); >> + if (IS_ERR(tzp)) { >> + ret = PTR_ERR(tzp); >> + pr_err("Failed to initialize parameter from %pOFn: %d\n", np, ret); >> + goto out_kfree_trips; >> + } >> + >> + of_ops->get_trip_type = of_ops->get_trip_type ? : of_thermal_get_trip_type; >> + of_ops->get_trip_temp = of_ops->get_trip_temp ? : of_thermal_get_trip_temp; >> + of_ops->get_trip_hyst = of_ops->get_trip_hyst ? : of_thermal_get_trip_hyst; >> + of_ops->set_trip_hyst = of_ops->set_trip_hyst ? : of_thermal_set_trip_hyst; >> + of_ops->get_crit_temp = of_ops->get_crit_temp ? : of_thermal_get_crit_temp; >> + of_ops->bind = thermal_of_bind; >> + of_ops->unbind = thermal_of_unbind; >> + >> + mask = GENMASK_ULL((ntrips) - 1, 0); >> + >> + tz = thermal_zone_device_register_with_trips(np->name, trips, ntrips, >> + mask, data, of_ops, tzp, >> + pdelay, delay); >> + if (IS_ERR(tz)) { >> + ret = PTR_ERR(tz); >> + pr_err("Failed to register thermal zone %pOFn: %d\n", np, ret); >> + goto out_kfree_tzp; >> + } >> + >> + ret = thermal_zone_device_enable(tz); >> + if (ret) { >> + pr_err("Failed to enabled thermal zone '%s', id=%d: %d\n", >> + tz->type, tz->id, ret); >> + thermal_of_zone_unregister(tz); >> + return ERR_PTR(ret); >> + } >> + >> + return tz; >> + >> +out_kfree_tzp: >> + kfree(tzp); >> +out_kfree_trips: >> + kfree(trips); >> + >> + return ERR_PTR(ret); >> +} >> +EXPORT_SYMBOL_GPL(thermal_of_zone_register); > > Daniel, I started seeing these memory leaks [1] since commit > 613ed3f67609 ("hwmon: pm_bus: core: Switch to new of thermal API"). > Seems to be fixed by the following patch [2]. > > Do you already have a patch for this issue or should I submit it?
Thanks for reporting the issue. If you can submit it, that would be great
| |