[PATCH mt76] wifi: mt76: npu: Rely on rcu_dereference_protected() in mt76_npu_setup_tc_block_cb()

Lorenzo Bianconi lorenzo at kernel.org
Sun Nov 23 07:57:19 PST 2025


Fix the following sparse warning in mt76_npu_setup_tc_block_cb routine
running rcu_dereference_protected() to get ppe_dev pointer.

drivers/net/wireless/mediatek/mt76/npu.c:314:63: warning: incorrect type in argument 1 (different address spaces)
drivers/net/wireless/mediatek/mt76/npu.c:314:63:    expected struct airoha_ppe_dev *dev
drivers/net/wireless/mediatek/mt76/npu.c:314:63:    got struct airoha_ppe_dev [noderef] __rcu *ppe_dev

Fixes: 62f1347fa5bf6 ("wifi: mt76: Introduce the NPU generic layer")
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
 drivers/net/wireless/mediatek/mt76/npu.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/npu.c b/drivers/net/wireless/mediatek/mt76/npu.c
index df5cecd05f50366397a25f14092702513049c5d6..ec36975f6dc946f5dbc5ab6029b0574fbc602615 100644
--- a/drivers/net/wireless/mediatek/mt76/npu.c
+++ b/drivers/net/wireless/mediatek/mt76/npu.c
@@ -304,15 +304,22 @@ static int mt76_npu_setup_tc_block_cb(enum tc_setup_type type,
 				      void *type_data, void *cb_priv)
 {
 	struct mt76_phy *phy = cb_priv;
+	struct mt76_dev *dev = phy->dev;
+	struct airoha_ppe_dev *ppe_dev;
+	int err = -EOPNOTSUPP;
 
 	if (type != TC_SETUP_CLSFLOWER)
 		return -EOPNOTSUPP;
 
-	if (!mt76_ppe_device_active(phy->dev))
-		return -EOPNOTSUPP;
+	mutex_lock(&dev->mutex);
+
+	ppe_dev = rcu_dereference_protected(dev->mmio.ppe_dev, &dev->mutex);
+	if (ppe_dev)
+		err = airoha_ppe_dev_setup_tc_block_cb(ppe_dev, type_data);
+
+	mutex_unlock(&dev->mutex);
 
-	return airoha_ppe_dev_setup_tc_block_cb(phy->dev->mmio.ppe_dev,
-						type_data);
+	return err;
 }
 
 static int mt76_npu_setup_tc_block(struct mt76_phy *phy,

---
base-commit: e1ed98b1836e2bf0aba98f9790be4f3c6bca9d0d
change-id: 20251123-fix-airoha_ppe_dev-sparse-warning-66c62fdb7f72

Best regards,
-- 
Lorenzo Bianconi <lorenzo at kernel.org>




More information about the Linux-mediatek mailing list