mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
wifi: mt76: mt7921s: fix a potential firmware freeze during startup
The maximum command quota of the firmware may be exceeded because the command to retrieve the quota setting has not been taken into account. This patch considers not only the quota usage of the command retrieving quota settings but also limits the total quota usage. Signed-off-by: Leon Yen <leon.yen@mediatek.com> Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com> Link: https://patch.msgid.link/20240916060157.10157-1-mingyen.hsieh@mediatek.com Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
5a569e9016
commit
fbce6136da
|
|
@ -636,6 +636,7 @@ struct mt76_sdio {
|
|||
u8 hw_ver;
|
||||
wait_queue_head_t wait;
|
||||
|
||||
int pse_mcu_quota_max;
|
||||
struct {
|
||||
int pse_data_quota;
|
||||
int ple_data_quota;
|
||||
|
|
|
|||
|
|
@ -507,7 +507,10 @@ static void mt7921_mcu_parse_tx_resource(struct mt76_dev *dev,
|
|||
|
||||
tx_res = (struct mt7921_tx_resource *)skb->data;
|
||||
sdio->sched.pse_data_quota = le32_to_cpu(tx_res->pse_data_quota);
|
||||
sdio->sched.pse_mcu_quota = le32_to_cpu(tx_res->pse_mcu_quota);
|
||||
sdio->pse_mcu_quota_max = le32_to_cpu(tx_res->pse_mcu_quota);
|
||||
/* The mcu quota usage of this function itself must be taken into consideration */
|
||||
sdio->sched.pse_mcu_quota =
|
||||
sdio->sched.pse_mcu_quota ? sdio->pse_mcu_quota_max : sdio->pse_mcu_quota_max - 1;
|
||||
sdio->sched.ple_data_quota = le32_to_cpu(tx_res->ple_data_quota);
|
||||
sdio->sched.pse_page_size = le16_to_cpu(tx_res->pse_page_size);
|
||||
sdio->sched.deficit = tx_res->pp_padding;
|
||||
|
|
|
|||
|
|
@ -46,6 +46,10 @@ static int mt76s_refill_sched_quota(struct mt76_dev *dev, u32 *data)
|
|||
return 0;
|
||||
|
||||
sdio->sched.pse_mcu_quota += pse_mcu_quota;
|
||||
if (sdio->pse_mcu_quota_max &&
|
||||
sdio->sched.pse_mcu_quota > sdio->pse_mcu_quota_max) {
|
||||
sdio->sched.pse_mcu_quota = sdio->pse_mcu_quota_max;
|
||||
}
|
||||
sdio->sched.pse_data_quota += pse_data_quota;
|
||||
sdio->sched.ple_data_quota += ple_data_quota;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user