lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v5 01/33] thermal/of: Rework the thermal device tree initialization
    From

    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



    \
     
     \ /
      Last update: 2022-10-19 21:55    [W:2.691 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site