AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/07/22 20:23 flow patch-triage
1m Args:
null

Results:
{
  "EnableConfigs": [
    "MT7921U",
    "MT7925U"
  ],
  "FocusSymbols": [
    "mt76_phy_init",
    "mt792x_init_wiphy"
  ],
  "Reasoning": "The patch modifies the initialization logic of the MT76 wireless driver to disable the active monitor feature for MT792x devices. This is a functional change in a driver that is reachable in a virtualized environment via USB emulation (MT7921U and MT7925U).",
  "WorthFuzzing": true
}

1/1 2026/07/22 20:23 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit e499567161a7f26a7fbb4896597e762dcdef4dd3\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Wed Jul 22 20:23:45 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c\nindex 13c4e8abe28191..daa2908d844f08 100644\n--- a/drivers/net/wireless/mediatek/mt76/mac80211.c\n+++ b/drivers/net/wireless/mediatek/mt76/mac80211.c\n@@ -439,8 +439,9 @@ mt76_phy_init(struct mt76_phy *phy, struct ieee80211_hw *hw)\n \tSET_IEEE80211_DEV(hw, dev-\u003edev);\n \tSET_IEEE80211_PERM_ADDR(hw, phy-\u003emacaddr);\n \n-\twiphy-\u003efeatures |= NL80211_FEATURE_ACTIVE_MONITOR |\n-\t\t\t   NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;\n+\twiphy-\u003efeatures |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;\n+\tif (!phy-\u003eno_active_monitor)\n+\t\twiphy-\u003efeatures |= NL80211_FEATURE_ACTIVE_MONITOR;\n \twiphy-\u003eflags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH |\n \t\t\tWIPHY_FLAG_SUPPORTS_TDLS |\n \t\t\tWIPHY_FLAG_AP_UAPSD;\ndiff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h\nindex 07955555f84d83..591983078c6f57 100644\n--- a/drivers/net/wireless/mediatek/mt76/mt76.h\n+++ b/drivers/net/wireless/mediatek/mt76/mt76.h\n@@ -871,6 +871,7 @@ struct mt76_phy {\n \tstruct cfg80211_chan_def main_chandef;\n \tbool offchannel;\n \tbool radar_enabled;\n+\tbool no_active_monitor;\n \n \tstruct delayed_work roc_work;\n \tstruct ieee80211_vif *roc_vif;\ndiff --git a/drivers/net/wireless/mediatek/mt76/mt792x_core.c b/drivers/net/wireless/mediatek/mt76/mt792x_core.c\nindex b50825eccdafee..6a71a6134a54f5 100644\n--- a/drivers/net/wireless/mediatek/mt76/mt792x_core.c\n+++ b/drivers/net/wireless/mediatek/mt76/mt792x_core.c\n@@ -712,6 +712,7 @@ int mt792x_init_wiphy(struct ieee80211_hw *hw)\n \n \twiphy-\u003efeatures |= NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR |\n \t\t\t   NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR;\n+\tphy-\u003emt76-\u003eno_active_monitor = true;\n \twiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_SET_SCAN_DWELL);\n \twiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_LEGACY);\n \twiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HT);\n"
}

2/1 2026/07/22 20:23 agent patch-evaluator
1m Model:
best-expensive

Args:
null

Results:
{
  "EnableConfigs": [
    "MT7921U",
    "MT7925U"
  ],
  "FocusSymbols": [
    "mt76_phy_init",
    "mt792x_init_wiphy"
  ],
  "Reasoning": "The patch modifies the initialization logic of the MT76 wireless driver to disable the active monitor feature for MT792x devices. This is a functional change in a driver that is reachable in a virtualized environment via USB emulation (MT7921U and MT7925U).",
  "WorthFuzzing": true
}

Instruction:
You are an expert Linux kernel maintainer.
Your job is to review a provided patch series and determine
if it makes functional changes to the kernel that should be fuzzed.

IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively
use your code access tools to examine the actual source code and confirm any assumptions.

Return WorthFuzzing=false if the patch only contains:
- Modifications to Documentation/, Kconfig files, or code comments.
- Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints.
- Changes to numeric constants or macros that do not functionally alter execution flow.
- Code paths that are impossible to reach in virtualized environments like GCE or QEMU,
even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim).

If it modifies reachable core kernel logic, drivers, or architectures, use your code search
tools to verify the code can be executed, then return WorthFuzzing=true.

When returning WorthFuzzing=true, you MUST ALSO:
1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols.
   Avoid listing generic hot-path functions to prevent skewed test distributions.
2. Identify any specific CONFIG_ options required to properly test this new/modified feature.
   Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions.
   Do not list too generic configs (we already have them enabled). Only list those that
   specifically cover the modified code. List them in the EnableConfigs output array,
   and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4").
Prefer calling several tools at the same time to save round-trips.


Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.

Prompt:
For your convenience, here is the diff of the changes:
commit e499567161a7f26a7fbb4896597e762dcdef4dd3
Author: syz-cluster <triage@syzkaller.com>
Date:   Wed Jul 22 20:23:45 2026 +0000

    syz-cluster: applied patch under review

diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c
index 13c4e8abe28191..daa2908d844f08 100644
--- a/drivers/net/wireless/mediatek/mt76/mac80211.c
+++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
@@ -439,8 +439,9 @@ mt76_phy_init(struct mt76_phy *phy, struct ieee80211_hw *hw)
 	SET_IEEE80211_DEV(hw, dev->dev);
 	SET_IEEE80211_PERM_ADDR(hw, phy->macaddr);
 
-	wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR |
-			   NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
+	wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
+	if (!phy->no_active_monitor)
+		wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
 	wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH |
 			WIPHY_FLAG_SUPPORTS_TDLS |
 			WIPHY_FLAG_AP_UAPSD;
diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
index 07955555f84d83..591983078c6f57 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -871,6 +871,7 @@ struct mt76_phy {
 	struct cfg80211_chan_def main_chandef;
 	bool offchannel;
 	bool radar_enabled;
+	bool no_active_monitor;
 
 	struct delayed_work roc_work;
 	struct ieee80211_vif *roc_vif;
diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_core.c b/drivers/net/wireless/mediatek/mt76/mt792x_core.c
index b50825eccdafee..6a71a6134a54f5 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x_core.c
+++ b/drivers/net/wireless/mediatek/mt76/mt792x_core.c
@@ -712,6 +712,7 @@ int mt792x_init_wiphy(struct ieee80211_hw *hw)
 
 	wiphy->features |= NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR |
 			   NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR;
+	phy->mt76->no_active_monitor = true;
 	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_SET_SCAN_DWELL);
 	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_LEGACY);
 	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HT);

3/2 2026/07/22 20:23 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 2640
							output: 38
							thoughts: 300
						

Thoughts:
**Analyzing a Mediatek MT76 Wireless Driver Patch**

Okay, so I'm looking at this patch that tweaks the Mediatek MT76 wireless driver, specifically touching `mac80211.c`, `mt76.h`, and `mt792x_core.c`. The core of the change seems to introduce a `no_active_monitor` boolean within the `struct mt76_phy`. This boolean is then used to conditionally enable or disable the `NL80211_FEATURE_ACTIVE_MONITOR` feature during the `mt76_phy_init` process.  Essentially, it looks like they're disabling active monitor mode on this specific hardware.

My initial thought is, this is definitely functional, but it's a hardware-specific change to the Mediatek MT76 wireless driver. The real question in my mind, given that this affects a wireless driver, is *how* reachable is this driver in a virtualized environment?  Most of these hardware-specific wireless drivers, as I know, are generally not easily accessible unless we're dealing with emulation or, if it's a USB driver, through some USB emulation setup.

So, the next thing I'm doing is checking if this MT76 actually has a USB driver. I know `mt792x` is part of MT76, so I'll check inside `drivers/net/wireless/mediatek/mt76/mt792x_core.c` to see if there's any indication of USB support. The patch itself doesn't explicitly mention USB, but it's a critical factor in determining how we can realistically test or interact with this change in a controlled environment. If it's USB, we have some options. If not, it becomes a much more involved scenario.



4/2 2026/07/22 20:23 tool grepper
0m Args:
{
  "Expression": "mt792x",
  "PathPrefix": "drivers/net/wireless/mediatek/mt76/"
}

Results:
{
  "Output": "\nFull output is too long, showing 500 out of 6052 lines.\nUse more precise expression if possible.\n\ndrivers/net/wireless/mediatek/mt76/Makefile=7=obj-$(CONFIG_MT76_CONNAC_LIB) += mt76-connac-lib.o\ndrivers/net/wireless/mediatek/mt76/Makefile:8:obj-$(CONFIG_MT792x_LIB) += mt792x-lib.o\ndrivers/net/wireless/mediatek/mt76/Makefile:9:obj-$(CONFIG_MT792x_USB) += mt792x-usb.o\ndrivers/net/wireless/mediatek/mt76/Makefile-10-\n--\ndrivers/net/wireless/mediatek/mt76/Makefile=24=CFLAGS_mt76x02_trace.o := -I$(src)\ndrivers/net/wireless/mediatek/mt76/Makefile:25:CFLAGS_mt792x_trace.o := -I$(src)\ndrivers/net/wireless/mediatek/mt76/Makefile-26-\n--\ndrivers/net/wireless/mediatek/mt76/Makefile=34=mt76-connac-lib-y := mt76_connac_mcu.o mt76_connac_mac.o mt76_connac3_mac.o\ndrivers/net/wireless/mediatek/mt76/Makefile-35-\ndrivers/net/wireless/mediatek/mt76/Makefile:36:mt792x-lib-y := mt792x_core.o mt792x_mac.o mt792x_trace.o \\\ndrivers/net/wireless/mediatek/mt76/Makefile:37:\t\tmt792x_debugfs.o mt792x_dma.o\ndrivers/net/wireless/mediatek/mt76/Makefile:38:mt792x-lib-$(CONFIG_ACPI) += mt792x_acpi_sar.o\ndrivers/net/wireless/mediatek/mt76/Makefile:39:mt792x-usb-y := mt792x_usb.o\ndrivers/net/wireless/mediatek/mt76/Makefile-40-\n--\ndrivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c-6-#include \"mt76_connac_mcu.h\"\ndrivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c:7:#include \"mt792x_regs.h\"\ndrivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c-8-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=7=mt7921_reg_set(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-8-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:9:\tstruct mt792x_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-10-\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:11:\tmt792x_mutex_acquire(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-12-\tmt76_wr(dev, dev-\u003emt76.debugfs_reg, val);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:13:\tmt792x_mutex_release(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-14-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=19=mt7921_reg_get(void *data, u64 *val)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-20-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:21:\tstruct mt792x_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-22-\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:23:\tmt792x_mutex_acquire(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-24-\t*val = mt76_rr(dev, dev-\u003emt76.debugfs_reg);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:25:\tmt792x_mutex_release(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-26-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=33=mt7921_fw_debug_set(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-34-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:35:\tstruct mt792x_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-36-\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:37:\tmt792x_mutex_acquire(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-38-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-41-\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:42:\tmt792x_mutex_release(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-43-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=48=mt7921_fw_debug_get(void *data, u64 *val)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-49-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:50:\tstruct mt792x_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-51-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=57=DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug, mt7921_fw_debug_get,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-59-\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:60:DEFINE_SHOW_ATTRIBUTE(mt792x_tx_stats);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-61-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=91=mt7921_txpwr(struct seq_file *s, void *data)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-92-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:93:\tstruct mt792x_dev *dev = dev_get_drvdata(s-\u003eprivate);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-94-\tstruct mt7921_txpwr txpwr;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-96-\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:97:\tmt792x_mutex_acquire(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-98-\tret = mt7921_get_txpwr_info(dev, \u0026txpwr);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:99:\tmt792x_mutex_release(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-100-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=143=mt7921_pm_set(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-144-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:145:\tstruct mt792x_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-146-\tstruct mt76_connac_pm *pm = \u0026dev-\u003epm;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=176=mt7921_pm_get(void *data, u64 *val)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-177-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:178:\tstruct mt792x_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-179-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=188=mt7921_deep_sleep_set(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-189-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:190:\tstruct mt792x_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-191-\tstruct mt76_connac_pm *pm = \u0026dev-\u003epm;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-197-\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:198:\tmt792x_mutex_acquire(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-199-\tif (pm-\u003eds_enable_user == enable)\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-205-out:\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:206:\tmt792x_mutex_release(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-207-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=212=mt7921_deep_sleep_get(void *data, u64 *val)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-213-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:214:\tstruct mt792x_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-215-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=221=DEFINE_DEBUGFS_ATTRIBUTE(fops_ds, mt7921_deep_sleep_get,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-223-\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:224:DEFINE_DEBUGFS_ATTRIBUTE(fops_pm_idle_timeout, mt792x_pm_idle_timeout_get,\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:225:\t\t\t mt792x_pm_idle_timeout_set, \"%lld\\n\");\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-226-\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=227=static int mt7921_chip_reset(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-228-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:229:\tstruct mt792x_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-230-\tint ret = 0;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-234-\t\t/* Reset wifisys directly. */\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:235:\t\tmt792x_reset(\u0026dev-\u003emt76);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-236-\t\tbreak;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-238-\t\t/* Collect the core dump before reset wifisys. */\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:239:\t\tmt792x_mutex_acquire(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-240-\t\tret = mt76_connac_mcu_chip_config(\u0026dev-\u003emt76);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:241:\t\tmt792x_mutex_release(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-242-\t\tbreak;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c=251=mt7921s_sched_quota_read(struct seq_file *s, void *data)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-252-{\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:253:\tstruct mt792x_dev *dev = dev_get_drvdata(s-\u003eprivate);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-254-\tstruct mt76_sdio *sdio = \u0026dev-\u003emt76.sdio;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-263-\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:264:int mt7921_init_debugfs(struct mt792x_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-265-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-271-\t\tdebugfs_create_devm_seqfile(dev-\u003emt76.dev, \"xmit-queues\",\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:272:\t\t\t\t\t    dir, mt792x_queues_read);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-273-\telse\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-277-\tdebugfs_create_devm_seqfile(dev-\u003emt76.dev, \"acq\", dir,\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:278:\t\t\t\t    mt792x_queues_acq);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-279-\tdebugfs_create_devm_seqfile(dev-\u003emt76.dev, \"txpower_sku\", dir,\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-280-\t\t\t\t    mt7921_txpwr);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:281:\tdebugfs_create_file(\"tx_stats\", 0400, dir, dev, \u0026mt792x_tx_stats_fops);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-282-\tdebugfs_create_file(\"fw_debug\", 0600, dir, dev, \u0026fops_fw_debug);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-287-\tdebugfs_create_devm_seqfile(dev-\u003emt76.dev, \"runtime_pm_stats\", dir,\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c:288:\t\t\t\t    mt792x_pm_stats);\ndrivers/net/wireless/mediatek/mt76/mt7921/debugfs.c-289-\tdebugfs_create_file(\"deep-sleep\", 0600, dir, dev, \u0026fops_ds);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c=14=static ssize_t mt7921_thermal_temp_show(struct device *dev,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-19-\tcase 0: {\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:20:\t\tstruct mt792x_phy *phy = dev_get_drvdata(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:21:\t\tstruct mt792x_dev *mdev = phy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-22-\t\tint temperature;\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-23-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:24:\t\tmt792x_mutex_acquire(mdev);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-25-\t\ttemperature = mt7921_mcu_get_temperature(phy);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:26:\t\tmt792x_mutex_release(mdev);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-27-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c=43=ATTRIBUTE_GROUPS(mt7921_hwmon);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-44-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:45:static int mt7921_thermal_init(struct mt792x_phy *phy)\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-46-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-63-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:64:int mt7921_mac_init(struct mt792x_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-65-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-77-\tfor (i = 0; i \u003c 2; i++)\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:78:\t\tmt792x_mac_init_band(dev, i);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-79-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c=82=EXPORT_SYMBOL_GPL(mt7921_mac_init);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-83-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:84:static int __mt7921_init_hardware(struct mt792x_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-85-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-91-\tmt76_wr(dev, MT_SWDEF_MODE, MT_SWDEF_NORMAL_MODE);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:92:\tret = mt792x_mcu_init(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-93-\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-108-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:109:static int mt7921_init_hardware(struct mt792x_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-110-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-119-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:120:\t\tmt792x_init_reset(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-121-\t}\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c=131=static void mt7921_init_work(struct work_struct *work)\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-132-{\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:133:\tstruct mt792x_dev *dev = container_of(work, struct mt792x_dev,\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-134-\t\t\t\t\t      init_work);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-142-\tmt7921_set_stream_he_caps(\u0026dev-\u003ephy);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:143:\tmt792x_config_mac_addr_list(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-144-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-169-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:170:int mt7921_register_device(struct mt792x_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-171-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-177-\tdev-\u003emt76.phy.priv = \u0026dev-\u003ephy;\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:178:\tdev-\u003emt76.tx_worker.fn = mt792x_tx_worker;\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-179-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:180:\tINIT_DELAYED_WORK(\u0026dev-\u003epm.ps_work, mt792x_pm_power_save_work);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:181:\tINIT_WORK(\u0026dev-\u003epm.wake_work, mt792x_pm_wake_work);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-182-\tspin_lock_init(\u0026dev-\u003epm.wake.lock);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-188-\tspin_lock_init(\u0026dev-\u003epm.txq_lock);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:189:\tINIT_DELAYED_WORK(\u0026dev-\u003emphy.mac_work, mt792x_mac_work);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-190-\tINIT_DELAYED_WORK(\u0026dev-\u003ephy.scan_work, mt7921_scan_work);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-202-\tINIT_WORK(\u0026dev-\u003ephy.roc_work, mt7921_roc_work);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:203:\ttimer_setup(\u0026dev-\u003ephy.roc_timer, mt792x_roc_timer, 0);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-204-\tinit_waitqueue_head(\u0026dev-\u003ephy.roc_wait);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-220-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:221:\tmt792x_init_acpi_sar(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-222-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:223:\tret = mt792x_init_wcid(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-224-\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-226-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:227:\tret = mt792x_init_wiphy(hw);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-228-\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-18-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:19:bool mt7921_mac_wtbl_update(struct mt792x_dev *dev, int idx, u32 mask)\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-20-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=28=static u32 mt7921_mac_wtbl_lmac_addr(int idx, u8 offset)\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-32-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:33:static void mt7921_mac_sta_poll(struct mt792x_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-34-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-41-\tstruct ieee80211_sta *sta;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:42:\tstruct mt792x_sta *msta;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:43:\tstruct mt792x_link_sta *mlink;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-44-\tu32 tx_time[IEEE80211_NUM_ACS], rx_time[IEEE80211_NUM_ACS];\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-65-\t\tmlink = list_first_entry(\u0026sta_poll_list,\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:66:\t\t\t\t\t struct mt792x_link_sta,\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-67-\t\t\t\t\t wcid.poll_list);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:68:\t\tmsta = container_of(mlink, struct mt792x_sta, deflink);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-69-\t\tlist_del_init(\u0026mlink-\u003ewcid.poll_list);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=168=static int\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:169:mt7921_mac_fill_rx(struct mt792x_dev *dev, struct sk_buff *skb)\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-170-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-177-\tstruct mt76_phy *mphy = \u0026dev-\u003emt76.phy;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:178:\tstruct mt792x_phy *phy = \u0026dev-\u003ephy;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-179-\tstruct ieee80211_supported_band *sband;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-185-\tu32 rxd4 = le32_to_cpu(rxd[4]);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:186:\tstruct mt792x_sta *msta = NULL;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:187:\tstruct mt792x_link_sta *mlink;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-188-\tu16 seq_ctrl = 0;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-214-\tidx = FIELD_GET(MT_RXD1_NORMAL_WLAN_IDX, rxd1);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:215:\tstatus-\u003ewcid = mt792x_rx_get_wcid(dev, idx, unicast);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-216-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-217-\tif (status-\u003ewcid) {\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:218:\t\tmlink = container_of(status-\u003ewcid, struct mt792x_link_sta, wcid);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:219:\t\tmsta = container_of(mlink, struct mt792x_sta, deflink);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-220-\t\tmt76_wcid_add_poll(\u0026dev-\u003emt76, \u0026mlink-\u003ewcid);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-222-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:223:\tmt792x_get_status_freq_info(status, chfreq);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-224-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-431-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:432:\tmt792x_mac_assoc_rssi(dev, skb);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-433-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-446-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:447:void mt7921_mac_add_txs(struct mt792x_dev *dev, void *data)\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-448-{\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:449:\tstruct mt792x_link_sta *mlink;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-450-\tstruct mt76_wcid *wcid;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-472-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:473:\tmlink = container_of(wcid, struct mt792x_link_sta, wcid);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-474-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-484-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:485:static void mt7921_mac_tx_free(struct mt792x_dev *dev, void *data, int len)\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-486-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-514-\t\tif (info \u0026 MT_TX_FREE_PAIR) {\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:515:\t\t\tstruct mt792x_link_sta *mlink;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-516-\t\t\tu16 idx;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-524-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:525:\t\t\tmlink = container_of(wcid, struct mt792x_link_sta, wcid);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-526-\t\t\tmt76_wcid_add_poll(\u0026dev-\u003emt76, \u0026mlink-\u003ewcid);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=562=bool mt7921_rx_check(struct mt76_dev *mdev, void *data, int len)\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-563-{\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:564:\tstruct mt792x_dev *dev = container_of(mdev, struct mt792x_dev, mt76);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-565-\t__le32 *rxd = (__le32 *)data;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=586=void mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-588-{\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:589:\tstruct mt792x_dev *dev = container_of(mdev, struct mt792x_dev, mt76);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-590-\t__le32 *rxd = (__le32 *)skb-\u003edata;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=630=mt7921_vif_connect_iter(void *priv, u8 *mac,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-632-{\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:633:\tstruct mt792x_vif *mvif = (struct mt792x_vif *)vif-\u003edrv_priv;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:634:\tstruct mt792x_dev *dev = mvif-\u003ephy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-635-\tstruct ieee80211_hw *hw = mt76_hw(dev);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=655=void mt7921_mac_reset_work(struct work_struct *work)\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-656-{\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:657:\tstruct mt792x_dev *dev = container_of(work, struct mt792x_dev,\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-658-\t\t\t\t\t      reset_work);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-673-\t\tmutex_lock(\u0026dev-\u003emt76.mutex);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:674:\t\tret = mt792x_dev_reset(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-675-\t\tmutex_unlock(\u0026dev-\u003emt76.mutex);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=708=void mt7921_coredump_work(struct work_struct *work)\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-709-{\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:710:\tstruct mt792x_dev *dev;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-711-\tchar *dump, *data;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-712-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:713:\tdev = (struct mt792x_dev *)container_of(work, struct mt792x_dev,\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-714-\t\t\t\t\t\tcoredump.work.work);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-751-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:752:\tmt792x_reset(\u0026dev-\u003emt76);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-753-}\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=756=static void\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:757:mt7921_usb_sdio_write_txwi(struct mt792x_dev *dev, struct mt76_wcid *wcid,\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-758-\t\t\t   enum mt76_txq_id qid, struct ieee80211_sta *sta,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=769=int mt7921_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-773-{\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:774:\tstruct mt792x_dev *dev = container_of(mdev, struct mt792x_dev, mt76);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-775-\tstruct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info-\u003eskb);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-790-\tif (sta) {\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:791:\t\tstruct mt792x_sta *msta = (struct mt792x_sta *)sta-\u003edrv_priv;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-792-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-802-\ttype = mt76_is_sdio(mdev) ? MT7921_SDIO_DATA : 0;\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:803:\tmt792x_skb_add_usb_sdio_hdr(dev, skb, type);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-804-\tpad = round_up(skb-\u003elen, 4) - skb-\u003elen;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=838=bool mt7921_usb_sdio_tx_status_data(struct mt76_dev *mdev, u8 *update)\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-839-{\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:840:\tstruct mt792x_dev *dev = container_of(mdev, struct mt792x_dev, mt76);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-841-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:842:\tmt792x_mutex_acquire(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-843-\tmt7921_mac_sta_poll(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:844:\tmt792x_mutex_release(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-845-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c=851=void mt7921_set_ipv6_ns_work(struct work_struct *work)\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-852-{\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:853:\tstruct mt792x_dev *dev = container_of(work, struct mt792x_dev,\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-854-\t\t\t\t\t      ipv6_ns_work);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-863-\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:864:\t\tmt792x_mutex_acquire(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-865-\t\tret = mt76_mcu_skb_send_msg(\u0026dev-\u003emt76, skb,\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-866-\t\t\t\t\t    MCU_UNI_CMD(OFFLOAD), true);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c:867:\t\tmt792x_mutex_release(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/mac.c-868-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c=13=static int\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:14:mt7921_init_he_caps(struct mt792x_phy *phy, enum nl80211_band band,\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-15-\t\t    struct ieee80211_sband_iftype_data *data)\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-195-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:196:void mt7921_set_stream_he_caps(struct mt792x_phy *phy)\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-197-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-226-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:227:int __mt7921_start(struct mt792x_phy *phy)\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-228-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-247-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:248:\tmt792x_mac_reset_counters(phy);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-249-\tset_bit(MT76_STATE_RUNNING, \u0026mphy-\u003estate);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c=272=static int mt7921_start(struct ieee80211_hw *hw)\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-273-{\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:274:\tstruct mt792x_phy *phy = mt792x_hw_phy(hw);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-275-\tint err;\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-276-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:277:\tmt792x_mutex_acquire(phy-\u003edev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-278-\terr = __mt7921_start(phy);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:279:\tmt792x_mutex_release(phy-\u003edev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-280-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c=284=static void mt7921_stop(struct ieee80211_hw *hw, bool suspend)\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-285-{\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:286:\tstruct mt792x_dev *dev = mt792x_hw_dev(hw);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-287-\tint err = 0;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-289-\tif (mt76_is_mmio(\u0026dev-\u003emt76)) {\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:290:\t\tmt792x_mutex_acquire(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-291-\t\terr = mt7921_mcu_radio_led_ctrl(dev, EXT_CMD_RADIO_OFF_LED);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:292:\t\tmt792x_mutex_release(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-293-\t\tif (err)\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-296-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:297:\tmt792x_stop(hw, false);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-298-}\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c=301=mt7921_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-302-{\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:303:\tstruct mt792x_vif *mvif = (struct mt792x_vif *)vif-\u003edrv_priv;\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:304:\tstruct mt792x_dev *dev = mt792x_hw_dev(hw);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:305:\tstruct mt792x_phy *phy = mt792x_hw_phy(hw);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-306-\tstruct mt76_txq *mtxq;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-308-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:309:\tmt792x_mutex_acquire(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-310-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-354-\tINIT_WORK(\u0026mvif-\u003ecsa_work, mt7921_csa_work);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:355:\ttimer_setup(\u0026mvif-\u003ecsa_timer, mt792x_csa_timer, 0);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-356-out:\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:357:\tmt792x_mutex_release(dev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-358-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c=362=static void mt7921_roc_iter(void *priv, u8 *mac,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-364-{\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:365:\tstruct mt792x_vif *mvif = (struct mt792x_vif *)vif-\u003edrv_priv;\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:366:\tstruct mt792x_phy *phy = priv;\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-367-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-370-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:371:void mt7921_roc_abort_sync(struct mt792x_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-372-{\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:373:\tstruct mt792x_phy *phy = \u0026dev-\u003ephy;\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-374-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c=387=void mt7921_roc_work(struct work_struct *work)\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-388-{\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:389:\tstruct mt792x_phy *phy;\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-390-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:391:\tphy = (struct mt792x_phy *)container_of(work, struct mt792x_phy,\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-392-\t\t\t\t\t\troc_work);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-393-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:394:\tmt792x_mutex_acquire(phy-\u003edev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-395-\tif (!test_and_clear_bit(MT76_STATE_ROC, \u0026phy-\u003emt76-\u003estate)) {\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:396:\t\tmt792x_mutex_release(phy-\u003edev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-397-\t\treturn;\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-401-\t\t\t\t\t    mt7921_roc_iter, phy);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:402:\tmt792x_mutex_release(phy-\u003edev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-403-\tieee80211_remain_on_channel_expired(phy-\u003emt76-\u003ehw);\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-405-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:406:static int mt7921_abort_roc(struct mt792x_phy *phy, struct mt792x_vif *vif)\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-407-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-412-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:413:\tmt792x_mutex_acquire(phy-\u003edev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-414-\tif (test_and_clear_bit(MT76_STATE_ROC, \u0026phy-\u003emt76-\u003estate))\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-415-\t\terr = mt7921_mcu_abort_roc(phy, vif, phy-\u003eroc_token_id);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:416:\tmt792x_mutex_release(phy-\u003edev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-417-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-420-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:421:static int mt7921_set_roc(struct mt792x_phy *phy,\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:422:\t\t\t  struct mt792x_vif *vif,\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-423-\t\t\t  struct ieee80211_channel *chan,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c=451=static int mt7921_remain_on_channel(struct ieee80211_hw *hw,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-456-{\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:457:\tstruct mt792x_vif *mvif = (struct mt792x_vif *)vif-\u003edrv_priv;\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:458:\tstruct mt792x_phy *phy = mt792x_hw_phy(hw);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-459-\tint err;\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-460-\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:461:\tmt792x_mutex_acquire(phy-\u003edev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-462-\terr = mt7921_set_roc(phy, mvif, chan, duration, MT7921_ROC_REQ_ROC);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:463:\tmt792x_mutex_release(phy-\u003edev);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-464-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c=468=static int mt7921_cancel_remain_on_channel(struct ieee80211_hw *hw,\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-470-{\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:471:\tstruct mt792x_vif *mvif = (struct mt792x_vif *)vif-\u003edrv_priv;\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:472:\tstruct mt792x_phy *phy = mt792x_hw_phy(hw);\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-473-\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c=477=int mt7921_set_channel(struct mt76_phy *mphy)\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c-478-{\ndrivers/net/wireless/mediatek/mt76/mt7921/main.c:479:\tstruct mt792x_phy *phy = mphy-\u003epriv;\n\n"
}

5/2 2026/07/22 20:23 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 19913
							output: 40
							thoughts: 959
						

Thoughts:
**Analyzing the Patch: Mediatek MT76 Driver Feature Change**

Okay, so I've spotted `mt792x-usb-y` in the `mt76` Makefile. And `mt7921` is specifically a driver listed there. That means the `mt76` family has a USB driver that is a candidate for fuzzing. This patch modifies `mac80211.c` and `mt792x_core.c`, which immediately raises my interest – anything touching core functionality is worth a closer look.

I know `mt76` has other USB drivers like `mt76x02-usb`, `mt76x2u`, and `mt7921u`, and because it's a USB driver, the USB gadget framework (vhci) opens up fuzzing possibilities within a virtualized environment. This patch is definitely reachable.

Now, let's dissect the code changes more carefully. It looks like the patch disables `NL80211_FEATURE_ACTIVE_MONITOR` for `mt792x` devices. It's a functional change, but it's a relatively simple one, only removing a feature flag during initialization. It modifies the initialization paths in `mt792x_init_wiphy` and `mt76_phy_init`. Basically, setting a boolean and checking it.

The real question is, is this worth fuzzing? It isn't adding complex new logic, just removing a feature advertisement. However, it *is* a functional change within a USB-reachable driver, and I know that even small changes can sometimes have unexpected implications in complex systems. It's worth digging into the configuration options for `mt76` and `mt7921u` to see how this feature flag impacts the overall driver behavior.



6/2 2026/07/22 20:24 tool grepper
0m Args:
{
  "Expression": "config MT7921U",
  "PathPrefix": "drivers/net/wireless/mediatek/mt76/"
}

Results:
{
  "Output": "drivers/net/wireless/mediatek/mt76/mt7921/Kconfig=17=config MT7921S\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/Kconfig-27-\ndrivers/net/wireless/mediatek/mt76/mt7921/Kconfig:28:config MT7921U\ndrivers/net/wireless/mediatek/mt76/mt7921/Kconfig-29-\ttristate \"MediaTek MT7921U (USB) support\"\n"
}

7/2 2026/07/22 20:24 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 21457
							output: 47
							thoughts: 46
						

Thoughts:
Okay, let's dive into this. Here's how I'd approach that kernel configuration file check:

**Examining the MT7921 and MT792x Kconfig Dependencies**

Alright, I need to get a clear picture of how the `MT7921U` and `MT792x` wireless drivers are configured within the Mediatek framework. My first stop will be `drivers/net/wireless/mediatek/mt76/mt7921/Kconfig`. This Kconfig file will be the central point of truth for how these drivers are brought into the kernel build. I'll be looking specifically for any conditional dependencies related to `MT7921U` and the broader `MT792x` family. These dependencies could involve other kernel features, hardware configurations, or even specific Mediatek platform defines. I need to understand what needs to be enabled or defined to ensure proper support for these particular wireless chips. This will allow me to track down how these chips are implemented in the wireless stack. The goal here is to get a handle on what other settings will enable proper build options for these components.



8/2 2026/07/22 20:24 tool read-file
0m Args:
{
  "File": "drivers/net/wireless/mediatek/mt76/mt7921/Kconfig",
  "FirstLine": 1,
  "LineCount": 50
}

Results:
{
  "Contents": "   1:\t# SPDX-License-Identifier: BSD-3-Clause-Clear\n   2:\tconfig MT7921_COMMON\n   3:\t\ttristate\n   4:\t\tselect MT792x_LIB\n   5:\t\tselect WANT_DEV_COREDUMP\n   6:\t\n   7:\tconfig MT7921E\n   8:\t\ttristate \"MediaTek MT7921E (PCIe) support\"\n   9:\t\tselect MT7921_COMMON\n  10:\t\tdepends on MAC80211\n  11:\t\tdepends on PCI\n  12:\t\thelp\n  13:\t\t  This adds support for MT7921E 802.11ax 2x2:2SS wireless devices.\n  14:\t\n  15:\t\t  To compile this driver as a module, choose M here.\n  16:\t\n  17:\tconfig MT7921S\n  18:\t\ttristate \"MediaTek MT7921S (SDIO) support\"\n  19:\t\tselect MT76_SDIO\n  20:\t\tselect MT7921_COMMON\n  21:\t\tdepends on MAC80211\n  22:\t\tdepends on MMC\n  23:\t\thelp\n  24:\t\t  This adds support for MT7921S 802.11ax 2x2:2SS wireless devices.\n  25:\t\n  26:\t\t  To compile this driver as a module, choose M here.\n  27:\t\n  28:\tconfig MT7921U\n  29:\t\ttristate \"MediaTek MT7921U (USB) support\"\n  30:\t\tselect MT792x_USB\n  31:\t\tselect MT7921_COMMON\n  32:\t\tdepends on MAC80211\n  33:\t\tdepends on USB\n  34:\t\thelp\n  35:\t\t  This adds support for MT7921U 802.11ax 2x2:2SS wireless devices.\n  36:\t\n  37:\t\t  To compile this driver as a module, choose M here.\n"
}

9/2 2026/07/22 20:24 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 22337
							output: 39
							thoughts: 322
						

Thoughts:
**Analyzing the MT7921U USB Driver Patch**

Okay, so I'm looking at this patch for the `MT7921U` USB driver. Seems like it's primarily touching `mt76_phy_init` and `mt792x_init_wiphy`, both of which are critical during device initialization – the usual suspects. My initial thought is, "Is this fuzzable, and is it worth the effort?"

The patch itself is ridiculously simple; it's just setting a couple of feature flags: setting  `NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE` and potentially setting `NL80211_FEATURE_ACTIVE_MONITOR`, and it also sets `phy->mt76->no_active_monitor = true`. This is a functional change, but it's just flipping a few bits. Fuzzing *this specific code* is unlikely to uncover anything interesting because the logic is so trivial. But... it does modify driver behavior. It's now *not* advertising `NL80211_FEATURE_ACTIVE_MONITOR`.

If the goal is to fuzz the driver effectively, focusing on `mt76_phy_init` and `mt792x_init_wiphy` is the way to go. However, a quick reminder: `mt76_phy_init` is a general function used across *all* `mt76` drivers. `mt792x_init_wiphy`, however, is specific to the `mt792x` family. Now, I need to check to see if there are other drivers that use this `mt792x` prefix, to see if the fuzzing effort is best applied to the specific chip.



10/2 2026/07/22 20:24 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "config MT7922",
  "PathPrefix": "drivers/net/wireless/mediatek/mt76/"
}

Results:
{
  "error": "no matches"
}

11/2 2026/07/22 20:24 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 23095
							output: 31
							thoughts: 30
						

Thoughts:
Okay, let's see. My first thought is to dive into the kernel source tree, specifically looking for the configuration file that defines the build options for that Mediatek MT7925 wireless driver. I'd start with `drivers/net/wireless/mediatek/mt76/mt7925/Kconfig`, or something very similar, as that's usually where the meat of the configuration lives. Gotta be efficient here. This Kconfig file will be critical for understanding how the driver is being compiled, what features are enabled, and any dependencies it might have. Understanding this file is key to understanding the build system for the driver.



12/2 2026/07/22 20:24 tool codesearch-dir-index
0m Args:
{
  "Dir": "drivers/net/wireless/mediatek/mt76/"
}

Results:
{
  "Files": [
    "agg-rx.c",
    "channel.c",
    "debugfs.c",
    "dma.c",
    "dma.h",
    "eeprom.c",
    "mac80211.c",
    "mcu.c",
    "mmio.c",
    "mt76.h",
    "mt76_connac.h",
    "mt76_connac2_mac.h",
    "mt76_connac3_mac.c",
    "mt76_connac3_mac.h",
    "mt76_connac_mac.c",
    "mt76_connac_mcu.c",
    "mt76_connac_mcu.h",
    "mt76x02.h",
    "mt76x02_beacon.c",
    "mt76x02_debugfs.c",
    "mt76x02_dfs.c",
    "mt76x02_dfs.h",
    "mt76x02_dma.h",
    "mt76x02_eeprom.c",
    "mt76x02_eeprom.h",
    "mt76x02_mac.c",
    "mt76x02_mac.h",
    "mt76x02_mcu.c",
    "mt76x02_mcu.h",
    "mt76x02_mmio.c",
    "mt76x02_phy.c",
    "mt76x02_phy.h",
    "mt76x02_regs.h",
    "mt76x02_trace.c",
    "mt76x02_trace.h",
    "mt76x02_txrx.c",
    "mt76x02_usb.h",
    "mt76x02_usb_core.c",
    "mt76x02_usb_mcu.c",
    "mt76x02_util.c",
    "mt792x.h",
    "mt792x_acpi_sar.c",
    "mt792x_acpi_sar.h",
    "mt792x_core.c",
    "mt792x_debugfs.c",
    "mt792x_dma.c",
    "mt792x_mac.c",
    "mt792x_regs.h",
    "mt792x_trace.c",
    "mt792x_trace.h",
    "mt792x_usb.c",
    "npu.c",
    "pci.c",
    "scan.c",
    "sdio.c",
    "sdio.h",
    "sdio_txrx.c",
    "testmode.c",
    "testmode.h",
    "trace.c",
    "trace.h",
    "tx.c",
    "usb.c",
    "usb_trace.c",
    "usb_trace.h",
    "util.c",
    "util.h",
    "wed.c"
  ],
  "Subdirs": [
    "mt7603",
    "mt7615",
    "mt76x0",
    "mt76x2",
    "mt7915",
    "mt7921",
    "mt7925",
    "mt7996"
  ]
}

13/2 2026/07/22 20:24 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 24106
							output: 47
							thoughts: 38
						

Thoughts:
Okay, here's my interpretation of those thoughts, tailored for an expert audience, presented in the first person:

**Navigating the MT7925 Driver Landscape**

Right, there's `mt7925`. My immediate reflex is to dive into its configuration – specifically, the `Kconfig` file. I'm going straight to `drivers/net/wireless/mediatek/mt76/mt7925/Kconfig`. That's where the initial decision-making happens. I need to understand which features are enabled by default, how they're exposed through configuration options, and, of course, any conditional dependencies on other kernel subsystems or features. This file is the bedrock for customizing the build for a specific use case, so it is the obvious place to start. Looking at `Kconfig` immediately gives a high-level view of what's *possible* with this driver. From there, I can get a feel for the design choices and potential areas to scrutinize based on performance and power consumption.



14/2 2026/07/22 20:24 tool read-file
0m Args:
{
  "File": "drivers/net/wireless/mediatek/mt76/mt7925/Kconfig",
  "FirstLine": 1,
  "LineCount": 50
}

Results:
{
  "Contents": "   1:\t# SPDX-License-Identifier: BSD-3-Clause-Clear\n   2:\tconfig MT7925_COMMON\n   3:\t\ttristate\n   4:\t\tselect MT792x_LIB\n   5:\t\tselect WANT_DEV_COREDUMP\n   6:\t\n   7:\tconfig MT7925E\n   8:\t\ttristate \"MediaTek MT7925E (PCIe) support\"\n   9:\t\tselect MT7925_COMMON\n  10:\t\tdepends on MAC80211\n  11:\t\tdepends on PCI\n  12:\t\thelp\n  13:\t\t  This adds support for MT7925-based wireless PCIe devices,\n  14:\t\t  which support operation at 6GHz, 5GHz, and 2.4GHz IEEE 802.11be\n  15:\t\t  2x2:2SS 4096-QAM, 160MHz channels.\n  16:\t\n  17:\t\t  To compile this driver as a module, choose M here.\n  18:\t\n  19:\tconfig MT7925U\n  20:\t\ttristate \"MediaTek MT7925U (USB) support\"\n  21:\t\tselect MT792x_USB\n  22:\t\tselect MT7925_COMMON\n  23:\t\tdepends on MAC80211\n  24:\t\tdepends on USB\n  25:\t\thelp\n  26:\t\t  This adds support for MT7925-based wireless USB devices,\n  27:\t\t  which support operation at 6GHz, 5GHz, and 2.4GHz IEEE 802.11be\n  28:\t\t  2x2:2SS 4096-QAM, 160MHz channels.\n  29:\t\n  30:\t\t  To compile this driver as a module, choose M here.\n"
}

15/2 2026/07/22 20:24 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 24890
							output: 43
							thoughts: 147
						

Thoughts:
**Analyzing the Impact of the `MT7925U` USB Driver Patch**

Okay, so `MT7925U` is indeed a USB driver, which is good to know. This patch specifically disables `NL80211_FEATURE_ACTIVE_MONITOR` for the `mt792x` family of devices. The question now is: does this warrant fuzzing? Absolutely, it does. It's a functional change within a driver that's definitely reachable, making it a prime target.

My initial focus symbols would be `mt76_phy_init` and `mt792x_init_wiphy`. But hold on... `mt76_phy_init` seems to be used across *all* `mt76` drivers, so it's probably not as specific a change as I initially thought. Let's quickly verify that there aren't any other modified functions. Nope, looks like `mt792x_init_wiphy` is the key function to investigate further.



16/2 2026/07/22 20:24 tool grepper
0m Args:
{
  "Expression": "mt792x_init_wiphy",
  "PathPrefix": "drivers/net/wireless/mediatek/mt76/"
}

Results:
{
  "Output": "drivers/net/wireless/mediatek/mt76/mt7921/init.c=170=int mt7921_register_device(struct mt792x_dev *dev)\n--\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-226-\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c:227:\tret = mt792x_init_wiphy(hw);\ndrivers/net/wireless/mediatek/mt76/mt7921/init.c-228-\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt7925/init.c=206=int mt7925_register_device(struct mt792x_dev *dev)\n--\ndrivers/net/wireless/mediatek/mt76/mt7925/init.c-260-\ndrivers/net/wireless/mediatek/mt76/mt7925/init.c:261:\tret = mt792x_init_wiphy(hw);\ndrivers/net/wireless/mediatek/mt76/mt7925/init.c-262-\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt792x.h=462=int mt792x_pm_idle_timeout_get(void *data, u64 *val);\ndrivers/net/wireless/mediatek/mt76/mt792x.h:463:int mt792x_init_wiphy(struct ieee80211_hw *hw);\ndrivers/net/wireless/mediatek/mt76/mt792x.h-464-struct ieee80211_ops *\n--\ndrivers/net/wireless/mediatek/mt76/mt792x_core.c=659=EXPORT_SYMBOL_GPL(mt792x_set_coverage_class);\ndrivers/net/wireless/mediatek/mt76/mt792x_core.c-660-\ndrivers/net/wireless/mediatek/mt76/mt792x_core.c:661:int mt792x_init_wiphy(struct ieee80211_hw *hw)\ndrivers/net/wireless/mediatek/mt76/mt792x_core.c-662-{\n--\ndrivers/net/wireless/mediatek/mt76/mt792x_core.c-745-}\ndrivers/net/wireless/mediatek/mt76/mt792x_core.c:746:EXPORT_SYMBOL_GPL(mt792x_init_wiphy);\ndrivers/net/wireless/mediatek/mt76/mt792x_core.c-747-\n"
}

17/2 2026/07/22 20:25 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 26034
							output: 40
							thoughts: 409
						

Thoughts:
**WorthFuzzing Decision for a Simple Driver Change**

Okay, let's break this down. My initial focus is on the functions `mt76_phy_init` and `mt792x_init_wiphy`, and the relevant configurations `MT7921U` and `MT7925U`. The patch itself is trivial: it's adding or removing a couple of feature flags:

```c
	wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
	if (!phy->no_active_monitor)
		wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
```

It looks like we're just enabling or disabling these flags. The question is, should I fuzz this? The prompt's guidelines are clear: changes to documentation, Kconfig, comments, logging, or purely decorative constants get a `WorthFuzzing=false`. Changes to unreachable code paths in virtualized environments, like USB gadget mode, would also get a false. However, If it touches *reachable* core kernel logic, drivers, or architectures, *then* it's `WorthFuzzing=true`.

This modification clearly touches driver logic, and USB emulation means it *is* reachable. So, technically, by the book, it's `WorthFuzzing=true`. However, my gut is telling me this is an incredibly simple change. We're just enabling/disabling a feature. It doesn't introduce much complexity. It's a bit of a "yeah, but..." situation. Yet, I'm going to have to make the decision that, based on the requirements, my answer is `WorthFuzzing=true`, but let's double check to see if `mt76_phy_init` is called during initialization, just in case.



18/2 2026/07/22 20:25 tool grepper
0m Args:
{
  "Expression": "mt76_phy_init",
  "PathPrefix": "drivers/net/wireless/mediatek/mt76/"
}

Results:
{
  "Output": "drivers/net/wireless/mediatek/mt76/mac80211.c=426=static int\ndrivers/net/wireless/mediatek/mt76/mac80211.c:427:mt76_phy_init(struct mt76_phy *phy, struct ieee80211_hw *hw)\ndrivers/net/wireless/mediatek/mt76/mac80211.c-428-{\n--\ndrivers/net/wireless/mediatek/mt76/mac80211.c=551=int mt76_register_phy(struct mt76_phy *phy, bool vht,\n--\ndrivers/net/wireless/mediatek/mt76/mac80211.c-555-\ndrivers/net/wireless/mediatek/mt76/mac80211.c:556:\tret = mt76_phy_init(phy, phy-\u003ehw);\ndrivers/net/wireless/mediatek/mt76/mac80211.c-557-\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mac80211.c=747=int mt76_register_device(struct mt76_dev *dev, bool vht,\n--\ndrivers/net/wireless/mediatek/mt76/mac80211.c-755-\tmt76_wcid_init(\u0026dev-\u003eglobal_wcid, phy-\u003eband_idx);\ndrivers/net/wireless/mediatek/mt76/mac80211.c:756:\tret = mt76_phy_init(phy, hw);\ndrivers/net/wireless/mediatek/mt76/mac80211.c-757-\tif (ret)\n"
}

19/2 2026/07/22 20:25 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 27345
							output: 131
							thoughts: 485
						

Thoughts:
**Analyzing the MT76 Wireless Driver Initialization Patch**

Okay, so the code in question, specifically the part I'm interested in, is called during `mt76_register_device` and `mt76_register_phy`. That means it's definitely reachable. Good, that's the first hurdle cleared.

Now, let's get into the specifics. I need to figure out which configurations are relevant. The text mentions `MT7921U` and `MT7925U` as USB drivers, but are those *the only* ones for `mt76`? Let's see... looking back, there's also `MT76x0U`, `MT76x2U`, `MT7615U` (wait, is there even a USB version of the 7615?) and then, yes, `MT7921U` and `MT7925U` again.

The patch itself specifically changes `mt792x_init_wiphy`, which is, of course, used by `mt7921` and `mt7925`. But, hang on, the `mt76_phy_init` function *is* modified, and that is used by *all* `mt76` drivers. So, any of the `mt76` USB drivers could *potentially* trigger the modified `mt76_phy_init` code. However, the key modification targeting `mt792x_init_wiphy` makes `MT7921U` and `MT7925U` the most relevant configurations. They're definitely the best candidates.

Let's quickly check dependencies for those two. They depend on `MAC80211` and `USB`. Alright, nothing unexpected there. So, yes, the configs I want to focus on are `MT7921U` and `MT7925U`.

Okay, time to formulate a concise response. Let's see:

*   **WorthFuzzing:** True - this is clearly a functional change, a driver modification, that's worth testing.
*   **FocusSymbols:** `mt76_phy_init`, `mt792x_init_wiphy` - These are the key functions modified by the patch.
*   **EnableConfigs:** `MT7921U`, `MT7925U` - Because these configs represent the relevant USB drivers, I want to enable both.
*   **Reasoning:** The patch modifies the initialization logic of the MT76 wireless driver to disable the active monitor feature for MT792x devices. This is a functional change in a driver that is reachable in a virtualized environment via USB emulation (MT7921U and MT7925U).

That should cover it.



20/2 2026/07/22 20:25 tool set-results
0m Args:
{
  "EnableConfigs": [
    "MT7921U",
    "MT7925U"
  ],
  "FocusSymbols": [
    "mt76_phy_init",
    "mt792x_init_wiphy"
  ],
  "Reasoning": "The patch modifies the initialization logic of the MT76 wireless driver to disable the active monitor feature for MT792x devices. This is a functional change in a driver that is reachable in a virtualized environment via USB emulation (MT7921U and MT7925U).",
  "WorthFuzzing": true
}

Results:
{
  "EnableConfigs": [
    "MT7921U",
    "MT7925U"
  ],
  "FocusSymbols": [
    "mt76_phy_init",
    "mt792x_init_wiphy"
  ],
  "Reasoning": "The patch modifies the initialization logic of the MT76 wireless driver to disable the active monitor feature for MT792x devices. This is a functional change in a driver that is reachable in a virtualized environment via USB emulation (MT7921U and MT7925U).",
  "WorthFuzzing": true
}

LLM Calls Summary:
Total Calls Total Tokens Avg Tokens Total Duration (Seconds) Avg Duration (Seconds)
Tool Calls Summary:
Total Calls Total Duration (Seconds) Avg Duration (Seconds)