| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/08/10 10:19 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "",
"NeedsKMSAN": false,
"Reasoning": "The patch modifies a vendor-specific PCIe Wi-Fi driver (MT7915) which requires physical hardware not emulated in standard QEMU. Furthermore, the changes are limited to a teardown callback (mt7915_unregister_thermal) and a purely decorative warning message update.",
"WorthFuzzing": false
} |
| 1/1 | 2026/08/10 10:19 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 5371654a71abde3a7ec938dfb56c99b4c0316736\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Mon Aug 10 10:19:44 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c\nindex ca46a203aa48b..e0376da79dda7 100644\n--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c\n+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c\n@@ -200,6 +200,9 @@ static void mt7915_unregister_thermal(struct mt7915_phy *phy)\n {\n \tstruct wiphy *wiphy = phy-\u003emt76-\u003ehw-\u003ewiphy;\n \n+\tif (phy-\u003etzone)\n+\t\tdevm_thermal_of_zone_unregister(phy-\u003edev-\u003emt76.dev, phy-\u003etzone);\n+\n \tif (!phy-\u003ecdev)\n \t\treturn;\n \n@@ -238,8 +241,8 @@ static int mt7915_thermal_init(struct mt7915_phy *phy)\n \tif (IS_ERR(phy-\u003etzone)) {\n \t\tif (PTR_ERR(phy-\u003etzone) != -ENODEV)\n \t\t\tdev_warn(phy-\u003edev-\u003emt76.dev,\n-\t\t\t\t \"failed to register thermal zone: %ld\\n\",\n-\t\t\t\t PTR_ERR(phy-\u003etzone));\n+\t\t\t\t \"failed to register thermal zone %d: %ld\\n\",\n+\t\t\t\t phy-\u003emt76-\u003eband_idx, PTR_ERR(phy-\u003etzone));\n \t\tphy-\u003etzone = NULL;\n \t}\n \n"
} |
| 2/1 | 2026/08/10 10:19 | agent | patch-evaluator |
0mModel:best-expensive Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies a vendor-specific PCIe Wi-Fi driver (MT7915) which requires physical hardware not emulated in standard QEMU. Furthermore, the changes are limited to a teardown callback (mt7915_unregister_thermal) and a purely decorative warning message update.",
"WorthFuzzing": false
}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). - Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU. - Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove) that are executed only during PCI hot-unplug or sysfs driver unbind operations. 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. Prefer non-static, non-inlined API entrypoint functions over internal static helper functions (which are inlined by the compiler and do not have distinct symbol addresses). 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. Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed for Kbuild to compile the code statically into vmlinux. 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 5371654a71abde3a7ec938dfb56c99b4c0316736
Author: syz-cluster <triage@syzkaller.com>
Date: Mon Aug 10 10:19:44 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index ca46a203aa48b..e0376da79dda7 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -200,6 +200,9 @@ static void mt7915_unregister_thermal(struct mt7915_phy *phy)
{
struct wiphy *wiphy = phy->mt76->hw->wiphy;
+ if (phy->tzone)
+ devm_thermal_of_zone_unregister(phy->dev->mt76.dev, phy->tzone);
+
if (!phy->cdev)
return;
@@ -238,8 +241,8 @@ static int mt7915_thermal_init(struct mt7915_phy *phy)
if (IS_ERR(phy->tzone)) {
if (PTR_ERR(phy->tzone) != -ENODEV)
dev_warn(phy->dev->mt76.dev,
- "failed to register thermal zone: %ld\n",
- PTR_ERR(phy->tzone));
+ "failed to register thermal zone %d: %ld\n",
+ phy->mt76->band_idx, PTR_ERR(phy->tzone));
phy->tzone = NULL;
}
|
| 3/2 | 2026/08/10 10:19 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2208 output: 44 thoughts: 363 Thoughts: **Analyzing a Patch: MT7915 Driver and WorthFuzzing** Okay, so I'm looking at this patch targeting `drivers/net/wireless/mediatek/mt76/mt7915/init.c`. The core of the change seems to involve unregistering a thermal zone within the `mt7915_unregister_thermal` function using `devm_thermal_of_zone_unregister`. It also touches a warning message in `mt7915_thermal_init`. My initial thought is, "This is a Mediatek MT7915 wireless driver." Now, the important question for fuzzing is: is this reachable in a QEMU environment? Considering this is a Mediatek MT7915, which is a PCIe Wi-Fi chip, my immediate memory is that QEMU doesn't directly emulate these PCIe Wi-Fi components. The change in `mt7915_unregister_thermal` strongly suggests this is a teardown callback – an unregister operation. The instructions I'm following say, "Return `WorthFuzzing=false` if..." and then list specific scenarios. It explicitly mentions: "- Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU. - Driver `.remove`, `.shutdown`, or `pci_unregister_driver` teardown callbacks (e.g., igb_remove) that are executed only during PCI hot-unplug or sysfs driver unbind operations." This aligns perfectly with what I'm seeing. It *is* a vendor-specific PCIe Wi-Fi driver (MT7915), and it requires physical PCIe hardware, which is not emulated in a standard QEMU setup. I'm going to double-check that it is actually PCIe to be absolutely sure, but I'm leaning heavily towards "not worth fuzzing". I'll use `grep` to confirm. |
| 4/2 | 2026/08/10 10:19 | tool | grepper |
0mArgs:{
"Expression": "mt7915",
"PathPrefix": "drivers/net/wireless/mediatek/mt76/mt7915/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 5728 lines.\nUse more precise expression if possible.\n\ndrivers/net/wireless/mediatek/mt76/mt7915/Makefile-2-\ndrivers/net/wireless/mediatek/mt76/mt7915/Makefile:3:obj-$(CONFIG_MT7915E) += mt7915e.o\ndrivers/net/wireless/mediatek/mt76/mt7915/Makefile-4-\ndrivers/net/wireless/mediatek/mt76/mt7915/Makefile:5:mt7915e-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \\\ndrivers/net/wireless/mediatek/mt76/mt7915/Makefile-6-\t debugfs.o mmio.o\ndrivers/net/wireless/mediatek/mt76/mt7915/Makefile-7-\ndrivers/net/wireless/mediatek/mt76/mt7915/Makefile:8:mt7915e-$(CONFIG_NL80211_TESTMODE) += testmode.o\ndrivers/net/wireless/mediatek/mt76/mt7915/Makefile:9:mt7915e-$(CONFIG_MT798X_WMAC) += soc.o\ndrivers/net/wireless/mediatek/mt76/mt7915/Makefile:10:mt7915e-$(CONFIG_DEV_COREDUMP) += coredump.o\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c=12=MODULE_PARM_DESC(coredump_memdump, \"Optional ability to dump firmware memory\");\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-13-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:14:static const struct mt7915_mem_region mt7915_mem_regions[] = {\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-15-\t{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-21-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:22:static const struct mt7915_mem_region mt7916_mem_regions[] = {\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-23-\t{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-54-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:55:static const struct mt7915_mem_region mt798x_mem_regions[] = {\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-56-\t{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-87-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:88:const struct mt7915_mem_region*\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:89:mt7915_coredump_get_mem_layout(struct mt7915_dev *dev, u32 *num)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-90-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-92-\tcase 0x7915:\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:93:\t\t*num = ARRAY_SIZE(mt7915_mem_regions);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:94:\t\treturn \u0026mt7915_mem_regions[0];\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-95-\tcase 0x7981:\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-106-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:107:static int mt7915_coredump_get_mem_size(struct mt7915_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-108-{\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:109:\tconst struct mt7915_mem_region *mem_region;\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-110-\tsize_t size = 0;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-113-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:114:\tmem_region = mt7915_coredump_get_mem_layout(dev, \u0026num);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-115-\tif (!mem_region)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-123-\t/* reserve space for the headers */\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:124:\tsize += num * sizeof(struct mt7915_mem_hdr);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-125-\t/* make sure it is aligned 4 bytes for debug message print out */\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-130-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:131:struct mt7915_crash_data *mt7915_coredump_new(struct mt7915_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-132-{\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:133:\tstruct mt7915_crash_data *crash_data = dev-\u003ecoredump.crash_data;\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-134-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c=143=static void\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:144:mt7915_coredump_fw_state(struct mt7915_dev *dev, struct mt7915_coredump *dump,\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-145-\t\t\t bool *exception)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-150-\tstate = (u32)mt76_get_field(dev, MT_FW_ASSERT_STAT, GENMASK(7, 0));\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:151:\tcount = is_mt7915(\u0026dev-\u003emt76) ?\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-152-\t\t(u32)mt76_get_field(dev, MT_FW_EXCEPT_COUNT, GENMASK(15, 8)) :\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c=166=static void\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:167:mt7915_coredump_fw_trace(struct mt7915_dev *dev, struct mt7915_coredump *dump,\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-168-\t\t\t bool exception)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-174-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:175:\tn = is_mt7915(\u0026dev-\u003emt76) ?\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-176-\t (u32)mt76_get_field(dev, base, GENMASK(7, 0)) :\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-180-\tirq = mt76_rr(dev, base + 0x8);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:181:\tn = is_mt7915(\u0026dev-\u003emt76) ?\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-182-\t FIELD_GET(GENMASK(7, 0), irq) : FIELD_GET(GENMASK(23, 16), irq);\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-185-\tsch = mt76_rr(dev, MT_FW_SCHED_INFO);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:186:\tn = is_mt7915(\u0026dev-\u003emt76) ?\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-187-\t FIELD_GET(GENMASK(7, 0), sch) : FIELD_GET(GENMASK(15, 8), sch);\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-193-\t\t/* sched trace */\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:194:\t\tn = is_mt7915(\u0026dev-\u003emt76) ?\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-195-\t\t FIELD_GET(GENMASK(15, 8), sch) : FIELD_GET(GENMASK(7, 0), sch);\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-201-\t\tfor (y = dump-\u003esched_info_idx, i = 0; i \u003c n; i++, y++) {\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:202:\t\t\tmt7915_memcpy_fromio(dev, dump-\u003esched, base + 0xc + y * 12,\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-203-\t\t\t\t\t sizeof(dump-\u003esched));\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-207-\t\t/* irq trace */\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:208:\t\tn = is_mt7915(\u0026dev-\u003emt76) ?\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-209-\t\t FIELD_GET(GENMASK(15, 8), irq) : FIELD_GET(GENMASK(7, 0), irq);\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-215-\t\tfor (y = dump-\u003eirq_info_idx, i = 0; i \u003c n; i++, y++) {\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:216:\t\t\tmt7915_memcpy_fromio(dev, dump-\u003eirq, base + 0x4 + y * 16,\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-217-\t\t\t\t\t sizeof(dump-\u003eirq));\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c=223=static void\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:224:mt7915_coredump_fw_stack(struct mt7915_dev *dev, struct mt7915_coredump *dump,\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-225-\t\t\t bool exception)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c=244=static void\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:245:mt7915_coredump_fw_task(struct mt7915_dev *dev, struct mt7915_coredump *dump)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-246-{\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:247:\tu32 offs = is_mt7915(\u0026dev-\u003emt76) ? 0xe0 : 0x170;\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-248-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c=268=static void\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:269:mt7915_coredump_fw_context(struct mt7915_dev *dev, struct mt7915_coredump *dump)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-270-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-279-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:280:\t\tidx = is_mt7915(\u0026dev-\u003emt76) ?\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-281-\t\t (u32)mt76_get_field(dev, MT_FW_CIRQ_IDX, GENMASK(31, 16)) :\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-301-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:302:static struct mt7915_coredump *mt7915_coredump_build(struct mt7915_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-303-{\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:304:\tstruct mt7915_crash_data *crash_data = dev-\u003ecoredump.crash_data;\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:305:\tstruct mt7915_coredump *dump;\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:306:\tstruct mt7915_coredump_mem *dump_mem;\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-307-\tsize_t len, sofar = 0, hdr_len = sizeof(*dump);\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-326-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:327:\tdump = (struct mt7915_coredump *)(buf);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-328-\tdump-\u003elen = len;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-340-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:341:\tmt7915_coredump_fw_state(dev, dump, \u0026exception);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:342:\tmt7915_coredump_fw_trace(dev, dump, exception);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:343:\tmt7915_coredump_fw_task(dev, dump);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:344:\tmt7915_coredump_fw_context(dev, dump);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:345:\tmt7915_coredump_fw_stack(dev, dump, exception);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-346-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-347-\t/* gather memory content */\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:348:\tdump_mem = (struct mt7915_coredump_mem *)(buf + sofar);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-349-\tdump_mem-\u003elen = crash_data-\u003ememdump_buf_len;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-358-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:359:int mt7915_coredump_submit(struct mt7915_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-360-{\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:361:\tstruct mt7915_coredump *dump;\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-362-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:363:\tdump = mt7915_coredump_build(dev);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-364-\tif (!dump) {\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-373-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:374:int mt7915_coredump_register(struct mt7915_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-375-{\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:376:\tstruct mt7915_crash_data *crash_data;\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-377-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-384-\tif (coredump_memdump) {\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:385:\t\tcrash_data-\u003ememdump_buf_len = mt7915_coredump_get_mem_size(dev);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-386-\t\tif (!crash_data-\u003ememdump_buf_len)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-399-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c:400:void mt7915_coredump_unregister(struct mt7915_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.c-401-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-6-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:7:#include \"mt7915.h\"\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-8-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h=9=struct trace {\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-13-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:14:struct mt7915_coredump {\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-15-\tchar magic[16];\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-79-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:80:struct mt7915_coredump_mem {\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-81-\tu32 len;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-84-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:85:struct mt7915_mem_hdr {\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-86-\tu32 start;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-90-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:91:struct mt7915_mem_region {\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-92-\tu32 start;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-99-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:100:const struct mt7915_mem_region *\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:101:mt7915_coredump_get_mem_layout(struct mt7915_dev *dev, u32 *num);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:102:struct mt7915_crash_data *mt7915_coredump_new(struct mt7915_dev *dev);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:103:int mt7915_coredump_submit(struct mt7915_dev *dev);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:104:int mt7915_coredump_register(struct mt7915_dev *dev);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:105:void mt7915_coredump_unregister(struct mt7915_dev *dev);\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-106-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-108-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:109:static inline const struct mt7915_mem_region *\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:110:mt7915_coredump_get_mem_layout(struct mt7915_dev *dev, u32 *num)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-111-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-114-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:115:static inline int mt7915_coredump_submit(struct mt7915_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-116-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-119-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:120:static inline struct mt7915_crash_data *mt7915_coredump_new(struct mt7915_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-121-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-124-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:125:static inline int mt7915_coredump_register(struct mt7915_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-126-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-129-\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h:130:static inline void mt7915_coredump_unregister(struct mt7915_dev *dev)\ndrivers/net/wireless/mediatek/mt76/mt7915/coredump.h-131-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-4-#include \u003clinux/relay.h\u003e\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:5:#include \"mt7915.h\"\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-6-#include \"eeprom.h\"\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=21=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:22:mt7915_implicit_txbf_set(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-23-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:24:\tstruct mt7915_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-25-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-30-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:31:\treturn mt7915_mcu_set_txbf(dev, MT_BF_TYPE_UPDATE);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-32-}\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=34=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:35:mt7915_implicit_txbf_get(void *data, u64 *val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-36-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:37:\tstruct mt7915_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-38-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-43-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:44:DEFINE_DEBUGFS_ATTRIBUTE(fops_implicit_txbf, mt7915_implicit_txbf_get,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:45:\t\t\t mt7915_implicit_txbf_set, \"%lld\\n\");\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-46-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=48=static ssize_t\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:49:mt7915_sys_recovery_set(struct file *file, const char __user *user_buf,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-50-\t\t\tsize_t count, loff_t *ppos)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-51-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:52:\tstruct mt7915_phy *phy = file-\u003eprivate_data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:53:\tstruct mt7915_dev *dev = phy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-54-\tbool band = phy-\u003emt76-\u003eband_idx;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-74-\tcase SER_QUERY:\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:75:\t\tret = mt7915_mcu_set_ser(dev, 0, 0, band);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-76-\t\tbreak;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-82-\tcase SER_SET_RECOVER_L3_BF:\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:83:\t\tret = mt7915_mcu_set_ser(dev, SER_ENABLE, BIT(val), band);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-84-\t\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-86-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:87:\t\tret = mt7915_mcu_set_ser(dev, SER_RECOVER, val, band);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-88-\t\tbreak;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-92-\t\tmt76_set(dev, MT_WFDMA0_MCU_HOST_INT_ENA, MT_MCU_CMD_WDT_MASK);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:93:\t\tret = mt7915_mcu_set_ser(dev, 1, 3, band);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-94-\t\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-97-\t\tdev-\u003erecovery.state |= MT_MCU_CMD_WDT_MASK;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:98:\t\tmt7915_reset(dev);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-99-\t\tbreak;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=113=static ssize_t\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:114:mt7915_sys_recovery_get(struct file *file, char __user *user_buf,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-115-\t\t\tsize_t count, loff_t *ppos)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-116-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:117:\tstruct mt7915_phy *phy = file-\u003eprivate_data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:118:\tstruct mt7915_dev *dev = phy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-119-\tchar *buff;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-192-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:193:static const struct file_operations mt7915_sys_recovery_ops = {\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:194:\t.write = mt7915_sys_recovery_set,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:195:\t.read = mt7915_sys_recovery_get,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-196-\t.open = simple_open,\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=200=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:201:mt7915_radar_trigger(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-202-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-204-#define RADAR_BACKGROUND\t2\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:205:\tstruct mt7915_phy *phy = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:206:\tstruct mt7915_dev *dev = phy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-207-\tint rdd_idx;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-216-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:217:\trdd_idx = mt7915_get_rdd_idx(phy, val == RADAR_BACKGROUND);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-218-\tif (rdd_idx \u003c 0) {\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=227=DEFINE_DEBUGFS_ATTRIBUTE(fops_radar_trigger, NULL,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:228:\t\t\t mt7915_radar_trigger, \"%lld\\n\");\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-229-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=230=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:231:mt7915_muru_debug_set(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-232-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:233:\tstruct mt7915_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-234-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-235-\tdev-\u003emuru_debug = val;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:236:\tmt7915_mcu_muru_debug_set(dev, dev-\u003emuru_debug);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-237-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=241=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:242:mt7915_muru_debug_get(void *data, u64 *val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-243-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:244:\tstruct mt7915_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-245-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-250-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:251:DEFINE_DEBUGFS_ATTRIBUTE(fops_muru_debug, mt7915_muru_debug_get,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:252:\t\t\t mt7915_muru_debug_set, \"%lld\\n\");\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-253-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:254:static int mt7915_muru_stats_show(struct seq_file *file, void *data)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-255-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:256:\tstruct mt7915_phy *phy = file-\u003eprivate;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:257:\tstruct mt7915_dev *dev = phy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-258-\tstatic const char * const dl_non_he_type[] = {\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-280-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:281:\tret = mt7915_mcu_muru_debug_get(phy);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-282-\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-439-}\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:440:DEFINE_SHOW_ATTRIBUTE(mt7915_muru_stats);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-441-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=442=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:443:mt7915_rdd_monitor(struct seq_file *s, void *data)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-444-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:445:\tstruct mt7915_dev *dev = dev_get_drvdata(s-\u003eprivate);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-446-\tstruct cfg80211_chan_def *chandef = \u0026dev-\u003erdd2_chandef;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-451-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:452:\tif (!mt7915_eeprom_has_background_radar(dev)) {\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-453-\t\tseq_puts(s, \"no background radar capability\\n\");\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=494=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:495:mt7915_fw_debug_wm_set(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-496-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:497:\tstruct mt7915_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-498-\tenum {\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-518-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:519:\tret = mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, val);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-520-\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-528-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:529:\t\tret = mt7915_mcu_fw_dbg_ctrl(dev, debug, val);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-530-\t\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=548=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:549:mt7915_fw_debug_wm_get(void *data, u64 *val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-550-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:551:\tstruct mt7915_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-552-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-557-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:558:DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wm, mt7915_fw_debug_wm_get,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:559:\t\t\t mt7915_fw_debug_wm_set, \"%lld\\n\");\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-560-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=561=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:562:mt7915_fw_debug_wa_set(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-563-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:564:\tstruct mt7915_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-565-\tint ret;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-568-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:569:\tret = mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev-\u003efw.debug_wa);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-570-\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-572-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:573:\tret = mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-574-\t\t\t\tMCU_WA_PARAM_PDMA_RX, !!dev-\u003efw.debug_wa, 0);\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=582=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:583:mt7915_fw_debug_wa_get(void *data, u64 *val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-584-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:585:\tstruct mt7915_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-586-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-591-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:592:DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wa, mt7915_fw_debug_wa_get,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:593:\t\t\t mt7915_fw_debug_wa_set, \"%lld\\n\");\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-594-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=619=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:620:mt7915_fw_debug_bin_set(void *data, u64 val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-621-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-625-\t};\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:626:\tstruct mt7915_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-627-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-637-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:638:\treturn mt7915_fw_debug_wm_set(dev, dev-\u003efw.debug_wm);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-639-}\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=641=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:642:mt7915_fw_debug_bin_get(void *data, u64 *val)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-643-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:644:\tstruct mt7915_dev *dev = data;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-645-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-650-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:651:DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_bin, mt7915_fw_debug_bin_get,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:652:\t\t\t mt7915_fw_debug_bin_set, \"%lld\\n\");\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-653-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=654=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:655:mt7915_fw_util_wm_show(struct seq_file *file, void *data)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-656-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:657:\tstruct mt7915_dev *dev = file-\u003eprivate;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-658-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-672-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:673:DEFINE_SHOW_ATTRIBUTE(mt7915_fw_util_wm);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-674-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=675=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:676:mt7915_fw_util_wa_show(struct seq_file *file, void *data)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-677-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:678:\tstruct mt7915_dev *dev = file-\u003eprivate;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-679-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-682-\tif (dev-\u003efw.debug_wa)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:683:\t\treturn mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(QUERY),\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-684-\t\t\t\t\t MCU_WA_PARAM_CPU_UTIL, 0, 0);\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-688-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:689:DEFINE_SHOW_ATTRIBUTE(mt7915_fw_util_wa);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-690-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=691=static void\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:692:mt7915_ampdu_stat_read_phy(struct mt7915_phy *phy,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-693-\t\t\t struct seq_file *file)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-694-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:695:\tstruct mt7915_dev *dev = phy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-696-\tbool ext_phy = phy != \u0026dev-\u003ephy;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=722=static void\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:723:mt7915_txbf_stat_read_phy(struct mt7915_phy *phy, struct seq_file *s)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-724-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=769=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:770:mt7915_tx_stats_show(struct seq_file *file, void *data)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-771-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:772:\tstruct mt7915_phy *phy = file-\u003eprivate;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:773:\tstruct mt7915_dev *dev = phy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-774-\tstruct mt76_mib_stats *mib = \u0026phy-\u003emib;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-778-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:779:\tmt7915_ampdu_stat_read_phy(phy, file);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:780:\tmt7915_mac_update_stats(phy);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:781:\tmt7915_txbf_stat_read_phy(phy, file);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-782-\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-799-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:800:DEFINE_SHOW_ATTRIBUTE(mt7915_tx_stats);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-801-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=802=static void\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:803:mt7915_hw_queue_read(struct seq_file *s, u32 size,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-804-\t\t const struct hw_queue_map *map)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-805-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:806:\tstruct mt7915_phy *phy = s-\u003eprivate;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:807:\tstruct mt7915_dev *dev = phy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-808-\tu32 i, val;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=833=static void\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:834:mt7915_sta_hw_queue_read(void *data, struct ieee80211_sta *sta)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-835-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:836:\tstruct mt7915_sta *msta = (struct mt7915_sta *)sta-\u003edrv_priv;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:837:\tstruct mt7915_dev *dev = msta-\u003evif-\u003ephy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-838-\tstruct seq_file *s = data;\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=861=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:862:mt7915_hw_queues_show(struct seq_file *file, void *data)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-863-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:864:\tstruct mt7915_phy *phy = file-\u003eprivate;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:865:\tstruct mt7915_dev *dev = phy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-866-\tstatic const struct hw_queue_map ple_queue_map[] = {\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-914-\tseq_puts(file, \"PLE non-empty queue info:\\n\");\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:915:\tmt7915_hw_queue_read(file, ARRAY_SIZE(ple_queue_map),\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-916-\t\t\t \u0026ple_queue_map[0]);\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-919-\tieee80211_iterate_stations_atomic(phy-\u003emt76-\u003ehw,\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:920:\t\t\t\t\t mt7915_sta_hw_queue_read, file);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-921-\t/* pse queue */\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-922-\tseq_puts(file, \"PSE non-empty queue info:\\n\");\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:923:\tmt7915_hw_queue_read(file, ARRAY_SIZE(pse_queue_map),\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-924-\t\t\t \u0026pse_queue_map[0]);\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-928-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:929:DEFINE_SHOW_ATTRIBUTE(mt7915_hw_queues);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-930-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c=931=static int\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:932:mt7915_xmit_queues_show(struct seq_file *file, void *data)\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-933-{\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:934:\tstruct mt7915_phy *phy = file-\u003eprivate;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:935:\tstruct mt7915_dev *dev = phy-\u003edev;\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-936-\tstruct {\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-961-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:962:DEFINE_SHOW_ATTRIBUTE(mt7915_xmit_queues);\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-963-\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:964:#define mt7915_txpower_puts(rate)\t\t\t\t\t\t\\\ndrivers/net/wireless/mediatek/mt76/mt7915/debugfs.c-965-({\t\t\t\t\t\t\t\t\t\t\\\n\n"
} |
| 5/2 | 2026/08/10 10:19 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 19865 output: 46 thoughts: 41 Thoughts: Okay, here's my take on those thoughts, framed as an expert's internal monologue: **Investigating the MT7915E Driver Configuration** Right, so the driver in question is `CONFIG_MT7915E`. My first instinct, as always, is to dive into the Kconfig file. That's where all the driver's configuration options are defined. I'll need to check `drivers/net/wireless/mediatek/mt76/mt7915/Kconfig`. That's the logical location to start – it'll tell me if this driver is conditionally compiled, what other dependencies it has, any associated features it enables or disables, and generally how it integrates into the broader Mediatek and wireless networking stack. Understanding its Kconfig entries will give me a solid foundation for evaluating its behavior and any potential issues or modifications I might need to make. Let's see what we find. |
| 6/2 | 2026/08/10 10:20 | tool | grepper |
0mArgs:{
"Expression": "config MT7915E",
"PathPrefix": "drivers/net/wireless/mediatek/mt76/mt7915/"
}Results: {
"Output": "drivers/net/wireless/mediatek/mt76/mt7915/Kconfig-1-# SPDX-License-Identifier: BSD-3-Clause-Clear\ndrivers/net/wireless/mediatek/mt76/mt7915/Kconfig:2:config MT7915E\ndrivers/net/wireless/mediatek/mt76/mt7915/Kconfig-3-\ttristate \"MediaTek MT7915E (PCIe) support\"\n"
} |
| 7/2 | 2026/08/10 10:20 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 20277 output: 48 thoughts: 299 Thoughts: **Analyzing the Patch for WorthFuzzing** Okay, so I'm looking at this patch and it mentions "MediaTek MT7915E (PCIe) support." Right away, I see this is a vendor-specific PCIe driver. That's the key. Now I need to figure out if it's fuzz-able according to these instructions. The instructions clearly state that we should set `WorthFuzzing=false` if the patch concerns code within: * Vendor-specific PCIe switch, SmartNIC, or GPU drivers. These often require physical PCIe hardware not emulated in standard QEMU. * `.remove`, `.shutdown`, or `pci_unregister_driver` teardown callbacks that get executed during PCI hot-unplug or sysfs driver unbind operations. Now, let's think. The MT7915E... is that a SmartNIC, GPU, or PCIe switch? No, it's a Wi-Fi card. But wait, it *is* a vendor-specific PCIe hardware card that's probably not emulated in standard QEMU. The plot thickens. Looking deeper, this patch touches `mt7915_unregister_thermal`. That's a teardown callback, right? It's called from `mt7915_thermal_init` on an error condition and also from `mt7915_unregister_device`, which itself is called from `mt7915_pci_remove`. This is exactly the kind of thing the instructions say to avoid if we want to fuzz the code. I need to confirm where `mt7915_unregister_thermal` is called, to be sure. It could be called from another function as well. |
| 8/2 | 2026/08/10 10:20 | tool | grepper |
0mArgs:{
"Expression": "mt7915_unregister_thermal",
"PathPrefix": "drivers/net/wireless/mediatek/mt76/mt7915/"
}Results: {
"Output": "drivers/net/wireless/mediatek/mt76/mt7915/init.c=195=static const struct thermal_zone_device_ops mt7915_tz_ops = {\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c-198-\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c:199:static void mt7915_unregister_thermal(struct mt7915_phy *phy)\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c-200-{\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c=1229=static void mt7915_unregister_ext_phy(struct mt7915_dev *dev)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c-1236-\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c:1237:\tmt7915_unregister_thermal(phy);\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c-1238-\tmt76_unregister_phy(mphy);\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c=1253=int mt7915_register_device(struct mt7915_dev *dev)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c-1321-unreg_thermal:\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c:1322:\tmt7915_unregister_thermal(\u0026dev-\u003ephy);\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c-1323-unreg_dev:\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c=1333=void mt7915_unregister_device(struct mt7915_dev *dev)\n--\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c-1339-\tmt7915_coredump_unregister(dev);\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c:1340:\tmt7915_unregister_thermal(\u0026dev-\u003ephy);\ndrivers/net/wireless/mediatek/mt76/mt7915/init.c-1341-\tmt76_unregister_device(\u0026dev-\u003emt76);\n"
} |
| 9/2 | 2026/08/10 10:20 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 21690 output: 93 thoughts: 173 Thoughts: **My Assessment of This Patch** Okay, let's break this down. From what I'm seeing, this patch is really about cleaning up and a tiny bit of housekeeping. The main action happens in `mt7915_unregister_ext_phy`, `mt7915_register_device`, and `mt7915_unregister_device`. `mt7915_unregister_device` in particular is called during the PCIe device removal process, which is handled in `mt7915_pci_remove`, so it's clearly part of the driver's teardown sequence. Essentially it's an unregister call and a teardown callback, meaning this is not a new feature, but rather handling the clean-up when the device is no longer present. There's also a warning message added in `mt7915_thermal_init`. That's purely cosmetic and not relevant from a functional or fuzzing perspective. Considering this, the bulk of the changes involve cleanup and unregistering the thermal. The remaining portion of the patch deals with PCIe hardware that isn't emulated by the standard QEMU setup. This means it is very likely specific to vendor-specific PCIe hardware cards. Putting it all together, I don't see any significant changes that would warrant fuzzing this particular patch. It's essentially about ensuring proper device removal and thermal handling and the code that won't show up in a standard QEMU set up, which does not indicate any obvious vulnerability. Therefore, for my purposes, `WorthFuzzing=false`. |
| 10/2 | 2026/08/10 10:20 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies a vendor-specific PCIe Wi-Fi driver (MT7915) which requires physical hardware not emulated in standard QEMU. Furthermore, the changes are limited to a teardown callback (mt7915_unregister_thermal) and a purely decorative warning message update.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies a vendor-specific PCIe Wi-Fi driver (MT7915) which requires physical hardware not emulated in standard QEMU. Furthermore, the changes are limited to a teardown callback (mt7915_unregister_thermal) and a purely decorative warning message update.",
"WorthFuzzing": false
} |
| 11/1 | 2026/08/10 10:20 | action | If |
0mArgs:{
"WorthFuzzing": false
}Results: null |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|