• Johan Hovold's avatar
    thermal/drivers/qcom: Fix lock inversion · 59edcd91
    Johan Hovold authored
    The thermal-zone-device lock is held by core when setting trip points
    and the driver takes its chip lock in the corresponding callback.
    
    Fetching the thermal trip points using thermal_zone_get_trip() also
    involves taking the thermal-zone-device lock, which means that the chip
    lock can not be held when doing so.
    
    Drop the chip lock temporarily during probe to avoid the lock inversion
    that was detected by lockdep:
    
      ======================================================
      WARNING: possible circular locking dependency detected
      6.1.0-next-20221213 #122 Not tainted
      ------------------------------------------------------
      systemd-udevd/264 is trying to acquire lock:
      ffff741e444a0920 (&chip->lock){+.+.}-{3:3}, at: qpnp_tm_get_temp+0xb4/0x1b0 [qcom_spmi_temp_alarm]
    
      but task is already holding lock:
      ffff741e44341618 (&tz->lock){+.+.}-{3:3}, at: thermal_zone_device_update+0x2c/0x70
    
      which lock already depends on the new lock.
    
    Fixes: 78c3e2429be8 ("thermal/drivers/qcom: Use generic thermal_zone_get_trip() function")
    Signed-off-by: default avatarJohan Hovold <johan+linaro@kernel.org>
    Link: https://lore.kernel.org/r/20221214131617.2447-5-johan+linaro@kernel.orgSigned-off-by: default avatarDaniel Lezcano <daniel.lezcano@kernel.org>
    59edcd91
qcom-spmi-temp-alarm.c 11.4 KB