mt76: mt7615: fix a possible race enabling/disabling runtime-pm
Similar to mt7921 driver, fix a possible race enabling/disabling runtime-pm between mt7615_pm_set() and mt7615_poll_rx(). mt7615_pm_wake_work() always schedules rx-napi callback and it will trigger mt7615_pm_power_save_work routine putting the chip in low-power state even if we are disabling runtime-pm deferring the actual chip wake at the next access. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
66ca1a7b2d
commit
6e39e9a19c
1 changed files with 11 additions and 4 deletions
|
|
@ -105,10 +105,10 @@ mt7615_pm_set(void *data, u64 val)
|
|||
if (!mt7615_firmware_offload(dev) || mt76_is_usb(&dev->mt76))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (val == pm->enable)
|
||||
return 0;
|
||||
mutex_lock(&dev->mt76.mutex);
|
||||
|
||||
mt7615_mutex_acquire(dev);
|
||||
if (val == pm->enable)
|
||||
goto out;
|
||||
|
||||
if (dev->phy.n_beacon_vif) {
|
||||
ret = -EBUSY;
|
||||
|
|
@ -119,9 +119,16 @@ mt7615_pm_set(void *data, u64 val)
|
|||
pm->stats.last_wake_event = jiffies;
|
||||
pm->stats.last_doze_event = jiffies;
|
||||
}
|
||||
/* make sure the chip is awake here and ps_work is scheduled
|
||||
* just at end of the this routine.
|
||||
*/
|
||||
pm->enable = false;
|
||||
mt76_connac_pm_wake(&dev->mphy, pm);
|
||||
|
||||
pm->enable = val;
|
||||
mt76_connac_power_save_sched(&dev->mphy, pm);
|
||||
out:
|
||||
mt7615_mutex_release(dev);
|
||||
mutex_unlock(&dev->mt76.mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue