From nobody Mon Feb 9 19:52:19 2026 Received: from mail-dl1-f45.google.com (mail-dl1-f45.google.com [74.125.82.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C98F637BE74 for ; Thu, 29 Jan 2026 08:18:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769674734; cv=none; b=N3/eXQULukXdGoLqTcfnZC29KLd12/WJKdWUgd1B6K2vMcdjF+smGe6C1Es6VgTSL3IP/bLpRlIrWuqAob20R5e2+VxYVofZSPtdm/vAvH5uRXNL1TTt6Qq9UwzFpuzaXimo1PUcAeDvmu3etVhTTLrbHBl5QW1Sav4Ipb+lwlc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769674734; c=relaxed/simple; bh=zLCOroas8zXs/FEWrMgLQ0DEsN6MpeN96pQBLNH+XAM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jPr2B2c5t1lD1/Oe5gg4GY7QUxUEXyG1SLZH1+ze46oLU2OYEc4yc7694WQzmu+Cak/BKzukZazRPdH5S3ty981213Xhph0wlXrP0vpJj2xoPh3toU2c/B2wOXgvZTiZNA+IKVpDFvpKc0zkf+gnA7EpwFHPX3MoMoeX1rmYvr0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=zacbowling.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XbOrnyCQ; arc=none smtp.client-ip=74.125.82.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=zacbowling.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XbOrnyCQ" Received: by mail-dl1-f45.google.com with SMTP id a92af1059eb24-1233c155a42so1054022c88.1 for ; Thu, 29 Jan 2026 00:18:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769674732; x=1770279532; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=sv2sCi1LhoxanCq/pgAsKlL6gjjvT4vp60gwfpl3NMU=; b=XbOrnyCQ1qaMsObaBNZE92bk0HdIORm4ZnIxtSUrQKZy83NntCu6NAkA83bV1UXOqW Dep2BUGPKAJKSLVmMZ6713nycnCKUrJf9RZe8wBhAzZNfqc641+xqhD23N9x/mg+YpVy igVqRCF3oL6rBg2iGOVqn6F4m86jDyAQGiJo1cbeJx+aUU0l3SAMcQPDo4vXyuTBO738 74m0/y3v1eFpUSk5HDv2FyBjIEK81rhqov2l7leA2SE26mw+k8Uexc4Owu0bOtnmlZKt oLduvCS8rGPl93mlPwxeoeEZVrxGoNK9EDBsO6Rx4H6PeCKh6KRtceeZ434oSwLuYmMc uWhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769674732; x=1770279532; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=sv2sCi1LhoxanCq/pgAsKlL6gjjvT4vp60gwfpl3NMU=; b=kItgAUsTNSsdjT+g8FjzBaF2sL0hEyAIR5ArO1JvOJsd3kHIQA5i4FRozVwrWPixQm XvL25ky19cTwR3iB8aWgJhJz/ed5DqgNHxwYZqicN+S9E6/J+41nQPl0WXQFv33eLUHw ik5qHA+XXo9m1d9KhO+fNcMR6DPb6ghdJYfTLI7J4i+JNDX0ioEliD/A+f7u7JSQUwHS kwCJhFo7yhHcloBa0F9qkuUZyPp62/rJQW1wg15HTHBzBsk32CTb+eoCNrCwxdj12ONG ltr53xznRZLbudGRBIHSH9pF0dAoEiIGhz61wKVXxwvPHB141NIxBJMdOTeWYj682cCk mYKw== X-Forwarded-Encrypted: i=1; AJvYcCWv8mw5ATdV2UQ59CRtWlhyJjSByDLYfu8Ka4F7LI891NYpnV1J0N339hRrIoUFJ7X9XCO5URF0N+a0opo=@vger.kernel.org X-Gm-Message-State: AOJu0YxJ8KvRF56tvIidnGFN4WikLC5vyzuLM8ZXFkvvrYZyVvjBGT7U 9oKCRoSWsVb54vpAFk35zxhOhdBskQHeXQLO/Bhu/WVlQmoXzxjFh5dk X-Gm-Gg: AZuq6aJXctKqnUZBxV+lXI6qYlBvXeY0hVt5lQUbP+HMY4CUV6a8i4nxuoTnujl5KbG jIYr+NQMxtvp4a9NjUf0joCcSgeaHspyS7BUv4AHuOh25vkDXnu/I1Japph3paWxgJ+u4NUWZly uQTUgOg4xY7GhIUX2LnW8q4dqQLyu2H60lduSkz8x3pVIEKLinRLK7l46cri7rY+wS/kbHnlykU pgF69vNiSZRBU2EBi3S+vb1ua/AMHN5Xuo0842d3imvBxLfLI0uqn0nlFJwo9tmGoqHh5a+7nZC /G++3cCZXo6Y6UO1ZChWhvZz4Odncm3HF+k3H4N/Iy2tE939HuzXCtKmgc9HhPqhrqjfc5+elqj 8XYIjVOzqAJGdc9VGp/fny+zc2B+ai2eld56XGWz3GZZHfTG1D67YcxYnyeUm2m5W061c/+WYwX /m7sFl/+cDHkwU56SjumTHYHXkqAN1OimdR4WrCuX0MCSOeaKmYYkolzkyiONSSKGFbGn1Q5U= X-Received: by 2002:a05:7022:6a0:b0:11b:9386:826c with SMTP id a92af1059eb24-124a00d64dbmr5188230c88.41.1769674731965; Thu, 29 Jan 2026 00:18:51 -0800 (PST) Received: from zcache.home.zacbowling.com ([2001:5a8:60d:bc9:f31e:1cb:296a:cc2a]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-124a9efb4casm5483508c88.16.2026.01.29.00.18.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Jan 2026 00:18:51 -0800 (PST) Sender: Zac Bowling From: Zac To: nbd@nbd.name Cc: deren.wu@mediatek.com, kvalo@kernel.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-wireless@vger.kernel.org, linux@frame.work, lorenzo@kernel.org, ryder.lee@mediatek.com, sean.wang@kernel.org, sean.wang@mediatek.com, zac@zacbowling.com, zbowling@gmail.com Subject: [PATCH v7 4/6] wifi: mt76: mt7925: add MCU command error handling in ampdu_action Date: Thu, 29 Jan 2026 00:18:37 -0800 Message-ID: <20260129081839.179709-5-zac@zacbowling.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129081839.179709-1-zac@zacbowling.com> References: <20260129081839.179709-1-zac@zacbowling.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add proper error handling for MCU command return values that were previously being ignored. Without proper error handling, failures in MCU communication can leave the driver in an inconsistent state. Changes: - Check mt7925_mcu_uni_tx_ba() return value - Check mt7925_mcu_uni_rx_ba() return value - Return error to mac80211 on failure Special case for IEEE80211_AMPDU_TX_STOP_CONT: The ieee80211_stop_tx_ba_cb_irqsafe() callback is kept unconditional because during beacon loss, the MCU command may fail but mac80211 MUST be notified to complete the BA session teardown. Otherwise the state machine gets stuck and triggers WARN in __ieee80211_stop_tx_ba_session(). This matches the behavior of mt7921 and mt7996 drivers. Fixes: c948b5da6bbe ("wifi: mt76: mt7925: add Mediatek Wi-Fi7 driver for mt= 7925 device") Signed-off-by: Zac Bowling --- drivers/net/wireless/mediatek/mt76/mt7925/main.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/main.c b/drivers/net= /wireless/mediatek/mt76/mt7925/main.c index 82de6f30ec27..8236edb1fb48 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/main.c @@ -1300,22 +1300,22 @@ mt7925_ampdu_action(struct ieee80211_hw *hw, struct= ieee80211_vif *vif, case IEEE80211_AMPDU_RX_START: mt76_rx_aggr_start(&dev->mt76, &msta->deflink.wcid, tid, ssn, params->buf_size); - mt7925_mcu_uni_rx_ba(dev, params, true); + ret =3D mt7925_mcu_uni_rx_ba(dev, params, true); break; case IEEE80211_AMPDU_RX_STOP: mt76_rx_aggr_stop(&dev->mt76, &msta->deflink.wcid, tid); - mt7925_mcu_uni_rx_ba(dev, params, false); + ret =3D mt7925_mcu_uni_rx_ba(dev, params, false); break; case IEEE80211_AMPDU_TX_OPERATIONAL: mtxq->aggr =3D true; mtxq->send_bar =3D false; - mt7925_mcu_uni_tx_ba(dev, params, true); + ret =3D mt7925_mcu_uni_tx_ba(dev, params, true); break; case IEEE80211_AMPDU_TX_STOP_FLUSH: case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT: mtxq->aggr =3D false; clear_bit(tid, &msta->deflink.wcid.ampdu_state); - mt7925_mcu_uni_tx_ba(dev, params, false); + ret =3D mt7925_mcu_uni_tx_ba(dev, params, false); break; case IEEE80211_AMPDU_TX_START: set_bit(tid, &msta->deflink.wcid.ampdu_state); @@ -1324,6 +1324,11 @@ mt7925_ampdu_action(struct ieee80211_hw *hw, struct = ieee80211_vif *vif, case IEEE80211_AMPDU_TX_STOP_CONT: mtxq->aggr =3D false; clear_bit(tid, &msta->deflink.wcid.ampdu_state); + /* MCU command may fail during beacon loss, but callback must + * always be called to complete the BA session teardown in + * mac80211. Otherwise the state machine gets stuck and triggers + * WARN in __ieee80211_stop_tx_ba_session(). + */ mt7925_mcu_uni_tx_ba(dev, params, false); ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid); break; --=20 2.52.0