Message ID | 3275745.5fSG56mABF@rjwysocki.net (mailing list archive) |
---|---|
State | Mainlined, archived |
Headers | show |
Series | thermal: core: Reimplement locking through guards | expand |
On 10/10/24 23:15, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > It is not necessary to walk the thermal_instances list in a trip > descriptor under a cooling device lock, so acquire that lock only > for deleting the given thermal instance from the list of thermal > instances in the given cdev. > > Moreover, in analogy with the previous change that introduced > thermal_instance_add(), put the code deleting the given thermal > instance from the lists it is on into a separate new function > called thermal_instance_delete(). make sense > > No intentional functional impact. > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > > This is a resend of > > https://lore.kernel.org/linux-pm/2224279.Mh6RI2rZIc@rjwysocki.net/ > > --- > drivers/thermal/thermal_core.c | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) > > Index: linux-pm/drivers/thermal/thermal_core.c > =================================================================== > --- linux-pm.orig/drivers/thermal/thermal_core.c > +++ linux-pm/drivers/thermal/thermal_core.c > @@ -866,6 +866,17 @@ free_mem: > return result; > } > > +static void thermal_instance_delete(struct thermal_instance *instance) > +{ > + list_del(&instance->trip_node); > + > + mutex_lock(&instance->cdev->lock); > + > + list_del(&instance->cdev_node); > + > + mutex_unlock(&instance->cdev->lock); > +} > + > /** > * thermal_unbind_cdev_from_trip - unbind a cooling device from a thermal zone. > * @tz: pointer to a struct thermal_zone_device. > @@ -882,16 +893,12 @@ static void thermal_unbind_cdev_from_tri > { > struct thermal_instance *pos, *next; > > - mutex_lock(&cdev->lock); > list_for_each_entry_safe(pos, next, &td->thermal_instances, trip_node) { > if (pos->cdev == cdev) { > - list_del(&pos->trip_node); > - list_del(&pos->cdev_node); > - mutex_unlock(&cdev->lock); > + thermal_instance_delete(pos); > goto unbind; > } > } > - mutex_unlock(&cdev->lock); > > return; > > > > Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Index: linux-pm/drivers/thermal/thermal_core.c =================================================================== --- linux-pm.orig/drivers/thermal/thermal_core.c +++ linux-pm/drivers/thermal/thermal_core.c @@ -866,6 +866,17 @@ free_mem: return result; } +static void thermal_instance_delete(struct thermal_instance *instance) +{ + list_del(&instance->trip_node); + + mutex_lock(&instance->cdev->lock); + + list_del(&instance->cdev_node); + + mutex_unlock(&instance->cdev->lock); +} + /** * thermal_unbind_cdev_from_trip - unbind a cooling device from a thermal zone. * @tz: pointer to a struct thermal_zone_device. @@ -882,16 +893,12 @@ static void thermal_unbind_cdev_from_tri { struct thermal_instance *pos, *next; - mutex_lock(&cdev->lock); list_for_each_entry_safe(pos, next, &td->thermal_instances, trip_node) { if (pos->cdev == cdev) { - list_del(&pos->trip_node); - list_del(&pos->cdev_node); - mutex_unlock(&cdev->lock); + thermal_instance_delete(pos); goto unbind; } } - mutex_unlock(&cdev->lock); return;