From nobody Mon Feb 9 13:58:07 2026 Received: from mail-dy1-f181.google.com (mail-dy1-f181.google.com [74.125.82.181]) (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 9F89F3191C0 for ; Fri, 16 Jan 2026 01:05:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768525550; cv=none; b=fbDYxHc34pLpP9OIPvCdKMfQnGYlv4DaxGA9GyluZREdayZ4mY6mIz0phq1v0Tgv4qIT18KWMwiuWXn4V2zaiFDlVEhzYpHZE6D7DbeO93X1gWDQArXXYj8K4HWht7gihIf4ZVvAG68cmlpb40TuIY60SKdvB28VPRUydeTaeZk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768525550; c=relaxed/simple; bh=THp17qwz/s7EuMJZ0CTg83KqAMU4k3KM+VZ16LR1b8Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IMMwDWw/w4VB+s42ypFlCN3Y0Pc3fW+l+YUgyxIWsuzEFwah2Dfbu7QPh9UNiH4HzB7K6f/waLSpzEQ9iMqjt4wuDtHGUYPCeprPRm15ZrcbeAfFY+RPXpe0yPINcursQFNmd77DVfe5yDX0h08nBoasuw5SHINkHbSWr9yFGUI= 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=Uz2aKADe; arc=none smtp.client-ip=74.125.82.181 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="Uz2aKADe" Received: by mail-dy1-f181.google.com with SMTP id 5a478bee46e88-2ae61424095so1666655eec.1 for ; Thu, 15 Jan 2026 17:05:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768525543; x=1769130343; 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=JxAIadq5UWGlyJvy2LxwAuNLP4e79ezvRvh2d89gw+s=; b=Uz2aKADeHtxbbg/eqh+megtI7cZm0ZofdtV9+eWnHla/X7B5c536TId2yAetKIBqqp uGdZnDMfMjZfpfqk/TN4idWv03NXRz8lQSQkRY0nxvKBZFTfOEgC/5Cwn5JxiOYJ2p4/ bNwi/GCH3DyDawlBm/EZZom2St/1ze5sbJnxsriOtHdXkPkkqnco8BBegm4WM5gRwz6k aZA/KibnLjrcvfD1TBxyQ/rTNS7MKaUDcyf0Sh+kVqyUT9CMV4xyBe8L1A/ah7zowqDZ uQQRa/X2+QroK/w1A33ovTrvnMrEIWp96r7e1TSIocdVPiC+fDZWVtbE/E6pxPfL1u2B XsMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768525543; x=1769130343; 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=JxAIadq5UWGlyJvy2LxwAuNLP4e79ezvRvh2d89gw+s=; b=D+6AsGmLnul2HjLm5sznbw1MM6/f+VcKG01stUTDq0ldWcK0gAv25Mzi1k7sjFJHIT DuZ/CoK1FAG/MdtstPWgRVxX+SseE9QkKENHY5cdkrut1aZMzEpKLJhqW6L6QAA6KY0D iKxVvJRvYlVAp1NcDvgYoI7bTvJx4z46/yk5SrsDfl8gMA7fXnKGDU3KSKofiEMXDDpo B5dXqLa9cdeGfET3quFLZbHQou03o7sxYdm0/z/nTsw2MjTiN+jP3077Gfvb32QftFaW PqycEwTawSqjtSA5o2dCM9l9f8+j2E5jNn+iMeLbL5xkBHtIt/uXpvqL821XxuNf1k2g jOrw== X-Forwarded-Encrypted: i=1; AJvYcCUyXMqm2rac85jTRHY1/M5wJsW3SS+tctQdb7XJCPOvQUVC4eLWbXjHKnTuXebdlu6bItwmtdhq7kKCi/g=@vger.kernel.org X-Gm-Message-State: AOJu0YxsXtIBsLJzDXQBLzqjuNlCbyiwSwu2KdRY9xaepKgKO5mdM3+m BaoOYuNFTRD/dqVO6n1bPwIoTuK4SMd0VldMXVu9eX9NZJjr5nwrgng5 X-Gm-Gg: AY/fxX5miUgQEM2QLqiWESMULVU4d7m7HVFg+hUU37GSLMf+V1x13FHa9m25sk1jx+z VzUoYsv3h3HgIJEMneetwe6E9br6ANYBfqt3Fkz+MZH0EV08ewcP3iGR+8AmwKOnfxpGoHfHsHI Wrnp830Vr+MSy0ppAqiZsW3wvh1mQeOOZqOGUK1rCe3hyic2+WC5kNC9rI8kOPC2aoSHt/xNfaE 7u2odYsjxDzOrmXQSvbcXfivKtDpO7rNDHzaIP2YbYuMieflT6+TALklSWZ7pCwWU0So3NsVNmk h19F2v9+OPq+M6AvA7R4QdFU5i79ZwSWmoyeAEHbdRryb1YfmnRzsrQ/vCqXfzHIopbs9hSFxkm dTBdRkodCajHdr2SpaZsUcboeXfb2S0K+9rGvTu4A2SSZlMGgsD0HPylkR28BuSPMmjNNN90P72 Kagv/f/Bt1R9eMjfvXSA3m28RS44mDF+a7JnlAQf+aiorPVEUSrrrN2i+mbZbwRA== X-Received: by 2002:a05:7300:6d1f:b0:2ae:5cb2:cc11 with SMTP id 5a478bee46e88-2b6b46d33b4mr1489936eec.6.1768525542657; Thu, 15 Jan 2026 17:05:42 -0800 (PST) Received: from zcache.home.zacbowling.com ([2001:5a8:60d:bc9:f1d2:502c:a6ff:5556]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2b6b367cbc9sm1019884eec.32.2026.01.15.17.05.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 17:05:41 -0800 (PST) Sender: Zac Bowling From: Zac To: sean.wang@kernel.org Cc: deren.wu@mediatek.com, kvalo@kernel.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-wireless@vger.kernel.org, lorenzo@kernel.org, nbd@nbd.name, linux@frame.work, ryder.lee@mediatek.com, sean.wang@mediatek.com, Zac Bowling , Zac Bowling Subject: [PATCH v4 13/21] wifi: mt76: mt7925: fix kernel warning in MLO ROC setup Date: Thu, 15 Jan 2026 17:05:11 -0800 Message-ID: <20260116010519.37001-14-zac@zacbowling.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260116010519.37001-1-zac@zacbowling.com> References: <20260116010519.37001-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" From: Zac Bowling mt7925_mcu_set_mlo_roc() uses WARN_ON_ONCE() to check if link_conf or channel is NULL. However, during MLO AP setup, it's normal for the channel to not be configured yet when this function is called. The WARN_ON_ONCE triggers a kernel warning/oops that makes the system appear to have crashed, even though it's just a timing issue. Example kernel oops during AP setup: WARNING: CPU: 0 PID: 12345 at drivers/net/wireless/mediatek/mt76/mt7925/m= cu.c:1345 Call Trace: mt7925_mcu_set_mlo_roc+0x... mt7925_remain_on_channel+0x... Replace WARN_ON_ONCE with regular NULL checks and return -ENOLINK to indicate the link is not fully configured yet. This allows the upper layers to retry when the link is ready, without spamming the kernel log with warnings. Also add a check for mconf in the first loop to match the pattern used in the second loop, preventing potential NULL dereference. This fixes kernel oops reported during MLO AP setup on OpenWrt with MT7925E hardware and similar issues on standard Linux distributions. Fixes: c5d11e4a9fa8 ("wifi: mt76: mt7925: add mt7925_change_vif_links") Link: https://github.com/openwrt/mt76/issues/1014 Signed-off-by: Zac Bowling --- .../net/wireless/mediatek/mt76/mt7925/mcu.c | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c b/drivers/net/= wireless/mediatek/mt76/mt7925/mcu.c index 958ff9da9f..8080fea30d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c @@ -1337,15 +1337,23 @@ int mt7925_mcu_set_mlo_roc(struct mt792x_bss_conf *= mconf, u16 sel_links, for (i =3D 0; i < ARRAY_SIZE(links); i++) { links[i].id =3D i ? __ffs(~BIT(mconf->link_id) & sel_links) : mconf->link_id; + link_conf =3D mt792x_vif_to_bss_conf(vif, links[i].id); - if (WARN_ON_ONCE(!link_conf)) - return -EPERM; + if (!link_conf) + return -ENOLINK; =20 links[i].chan =3D link_conf->chanreq.oper.chan; - if (WARN_ON_ONCE(!links[i].chan)) - return -EPERM; + if (!links[i].chan) + /* Channel not configured yet - this can happen during + * MLO AP setup when links are being added sequentially. + * Return -ENOLINK to indicate link not ready. + */ + return -ENOLINK; =20 links[i].mconf =3D mt792x_vif_to_link(mvif, links[i].id); + if (!links[i].mconf) + return -ENOLINK; + links[i].tag =3D links[i].id =3D=3D mconf->link_id ? UNI_ROC_ACQUIRE : UNI_ROC_SUB_LINK; =20 @@ -1359,8 +1367,8 @@ int mt7925_mcu_set_mlo_roc(struct mt792x_bss_conf *mc= onf, u16 sel_links, type =3D MT7925_ROC_REQ_JOIN; =20 for (i =3D 0; i < ARRAY_SIZE(links) && i < hweight16(vif->active_links); = i++) { - if (WARN_ON_ONCE(!links[i].mconf || !links[i].chan)) - continue; + if (!links[i].mconf || !links[i].chan) + return -ENOLINK; =20 chan =3D links[i].chan; center_ch =3D ieee80211_frequency_to_channel(chan->center_freq); --=20 2.52.0