From nobody Fri Jan 9 00:44:45 2026 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) (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 9BFC31A2C04 for ; Mon, 5 Jan 2026 00:27:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767572828; cv=none; b=YSLLf4cxRF5kD+4wa4XyLOTOjluWgKcCTjUkpRlXhWTjGA18vAbBCbNTqHGUEEQTAI3aSQOjtvBO3RDxoCPDFZHzDCy3Mwylv2RcxvkO8YX/As+wFoTDa9MAhPYn3zqMeJ833MmELOYTtvUddKVMwvUw8//5L0ZXKY42Cwypsec= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767572828; c=relaxed/simple; bh=Mn6R5G7/0GZb7sQn1kV9FKhJoDRPHViL8xHRuPLA7ic=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MSqQQasNJU1yxFzrfmD3/Bem7sI5iOC1AcrVTF/tmr2fBnj1yn2QEfzbyICRFnEYnD0qree8loicg+JmDQUZ7lUvJmJhS/zFCFRSmYXeMaJLwNu04LVsdWyRbZYL/w1Gfg5UQL04eu2ZLOe2U55zwz0flWGFRM8jD950Uf76TUE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KohLd1BW; arc=none smtp.client-ip=209.85.215.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.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="KohLd1BW" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-c2af7d09533so6144678a12.1 for ; Sun, 04 Jan 2026 16:27:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767572825; x=1768177625; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=j8HRHCajxeLrhtL1S291ZrvpdmCzir8N7qq8yDbrsMI=; b=KohLd1BWq8iHBoGztlipypYMP2gMmh+KRL4m61bDLPm5MFHRGPZ7CJmbTN/g8LfcAA fyzJFotxBmSy7jcfp04pAI1DxlKtW1uykoDjlKUgq/YZThHdkV1eWEVF2Ne+w7OA4w4E QmC3n9VG/vgELNC36p086pzNi2g4ZRFcqpMLdkGnM/fNk7qhs0wK06LyneqmG0G0vERV 4fjevZvEarfdKHBQjd17Bkq6tI+L6Hzowa1h1YzFRL/c21Dn0752ApeiKN7dDOmqStmg EhRrseM4WTT4cADF7BFKGLVriy2mtuxNDppO36sf9KC+TvT06L1jvA8mHiSdlVWtlX3i bXxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767572825; x=1768177625; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=j8HRHCajxeLrhtL1S291ZrvpdmCzir8N7qq8yDbrsMI=; b=HrrTyCsROlita4Rixw0gFKpw8vopAlama4LKSdz3EVczOoTveYPyUM+azyEN+JR56L lBKU/HHDc7NYQcqgasCIoWDP5JeC/5aLO+M+vRYTQncEhZuVzarDonE1AnpsXmDBn1lm B/WR4xeSp1w/8LFXB+xuma5ZUpJ0ajx9w/syJhm9wFYG/wH2WCwbADDngYZULyS80zzq /Pr/0fFZt+CH7qCgPGCZWo//VXDHkauttQidY/v20Ck5TugcD1HmKzjtqGfq18ct0o2/ RVvyvG/JY5nsTFHcuYGBExjxUELuIorrVt4JxZsHiteikQDj84L2aG4K3X2VyazHDAS9 0kRg== X-Forwarded-Encrypted: i=1; AJvYcCWKnbpWWyyIQTXXSYXNgz0rS69XA6+999EFqh/VhuM6WIbqx5lweYDd5701Mh7vx13+blZCTbCYSIgPCHE=@vger.kernel.org X-Gm-Message-State: AOJu0YwpiRnKEkcs9aC/MM1fq92Wgle8b3AIxmF9BpbK/7eSoNcWwryf s6iZ+hJyoSMp9//qfh7WXXJzmEqhllAuIyHhsWbFJH/WHBq4V7EUmbRc9TNm79Uo X-Gm-Gg: AY/fxX77n0vsn/hsn5N7wCJgy2kj370/y4JQazl+xYPBuis5/1QRnaU1VyWlXgoi7tS Ab8OQe9POPCwfFuq12NFourSOrkqwbWGM5omLEDg+Ebn75Wo+To4WVTu0aVedHKWi6Js/Q/5o31 KhyO6prIfC0N0OaIsOIbcp40bD28RtCRkvQzSdcKJsxX/uSj165jWGP7+cJuL8qH9j872k4P4ev zfLggdgD1M6sw4lQllqNgScEvVxS2CzqXfb5Ar/+0wPTNWkmZU+SP8OFgwnnnB6qixWrJJirRPW ipjZB5OL6Euvf7wIXDn8IoaE8+cS1kkyYZBKEGBms9H+xCDdnNAHNwVZnndm3bPr0jpT7HfAYQ4 jz9r4TTqyWkfipUZdaAMYX6N+J1AFjfmdqh+j02CS6deS6TMRCQymLDpsnC/fOdqVfFPTX7pxUc FHSwSVz6dtecHou8I6NfxbyiwuAHBcetBMyDcujXMKtRpJj73ilT1Br1ultn6qNI4= X-Google-Smtp-Source: AGHT+IEY0zZXsw28HdBCqO5suui0ZQArzOaey4A7hNOTjMt9GTJKdAkyGN3WU76yNJIYmYwh3R5SvA== X-Received: by 2002:a05:7022:f00b:b0:11a:126f:ee78 with SMTP id a92af1059eb24-121722fd228mr49567544c88.34.1767572824695; Sun, 04 Jan 2026 16:27:04 -0800 (PST) Received: from zubuntu.bengal-mercat.ts.net ([2001:5a8:60d:bc9:9ebf:dff:fe00:f8f2]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-121724de268sm133378109c88.8.2026.01.04.16.27.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 16:27:04 -0800 (PST) From: Zac Bowling To: zbowling@gmail.com 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, ryder.lee@mediatek.com, sean.wang@mediatek.com Subject: [PATCH 13/17] wifi: mt76: mt7925: fix kernel warning in MLO ROC setup Date: Sun, 4 Jan 2026 16:26:34 -0800 Message-ID: <20260105002638.668723-14-zbowling@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260105002638.668723-1-zbowling@gmail.com> References: <20260102200524.290779-1-zbowling@gmail.com> <20260105002638.668723-1-zbowling@gmail.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" 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 958ff9da9f01..8080fea30d23 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.51.0