lkml.org 
[lkml]   [2024]   [May]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 4/6] thermal: trip: Use READ_ONCE() for lockless access to trip properties
    Date
    From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

    When accessing trip temperature and hysteresis without locking, it is
    better to use READ_ONCE() to prevent compiler optimizations possibly
    affecting the read from being applied.

    Of course, for the READ_ONCE() to be effective, WRITE_ONCE() needs to
    be used when updating their values.

    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    ---
    drivers/thermal/thermal_sysfs.c | 6 +++---
    drivers/thermal/thermal_trip.c | 2 +-
    2 files changed, 4 insertions(+), 4 deletions(-)

    Index: linux-pm/drivers/thermal/thermal_sysfs.c
    ===================================================================
    --- linux-pm.orig/drivers/thermal/thermal_sysfs.c
    +++ linux-pm/drivers/thermal/thermal_sysfs.c
    @@ -141,7 +141,7 @@ trip_point_temp_show(struct device *dev,
    if (sscanf(attr->attr.name, "trip_point_%d_temp", &trip_id) != 1)
    return -EINVAL;

    - return sprintf(buf, "%d\n", tz->trips[trip_id].trip.temperature);
    + return sprintf(buf, "%d\n", READ_ONCE(tz->trips[trip_id].trip.temperature));
    }

    static ssize_t
    @@ -165,7 +165,7 @@ trip_point_hyst_store(struct device *dev
    trip = &tz->trips[trip_id].trip;

    if (hyst != trip->hysteresis) {
    - trip->hysteresis = hyst;
    + WRITE_ONCE(trip->hysteresis, hyst);

    thermal_zone_trip_updated(tz, trip);
    }
    @@ -185,7 +185,7 @@ trip_point_hyst_show(struct device *dev,
    if (sscanf(attr->attr.name, "trip_point_%d_hyst", &trip_id) != 1)
    return -EINVAL;

    - return sprintf(buf, "%d\n", tz->trips[trip_id].trip.hysteresis);
    + return sprintf(buf, "%d\n", READ_ONCE(tz->trips[trip_id].trip.hysteresis));
    }

    static ssize_t
    Index: linux-pm/drivers/thermal/thermal_trip.c
    ===================================================================
    --- linux-pm.orig/drivers/thermal/thermal_trip.c
    +++ linux-pm/drivers/thermal/thermal_trip.c
    @@ -161,7 +161,7 @@ void thermal_zone_set_trip_temp(struct t
    if (trip->temperature == temp)
    return;

    - trip->temperature = temp;
    + WRITE_ONCE(trip->temperature, temp);
    thermal_notify_tz_trip_change(tz, trip);
    }
    EXPORT_SYMBOL_GPL(thermal_zone_set_trip_temp);



    \
     
     \ /
      Last update: 2024-05-27 18:24    [W:6.083 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site