wifi: mt76: mt7915: hold dev->mutex while interacting with the thermal state
authorFelix Fietkau <nbd@nbd.name>
Mon, 30 Dec 2024 19:41:58 +0000 (20:41 +0100)
committerFelix Fietkau <nbd@nbd.name>
Tue, 14 Jan 2025 12:34:36 +0000 (13:34 +0100)
Avoid issuing MCU calls during a hardware restart

Link: https://patch.msgid.link/20241230194202.95065-10-nbd@nbd.name
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/init.c

index 4282857d8ce90b5d40ee2bd79ff3ac6e4b9ef087..c530435b19b59d5558edc849b064f12c4975ebad 100644 (file)
@@ -53,7 +53,9 @@ static ssize_t mt7915_thermal_temp_show(struct device *dev,
 
        switch (i) {
        case 0:
+               mutex_lock(&phy->dev->mt76.mutex);
                temperature = mt7915_mcu_get_temperature(phy);
+               mutex_unlock(&phy->dev->mt76.mutex);
                if (temperature < 0)
                        return temperature;
                /* display in millidegree celcius */
@@ -95,9 +97,8 @@ static ssize_t mt7915_thermal_temp_store(struct device *dev,
        }
 
        phy->throttle_temp[i - 1] = val;
-       mutex_unlock(&phy->dev->mt76.mutex);
-
        ret = mt7915_mcu_set_thermal_protect(phy);
+       mutex_unlock(&phy->dev->mt76.mutex);
        if (ret)
                return ret;
 
@@ -159,7 +160,9 @@ mt7915_thermal_set_cur_throttle_state(struct thermal_cooling_device *cdev,
         * cooling_device convention: 0 = no cooling, more = more cooling
         * mcu convention: 1 = max cooling, more = less cooling
         */
+       mutex_lock(&phy->dev->mt76.mutex);
        ret = mt7915_mcu_set_thermal_throttling(phy, throttling);
+       mutex_unlock(&phy->dev->mt76.mutex);
        if (ret)
                return ret;