AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/08/02 19:16 flow patch-triage
0m Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch modifies the stmmac (STMicroelectronics/Synopsys DesignWare MAC) Ethernet driver. This is a physical hardware driver that requires specific SoC or PCIe hardware not emulated in standard QEMU environments used for fuzzing. Therefore, the modified code paths are unreachable during fuzzing.",
  "WorthFuzzing": false
}

1/1 2026/08/02 19:16 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit 09140c050cf05abc833781951ee851ee63fc8370\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Sun Aug 2 19:16:40 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c\nindex 92585d27ab883..154cc0c7623da 100644\n--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c\n+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c\n@@ -759,7 +759,10 @@ static u32 stmmac_usec2riwt(u32 usec, struct stmmac_priv *priv)\n \t\t\treturn 0;\n \t}\n \n-\treturn (usec * (clk / 1000000)) / 256;\n+\t/* Receive Interrupt Watchdog Timer (riwt) has a resolution of 256\n+\t * ticks.\n+\t */\n+\treturn DIV_ROUND_CLOSEST(usec * (clk / USEC_PER_SEC), 256);\n }\n \n static u32 stmmac_riwt2usec(u32 riwt, struct stmmac_priv *priv)\n@@ -772,7 +775,7 @@ static u32 stmmac_riwt2usec(u32 riwt, struct stmmac_priv *priv)\n \t\t\treturn 0;\n \t}\n \n-\treturn (riwt * 256) / (clk / 1000000);\n+\treturn DIV_ROUND_CLOSEST(riwt * 256, clk / USEC_PER_SEC);\n }\n \n static int __stmmac_get_coalesce(struct net_device *dev,\n"
}

2/1 2026/08/02 19:16 agent patch-evaluator
0m Model:
best-expensive

Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch modifies the stmmac (STMicroelectronics/Synopsys DesignWare MAC) Ethernet driver. This is a physical hardware driver that requires specific SoC or PCIe hardware not emulated in standard QEMU environments used for fuzzing. Therefore, the modified code paths are unreachable during fuzzing.",
  "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 09140c050cf05abc833781951ee851ee63fc8370
Author: syz-cluster <triage@syzkaller.com>
Date:   Sun Aug 2 19:16:40 2026 +0000

    syz-cluster: applied patch under review

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
index 92585d27ab883..154cc0c7623da 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
@@ -759,7 +759,10 @@ static u32 stmmac_usec2riwt(u32 usec, struct stmmac_priv *priv)
 			return 0;
 	}
 
-	return (usec * (clk / 1000000)) / 256;
+	/* Receive Interrupt Watchdog Timer (riwt) has a resolution of 256
+	 * ticks.
+	 */
+	return DIV_ROUND_CLOSEST(usec * (clk / USEC_PER_SEC), 256);
 }
 
 static u32 stmmac_riwt2usec(u32 riwt, struct stmmac_priv *priv)
@@ -772,7 +775,7 @@ static u32 stmmac_riwt2usec(u32 riwt, struct stmmac_priv *priv)
 			return 0;
 	}
 
-	return (riwt * 256) / (clk / 1000000);
+	return DIV_ROUND_CLOSEST(riwt * 256, clk / USEC_PER_SEC);
 }
 
 static int __stmmac_get_coalesce(struct net_device *dev,

3/2 2026/08/02 19:16 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 2300
							output: 40
							thoughts: 240
						

Thoughts:
**Analyzing the `stmmac` Driver Patch**

Okay, so this patch is tweaking the `stmmac_usec2riwt` and `stmmac_riwt2usec` functions within `stmmac_ethtool.c`. The core change is the division logic – they're using `DIV_ROUND_CLOSEST` and `USEC_PER_SEC` now instead of hardcoding `1000000`. Functionally, it's a relatively minor adjustment to the timing calculations within the driver. Given the driver in question is `stmmac`, my next thoughts go to fuzzing potential. It is an STMicroelectronics Ethernet driver supporting various speeds. It's a hardware-facing driver, right? If so, this is exciting.

My immediate question is: Can we effectively emulate the `stmmac` driver within a QEMU environment for fuzzing? Since it's a physical hardware driver, that becomes the key consideration. It's often used with platform devices, particularly on ARM SoCs, but also with PCI devices. The next logical step is to see whether it is used via PCI or platform devices. Let's do a quick search for `stmmac_pci` and `stmmac_platform` to see if we can get a clearer picture of how it's integrated and thus, how we might emulate it. Understanding the device-to-driver interface is crucial here.



4/2 2026/08/02 19:16 tool grepper
0m Args:
{
  "Expression": "stmmac_pci",
  "PathPrefix": "drivers/net/ethernet/stmicro/stmmac/"
}

Results:
{
  "Output": "drivers/net/ethernet/stmicro/stmmac/Makefile=53=obj-$(CONFIG_DWMAC_MOTORCOMM)\t+= dwmac-motorcomm.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:54:stmmac-pci-objs:= stmmac_pci.o\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=25=struct intel_priv_data {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-39- */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:40:struct stmmac_pci_func_data {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-41-\tunsigned int func;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-44-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:45:struct stmmac_pci_dmi_data {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:46:\tconst struct stmmac_pci_func_data *func;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-47-\tsize_t nfuncs;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-49-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:50:struct stmmac_pci_info {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-51-\tint (*setup)(struct pci_dev *pdev, struct plat_stmmacenet_data *plat);\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=91=static const int adln_tsn_lane_regs[] = {6};\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-92-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:93:static int stmmac_pci_find_phy_addr(struct pci_dev *pdev,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-94-\t\t\t\t    const struct dmi_system_id *dmi_list)\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-95-{\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:96:\tconst struct stmmac_pci_func_data *func_data;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:97:\tconst struct stmmac_pci_dmi_data *dmi_data;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-98-\tconst struct dmi_system_id *dmi_id;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=786=static int ehl_sgmii_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-805-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:806:static struct stmmac_pci_info ehl_sgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-807-\t.setup = ehl_sgmii_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=810=static int ehl_rgmii_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-820-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:821:static struct stmmac_pci_info ehl_rgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-822-\t.setup = ehl_rgmii_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=841=static int ehl_pse0_rgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-847-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:848:static struct stmmac_pci_info ehl_pse0_rgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-849-\t.setup = ehl_pse0_rgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=852=static int ehl_pse0_sgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-869-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:870:static struct stmmac_pci_info ehl_pse0_sgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-871-\t.setup = ehl_pse0_sgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=890=static int ehl_pse1_rgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-896-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:897:static struct stmmac_pci_info ehl_pse1_rgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-898-\t.setup = ehl_pse1_rgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=901=static int ehl_pse1_sgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-918-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:919:static struct stmmac_pci_info ehl_pse1_sgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-920-\t.setup = ehl_pse1_sgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=944=static int tgl_sgmii_phy0_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-952-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:953:static struct stmmac_pci_info tgl_sgmii1g_phy0_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-954-\t.setup = tgl_sgmii_phy0_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=957=static int tgl_sgmii_phy1_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-965-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:966:static struct stmmac_pci_info tgl_sgmii1g_phy1_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-967-\t.setup = tgl_sgmii_phy1_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=970=static int adls_sgmii_phy0_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-979-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:980:static struct stmmac_pci_info adls_sgmii1g_phy0_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-981-\t.setup = adls_sgmii_phy0_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=984=static int adls_sgmii_phy1_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-993-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:994:static struct stmmac_pci_info adls_sgmii1g_phy1_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-995-\t.setup = adls_sgmii_phy1_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=1023=static int adln_sgmii_phy0_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1041-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1042:static struct stmmac_pci_info adln_sgmii1g_phy0_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1043-\t.setup = adln_sgmii_phy0_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1045-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1046:static const struct stmmac_pci_func_data galileo_stmmac_func_data[] = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1047-\t{\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1052-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1053:static const struct stmmac_pci_dmi_data galileo_stmmac_dmi_data = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1054-\t.func = galileo_stmmac_func_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1057-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1058:static const struct stmmac_pci_func_data iot2040_stmmac_func_data[] = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1059-\t{\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1068-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1069:static const struct stmmac_pci_dmi_data iot2040_stmmac_dmi_data = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1070-\t.func = iot2040_stmmac_func_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=1109=static int quark_default_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1119-\t */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1120:\tret = stmmac_pci_find_phy_addr(pdev, quark_pci_dmi);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1121-\tif (ret \u003c 0) {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1144-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1145:static const struct stmmac_pci_info quark_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1146-\t.setup = quark_default_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=1263=static int intel_eth_pci_probe(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1265-{\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1266:\tstruct stmmac_pci_info *info = (struct stmmac_pci_info *)id-\u003edriver_data;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1267-\tstruct intel_priv_data *intel_priv;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=76=struct loongson_data {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-81-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:82:struct stmmac_pci_info {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-83-\tint (*setup)(struct pci_dev *pdev, struct plat_stmmacenet_data *plat);\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=132=static int loongson_gmac_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-141-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:142:static struct stmmac_pci_info loongson_gmac_pci_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-143-\t.setup = loongson_gmac_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=165=static int loongson_gnet_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-176-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:177:static struct stmmac_pci_info loongson_gnet_pci_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-178-\t.setup = loongson_gnet_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=498=static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id *id)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-501-\tstruct stmmac_resources res = {};\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:502:\tstruct stmmac_pci_info *info;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-503-\tstruct loongson_data *ld;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-537-\tplat-\u003efix_soc_reset = loongson_dwmac_fix_reset;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:538:\tplat-\u003esuspend = stmmac_pci_plat_suspend;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:539:\tplat-\u003eresume = stmmac_pci_plat_resume;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-540-\tld-\u003edev = \u0026pdev-\u003edev;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-542-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:543:\tinfo = (struct stmmac_pci_info *)id-\u003edriver_data;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-544-\tret = info-\u003esetup(pdev, plat);\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c=188=static int motorcomm_resume(struct device *dev, void *bsp_priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-192-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c:193:\tret = stmmac_pci_plat_resume(dev, bsp_priv);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-194-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c=208=motorcomm_default_plat_data(struct pci_dev *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-248-\tplat-\u003ecore_type\t\t= DWMAC_CORE_GMAC4;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c:249:\tplat-\u003esuspend\t\t= stmmac_pci_plat_suspend;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-250-\tplat-\u003eresume\t\t= motorcomm_resume;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-11-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c:12:int stmmac_pci_plat_suspend(struct device *dev, void *bsp_priv)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-13-{\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-25-}\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c:26:EXPORT_SYMBOL_GPL(stmmac_pci_plat_suspend);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-27-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c:28:int stmmac_pci_plat_resume(struct device *dev, void *bsp_priv)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-29-{\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-43-}\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c:44:EXPORT_SYMBOL_GPL(stmmac_pci_plat_resume);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-45-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h-8-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h:9:int stmmac_pci_plat_suspend(struct device *dev, void *bsp_priv);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h:10:int stmmac_pci_plat_resume(struct device *dev, void *bsp_priv);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h-11-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-18-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:19:struct stmmac_pci_info {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-20-\tint (*setup)(struct pci_dev *pdev, struct plat_stmmacenet_data *plat);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=33=static int stmmac_default_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-49-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:50:static const struct stmmac_pci_info stmmac_pci_info = {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-51-\t.setup = stmmac_default_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=54=static int snps_gmac5_default_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-101-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:102:static const struct stmmac_pci_info snps_gmac5_pci_info = {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-103-\t.setup = snps_gmac5_default_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-106-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:107: * stmmac_pci_probe\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-108- *\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-117- */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:118:static int stmmac_pci_probe(struct pci_dev *pdev,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-119-\t\t\t    const struct pci_device_id *id)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-120-{\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:121:\tstruct stmmac_pci_info *info = (struct stmmac_pci_info *)id-\u003edriver_data;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-122-\tstruct plat_stmmacenet_data *plat;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-179-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:180:\tplat-\u003esuspend = stmmac_pci_plat_suspend;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:181:\tplat-\u003eresume = stmmac_pci_plat_resume;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-182-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-186-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:187: * stmmac_pci_remove\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-188- *\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-191- */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:192:static void stmmac_pci_remove(struct pci_dev *pdev)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-193-{\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=203=static const struct pci_device_id stmmac_id_table[] = {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:204:\t{ PCI_DEVICE_DATA(STMMAC, STMMAC, \u0026stmmac_pci_info) },\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:205:\t{ PCI_DEVICE_DATA(STMICRO, MAC, \u0026stmmac_pci_info) },\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-206-\t{ PCI_DEVICE_DATA(SYNOPSYS, GMAC5_ID, \u0026snps_gmac5_pci_info) },\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=210=MODULE_DEVICE_TABLE(pci, stmmac_id_table);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-211-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:212:static struct pci_driver stmmac_pci_driver = {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-213-\t.name = STMMAC_RESOURCE_NAME,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-214-\t.id_table = stmmac_id_table,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:215:\t.probe = stmmac_pci_probe,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:216:\t.remove = stmmac_pci_remove,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-217-\t.driver         = {\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-221-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:222:module_pci_driver(stmmac_pci_driver);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-223-\n"
}

5/2 2026/08/02 19:16 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 10110
							output: 25
							thoughts: 850
						

Thoughts:
**Fuzzing `stmmac_pci` with Syzkaller: A Deep Dive**

Okay, so `stmmac_pci` exists; it's a PCI driver. The immediate question that pops into my head is, can this be fuzzed using QEMU? I know QEMU doesn't *natively* emulate `stmmac` PCI devices, so I have to think about a more generic approach or if it's somehow included in a platform emulation. Now, wait a minute, doesn't syzkaller have an `stmmac` description? This is interesting, let's see if syzkaller can be used to fuzz it.

I see there's a patch in `stmmac_ethtool.c` that modifies `stmmac_usec2riwt` and `stmmac_riwt2usec`. These functions are ultimately called from `__stmmac_get_coalesce` and `__stmmac_set_coalesce`. Now I'm remembering that syzkaller *does* fuzz ethtool through ioctls on sockets, which opens up some potential. But, does syzkaller have an emulated `stmmac` device?

I have to check if there's a virtual `stmmac` device or if it's fuzzed through something like `vhci`. But syzkaller fuzzes PCI devices using `syz_pci_device_add` or similar, right? No, syzkaller doesn't have a generic PCI emulator that could emulate arbitrary devices without a QEMU device for it. For USB, syzkaller has `syz_usb_connect`, and `syz_80211_inject_frame` for mac80211. And PCI? I'm missing something, does it use `syz_pci_device_add`? No, no it doesn't. Syzkaller doesn't have a generic PCI emulator that could emulate arbitrary vendor devices. Actually, wait, does it? No... syzkaller fuzzes PCI through QEMU's PCI emulation or config space injection.

Okay, let's check QEMU's support. QEMU lists a bunch of network devices, but is `stmmac` even in there? Well, QEMU has `hw/net/allwinner-sun8i-emac.c`, `hw/net/cadence_gem.c`, `hw/net/ftgmac100.c`, `hw/net/imx_fec.c`, `hw/net/npcm7xx_emc.c`, `hw/net/smc91c111.c`, `hw/net/stellaris_enet.c`, and `hw/net/xgmac.c`. Ah, `xgmac` is Synopsys DesignWare MAC. And `stmmac` *is* also a Synopsys DesignWare MAC (DWMAC)! That's a huge clue.

QEMU emulates `xgmac` in `hw/net/xgmac.c`. The question is, is `stmmac` the driver for `xgmac`? That's a good lead. Looking at `drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c`, I see a match with `PCI_DEVICE_DATA(SYNOPSYS, GMAC5_ID, ...)`. So yes!

Also, I know that `stmmac` is used in many ARM boards emulated by QEMU, but not on `virt`, which uses `virtio-net-pci`. Syzkaller typically runs on `qemu-system-x86_64` with the `q35` machine type. On x86_64, PCI devices are provided by QEMU's emulation, or there's some software emulation. Syzkaller has `vhci` for USB, `vnet` for network, and `vkms` for DRM. So the million-dollar question: how does syzkaller fuzz `stmmac`?

Let me look for an `stmmac` driver description in syzkaller.



6/2 2026/08/02 19:16 tool grepper
0m Args:
{
  "Expression": "stmmac",
  "PathPrefix": "net/"
}

Results:
{
  "Output": "net/core/selftests.c-3- * Copyright (c) 2019 Synopsys, Inc. and/or its affiliates.\nnet/core/selftests.c:4: * stmmac Selftests Support\nnet/core/selftests.c-5- *\n--\nnet/core/selftests.c-7- *\nnet/core/selftests.c:8: * Ported from stmmac by:\nnet/core/selftests.c-9- * Copyright (C) 2021 Oleksij Rempel \u003co.rempel@pengutronix.de\u003e\n"
}

7/2 2026/08/02 19:16 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 12070
							output: 23
							thoughts: 79
						

Thoughts:
**PCI Fuzzing Investigation**

Okay, first things first, let me see if syzkaller currently supports fuzzing PCI devices. I seem to recall some recent work, potentially leveraging `vfio` or the `pci` subsystem... but I'm drawing a blank. No, wait, that doesn't sound right. I think it uses `syz_pci_device_add`? Right, that rings a bell. Let me quickly verify if there are any dedicated `syz_` pseudo-syscalls specifically designed for interacting with PCI components.



8/2 2026/08/02 19:17 tool grepper
0m Args:
{
  "Expression": "syz_",
  "PathPrefix": ""
}

Results:
{
  "Output": "drivers/iommu/iommufd/ioas.c=283=int iommufd_ioas_copy(struct iommufd_ucmd *ucmd)\n--\ndrivers/iommu/iommufd/ioas.c-292-\ndrivers/iommu/iommufd/ioas.c:293:\tiommufd_test_syz_conv_iova_id(ucmd, cmd-\u003esrc_ioas_id, \u0026cmd-\u003esrc_iova,\ndrivers/iommu/iommufd/ioas.c-294-\t\t\t\t      \u0026cmd-\u003eflags);\n--\ndrivers/iommu/iommufd/iommufd_private.h=712=extern size_t iommufd_test_memory_limit;\ndrivers/iommu/iommufd/iommufd_private.h:713:void iommufd_test_syz_conv_iova_id(struct iommufd_ucmd *ucmd,\ndrivers/iommu/iommufd/iommufd_private.h-714-\t\t\t\t   unsigned int ioas_id, u64 *iova, u32 *flags);\n--\ndrivers/iommu/iommufd/iommufd_private.h=719=int iommufd_test_dma_buf_iommufd_map(struct dma_buf_attachment *attachment,\n--\ndrivers/iommu/iommufd/iommufd_private.h-721-#else\ndrivers/iommu/iommufd/iommufd_private.h:722:static inline void iommufd_test_syz_conv_iova_id(struct iommufd_ucmd *ucmd,\ndrivers/iommu/iommufd/iommufd_private.h-723-\t\t\t\t\t\t unsigned int ioas_id,\n--\ndrivers/iommu/iommufd/selftest.c=51=static void mock_dev_disable_iopf(struct device *dev, struct iommu_domain *domain);\n--\ndrivers/iommu/iommufd/selftest.c-58- */\ndrivers/iommu/iommufd/selftest.c:59:static unsigned long __iommufd_test_syz_conv_iova(struct io_pagetable *iopt,\ndrivers/iommu/iommufd/selftest.c-60-\t\t\t\t\t\t  u64 *iova)\ndrivers/iommu/iommufd/selftest.c-61-{\ndrivers/iommu/iommufd/selftest.c:62:\tstruct syz_layout {\ndrivers/iommu/iommufd/selftest.c-63-\t\t__u32 nth_area;\n--\ndrivers/iommu/iommufd/selftest.c-65-\t};\ndrivers/iommu/iommufd/selftest.c:66:\tstruct syz_layout *syz = (void *)iova;\ndrivers/iommu/iommufd/selftest.c-67-\tunsigned int nth = syz-\u003enth_area;\n--\ndrivers/iommu/iommufd/selftest.c-83-\ndrivers/iommu/iommufd/selftest.c:84:static unsigned long iommufd_test_syz_conv_iova(struct iommufd_access *access,\ndrivers/iommu/iommufd/selftest.c-85-\t\t\t\t\t\tu64 *iova)\n--\ndrivers/iommu/iommufd/selftest.c-93-\t}\ndrivers/iommu/iommufd/selftest.c:94:\tret = __iommufd_test_syz_conv_iova(\u0026access-\u003eioas-\u003eiopt, iova);\ndrivers/iommu/iommufd/selftest.c-95-\tmutex_unlock(\u0026access-\u003eioas_lock);\n--\ndrivers/iommu/iommufd/selftest.c-98-\ndrivers/iommu/iommufd/selftest.c:99:void iommufd_test_syz_conv_iova_id(struct iommufd_ucmd *ucmd,\ndrivers/iommu/iommufd/selftest.c-100-\t\t\t\t   unsigned int ioas_id, u64 *iova, u32 *flags)\n--\ndrivers/iommu/iommufd/selftest.c-110-\t\treturn;\ndrivers/iommu/iommufd/selftest.c:111:\t*iova = __iommufd_test_syz_conv_iova(\u0026ioas-\u003eiopt, iova);\ndrivers/iommu/iommufd/selftest.c-112-\tiommufd_put_object(ucmd-\u003eictx, \u0026ioas-\u003eobj);\n--\ndrivers/iommu/iommufd/selftest.c=1529=static int iommufd_test_access_pages(struct iommufd_ucmd *ucmd,\n--\ndrivers/iommu/iommufd/selftest.c-1557-\tif (flags \u0026 MOCK_FLAGS_ACCESS_SYZ)\ndrivers/iommu/iommufd/selftest.c:1558:\t\tiova = iommufd_test_syz_conv_iova(staccess-\u003eaccess,\ndrivers/iommu/iommufd/selftest.c-1559-\t\t\t\t\t\t  \u0026cmd-\u003eaccess_pages.iova);\n--\ndrivers/iommu/iommufd/selftest.c=1624=static int iommufd_test_access_rw(struct iommufd_ucmd *ucmd,\n--\ndrivers/iommu/iommufd/selftest.c-1659-\tif (flags \u0026 MOCK_FLAGS_ACCESS_SYZ)\ndrivers/iommu/iommufd/selftest.c:1660:\t\tiova = iommufd_test_syz_conv_iova(staccess-\u003eaccess,\ndrivers/iommu/iommufd/selftest.c-1661-\t\t\t\t\t\t  \u0026cmd-\u003eaccess_rw.iova);\n"
}

9/2 2026/08/02 19:17 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 13866
							output: 37
							thoughts: 2287
						

Thoughts:
**My Reasoning Process**

Okay, so the prompt tells me to determine if a patch is "WorthFuzzing" and specifically to return `false` if the code touches things that aren't reachable in a standard virtualized environment like QEMU. Immediately, I see a few key constraints: I can't look at syzkaller's syzlang descriptions directly (no `read-syz-spec`, `syz-grepper`).  The criteria for returning `false` focus on unreachable code paths, especially those involving hardware that isn't emulated.

My initial thought is about the target of the patch: `stmmac`. I know `stmmac` is an Ethernet driver, but is it a driver for something that's emulated in standard QEMU? I quickly recall that there's a DesignWare MAC implementation emulated in QEMU via `xgmac`, but this seems independent from `stmmac`. I need to figure out the relationship. I start by checking QEMU's supported platforms. I find `stmmac` is used for `sun8i-emac` (Allwinner H3) which is emulated by QEMU (`orangepi-pc` machine). But syzkaller usually focuses on x86_64 or arm64 `virt`.

I start to think about the fuzzing environment. I know syzkaller *can* run on ARM64, but what's the standard QEMU setup? I know the standard `arm64` `virt` machine uses `virtio-net`, not `stmmac`. I remember I saw a commit from syzkaller authors for this patch. I think this means syzkaller is testing this patch. If it's testing, it should be reachable. But my prompt says return false, if it is unreachable. My focus is on the environment where syzkaller usually tests.

I also remember the prompt said that vendor-specific PCIe switch, SmartNIC, or GPU drivers are unreachable. Is `stmmac` a vendor-specific driver? I know that `stmmac` is a driver for Synopsys DesignWare MAC, which is a physical IP core. Okay, so it *is* vendor-specific. This feels like a critical piece of information.

Next, I think about how a driver like `stmmac` gets loaded. It needs hardware to probe. It also has `ethtool` callbacks. If the device isn't present, the driver won't probe, and the ethtool code won't be reachable. Is `stmmac` the only thing the patch modifies? Yes.

I check if QEMU *itself* emulates an `stmmac` PCI device. I remember the QEMU `hw/net/` directory, and I know it doesn't. My memory tells me QEMU focuses on standard virtualized NICs like `e1000`, `rtl8139`, `virtio-net`, etc.  I need to verify. I double check, and confirm, that `stmmac` is not there.

Then, I think about the broader picture. Even if syzkaller is *capable* of running on a platform where `stmmac` *is* present (like `highbank` or `orangepi-pc`), that's not the *standard* QEMU setup. It isn't. And the prompt explicitly calls out vendor-specific drivers that need physical hardware as being out-of-scope for fuzzing.

My brain is thinking that even if `stmmac` is used on some machines, there is a good reason it isn't in the standard QEMU configuration.

I also try to see if `stmmac` is a software device like USB gadget or `mac80211_hwsim` or `netdevsim`. I remember `stmmac` is a hardware driver.

I conclude that without an emulated Synopsys DesignWare MAC, or a specific QEMU configuration which is not the standard environment, I am certain `stmmac` is not reachable. There is nothing in the kernel that I could use to instantiate it via software. There is also nothing that syzkaller has to trigger `stmmac` via software.

Therefore, my final conclusion is WorthFuzzing=false. I am confident because the patch modifies a hardware driver not reachable in standard QEMU.



10/2 2026/08/02 19:17 tool grepper
0m Args:
{
  "Expression": "stmmac",
  "PathPrefix": "drivers/net/ethernet/stmicro/stmmac/"
}

Results:
{
  "Output": "\nFull output is too long, showing 500 out of 11622 lines.\nUse more precise expression if possible.\n\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=29=config STMMAC_PLATFORM\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-33-\thelp\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:34:\t  This selects the platform specific bus support for the stmmac driver.\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-35-\t  This is the driver used on several SoCs:\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=60=config DWMAC_ANARION\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-66-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:67:\t  This selects the Anarion SoC glue layer support for the stmmac driver.\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-68-\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=78=config DWMAC_INGENIC\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-85-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:86:\t  This selects Ingenic SoCs glue layer support for the stmmac\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-87-\t  device driver. This driver is used on for the Ingenic SoCs\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=90=config DWMAC_IPQ806X\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-97-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:98:\t  This selects the IPQ806x SoC glue layer support for the stmmac\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-99-\t  device driver. This driver does not use any of the hardware\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=114=config DWMAC_MEDIATEK\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-119-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:120:\t  This selects the MT2712 SoC support for the stmmac driver.\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-121-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=122=config DWMAC_MESON\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-129-\t  This selects the Amlogic Meson SoC glue layer support for\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:130:\t  the stmmac device driver. This driver is used for Meson6,\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-131-\t  Meson8, Meson8b and GXBB SoCs.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=133=config DWMAC_NUVOTON\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-141-\t  This selects the Nuvoton MA35 series SoC glue layer support\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:142:\t  for the stmmac device driver. The nuvoton-dwmac driver is\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-143-\t  used for MA35 series SoCs.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=145=config DWMAC_QCOM_ETHQOS\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-152-\t  This selects the Qualcomm ETHQOS glue layer support for the\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:153:\t  stmmac device driver.\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-154-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=155=config DWMAC_RENESAS_GBETH\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-163-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:164:\t  This selects Renesas SoC glue layer support for the stmmac device\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-165-\t  driver. This driver is used for the RZ/V2H(P) family, RZ/T2H and\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=168=config DWMAC_ROCKCHIP\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-176-\t  This selects the Rockchip RK3288 SoC glue layer support for\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:177:\t  the stmmac device driver.\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-178-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=179=config DWMAC_RZN1\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-187-\t  This selects the Renesas RZ/N1 SoC glue layer support for\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:188:\t  the stmmac device driver. This support can make use of a custom MII\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-189-\t  converter PCS device.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=191=config DWMAC_S32\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-197-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:198:\t  This selects NXP SoC glue layer support for the stmmac\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-199-\t  device driver. This driver is used for the S32CC series\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=203=config DWMAC_SOCFPGA\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-214-\t  This selects the Altera SOCFPGA SoC glue layer support\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:215:\t  for the stmmac device driver. This driver is used for\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-216-\t  arria5 and cyclone5 FPGA SoCs.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=218=config DWMAC_SOPHGO\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-225-\t  This selects the Sophgo SoC specific glue layer support\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:226:\t  for the stmmac device driver. This driver is used for the\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-227-\t  ethernet controllers on various Sophgo SoCs.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=229=config DWMAC_SPACEMIT\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-237-\t  This selects the Spacemit platform specific glue layer support\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:238:\t  for the stmmac device driver. This driver is used for the\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-239-\t  Spacemit K3 ethernet controllers.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=241=config DWMAC_STARFIVE\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-249-\t  This selects the StarFive platform specific glue layer support\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:250:\t  for the stmmac device driver. This driver is used for the\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-251-\t  StarFive JH7100 and JH7110 ethernet controllers.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=253=config DWMAC_STI\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-260-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:261:\t  This selects STi SoC glue layer support for the stmmac\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-262-\t  device driver. This driver is used on for the STi series\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=265=config DWMAC_STM32\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-272-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:273:\t  This selects STM32 SoC glue layer support for the stmmac\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-274-\t  device driver. This driver is used on for the STM32 series\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=277=config DWMAC_SUNXI\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-284-\t  This selects Allwinner SoC glue layer support for the\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:285:\t  stmmac device driver. This driver is used for A20/A31\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-286-\t  GMAC ethernet controller.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=288=config DWMAC_SUN8I\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-296-\t  This selects Allwinner SoC glue layer support for the\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:297:\t  stmmac device driver. This driver is used for H3/A83T/A64\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-298-\t  EMAC ethernet controller.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=300=config DWMAC_SUN55I\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-308-\t  This selects Allwinner SoC glue layer support for the\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:309:\t  stmmac device driver. This driver is used for A523/T527\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-310-\t  GMAC200 ethernet controller.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=312=config DWMAC_THEAD\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-318-\t  This selects the T-HEAD platform specific glue layer support for\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:319:\t  the stmmac device driver. This driver is used for T-HEAD TH1520\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-320-\t  ethernet controller.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=322=config DWMAC_IMX8\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-329-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:330:\t  This selects NXP SoC glue layer support for the stmmac\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-331-\t  device driver. This driver is used for i.MX8 series like\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=334=config DWMAC_INTEL_PLAT\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-340-\t  This selects the Intel platform specific glue layer support for\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:341:\t  the stmmac device driver. This driver is used for the Intel Keem Bay\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-342-\t  SoC.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=344=config DWMAC_LOONGSON1\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-350-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:351:\t  This selects Loongson1 SoC glue layer support for the stmmac\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-352-\t  device driver. This driver is used for Loongson1-based boards\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=355=config DWMAC_TEGRA\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-360-\t  found on the NVIDIA Tegra SoC devices. This driver provides the glue\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:361:\t  layer on top of the stmmac driver required for these NVIDIA Tegra SoC\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-362-\t  devices.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=373=config STMMAC_LIBPCI\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-375-\thelp\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:376:\t  This option enables the PCI bus helpers for the stmmac driver.\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-377-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=378=config DWMAC_INTEL\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-385-\t  This selects the Intel platform specific bus support for the\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:386:\t  stmmac driver. This driver is used for Intel Quark/EHL/TGL.\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-387-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=388=config DWMAC_LOONGSON\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-394-\thelp\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:395:\t  This selects the LOONGSON PCI bus support for the stmmac driver,\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-396-\t  Support for ethernet controller on Loongson-2K1000 SoC and LS7A1000 bridge.\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=407=config STMMAC_PCI\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-412-\thelp\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:413:\t  This selects the platform specific bus support for the stmmac driver.\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-414-\t  This driver was tested on XLINX XC2V3000 FF1152AMT0221\n--\ndrivers/net/ethernet/stmicro/stmmac/Makefile-1-# SPDX-License-Identifier: GPL-2.0\ndrivers/net/ethernet/stmicro/stmmac/Makefile:2:obj-$(CONFIG_STMMAC_ETH) += stmmac.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:3:stmmac-objs:= stmmac_main.o stmmac_ethtool.o stmmac_mdio.o ring_mode.o\t\\\ndrivers/net/ethernet/stmicro/stmmac/Makefile-4-\t      chain_mode.o dwmac_lib.o dwmac1000_core.o dwmac1000_dma.o\t\\\ndrivers/net/ethernet/stmicro/stmmac/Makefile-5-\t      dwmac100_core.o dwmac100_dma.o enh_desc.o norm_desc.o\t\\\ndrivers/net/ethernet/stmicro/stmmac/Makefile:6:\t      mmc_core.o stmmac_hwtstamp.o stmmac_ptp.o dwmac4_descs.o\t\\\ndrivers/net/ethernet/stmicro/stmmac/Makefile-7-\t      dwmac4_dma.o dwmac4_lib.o dwmac4_core.o dwmac5.o hwif.o \\\ndrivers/net/ethernet/stmicro/stmmac/Makefile:8:\t      stmmac_tc.o dwxgmac2_core.o dwxgmac2_dma.o dwxgmac2_descs.o \\\ndrivers/net/ethernet/stmicro/stmmac/Makefile:9:\t      stmmac_xdp.o stmmac_est.o stmmac_fpe.o stmmac_vlan.o \\\ndrivers/net/ethernet/stmicro/stmmac/Makefile:10:\t      stmmac_pcs.o $(stmmac-y)\ndrivers/net/ethernet/stmicro/stmmac/Makefile-11-\ndrivers/net/ethernet/stmicro/stmmac/Makefile:12:stmmac-$(CONFIG_STMMAC_SELFTESTS) += stmmac_selftests.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile-13-\ndrivers/net/ethernet/stmicro/stmmac/Makefile-14-# Ordering matters. Generic driver must be last.\ndrivers/net/ethernet/stmicro/stmmac/Makefile:15:obj-$(CONFIG_STMMAC_PLATFORM)\t+= stmmac-platform.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile-16-obj-$(CONFIG_DWMAC_ANARION)\t+= dwmac-anarion.o\n--\ndrivers/net/ethernet/stmicro/stmmac/Makefile=45=obj-$(CONFIG_DWMAC_VISCONTI)\t+= dwmac-visconti.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:46:stmmac-platform-objs:= stmmac_platform.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile-47-dwmac-altr-socfpga-objs := dwmac-socfpga.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile-48-\ndrivers/net/ethernet/stmicro/stmmac/Makefile:49:obj-$(CONFIG_STMMAC_LIBPCI)\t+= stmmac_libpci.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:50:obj-$(CONFIG_STMMAC_PCI)\t+= stmmac-pci.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile-51-obj-$(CONFIG_DWMAC_INTEL)\t+= dwmac-intel.o\n--\ndrivers/net/ethernet/stmicro/stmmac/Makefile=53=obj-$(CONFIG_DWMAC_MOTORCOMM)\t+= dwmac-motorcomm.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:54:stmmac-pci-objs:= stmmac_pci.o\n--\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-14-\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:15:#include \"stmmac.h\"\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-16-\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:17:static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-18-\t\t     int csum)\n--\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-20-\tunsigned int nopaged_len = skb_headlen(skb);\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:21:\tstruct stmmac_priv *priv = tx_q-\u003epriv_data;\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-22-\tunsigned int entry = tx_q-\u003ecur_tx;\n--\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-44-\t/* do not close the descriptor and do not set own bit */\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:45:\tstmmac_prepare_tx_desc(priv, desc, 1, buf_len, csum, STMMAC_CHAIN_MODE,\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-46-\t\t\t0, false, skb-\u003elen);\n--\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-61-\t\t\ttx_q-\u003etx_skbuff_dma[entry].len = bmax;\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:62:\t\t\tstmmac_prepare_tx_desc(priv, desc, 0, bmax, csum,\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-63-\t\t\t\t\tSTMMAC_CHAIN_MODE, 1, false, skb-\u003elen);\n--\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-75-\t\t\t/* last descriptor can be set now */\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:76:\t\t\tstmmac_prepare_tx_desc(priv, desc, 0, len, csum,\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-77-\t\t\t\t\tSTMMAC_CHAIN_MODE, 1, true, skb-\u003elen);\n--\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c=98=static void init_dma_chain(void *des, dma_addr_t phy_addr,\n--\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-127-\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:128:static void refill_desc3(struct stmmac_rx_queue *rx_q, struct dma_desc *p)\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-129-{\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:130:\tstruct stmmac_priv *priv = rx_q-\u003epriv_data;\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-131-\n--\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-142-\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:143:static void clean_desc3(struct stmmac_tx_queue *tx_q, struct dma_desc *p)\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-144-{\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:145:\tstruct stmmac_priv *priv = tx_q-\u003epriv_data;\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-146-\tunsigned int entry = tx_q-\u003edirty_tx;\n--\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-159-\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c:160:const struct stmmac_mode_ops chain_mode_ops = {\ndrivers/net/ethernet/stmicro/stmmac/chain_mode.c-161-\t.init = init_dma_chain,\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-15-#include \u003clinux/netdevice.h\u003e\ndrivers/net/ethernet/stmicro/stmmac/common.h:16:#include \u003clinux/stmmac.h\u003e\ndrivers/net/ethernet/stmicro/stmmac/common.h-17-#include \u003clinux/phy.h\u003e\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h=49=static inline bool dwmac_is_xmac(enum dwmac_core_type core_type)\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-70-\ndrivers/net/ethernet/stmicro/stmmac/common.h:71:struct stmmac_q_tx_stats {\ndrivers/net/ethernet/stmicro/stmmac/common.h-72-\tu64_stats_t tx_bytes;\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-77-\ndrivers/net/ethernet/stmicro/stmmac/common.h:78:struct stmmac_napi_tx_stats {\ndrivers/net/ethernet/stmicro/stmmac/common.h-79-\tu64_stats_t tx_packets;\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-85-\ndrivers/net/ethernet/stmicro/stmmac/common.h:86:struct stmmac_txq_stats {\ndrivers/net/ethernet/stmicro/stmmac/common.h-87-\t/* Updates protected by tx queue lock. */\ndrivers/net/ethernet/stmicro/stmmac/common.h-88-\tstruct u64_stats_sync q_syncp;\ndrivers/net/ethernet/stmicro/stmmac/common.h:89:\tstruct stmmac_q_tx_stats q;\ndrivers/net/ethernet/stmicro/stmmac/common.h-90-\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-92-\tstruct u64_stats_sync napi_syncp;\ndrivers/net/ethernet/stmicro/stmmac/common.h:93:\tstruct stmmac_napi_tx_stats napi;\ndrivers/net/ethernet/stmicro/stmmac/common.h-94-} ____cacheline_aligned_in_smp;\ndrivers/net/ethernet/stmicro/stmmac/common.h-95-\ndrivers/net/ethernet/stmicro/stmmac/common.h:96:struct stmmac_napi_rx_stats {\ndrivers/net/ethernet/stmicro/stmmac/common.h-97-\tu64_stats_t rx_bytes;\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-102-\ndrivers/net/ethernet/stmicro/stmmac/common.h:103:struct stmmac_rxq_stats {\ndrivers/net/ethernet/stmicro/stmmac/common.h-104-\t/* Updates protected by NAPI poll logic. */\ndrivers/net/ethernet/stmicro/stmmac/common.h-105-\tstruct u64_stats_sync napi_syncp;\ndrivers/net/ethernet/stmicro/stmmac/common.h:106:\tstruct stmmac_napi_rx_stats napi;\ndrivers/net/ethernet/stmicro/stmmac/common.h-107-} ____cacheline_aligned_in_smp;\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-109-/* Updates on each CPU protected by not allowing nested irqs. */\ndrivers/net/ethernet/stmicro/stmmac/common.h:110:struct stmmac_pcpu_stats {\ndrivers/net/ethernet/stmicro/stmmac/common.h-111-\tstruct u64_stats_sync syncp;\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-116-/* Extra statistic and debug information exposed by ethtool */\ndrivers/net/ethernet/stmicro/stmmac/common.h:117:struct stmmac_extra_stats {\ndrivers/net/ethernet/stmicro/stmmac/common.h-118-\t/* Transmit errors */\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-237-\t/* per queue statistics */\ndrivers/net/ethernet/stmicro/stmmac/common.h:238:\tstruct stmmac_txq_stats txq_stats[MTL_MAX_TX_QUEUES];\ndrivers/net/ethernet/stmicro/stmmac/common.h:239:\tstruct stmmac_rxq_stats rxq_stats[MTL_MAX_RX_QUEUES];\ndrivers/net/ethernet/stmicro/stmmac/common.h:240:\tstruct stmmac_pcpu_stats __percpu *pcpu_stats;\ndrivers/net/ethernet/stmicro/stmmac/common.h-241-\tunsigned long rx_dropped;\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-247-/* Safety Feature statistics exposed by ethtool */\ndrivers/net/ethernet/stmicro/stmmac/common.h:248:struct stmmac_safety_stats {\ndrivers/net/ethernet/stmicro/stmmac/common.h-249-\tunsigned long mac_errors[32];\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-256-#define STMMAC_SAFETY_FEAT_SIZE\t\\\ndrivers/net/ethernet/stmicro/stmmac/common.h:257:\t(sizeof(struct stmmac_safety_stats) / sizeof(unsigned long))\ndrivers/net/ethernet/stmicro/stmmac/common.h-258-\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h=416=struct dma_features {\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-564-\ndrivers/net/ethernet/stmicro/stmmac/common.h:565:void stmmac_axi_blen_to_mask(u32 *regval, const u32 *blen, size_t len);\ndrivers/net/ethernet/stmicro/stmmac/common.h-566-\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h=613=struct mac_device_info {\ndrivers/net/ethernet/stmicro/stmmac/common.h:614:\tconst struct stmmac_ops *mac;\ndrivers/net/ethernet/stmicro/stmmac/common.h:615:\tconst struct stmmac_desc_ops *desc;\ndrivers/net/ethernet/stmicro/stmmac/common.h:616:\tconst struct stmmac_dma_ops *dma;\ndrivers/net/ethernet/stmicro/stmmac/common.h:617:\tconst struct stmmac_mode_ops *mode;\ndrivers/net/ethernet/stmicro/stmmac/common.h:618:\tconst struct stmmac_hwtimestamp *ptp;\ndrivers/net/ethernet/stmicro/stmmac/common.h:619:\tconst struct stmmac_tc_ops *tc;\ndrivers/net/ethernet/stmicro/stmmac/common.h:620:\tconst struct stmmac_mmc_ops *mmc;\ndrivers/net/ethernet/stmicro/stmmac/common.h:621:\tconst struct stmmac_est_ops *est;\ndrivers/net/ethernet/stmicro/stmmac/common.h:622:\tconst struct stmmac_vlan_ops *vlan;\ndrivers/net/ethernet/stmicro/stmmac/common.h-623-\tstruct dw_xpcs *xpcs;\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-644-\ndrivers/net/ethernet/stmicro/stmmac/common.h:645:struct stmmac_rx_routing {\ndrivers/net/ethernet/stmicro/stmmac/common.h-646-\tu32 reg_mask;\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h-649-\ndrivers/net/ethernet/stmicro/stmmac/common.h:650:int dwmac100_setup(struct stmmac_priv *priv);\ndrivers/net/ethernet/stmicro/stmmac/common.h:651:int dwmac1000_setup(struct stmmac_priv *priv);\ndrivers/net/ethernet/stmicro/stmmac/common.h:652:int dwmac4_setup(struct stmmac_priv *priv);\ndrivers/net/ethernet/stmicro/stmmac/common.h:653:int dwxgmac2_setup(struct stmmac_priv *priv);\ndrivers/net/ethernet/stmicro/stmmac/common.h:654:int dwxlgmac2_setup(struct stmmac_priv *priv);\ndrivers/net/ethernet/stmicro/stmmac/common.h-655-\ndrivers/net/ethernet/stmicro/stmmac/common.h:656:void stmmac_set_mac_addr(void __iomem *ioaddr, const u8 addr[6],\ndrivers/net/ethernet/stmicro/stmmac/common.h-657-\t\t\t unsigned int high, unsigned int low);\ndrivers/net/ethernet/stmicro/stmmac/common.h:658:void stmmac_get_mac_addr(void __iomem *ioaddr, unsigned char *addr,\ndrivers/net/ethernet/stmicro/stmmac/common.h-659-\t\t\t unsigned int high, unsigned int low);\ndrivers/net/ethernet/stmicro/stmmac/common.h:660:void stmmac_set_mac(void __iomem *ioaddr, bool enable);\ndrivers/net/ethernet/stmicro/stmmac/common.h-661-\ndrivers/net/ethernet/stmicro/stmmac/common.h:662:void stmmac_dwmac4_set_mac_addr(void __iomem *ioaddr, const u8 addr[6],\ndrivers/net/ethernet/stmicro/stmmac/common.h-663-\t\t\t\tunsigned int high, unsigned int low);\ndrivers/net/ethernet/stmicro/stmmac/common.h:664:void stmmac_dwmac4_get_mac_addr(void __iomem *ioaddr, unsigned char *addr,\ndrivers/net/ethernet/stmicro/stmmac/common.h-665-\t\t\t\tunsigned int high, unsigned int low);\ndrivers/net/ethernet/stmicro/stmmac/common.h:666:void stmmac_dwmac4_set_mac(void __iomem *ioaddr, bool enable);\ndrivers/net/ethernet/stmicro/stmmac/common.h-667-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-11-#include \u003clinux/of_net.h\u003e\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:12:#include \u003clinux/stmmac.h\u003e\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-13-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:14:#include \"stmmac.h\"\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:15:#include \"stmmac_platform.h\"\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-16-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c=63=anarion_config_dt(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:64:\t\t  struct plat_stmmacenet_data *plat_dat)\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-65-{\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c=93=static int anarion_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-96-\tstruct anarion_gmac *gmac;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:97:\tstruct plat_stmmacenet_data *plat_dat;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:98:\tstruct stmmac_resources stmmac_res;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-99-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:100:\tret = stmmac_get_platform_resources(pdev, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-101-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-103-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:104:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-105-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-115-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:116:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-117-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c=125=static struct platform_driver anarion_dwmac_driver = {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-128-\t\t.name           = \"anarion-dwmac\",\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:129:\t\t.pm\t\t= \u0026stmmac_pltfr_pm_ops,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-130-\t\t.of_match_table = anarion_dwmac_match,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-21-#include \u003clinux/reset.h\u003e\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:22:#include \u003clinux/stmmac.h\u003e\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-23-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:24:#include \"stmmac_platform.h\"\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-25-#include \"dwmac4.h\"\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=36=static int dwc_eth_dwmac_config_dt(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:37:\t\t\t\t   struct plat_stmmacenet_data *plat_dat)\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-38-{\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-43-\t\tplat_dat-\u003eaxi = devm_kzalloc(\u0026pdev-\u003edev,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:44:\t\t\t\t\t     sizeof(struct stmmac_axi),\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-45-\t\t\t\t\t     GFP_KERNEL);\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=96=static int dwc_qos_probe(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:97:\t\t\t struct plat_stmmacenet_data *plat_dat,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:98:\t\t\t struct stmmac_resources *stmmac_res)\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-99-{\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:100:\tplat_dat-\u003epclk = stmmac_pltfr_find_clk(plat_dat, \"phy_ref_clk\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-101-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=115=static void tegra_eqos_fix_speed(void *bsp_priv, phy_interface_t interface,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-119-\tbool needs_calibration = false;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:120:\tstruct stmmac_priv *priv;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-121-\tu32 value;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-141-\t\t/* Calibration should be done with the MDIO bus idle */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:142:\t\tstmmac_mdio_lock(priv);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-143-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-177-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:178:\t\tstmmac_mdio_unlock(priv);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-179-\t} else {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=186=static int tegra_eqos_probe(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:187:\t\t\t    struct plat_stmmacenet_data *plat_dat,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:188:\t\t\t    struct stmmac_resources *res)\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-189-{\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-203-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:204:\tplat_dat-\u003eclk_tx_i = stmmac_pltfr_find_clk(plat_dat, \"tx\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-205-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-237-\tplat_dat-\u003efix_mac_speed = tegra_eqos_fix_speed;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:238:\tplat_dat-\u003eset_clk_tx_rate = stmmac_set_clk_tx_rate;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-239-\tplat_dat-\u003ebsp_priv = eqos;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=252=static void tegra_eqos_remove(struct platform_device *pdev)\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-253-{\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:254:\tstruct tegra_eqos *eqos = get_stmmac_bsp_priv(\u0026pdev-\u003edev);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-255-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=260=struct dwc_eth_dwmac_data {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-261-\tint (*probe)(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:262:\t\t     struct plat_stmmacenet_data *plat_dat,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:263:\t\t     struct stmmac_resources *res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-264-\tvoid (*remove)(struct platform_device *pdev);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:265:\tconst char *stmmac_clk_name;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-266-};\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=268=static const struct dwc_eth_dwmac_data dwc_qos_data = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-269-\t.probe = dwc_qos_probe,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:270:\t.stmmac_clk_name = \"apb_pclk\",\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-271-};\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=273=static const struct dwc_eth_dwmac_data tegra_eqos_data = {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-275-\t.remove = tegra_eqos_remove,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:276:\t.stmmac_clk_name = \"slave_bus\",\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-277-};\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=279=static const struct dwc_eth_dwmac_data fsd_eqos_data = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:280:\t.stmmac_clk_name = \"slave_bus\",\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-281-};\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=283=static int dwc_eth_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-285-\tconst struct dwc_eth_dwmac_data *data;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:286:\tstruct plat_stmmacenet_data *plat_dat;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:287:\tstruct stmmac_resources stmmac_res;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-288-\tint ret;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-291-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:292:\tmemset(\u0026stmmac_res, 0, sizeof(struct stmmac_resources));\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-293-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-294-\t/**\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:295:\t * Since stmmac_platform supports name IRQ only, basic platform\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-296-\t * resource initialization is done in the glue logic.\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-297-\t */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:298:\tstmmac_res.irq = platform_get_irq(pdev, 0);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:299:\tif (stmmac_res.irq \u003c 0)\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:300:\t\treturn stmmac_res.irq;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:301:\tstmmac_res.wol_irq = stmmac_res.irq;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-302-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:303:\tstmmac_res.addr = devm_platform_ioremap_resource(pdev, 0);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:304:\tif (IS_ERR(stmmac_res.addr))\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:305:\t\treturn PTR_ERR(stmmac_res.addr);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-306-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:307:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-308-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-315-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:316:\tplat_dat-\u003estmmac_clk = stmmac_pltfr_find_clk(plat_dat,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:317:\t\t\t\t\t\t     data-\u003estmmac_clk_name);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-318-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-319-\tif (data-\u003eprobe)\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:320:\t\tret = data-\u003eprobe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-321-\tif (ret \u003c 0) {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-329-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:330:\tret = stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-331-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=343=static void dwc_eth_dwmac_remove(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-346-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:347:\tstmmac_dvr_remove(\u0026pdev-\u003edev);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-348-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=361=static struct platform_driver dwc_eth_dwmac_driver = {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-365-\t\t.name           = \"dwc-eth-dwmac\",\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:366:\t\t.pm             = \u0026stmmac_pltfr_pm_ops,\n\n"
}

11/2 2026/08/02 19:17 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 31552
							output: 91
							thoughts: 440
						

Thoughts:
**WorthFuzzing=false: stmmac Patch Analysis**

Alright, let's break this down. First, it's clear the patch is targeting the `stmmac` driver, a real, physical hardware driver, not some virtual device. The modification is specifically within `stmmac_ethtool.c`, affecting the `stmmac_usec2riwt` and `stmmac_riwt2usec` functions. My initial assessment is that these functions are only accessible if an actual `stmmac` device is present and registered, meaning physical hardware interaction is a prerequisite.

Now, considering the usual QEMU setups we use for fuzzing, and I know these environments very well, they don't emulate the `stmmac` hardware, whether it's the PCI version or the platform-specific implementation. This is the crux of the issue. The standard QEMU instances employed for fuzzing, like those using `q35` or `virt`, simply don't have the necessary hardware models to trigger these modified code paths. So, my initial inclination is `WorthFuzzing=false`.

However, the possibility of syzkaller using a specific board did cross my mind, which is why I checked the context. Syzkaller can, of course, be configured to run on physical boards (like ARM boards), but the instructions specify the key conditions that render patches unworthy of fuzzing. And the prompt is clear: any code that is inaccessible in the specified virtualized environments (like GCE or standard QEMU) falls into that category. The prompt explicitly lists vendor-specific PCIe hardware or other specialized hardware, which sounds right.

Looking at the prompt's stipulations, the `stmmac` driver, with its requirement for specific SoC hardware or PCIe cards, isn't emulated in the usual QEMU configurations, even when using software-simulated hardware. Special board-specific QEMU machines might include it, but these are not the norm for syzkaller, which would typically rely on `q35` or `virt`. Therefore, given the patch's specific dependence on physical or specialized hardware not typically emulated in our standard fuzzing setups, `WorthFuzzing=false` is the correct conclusion.



12/2 2026/08/02 19:17 tool set-results
0m Args:
{
  "EnableConfigs": [],
  "FocusSymbols": [],
  "Reasoning": "The patch modifies the stmmac (STMicroelectronics/Synopsys DesignWare MAC) Ethernet driver. This is a physical hardware driver that requires specific SoC or PCIe hardware not emulated in standard QEMU environments used for fuzzing. Therefore, the modified code paths are unreachable during fuzzing.",
  "WorthFuzzing": false
}

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch modifies the stmmac (STMicroelectronics/Synopsys DesignWare MAC) Ethernet driver. This is a physical hardware driver that requires specific SoC or PCIe hardware not emulated in standard QEMU environments used for fuzzing. Therefore, the modified code paths are unreachable during fuzzing.",
  "WorthFuzzing": false
}

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)