AI Trajectory


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

Results:
{
  "EnableConfigs": [
    "STMMAC_ETH",
    "STMMAC_PCI"
  ],
  "FocusSymbols": [
    "stmmac_disable_all_queues",
    "stmmac_drain_xdp",
    "stmmac_xdp_release",
    "stmmac_suspend",
    "__stmmac_open",
    "__stmmac_release"
  ],
  "Reasoning": "The patch modifies the stmmac driver to properly drain XDP buffers and prevent XDP from processing new packets when the interface is down. It introduces a new STMMAC_DOWN flag and modifies the interface open/release/suspend paths. This is a functional change to reachable core driver logic.",
  "WorthFuzzing": true
}

1/1 2026/07/08 03:43 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit 8d3ef8c1d332a3cdb8249425665794a93384304b\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Wed Jul 8 03:43:49 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c\nindex 2a0d7eff88d3ff..9d971ae35d48ae 100644\n--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c\n+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c\n@@ -262,7 +262,11 @@ static void stmmac_verify_args(void)\n \t\tpr_warn(\"stmmac: module parameter 'flow_ctrl' is obsolete - please remove from your module configuration\\n\");\n }\n \n-static void __stmmac_disable_all_queues(struct stmmac_priv *priv)\n+/**\n+ * stmmac_disable_all_queues - Disable all queues\n+ * @priv: driver private structure\n+ */\n+static void stmmac_disable_all_queues(struct stmmac_priv *priv)\n {\n \tu8 rx_queues_cnt = priv-\u003eplat-\u003erx_queues_to_use;\n \tu8 tx_queues_cnt = priv-\u003eplat-\u003etx_queues_to_use;\n@@ -286,16 +290,15 @@ static void __stmmac_disable_all_queues(struct stmmac_priv *priv)\n }\n \n /**\n- * stmmac_disable_all_queues - Disable all queues\n+ * stmmac_drain_xdp - Cleanup for XDP apps\n  * @priv: driver private structure\n  */\n-static void stmmac_disable_all_queues(struct stmmac_priv *priv)\n+static void stmmac_drain_xdp(struct stmmac_priv *priv)\n {\n \tu8 rx_queues_cnt = priv-\u003eplat-\u003erx_queues_to_use;\n \tstruct stmmac_rx_queue *rx_q;\n \tu8 queue;\n \n-\t/* synchronize_rcu() needed for pending XDP buffers to drain */\n \tfor (queue = 0; queue \u003c rx_queues_cnt; queue++) {\n \t\trx_q = \u0026priv-\u003edma_conf.rx_queue[queue];\n \t\tif (rx_q-\u003exsk_pool) {\n@@ -303,8 +306,6 @@ static void stmmac_disable_all_queues(struct stmmac_priv *priv)\n \t\t\tbreak;\n \t\t}\n \t}\n-\n-\t__stmmac_disable_all_queues(priv);\n }\n \n /**\n@@ -4149,6 +4150,9 @@ static int __stmmac_open(struct net_device *dev,\n \n \tstmmac_reset_queues_param(priv);\n \n+\t/* Clear DOWN flag when opening the interface */\n+\tclear_bit(STMMAC_DOWN, \u0026priv-\u003estate);\n+\n \tret = stmmac_hw_setup(dev);\n \tif (ret \u003c 0) {\n \t\tnetdev_err(priv-\u003edev, \"%s: Hw setup failed\\n\", __func__);\n@@ -4243,6 +4247,9 @@ static void __stmmac_release(struct net_device *dev)\n \t/* Stop and disconnect the PHY */\n \tphylink_stop(priv-\u003ephylink);\n \n+\t/* Set DOWN flag to prevent XDP from processing new packets */\n+\tset_bit(STMMAC_DOWN, \u0026priv-\u003estate);\n+\n \tstmmac_disable_all_queues(priv);\n \n \tfor (chan = 0; chan \u003c priv-\u003eplat-\u003etx_queues_to_use; chan++)\n@@ -4256,6 +4263,8 @@ static void __stmmac_release(struct net_device *dev)\n \t/* Stop TX/RX DMA and clear the descriptors */\n \tstmmac_stop_all_dma(priv);\n \n+\tstmmac_drain_xdp(priv);\n+\n \t/* Release and free the Rx/Tx resources */\n \tfree_dma_desc_resources(priv, \u0026priv-\u003edma_conf);\n \n@@ -5260,12 +5269,18 @@ static int stmmac_xdp_xmit_back(struct stmmac_priv *priv,\n \t\t\t\tstruct xdp_buff *xdp)\n {\n \tbool zc = !!(xdp-\u003erxq-\u003emem.type == MEM_TYPE_XSK_BUFF_POOL);\n-\tstruct xdp_frame *xdpf = xdp_convert_buff_to_frame(xdp);\n+\tstruct xdp_frame *xdpf;\n \tint cpu = smp_processor_id();\n \tstruct netdev_queue *nq;\n \tint queue;\n \tint res;\n \n+\tif (unlikely(test_bit(STMMAC_DOWN, \u0026priv-\u003estate))) {\n+\t\txsk_buff_free(xdp);\n+\t\treturn STMMAC_XSK_CONSUMED;\n+\t}\n+\n+\txdpf = xdp_convert_buff_to_frame(xdp);\n \tif (unlikely(!xdpf))\n \t\treturn STMMAC_XDP_CONSUMED;\n \n@@ -5310,7 +5325,9 @@ static int __stmmac_xdp_run_prog(struct stmmac_priv *priv,\n \t\tres = stmmac_xdp_xmit_back(priv, xdp);\n \t\tbreak;\n \tcase XDP_REDIRECT:\n-\t\tif (xdp_do_redirect(priv-\u003edev, xdp, prog) \u003c 0)\n+\t\tif (unlikely(test_bit(STMMAC_DOWN, \u0026priv-\u003estate)))\n+\t\t\tres = STMMAC_XDP_CONSUMED;\n+\t\telse if (xdp_do_redirect(priv-\u003edev, xdp, prog) \u003c 0)\n \t\t\tres = STMMAC_XDP_CONSUMED;\n \t\telse\n \t\t\tres = STMMAC_XDP_REDIRECT;\n@@ -6404,7 +6421,7 @@ static int stmmac_setup_tc_block_cb(enum tc_setup_type type, void *type_data,\n \tif (!tc_cls_can_offload_and_chain0(priv-\u003edev, type_data))\n \t\treturn ret;\n \n-\t__stmmac_disable_all_queues(priv);\n+\tstmmac_disable_all_queues(priv);\n \n \tswitch (type) {\n \tcase TC_SETUP_CLSU32:\n@@ -7114,6 +7131,9 @@ void stmmac_xdp_release(struct net_device *dev)\n \t/* Stop TX/RX DMA channels */\n \tstmmac_stop_all_dma(priv);\n \n+\t/* Drain leftover XDP buffers */\n+\tstmmac_drain_xdp(priv);\n+\n \t/* Release and free the Rx/Tx resources */\n \tfree_dma_desc_resources(priv, \u0026priv-\u003edma_conf);\n \n@@ -8200,6 +8220,8 @@ int stmmac_suspend(struct device *dev)\n \t/* Stop TX/RX DMA */\n \tstmmac_stop_all_dma(priv);\n \n+\tstmmac_drain_xdp(priv);\n+\n \tstmmac_legacy_serdes_power_down(priv);\n \n \t/* Enable Power down mode by programming the PMT regs */\n"
}

2/1 2026/07/08 03:43 agent patch-evaluator
1m Model:
gemini-3.1-pro-preview

Args:
null

Results:
{
  "EnableConfigs": [
    "STMMAC_ETH",
    "STMMAC_PCI"
  ],
  "FocusSymbols": [
    "stmmac_disable_all_queues",
    "stmmac_drain_xdp",
    "stmmac_xdp_release",
    "stmmac_suspend",
    "__stmmac_open",
    "__stmmac_release"
  ],
  "Reasoning": "The patch modifies the stmmac driver to properly drain XDP buffers and prevent XDP from processing new packets when the interface is down. It introduces a new STMMAC_DOWN flag and modifies the interface open/release/suspend paths. This is a functional change to reachable core driver logic.",
  "WorthFuzzing": true
}

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

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

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

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

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


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

Prompt:
For your convenience, here is the diff of the changes:
commit 8d3ef8c1d332a3cdb8249425665794a93384304b
Author: syz-cluster <triage@syzkaller.com>
Date:   Wed Jul 8 03:43:49 2026 +0000

    syz-cluster: applied patch under review

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 2a0d7eff88d3ff..9d971ae35d48ae 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -262,7 +262,11 @@ static void stmmac_verify_args(void)
 		pr_warn("stmmac: module parameter 'flow_ctrl' is obsolete - please remove from your module configuration\n");
 }
 
-static void __stmmac_disable_all_queues(struct stmmac_priv *priv)
+/**
+ * stmmac_disable_all_queues - Disable all queues
+ * @priv: driver private structure
+ */
+static void stmmac_disable_all_queues(struct stmmac_priv *priv)
 {
 	u8 rx_queues_cnt = priv->plat->rx_queues_to_use;
 	u8 tx_queues_cnt = priv->plat->tx_queues_to_use;
@@ -286,16 +290,15 @@ static void __stmmac_disable_all_queues(struct stmmac_priv *priv)
 }
 
 /**
- * stmmac_disable_all_queues - Disable all queues
+ * stmmac_drain_xdp - Cleanup for XDP apps
  * @priv: driver private structure
  */
-static void stmmac_disable_all_queues(struct stmmac_priv *priv)
+static void stmmac_drain_xdp(struct stmmac_priv *priv)
 {
 	u8 rx_queues_cnt = priv->plat->rx_queues_to_use;
 	struct stmmac_rx_queue *rx_q;
 	u8 queue;
 
-	/* synchronize_rcu() needed for pending XDP buffers to drain */
 	for (queue = 0; queue < rx_queues_cnt; queue++) {
 		rx_q = &priv->dma_conf.rx_queue[queue];
 		if (rx_q->xsk_pool) {
@@ -303,8 +306,6 @@ static void stmmac_disable_all_queues(struct stmmac_priv *priv)
 			break;
 		}
 	}
-
-	__stmmac_disable_all_queues(priv);
 }
 
 /**
@@ -4149,6 +4150,9 @@ static int __stmmac_open(struct net_device *dev,
 
 	stmmac_reset_queues_param(priv);
 
+	/* Clear DOWN flag when opening the interface */
+	clear_bit(STMMAC_DOWN, &priv->state);
+
 	ret = stmmac_hw_setup(dev);
 	if (ret < 0) {
 		netdev_err(priv->dev, "%s: Hw setup failed\n", __func__);
@@ -4243,6 +4247,9 @@ static void __stmmac_release(struct net_device *dev)
 	/* Stop and disconnect the PHY */
 	phylink_stop(priv->phylink);
 
+	/* Set DOWN flag to prevent XDP from processing new packets */
+	set_bit(STMMAC_DOWN, &priv->state);
+
 	stmmac_disable_all_queues(priv);
 
 	for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
@@ -4256,6 +4263,8 @@ static void __stmmac_release(struct net_device *dev)
 	/* Stop TX/RX DMA and clear the descriptors */
 	stmmac_stop_all_dma(priv);
 
+	stmmac_drain_xdp(priv);
+
 	/* Release and free the Rx/Tx resources */
 	free_dma_desc_resources(priv, &priv->dma_conf);
 
@@ -5260,12 +5269,18 @@ static int stmmac_xdp_xmit_back(struct stmmac_priv *priv,
 				struct xdp_buff *xdp)
 {
 	bool zc = !!(xdp->rxq->mem.type == MEM_TYPE_XSK_BUFF_POOL);
-	struct xdp_frame *xdpf = xdp_convert_buff_to_frame(xdp);
+	struct xdp_frame *xdpf;
 	int cpu = smp_processor_id();
 	struct netdev_queue *nq;
 	int queue;
 	int res;
 
+	if (unlikely(test_bit(STMMAC_DOWN, &priv->state))) {
+		xsk_buff_free(xdp);
+		return STMMAC_XSK_CONSUMED;
+	}
+
+	xdpf = xdp_convert_buff_to_frame(xdp);
 	if (unlikely(!xdpf))
 		return STMMAC_XDP_CONSUMED;
 
@@ -5310,7 +5325,9 @@ static int __stmmac_xdp_run_prog(struct stmmac_priv *priv,
 		res = stmmac_xdp_xmit_back(priv, xdp);
 		break;
 	case XDP_REDIRECT:
-		if (xdp_do_redirect(priv->dev, xdp, prog) < 0)
+		if (unlikely(test_bit(STMMAC_DOWN, &priv->state)))
+			res = STMMAC_XDP_CONSUMED;
+		else if (xdp_do_redirect(priv->dev, xdp, prog) < 0)
 			res = STMMAC_XDP_CONSUMED;
 		else
 			res = STMMAC_XDP_REDIRECT;
@@ -6404,7 +6421,7 @@ static int stmmac_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
 	if (!tc_cls_can_offload_and_chain0(priv->dev, type_data))
 		return ret;
 
-	__stmmac_disable_all_queues(priv);
+	stmmac_disable_all_queues(priv);
 
 	switch (type) {
 	case TC_SETUP_CLSU32:
@@ -7114,6 +7131,9 @@ void stmmac_xdp_release(struct net_device *dev)
 	/* Stop TX/RX DMA channels */
 	stmmac_stop_all_dma(priv);
 
+	/* Drain leftover XDP buffers */
+	stmmac_drain_xdp(priv);
+
 	/* Release and free the Rx/Tx resources */
 	free_dma_desc_resources(priv, &priv->dma_conf);
 
@@ -8200,6 +8220,8 @@ int stmmac_suspend(struct device *dev)
 	/* Stop TX/RX DMA */
 	stmmac_stop_all_dma(priv);
 
+	stmmac_drain_xdp(priv);
+
 	stmmac_legacy_serdes_power_down(priv);
 
 	/* Enable Power down mode by programming the PMT regs */

3/2 2026/07/08 03:43 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 3523
							output: 20
							thoughts: 426
						

Thoughts:
**Analyzing a Patch to the STMMAC Driver**

Okay, so I'm looking at this patch for `drivers/net/ethernet/stmicro/stmmac/stmmac_main.c`. It's pretty straightforward, functionally speaking. They've renamed `__stmmac_disable_all_queues` to `stmmac_disable_all_queues` – nothing ground-breaking there. Then, they've pulled the XDP draining logic out into its own function, `stmmac_drain_xdp`. Smart; that's good for readability and potential reuse. The meat of it seems to be around this `STMMAC_DOWN` flag. They're adding checks for it in a few places. Essentially, it looks like they're trying to prevent XDP from touching packets when the interface is down. Makes sense; avoid any weird race conditions or attempts to process packets on a dead interface. They set `STMMAC_DOWN` in `__stmmac_release` and clear it in `__stmmac_open`. And then, critically, they're checking it in `stmmac_xdp_xmit_back`, `__stmmac_xdp_run_prog` and calling `stmmac_drain_xdp` in `__stmmac_release`, `stmmac_xdp_release`, and `stmmac_suspend`. Okay, so it looks like they are calling the draining function in different places.

Now, from a testing perspective, this brings up some immediate questions. This is a *hardware* driver. Specifically, it's for STMicroelectronics Ethernet MACs, which means it's likely dealing with actual hardware registers. My immediate thought is, can this be fuzzed? Is there a virtual counterpart, like a virtio device, that I can use to emulate it? Probably not, since it's an STMicroelectronics specific driver. So, I need to check how it's connected. It is a PCI driver? I need to look into `drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c`, which is a good clue. I will quickly run a `grepper` check to see. I can't start fuzzing something that isn't connected to the correct hardware or virtualised.



4/2 2026/07/08 03:43 tool grepper
0m Args:
{
  "Expression": "stmmac_pci"
}

Results:
{
  "Output": "Documentation/networking/device_drivers/ethernet/stmicro/stmmac.rst=107=syntax (e.g. for PCI module)::\nDocumentation/networking/device_drivers/ethernet/stmicro/stmmac.rst-108-\nDocumentation/networking/device_drivers/ethernet/stmicro/stmmac.rst:109:    modprobe stmmac_pci [\u003coption\u003e=\u003cVAL1\u003e,\u003cVAL2\u003e,...]\nDocumentation/networking/device_drivers/ethernet/stmicro/stmmac.rst-110-\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/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=755=static int ehl_sgmii_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-774-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:775:static struct stmmac_pci_info ehl_sgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-776-\t.setup = ehl_sgmii_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=779=static int ehl_rgmii_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-789-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:790:static struct stmmac_pci_info ehl_rgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-791-\t.setup = ehl_rgmii_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=810=static int ehl_pse0_rgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-816-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:817:static struct stmmac_pci_info ehl_pse0_rgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-818-\t.setup = ehl_pse0_rgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=821=static int ehl_pse0_sgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-838-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:839:static struct stmmac_pci_info ehl_pse0_sgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-840-\t.setup = ehl_pse0_sgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=859=static int ehl_pse1_rgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-865-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:866:static struct stmmac_pci_info ehl_pse1_rgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-867-\t.setup = ehl_pse1_rgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=870=static int ehl_pse1_sgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-887-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:888:static struct stmmac_pci_info ehl_pse1_sgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-889-\t.setup = ehl_pse1_sgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=913=static int tgl_sgmii_phy0_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-921-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:922:static struct stmmac_pci_info tgl_sgmii1g_phy0_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-923-\t.setup = tgl_sgmii_phy0_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=926=static int tgl_sgmii_phy1_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-934-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:935:static struct stmmac_pci_info tgl_sgmii1g_phy1_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-936-\t.setup = tgl_sgmii_phy1_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=939=static int adls_sgmii_phy0_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-948-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:949:static struct stmmac_pci_info adls_sgmii1g_phy0_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-950-\t.setup = adls_sgmii_phy0_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=953=static int adls_sgmii_phy1_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-962-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:963:static struct stmmac_pci_info adls_sgmii1g_phy1_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-964-\t.setup = adls_sgmii_phy1_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=992=static int adln_sgmii_phy0_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1010-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1011:static struct stmmac_pci_info adln_sgmii1g_phy0_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1012-\t.setup = adln_sgmii_phy0_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1014-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1015:static const struct stmmac_pci_func_data galileo_stmmac_func_data[] = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1016-\t{\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1021-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1022:static const struct stmmac_pci_dmi_data galileo_stmmac_dmi_data = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1023-\t.func = galileo_stmmac_func_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1026-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1027:static const struct stmmac_pci_func_data iot2040_stmmac_func_data[] = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1028-\t{\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1037-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1038:static const struct stmmac_pci_dmi_data iot2040_stmmac_dmi_data = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1039-\t.func = iot2040_stmmac_func_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=1078=static int quark_default_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1088-\t */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1089:\tret = stmmac_pci_find_phy_addr(pdev, quark_pci_dmi);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1090-\tif (ret \u003c 0) {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1113-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1114:static const struct stmmac_pci_info quark_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1115-\t.setup = quark_default_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=1232=static int intel_eth_pci_probe(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1234-{\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1235:\tstruct stmmac_pci_info *info = (struct stmmac_pci_info *)id-\u003edriver_data;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1236-\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/07/08 03:44 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 11829
							output: 35
							thoughts: 1034
						

Thoughts:
**Reaching the STMMAC Driver for Fuzzing**

Okay, so `stmmac` has a PCI driver, `stmmac_pci.c`. My initial thought is PCI fuzzing with syzkaller. Since it's PCI, that opens the door to syzkaller's PCI fuzzing capabilities, assuming the device is either emulated or actually present.

Right, syzkaller has a PCI fuzzer, but, it usually needs the device to be present or it fuzzes the PCI subsystem. However, syzkaller *does* have `syz_pci_device` which I think emulates devices. Let me double check...

Is there another way to reach this code though? `stmmac` is for DesignWare MAC (DWMAC). Is it reachable in QEMU? QEMU emulates several network devices, but not necessarily DWMAC.

The prompt notes about unreachable code paths in virtual environments, even with emulated hardware. If it's not emulated by QEMU, and it's not a USB gadget, then what are my options? I need to remember that syzkaller has `syz_pci_device`, it injects PCI devices via `vfio` or something similar?

Wait, syzkaller *does* have PCI fuzzing. It's either a custom QEMU device or using other mechanisms to emulate them. No, syzkaller uses `syz_genetlink` etc.

Let's check if syzkaller can reach `stmmac`. There's a commit, so let me read that: Ah, the commit says "syz-cluster: applied patch under review." It could mean syzkaller found a bug, but it is not guaranteed!

I have to look into this more. Is `stmmac` a platform driver? If so, it needs a device tree node. It's heavily used on ARM SoCs. Is it a PCI driver? It can be probed if a PCI device with the matching vendor/device ID is present. Does QEMU emulate any STMMAC PCI device? Let me just assume that syzkaller can't reach it unless it is emulated.

Wait, did syzkaller add PCI fuzzing via `vfio` or a virtual PCI device? Syzkaller has `vhci` for USB. For PCI, there is no generic software emulator upstream, except if syzkaller uses a custom QEMU with a fuzzer PCI device. That matches the prompt, about software-emulated hardware. Does QEMU emulate `stmmac`?

Let's do some digging. Is there a virtual device for it? Maybe it is used on some ARM boards emulated by QEMU? QEMU has emulated devices for ARM.

Wait, `stmmac` is for Synopsys DesignWare MAC (DWMAC). QEMU has `hw/net/designware.c`! Okay, now we're getting somewhere. Let me see how `stmmac` matches up with `designware`.



6/2 2026/07/08 03:44 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "designware",
  "PathPrefix": "drivers/net/ethernet/stmicro/stmmac"
}

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

7/2 2026/07/08 03:44 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 13572
							output: 36
							thoughts: 64
						

Thoughts:
**Investigating QEMU's Ethernet Emulation**

Okay, so I need to figure out how QEMU handles this particular Ethernet device. My initial instinct is to search the QEMU source code for "dwmac," that's the likely starting point. I already know that the driver is `stmmac`. Now, that name rings a bell, I'm pretty sure the relevant source files will be named something like `dwmac-*.c`, I'll focus my search there. The key is going to be determining how QEMU represents the device. I need to check if there's a PCI ID associated with the emulated device. Alternatively, it might be modelled as a platform device. I need to figure this out to get a handle on the emulation architecture. I'll start with the PCI ID.



8/2 2026/07/08 03:44 tool grepper
0m Args:
{
  "Expression": "DWMAC",
  "PathPrefix": "drivers/net/ethernet/stmicro/stmmac"
}

Results:
{
  "Output": "\nFull output is too long, showing 500 out of 1013 lines.\nUse more precise expression if possible.\n\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=42=if STMMAC_PLATFORM\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-43-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:44:config DWMAC_DWC_QOS_ETH\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-45-\ttristate \"Support for snps,dwc-qos-ethernet.txt DT binding.\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-51-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:52:config DWMAC_GENERIC\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:53:\ttristate \"Generic driver for DWMAC\"\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-54-\tdefault STMMAC_PLATFORM\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-55-\thelp\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:56:\t  Generic DWMAC driver for platforms that don't require any\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-57-\t  platform specific code to function or is using platform\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-59-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:60:config DWMAC_ANARION\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-61-\ttristate \"Adaptrum Anarion GMAC support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-68-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:69:config DWMAC_EIC7700\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-70-\ttristate \"Support for Eswin eic7700 ethernet driver\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-77-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:78:config DWMAC_INGENIC\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-79-\ttristate \"Ingenic MAC support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-89-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:90:config DWMAC_IPQ806X\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:91:\ttristate \"QCA IPQ806x DWMAC support\"\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-92-\tdefault ARCH_QCOM\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-95-\thelp\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:96:\t  Support for QCA IPQ806X DWMAC Ethernet.\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-97-\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-105-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:106:config DWMAC_LPC18XX\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:107:\ttristate \"NXP LPC18xx/43xx DWMAC support\"\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-108-\tdefault ARCH_LPC18XX\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-111-\thelp\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:112:\t  Support for NXP LPC18xx/43xx DWMAC Ethernet.\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-113-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:114:config DWMAC_MEDIATEK\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-115-\ttristate \"MediaTek MT27xx GMAC support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-121-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:122:config DWMAC_MESON\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-123-\ttristate \"Amlogic Meson dwmac support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-132-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:133:config DWMAC_NUVOTON\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-134-\ttristate \"Nuvoton MA35 dwmac support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-144-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:145:config DWMAC_QCOM_ETHQOS\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-146-\ttristate \"Qualcomm ETHQOS support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-154-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:155:config DWMAC_RENESAS_GBETH\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-156-\ttristate \"Renesas RZ/V2H(P) GBETH and RZ/T2H, RZ/N2H GMAC support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-167-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:168:config DWMAC_ROCKCHIP\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-169-\ttristate \"Rockchip dwmac support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-178-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:179:config DWMAC_RZN1\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-180-\ttristate \"Renesas RZ/N1 dwmac support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-190-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:191:config DWMAC_S32\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-192-\ttristate \"NXP S32G/S32R GMAC support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-202-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:203:config DWMAC_SOCFPGA\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-204-\ttristate \"SOCFPGA dwmac support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-217-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:218:config DWMAC_SOPHGO\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-219-\ttristate \"Sophgo dwmac support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-228-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:229:config DWMAC_SPACEMIT\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-230-\ttristate \"Spacemit dwmac support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-240-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:241:config DWMAC_STARFIVE\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-242-\ttristate \"StarFive dwmac support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-252-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:253:config DWMAC_STI\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-254-\ttristate \"STi GMAC support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-264-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:265:config DWMAC_STM32\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:266:\ttristate \"STM32 DWMAC support\"\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-267-\tdefault ARCH_STM32\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-276-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:277:config DWMAC_SUNXI\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-278-\ttristate \"Allwinner GMAC support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-287-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:288:config DWMAC_SUN8I\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-289-\ttristate \"Allwinner sun8i GMAC support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-299-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:300:config DWMAC_SUN55I\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-301-\ttristate \"Allwinner sun55i GMAC200 support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-311-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:312:config DWMAC_THEAD\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-313-\ttristate \"T-HEAD dwmac support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-321-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:322:config DWMAC_IMX8\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:323:\ttristate \"NXP IMX8 DWMAC support\"\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-324-\tdefault ARCH_MXC\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-333-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:334:config DWMAC_INTEL_PLAT\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-335-\ttristate \"Intel dwmac support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-343-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:344:config DWMAC_LOONGSON1\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-345-\ttristate \"Loongson1 GMAC support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-354-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:355:config DWMAC_TEGRA\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-356-\ttristate \"NVIDIA Tegra MGBE support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-363-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:364:config DWMAC_VISCONTI\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:365:\ttristate \"Toshiba Visconti DWMAC support\"\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-366-\tdefault ARCH_VISCONTI\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig=373=config STMMAC_LIBPCI\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-377-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:378:config DWMAC_INTEL\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-379-\ttristate \"Intel GMAC support\"\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-387-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:388:config DWMAC_LOONGSON\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:389:\ttristate \"Loongson PCI DWMAC support\"\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-390-\tdefault MACH_LOONGSON64\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-397-\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:398:config DWMAC_MOTORCOMM\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:399:\ttristate \"Motorcomm PCI DWMAC support\"\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-400-\tdepends on PCI\n--\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-403-\thelp\ndrivers/net/ethernet/stmicro/stmmac/Kconfig:404:\t  This enables glue driver for Motorcomm DWMAC-based PCI Ethernet\ndrivers/net/ethernet/stmicro/stmmac/Kconfig-405-\t  controllers. Currently only YT6801 is supported.\n--\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\ndrivers/net/ethernet/stmicro/stmmac/Makefile:17:obj-$(CONFIG_DWMAC_EIC7700)\t+= dwmac-eic7700.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:18:obj-$(CONFIG_DWMAC_INGENIC)\t+= dwmac-ingenic.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:19:obj-$(CONFIG_DWMAC_IPQ806X)\t+= dwmac-ipq806x.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:20:obj-$(CONFIG_DWMAC_LPC18XX)\t+= dwmac-lpc18xx.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:21:obj-$(CONFIG_DWMAC_MEDIATEK)\t+= dwmac-mediatek.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:22:obj-$(CONFIG_DWMAC_MESON)\t+= dwmac-meson.o dwmac-meson8b.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:23:obj-$(CONFIG_DWMAC_NUVOTON)\t+= dwmac-nuvoton.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:24:obj-$(CONFIG_DWMAC_QCOM_ETHQOS)\t+= dwmac-qcom-ethqos.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:25:obj-$(CONFIG_DWMAC_RENESAS_GBETH) += dwmac-renesas-gbeth.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:26:obj-$(CONFIG_DWMAC_ROCKCHIP)\t+= dwmac-rk.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:27:obj-$(CONFIG_DWMAC_RZN1)\t+= dwmac-rzn1.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:28:obj-$(CONFIG_DWMAC_S32)\t\t+= dwmac-s32.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:29:obj-$(CONFIG_DWMAC_SOCFPGA)\t+= dwmac-altr-socfpga.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:30:obj-$(CONFIG_DWMAC_SOPHGO)\t+= dwmac-sophgo.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:31:obj-$(CONFIG_DWMAC_SPACEMIT)\t+= dwmac-spacemit.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:32:obj-$(CONFIG_DWMAC_STARFIVE)\t+= dwmac-starfive.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:33:obj-$(CONFIG_DWMAC_STI)\t\t+= dwmac-sti.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:34:obj-$(CONFIG_DWMAC_STM32)\t+= dwmac-stm32.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:35:obj-$(CONFIG_DWMAC_SUNXI)\t+= dwmac-sunxi.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:36:obj-$(CONFIG_DWMAC_SUN8I)\t+= dwmac-sun8i.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:37:obj-$(CONFIG_DWMAC_SUN55I)\t+= dwmac-sun55i.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:38:obj-$(CONFIG_DWMAC_THEAD)\t+= dwmac-thead.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:39:obj-$(CONFIG_DWMAC_DWC_QOS_ETH)\t+= dwmac-dwc-qos-eth.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:40:obj-$(CONFIG_DWMAC_INTEL_PLAT)\t+= dwmac-intel-plat.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:41:obj-$(CONFIG_DWMAC_LOONGSON1)\t+= dwmac-loongson1.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:42:obj-$(CONFIG_DWMAC_GENERIC)\t+= dwmac-generic.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:43:obj-$(CONFIG_DWMAC_IMX8)\t+= dwmac-imx.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:44:obj-$(CONFIG_DWMAC_TEGRA)\t+= dwmac-tegra.o\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\n--\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\ndrivers/net/ethernet/stmicro/stmmac/Makefile:52:obj-$(CONFIG_DWMAC_LOONGSON)\t+= dwmac-loongson.o\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/common.h-28-\ndrivers/net/ethernet/stmicro/stmmac/common.h:29:#define DWMAC_SNPSVER\tGENMASK_U32(7, 0)\ndrivers/net/ethernet/stmicro/stmmac/common.h:30:#define DWMAC_USERVER\tGENMASK_U32(15, 8)\ndrivers/net/ethernet/stmicro/stmmac/common.h-31-\ndrivers/net/ethernet/stmicro/stmmac/common.h-32-/* Synopsys Core versions */\ndrivers/net/ethernet/stmicro/stmmac/common.h:33:#define\tDWMAC_CORE_3_40\t\t0x34\ndrivers/net/ethernet/stmicro/stmmac/common.h:34:#define\tDWMAC_CORE_3_50\t\t0x35\ndrivers/net/ethernet/stmicro/stmmac/common.h:35:#define\tDWMAC_CORE_3_70\t\t0x37\ndrivers/net/ethernet/stmicro/stmmac/common.h:36:#define\tDWMAC_CORE_4_00\t\t0x40\ndrivers/net/ethernet/stmicro/stmmac/common.h:37:#define DWMAC_CORE_4_10\t\t0x41\ndrivers/net/ethernet/stmicro/stmmac/common.h:38:#define DWMAC_CORE_5_00\t\t0x50\ndrivers/net/ethernet/stmicro/stmmac/common.h:39:#define DWMAC_CORE_5_10\t\t0x51\ndrivers/net/ethernet/stmicro/stmmac/common.h:40:#define DWMAC_CORE_5_20\t\t0x52\ndrivers/net/ethernet/stmicro/stmmac/common.h-41-#define DWXGMAC_CORE_2_10\t0x21\n--\ndrivers/net/ethernet/stmicro/stmmac/common.h=49=static inline bool dwmac_is_xmac(enum dwmac_core_type core_type)\ndrivers/net/ethernet/stmicro/stmmac/common.h-50-{\ndrivers/net/ethernet/stmicro/stmmac/common.h:51:\treturn core_type == DWMAC_CORE_GMAC4 || core_type == DWMAC_CORE_XGMAC;\ndrivers/net/ethernet/stmicro/stmmac/common.h-52-}\n--\ndrivers/net/ethernet/stmicro/stmmac/descs.h-3-  Header File to describe the DMA descriptors and related definitions.\ndrivers/net/ethernet/stmicro/stmmac/descs.h:4:  This is for DWMAC100 and 1000 cores.\ndrivers/net/ethernet/stmicro/stmmac/descs.h-5-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:3: * Adaptrum Anarion DWMAC glue layer\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c=133=module_platform_driver(anarion_dwmac_driver);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-134-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:135:MODULE_DESCRIPTION(\"Adaptrum Anarion DWMAC specific glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-136-MODULE_AUTHOR(\"Alexandru Gagniuc \u003cmr.nuke.me@gmail.com\u003e\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=36=static int dwc_eth_dwmac_config_dt(struct platform_device *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-87-\t/* dwc-qos needs GMAC4, AAL, TSO and PMT */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:88:\tplat_dat-\u003ecore_type = DWMAC_CORE_GMAC4;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-89-\tplat_dat-\u003edma_cfg-\u003eaal = 1;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c-1-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c:2: * Generic DWMAC platform driver\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c-3- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c:3: * dwmac-imx.c - DWMAC Specific Glue layer for NXP imx8\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c=403=MODULE_AUTHOR(\"NXP\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c:404:MODULE_DESCRIPTION(\"NXP imx8 DWMAC Specific Glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c-405-MODULE_LICENSE(\"GPL v2\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c:3: * dwmac-ingenic.c - Ingenic SoCs DWMAC specific glue layer\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c=282=MODULE_AUTHOR(\"周琰杰 (Zhou Yanjie) \u003czhouyanjie@wanyeetech.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c:283:MODULE_DESCRIPTION(\"Ingenic SoCs DWMAC specific glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c-284-MODULE_LICENSE(\"GPL v2\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c-1-// SPDX-License-Identifier: GPL-2.0\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c:2:/* Intel DWMAC platform driver\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c-3- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c=150=MODULE_LICENSE(\"GPL v2\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c:151:MODULE_DESCRIPTION(\"Intel DWMAC platform driver\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=565=static void common_default_data(struct plat_stmmacenet_data *plat)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-568-\tplat-\u003eclk_csr = STMMAC_CSR_20_35M;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:569:\tplat-\u003ecore_type = DWMAC_CORE_GMAC;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-570-\tplat-\u003eforce_sf_dma_mode = true;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=585=static int intel_mgbe_common_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-595-\tplat-\u003eclk_csr = STMMAC_CSR_250_300M;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:596:\tplat-\u003ecore_type = DWMAC_CORE_GMAC4;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-597-\tplat-\u003eforce_sf_dma_mode = 0;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.h-2-/* Copyright (c) 2020, Intel Corporation\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.h:3: * DWMAC Intel header file\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.h-4- */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.h-5-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.h:6:#ifndef __DWMAC_INTEL_H__\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.h:7:#define __DWMAC_INTEL_H__\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.h-8-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.h-80-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.h:81:#endif /* __DWMAC_INTEL_H__ */\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c=374=static int ipq806x_gmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c-475-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c:476:\tplat_dat-\u003ecore_type = DWMAC_CORE_GMAC;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c-477-\tplat_dat-\u003ebsp_priv = gmac;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c=508=MODULE_AUTHOR(\"Mathieu Olivari \u003cmathieu@codeaurora.org\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c:509:MODULE_DESCRIPTION(\"Qualcomm Atheros IPQ806x DWMAC specific glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c-510-MODULE_LICENSE(\"Dual BSD/GPL\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-72-#define PCI_DEVICE_ID_LOONGSON_GNET\t0x7a13\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:73:#define DWMAC_CORE_MULTICHAN_V1\t0x10\t/* Loongson custom ID 0x10 */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:74:#define DWMAC_CORE_MULTICHAN_V2\t0x12\t/* Loongson custom ID 0x12 */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-75-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=86=static void loongson_default_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-95-\tplat-\u003eclk_csr = STMMAC_CSR_100_150M;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:96:\tplat-\u003ecore_type = DWMAC_CORE_GMAC;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-97-\tplat-\u003eforce_sf_dma_mode = true;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-108-\tswitch (ld-\u003eloongson_id) {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:109:\tcase DWMAC_CORE_MULTICHAN_V1:\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-110-\t\tld-\u003emultichan = 1;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-120-\t\tbreak;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:121:\tcase DWMAC_CORE_MULTICHAN_V2:\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-122-\t\tld-\u003emultichan = 1;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=306=static int loongson_dwmac_setup(void *apriv, struct mac_device_info *mac)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-328-\tif (ld-\u003emultichan) {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:329:\t\tpriv-\u003esynopsys_id = DWMAC_CORE_3_70;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-330-\t\t*dma = dwmac1000_dma_ops;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=466=static int loongson_dwmac_acpi_config(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-477-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:478:/* Loongson's DWMAC device may take nearly two seconds to complete DMA reset */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-479-static int loongson_dwmac_fix_reset(struct stmmac_priv *priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=614=module_pci_driver(loongson_dwmac_driver);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-615-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:616:MODULE_DESCRIPTION(\"Loongson DWMAC PCI driver\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-617-MODULE_AUTHOR(\"Qing Zhang \u003czhangqing@loongson.cn\u003e\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c:3: * Loongson-1 DWMAC glue layer\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c=238=MODULE_AUTHOR(\"Keguang Zhang \u003ckeguang.zhang@gmail.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c:239:MODULE_DESCRIPTION(\"Loongson-1 DWMAC glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c-240-MODULE_LICENSE(\"GPL\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c-1-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c:2: * DWMAC glue for NXP LPC18xx/LPC43xx Ethernet\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c-3- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c=42=static int lpc18xx_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c-56-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c:57:\tplat_dat-\u003ecore_type = DWMAC_CORE_GMAC;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c-58-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c=88=MODULE_AUTHOR(\"Joachim Eastwood \u003cmanabian@gmail.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c:89:MODULE_DESCRIPTION(\"DWMAC glue for LPC18xx/43xx Ethernet\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c-90-MODULE_LICENSE(\"GPL v2\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c=683=MODULE_AUTHOR(\"Biao Huang \u003cbiao.huang@mediatek.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c:684:MODULE_DESCRIPTION(\"MediaTek DWMAC specific glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c-685-MODULE_LICENSE(\"GPL v2\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c:3: * Amlogic Meson6 and Meson8 DWMAC glue layer\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c=93=MODULE_AUTHOR(\"Beniamino Galvani \u003cb.galvani@gmail.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c:94:MODULE_DESCRIPTION(\"Amlogic Meson6 and Meson8 DWMAC glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c-95-MODULE_LICENSE(\"GPL v2\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c:3: * Amlogic Meson8b, Meson8m2 and GXBB DWMAC glue layer\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c=518=MODULE_AUTHOR(\"Martin Blumenstingl \u003cmartin.blumenstingl@googlemail.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c:519:MODULE_DESCRIPTION(\"Amlogic Meson8b, Meson8m2 and GXBB DWMAC glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c-520-MODULE_LICENSE(\"GPL v2\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c:3: * DWMAC glue driver for Motorcomm PCI Ethernet controllers\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-4- *\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-247-\tplat-\u003eclk_ref_rate\t= 125000000;\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;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c=383=module_pci_driver(dwmac_motorcomm_pci_driver);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-384-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c:385:MODULE_DESCRIPTION(\"DWMAC glue driver for Motorcomm PCI Ethernet controllers\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-386-MODULE_AUTHOR(\"Yao Zi \u003cme@ziyao.cc\u003e\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c:3: * Nuvoton DWMAC specific glue layer\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c=136=MODULE_AUTHOR(\"Joey Lu \u003ca0987203069@gmail.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c:137:MODULE_DESCRIPTION(\"Nuvoton DWMAC specific glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c-138-MODULE_LICENSE(\"GPL\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c=684=static int qcom_ethqos_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c-776-\tplat_dat-\u003eptp_clk_freq_config = ethqos_ptp_clk_freq_config;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c:777:\tplat_dat-\u003ecore_type = DWMAC_CORE_GMAC4;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c-778-\tif (ethqos-\u003ehas_emac_ge_3)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c:3: * dwmac-renesas-gbeth.c - DWMAC Specific Glue layer for Renesas GBETH\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c=234=MODULE_AUTHOR(\"Lad Prabhakar \u003cprabhakar.mahadev-lad.rj@bp.renesas.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c:235:MODULE_DESCRIPTION(\"Renesas GBETH DWMAC Specific Glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c-236-MODULE_LICENSE(\"GPL\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-2-/**\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c:3: * DOC: dwmac-rk.c - Rockchip RK3288 DWMAC specific glue layer\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c=1568=static int rk_gmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-1591-\t */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c:1592:\tif (plat_dat-\u003ecore_type != DWMAC_CORE_GMAC4) {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c:1593:\t\tplat_dat-\u003ecore_type = DWMAC_CORE_GMAC;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-1594-\t\tplat_dat-\u003erx_fifo_size = 4096;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c=1647=MODULE_AUTHOR(\"Chen-Zhi (Roger Chen) \u003croger.chen@rock-chips.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c:1648:MODULE_DESCRIPTION(\"Rockchip RK3288 DWMAC specific glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-1649-MODULE_LICENSE(\"GPL\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c=91=MODULE_AUTHOR(\"Clément Léger \u003cclement.leger@bootlin.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c:92:MODULE_DESCRIPTION(\"Renesas RZN1 DWMAC specific glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c-93-MODULE_LICENSE(\"GPL\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c=144=static int s32_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c-195-\t/* S32CC core feature set */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c:196:\tplat-\u003ecore_type = DWMAC_CORE_GMAC4;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c-197-\tplat-\u003epmt = true;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c=559=static void socfpga_gen5_setup_plat_dat(struct socfpga_dwmac *dwmac)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-562-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c:563:\tplat_dat-\u003ecore_type = DWMAC_CORE_GMAC;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-564-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c=569=static void socfpga_agilex5_setup_plat_dat(struct socfpga_dwmac *dwmac)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-572-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c:573:\tplat_dat-\u003ecore_type = DWMAC_CORE_XGMAC;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-574-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c=689=module_platform_driver(socfpga_dwmac_driver);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-690-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c:691:MODULE_DESCRIPTION(\"Altera SOC DWMAC Specific Glue layer\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-692-MODULE_LICENSE(\"GPL v2\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c:3: * Sophgo DWMAC platform driver\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c=91=MODULE_AUTHOR(\"Inochi Amaoto \u003cinochiama@gmail.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c:92:MODULE_DESCRIPTION(\"Sophgo DWMAC platform driver\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c-93-MODULE_LICENSE(\"GPL\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c:3: * Spacemit DWMAC platform driver\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c=228=MODULE_AUTHOR(\"Inochi Amaoto \u003cinochiama@gmail.com\u003e\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c:229:MODULE_DESCRIPTION(\"Spacemit DWMAC platform driver\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c-230-MODULE_LICENSE(\"GPL\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c:3: * StarFive DWMAC platform driver\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-17-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c:18:#define STARFIVE_DWMAC_PHY_INFT_FIELD\t\t0x7U\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-19-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c=32=static int starfive_dwmac_set_mode(struct plat_stmmacenet_data *plat_dat)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-55-\terr = regmap_update_bits(regmap, args[0],\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c:56:\t\t\t\t STARFIVE_DWMAC_PHY_INFT_FIELD \u003c\u003c args[1],\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-57-\t\t\t\t phy_intf_sel \u003c\u003c args[1]);\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c=179=MODULE_LICENSE(\"GPL\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c:180:MODULE_DESCRIPTION(\"StarFive DWMAC platform driver\");\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-181-MODULE_AUTHOR(\"Emil Renner Berthing \u003ckernel@esmil.dk\u003e\");\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-2-/*\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c:3: * dwmac-sti.c - STMicroelectronics DWMAC Specific Glue layer\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-4- *\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-23-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c:24:#define DWMAC_50MHZ\t50000000\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-25-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c=119=static void stih4xx_fix_retime_src(void *priv, phy_interface_t interface,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-133-\t\t\tsrc = TX_RETIME_SRC_CLKGEN;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c:134:\t\t\tfreq = DWMAC_50MHZ;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-135-\t\t}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c=312=MODULE_AUTHOR(\"Srinivas Kandagatla \u003csrinivas.kandagatla@st.com\u003e\");\n\n"
}

9/2 2026/07/08 03:44 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 27960
							output: 36
							thoughts: 1189
						

Thoughts:
**Reaching the DesignWare MAC in QEMU/Syzkaller: A Deep Dive**

Okay, so I'm looking at this `hw/net/designware.c` in QEMU, which is the DesignWare MAC. The question is, can we actually reach this in a fuzzer like Syzkaller?

First, I checked where this code is used within QEMU. It's in various ARM machines, but it looks like the DesignWare MAC is specifically used in the Allwinner H3 (`allwinner-h3.c`), which is interesting.  This QEMU `designware.c` implements the DWMAC.

The key is whether Syzkaller can actually hit this in its fuzzing campaigns. Syzkaller, of course, does fuzz ARM32 and ARM64 kernels through QEMU and can also fuzz PCI devices *if* they are emulated.  Then I remembered `stmmac` which also has a PCI driver (`stmmac_pci.c`). The question immediately becomes: does QEMU offer PCI emulation for the DesignWare MAC, that Syzkaller can reach?

Now, QEMU's `hw/net/designware.c` is actually a SysBusDevice (platform device). So, can syzkaller fuzz platform devices? It can if they are on a board, or can inject them. Syzkaller does have network primitives such as `syz_genetlink` and `syz_netlink` that create virtual interfaces, but `stmmac` is a *hardware* driver.  And the prompt said that if it's impossible to reach, then I should return `false`.

Here's the problem: I have a commit message from a syz-cluster, indicating that syzkaller is testing a patch for this driver. But this doesn't guarantee the code path is *reachable*. Testing a patch doesn't equal fuzzing the driver itself. That doesn't mean that syzkaller can actively find bugs in it.

I did start to wonder whether there was a `syz_pci_device` type call for Syzkaller, something to emulate a PCI device directly. But no. Syzkaller uses QEMU to emulate the hardware. The crucial thing is that syzkaller doesn't have a `syz_pci_device`, it doesn't do fuzzing using `vfio` either.

Then I shifted my focus. QEMU *does* run ARM machines. Can an ARM machine use `stmmac` through the QEMU emulation? But the "virt" machine is used in Syzkaller with QEMU, but uses `virtio-net` for networking.

Okay, let's change perspective. What about if the user compiles the kernel for x86_64? The `stmmac_pci` driver is available on x86_64 (Intel Quark, Apollo Lake, etc.). Can it be reached in QEMU x86_64? But QEMU does *not* emulate Intel DWMAC PCI devices.

Okay, is there another way? Maybe `stmmac` is not reachable in standard QEMU x86_64. What about `veth` or `tun`? These are virtual. `stmmac` is a *physical* driver. I need to be able to trigger the code without the hardware.

No, this is a hardware driver. It needs hardware registers. The prompt says, specifically: "Code paths that are impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware".

This all comes down to the prompt's final statement: "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."

Given all of this, can `stmmac` be reached in QEMU? And QEMU does *not* emulate `stmmac` PCI. Since the goal is fuzzing, I'm leaning toward the code paths being unreachable.



10/2 2026/07/08 03:44 tool grepper
0m Args:
{
  "Expression": "stmmac",
  "PathPrefix": "drivers/net/ethernet/stmicro/stmmac"
}

Results:
{
  "Output": "\nFull output is too long, showing 500 out of 11608 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/07/08 03:44 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 44483
							output: 43
							thoughts: 668
						

Thoughts:
**Fuzzing the `stmmac` Driver: A Targeted Approach**

Okay, so I'm looking at this `stmmac` driver, which I know is a generic driver for Synopsys DesignWare MAC implementations. And I see that QEMU actually has `hw/net/designware.c`, which is the emulator for this hardware, which is key. This gets me thinking about fuzzing it with syzkaller. The whole point is to find reachable bugs, so if syzkaller has dug something up in this driver, we know the code is being hit somehow.

Syzkaller does a great job fuzzing QEMU with various machine configurations, like `mcimx6ul-evk`, `xlnx-zcu102`, and `allwinner-h3`. Good, syzkaller supports ARM and ARM64, and this driver is relevant to a variety of hardware. Since this driver is emulated within QEMU, it's definitely worth fuzzing.

The patch itself modifies `stmmac_main.c`, the core driver for *all* DWMAC variants, so it is high impact. This also adds a `STMMAC_DOWN` flag to prevent XDP from processing new packets when the interface is down. This is a functional change, a signal that this code is interesting to explore. So, yes, definitely worth fuzzing.

The next step is to nail down specific symbols, and avoid the noise. I'm focusing on:

*   `stmmac_disable_all_queues`
*   `stmmac_drain_xdp`
*   `stmmac_xdp_release`
*   `stmmac_suspend`
*   `__stmmac_open`
*   `__stmmac_release`

I know the prompt is guiding me, to avoid generic hot-path functions to prevent skewed test distributions. My mind is instantly evaluating whether these functions are common in the data path. Hmm, let me think. `__stmmac_open` and `__stmmac_release` are interface up/down functions, so not hot paths. `stmmac_xdp_xmit_back` and `__stmmac_xdp_run_prog` are data path. Good, I'll avoid those.

So, now I have a list of targets for fuzzing. Now, to make sure these symbols are enabled in the build. The driver in question is `stmmac`, so that's the kernel module I need to be concerned with. I will look at the `drivers/net/ethernet/stmicro/stmmac/Kconfig` file. `STMMAC_ETH` looks like the main config – it's a `tristate "STMicroelectronics 10/100/1000/EQOS Ethernet MAC support"`. This is the one I need to focus on. Wait, the patch modifies XDP-related code. I need to figure out how to enable XDP conditionally within `stmmac`.



12/2 2026/07/08 03:44 tool grepper
0m Args:
{
  "Expression": "XDP",
  "PathPrefix": "drivers/net/ethernet/stmicro/stmmac/stmmac_main.c"
}

Results:
{
  "Output": "drivers/net/ethernet/stmicro/stmmac/stmmac_main.c=80=MODULE_PARM_DESC(phyaddr, \"Physical device address\");\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-83-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:84:/* Limit to make sure XDP TX and slow path can coexist */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-85-#define STMMAC_XSK_TX_BUDGET_MAX\t256\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-88-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:89:#define STMMAC_XDP_PASS\t\t0\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:90:#define STMMAC_XDP_CONSUMED\tBIT(0)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:91:#define STMMAC_XDP_TX\t\tBIT(1)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:92:#define STMMAC_XDP_REDIRECT\tBIT(2)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-93-#define STMMAC_XSK_CONSUMED\tBIT(3)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=269=static void stmmac_disable_all_queues(struct stmmac_priv *priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-292-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:293: * stmmac_drain_xdp - Cleanup for XDP apps\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-294- * @priv: driver private structure\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=1545=static unsigned int stmmac_rx_offset(struct stmmac_priv *priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-1547-\tif (stmmac_xdp_is_enabled(priv))\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:1548:\t\treturn XDP_PACKET_HEADROOM;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-1549-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=1725=static void stmmac_free_tx_buffer(struct stmmac_priv *priv,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-1731-\tif (tx_q-\u003etx_skbuff_dma[i].buf \u0026\u0026\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:1732:\t    tx_q-\u003etx_skbuff_dma[i].buf_type != STMMAC_TXBUF_T_XDP_TX) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-1733-\t\tif (tx_q-\u003etx_skbuff_dma[i].map_as_page)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-1745-\tif (tx_q-\u003exdpf[i] \u0026\u0026\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:1746:\t    (tx_q-\u003etx_skbuff_dma[i].buf_type == STMMAC_TXBUF_T_XDP_TX ||\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:1747:\t     tx_q-\u003etx_skbuff_dma[i].buf_type == STMMAC_TXBUF_T_XDP_NDO)) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-1748-\t\txdp_return_frame(tx_q-\u003exdpf[i]);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=1882=static int __init_dma_rx_desc_rings(struct stmmac_priv *priv,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-1917-\tif (rx_q-\u003exsk_pool) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:1918:\t\t/* RX XDP ZC buffer pool may not be populated, e.g.\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-1919-\t\t * xdpsock TX-only.\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=2437=static void free_dma_desc_resources(struct stmmac_priv *priv,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2443-\t/* Release the DMA RX socket buffers later\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2444:\t * to ensure all pending XDP_TX buffers are returned.\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2445-\t */\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=2691=static bool stmmac_xdp_xmit_zc(struct stmmac_priv *priv, u32 queue, u32 budget)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2738-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2739:\t\t/* To return XDP buffer to XSK pool, we simple call\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2740-\t\t * xsk_tx_completed(), so we don't need to fill up\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=2827=static int stmmac_tx_clean(struct stmmac_priv *priv, int budget, u32 queue,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2848-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2849:\t\tif (tx_q-\u003etx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_TX ||\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2850:\t\t    tx_q-\u003etx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_NDO) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2851-\t\t\txdpf = tx_q-\u003exdpf[entry];\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2899-\t\tif (likely(tx_q-\u003etx_skbuff_dma[entry].buf \u0026\u0026\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2900:\t\t\t   tx_q-\u003etx_skbuff_dma[entry].buf_type != STMMAC_TXBUF_T_XDP_TX)) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2901-\t\t\tif (tx_q-\u003etx_skbuff_dma[entry].map_as_page)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2924-\t\tif (xdpf \u0026\u0026\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2925:\t\t    tx_q-\u003etx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_TX) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2926-\t\t\txdp_return_frame_rx_napi(xdpf);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2930-\t\tif (xdpf \u0026\u0026\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2931:\t\t    tx_q-\u003etx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_NDO) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-2932-\t\t\txdp_return_frame(xdpf);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=4242=static void __stmmac_release(struct net_device *dev)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-4249-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:4250:\t/* Set DOWN flag to prevent XDP from processing new packets */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-4251-\tset_bit(STMMAC_DOWN, \u0026priv-\u003estate);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=5178=static int stmmac_xdp_xmit_xdpf(struct stmmac_priv *priv, int queue,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5190-\tif (stmmac_tx_avail(priv, queue) \u003c STMMAC_TX_THRESH(priv))\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5191:\t\treturn STMMAC_XDP_CONSUMED;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5192-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5196-\t\tpriv-\u003exstats.max_sdu_txq_drop[queue]++;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5197:\t\treturn STMMAC_XDP_CONSUMED;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5198-\t}\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5204-\t\tif (dma_mapping_error(priv-\u003edevice, dma_addr))\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5205:\t\t\treturn STMMAC_XDP_CONSUMED;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5206-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5207:\t\tbuf_type = STMMAC_TXBUF_T_XDP_NDO;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5208-\t} else {\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5215-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5216:\t\tbuf_type = STMMAC_TXBUF_T_XDP_TX;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5217-\t}\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5250-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5251:\treturn STMMAC_XDP_TX;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5252-}\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=5268=static int stmmac_xdp_xmit_back(struct stmmac_priv *priv,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5284-\tif (unlikely(!xdpf))\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5285:\t\treturn STMMAC_XDP_CONSUMED;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5286-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5293-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5294:\t/* For zero copy XDP_TX action, dma_map is true */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5295-\tres = stmmac_xdp_xmit_xdpf(priv, queue, xdpf, zc);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5296:\tif (res == STMMAC_XDP_TX) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5297-\t\tstmmac_flush_tx_descriptors(priv, queue);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5298:\t} else if (res == STMMAC_XDP_CONSUMED \u0026\u0026 zc) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5299-\t\t/* xdp has been freed by xdp_convert_buff_to_frame(),\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=5312=static int __stmmac_xdp_run_prog(struct stmmac_priv *priv,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5320-\tswitch (act) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5321:\tcase XDP_PASS:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5322:\t\tres = STMMAC_XDP_PASS;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5323-\t\tbreak;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5324:\tcase XDP_TX:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5325-\t\tres = stmmac_xdp_xmit_back(priv, xdp);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5326-\t\tbreak;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5327:\tcase XDP_REDIRECT:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5328-\t\tif (unlikely(test_bit(STMMAC_DOWN, \u0026priv-\u003estate)))\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5329:\t\t\tres = STMMAC_XDP_CONSUMED;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5330-\t\telse if (xdp_do_redirect(priv-\u003edev, xdp, prog) \u003c 0)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5331:\t\t\tres = STMMAC_XDP_CONSUMED;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5332-\t\telse\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5333:\t\t\tres = STMMAC_XDP_REDIRECT;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5334-\t\tbreak;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5337-\t\tfallthrough;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5338:\tcase XDP_ABORTED:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5339-\t\ttrace_xdp_exception(priv-\u003edev, prog, act);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5340-\t\tfallthrough;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5341:\tcase XDP_DROP:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5342:\t\tres = STMMAC_XDP_CONSUMED;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5343-\t\tbreak;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=5349=static struct sk_buff *stmmac_xdp_run_prog(struct stmmac_priv *priv,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5356-\tif (!prog) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5357:\t\tres = STMMAC_XDP_PASS;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5358-\t\tgoto out;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=5366=static void stmmac_finalize_xdp_rx(struct stmmac_priv *priv,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5373-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5374:\tif (xdp_status \u0026 STMMAC_XDP_TX)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5375-\t\tstmmac_tx_timer_arm(priv, queue);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5376-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5377:\tif (xdp_status \u0026 STMMAC_XDP_REDIRECT)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5378-\t\txdp_do_flush();\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=5498=static struct stmmac_xdp_buff *xsk_buff_to_stmmac_ctx(struct xdp_buff *xdp)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5499-{\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5500:\t/* In XDP zero copy data path, xdp field in struct xdp_buff_xsk is used\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5501-\t * to represent incoming packet, whereas cb field in the same structure\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=5508=static int stmmac_rx_zc(struct stmmac_priv *priv, int limit, u32 queue)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5618-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5619:\t\t/* XDP ZC Frame only support primary buffers for now */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5620-\t\tbuf1_len = stmmac_rx_buf1_len(priv, p, status, len);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5636-\t\tswitch (res) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5637:\t\tcase STMMAC_XDP_PASS:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5638-\t\t\tstmmac_dispatch_skb_zc(priv, queue, p, np, buf-\u003exdp);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5640-\t\t\tbreak;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5641:\t\tcase STMMAC_XDP_CONSUMED:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5642-\t\t\txsk_buff_free(buf-\u003exdp);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5646-\t\t\tbreak;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5647:\t\tcase STMMAC_XDP_TX:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5648:\t\tcase STMMAC_XDP_REDIRECT:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5649-\t\t\txdp_status |= res;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=5693=static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5831-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5832:\t\t\t/* For Not XDP_PASS verdict */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5833-\t\t\tif (IS_ERR(skb)) {\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5835-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5836:\t\t\t\tif (xdp_res \u0026 STMMAC_XDP_CONSUMED) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5837-\t\t\t\t\tpage_pool_put_page(rx_q-\u003epage_pool,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5843-\t\t\t\t\t/* Clear skb as it was set as\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5844:\t\t\t\t\t * status by XDP program.\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5845-\t\t\t\t\t */\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5852-\t\t\t\t\tcontinue;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5853:\t\t\t\t} else if (xdp_res \u0026 (STMMAC_XDP_TX |\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5854:\t\t\t\t\t\t      STMMAC_XDP_REDIRECT)) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5855-\t\t\t\t\txdp_status |= xdp_res;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5866-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5867:\t\t\t/* XDP program may expand or reduce tail */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5868-\t\t\tbuf1_len = ctx.xdp.data_end - ctx.xdp.data;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5879-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:5880:\t\t\t/* XDP program may adjust header */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-5881-\t\t\thead_pad_len = ctx.xdp.data - ctx.xdp.data_hard_start;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=6122=static int stmmac_change_mtu(struct net_device *dev, int new_mtu)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6135-\tif (stmmac_xdp_is_enabled(priv) \u0026\u0026 new_mtu \u003e ETH_DATA_LEN) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:6136:\t\tnetdev_dbg(priv-\u003edev, \"Jumbo frames not supported for XDP\\n\");\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6137-\t\treturn -EINVAL;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=6956=static int stmmac_bpf(struct net_device *dev, struct netdev_bpf *bpf)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6960-\tswitch (bpf-\u003ecommand) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:6961:\tcase XDP_SETUP_PROG:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6962-\t\treturn stmmac_xdp_set_prog(priv, bpf-\u003eprog, bpf-\u003eextack);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:6963:\tcase XDP_SETUP_XSK_POOL:\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6964-\t\treturn stmmac_xdp_setup_pool(priv, bpf-\u003exsk.pool,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=6971=static int stmmac_xdp_xmit(struct net_device *dev, int num_frames,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6982-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:6983:\tif (unlikely(flags \u0026 ~XDP_XMIT_FLAGS_MASK))\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6984-\t\treturn -EINVAL;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6996-\t\tres = stmmac_xdp_xmit_xdpf(priv, queue, frames[i], true);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:6997:\t\tif (res == STMMAC_XDP_CONSUMED)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6998-\t\t\tbreak;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7002-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7003:\tif (flags \u0026 XDP_XMIT_FLUSH) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7004-\t\tstmmac_flush_tx_descriptors(priv, queue);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=7114=void stmmac_xdp_release(struct net_device *dev)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7133-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7134:\t/* Drain leftover XDP buffers */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7135-\tstmmac_drain_xdp(priv);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=7817=static int __stmmac_dvr_probe(struct device *device,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7938-\t\t\t    NETIF_F_RXCSUM;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7939:\tndev-\u003exdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7940:\t\t\t     NETDEV_XDP_ACT_XSK_ZEROCOPY;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7941-\n"
}

13/2 2026/07/08 03:44 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 53685
							output: 168
							thoughts: 838
						

Thoughts:
**XDP and STMMAC Configuration and Focus for Fuzzing**

Okay, so I'm diving into this `stmmac` driver code, specifically the XDP integration. Right off the bat, I see that XDP support is baked into `stmmac` if BPF is enabled. No dedicated `CONFIG_STMMAC_XDP` option, which simplifies things. The driver uses standard XDP actions like `XDP_PASS`, `XDP_TX`, and `XDP_REDIRECT`.  Therefore, enabling this functionality hinges on having `STMMAC_ETH` and `BPF_SYSCALL` (for XDP) turned on.  `BPF_SYSCALL` is usually a given, so that's probably already enabled.

Now, which configurations are *specific* to this modified code? I need to think about how this will compile and be testable.  `STMMAC_PLATFORM` or `STMMAC_PCI` could be useful. I'll double-check the `drivers/net/ethernet/stmicro/stmmac/Kconfig` file.  Yup, `STMMAC_ETH` is the primary one, and `STMMAC_PCI` enables PCI bus support.  I might also consider `DWMAC_INTEL` or `DWMAC_GENERIC` but I'll need to remember that these are not the main focus. Looking at the prompt, I should only list the ones that *specifically* cover the modified code.

So, `STMMAC_ETH` is the most important one. Let's see... the `STMMAC_PCI` option might be useful to ensure the PCI variant can be fuzzed, depending on whether Syzkaller has PCI fuzzing.

Alright, let's nail down the functions this change is touching: `stmmac_disable_all_queues`, `stmmac_drain_xdp`, `stmmac_xdp_release`, `stmmac_suspend`, `__stmmac_open`, and `__stmmac_release`.  Hold on, `__stmmac_open` and `__stmmac_release` are pretty standard netdev operations. `stmmac_xdp_release` specifically handles XDP release. `stmmac_suspend` deals with PM suspend.  `stmmac_disable_all_queues` and `stmmac_drain_xdp` are internal, which I'll keep in mind.

So, which of these are *good* focus symbols for fuzzing? `stmmac_xdp_release` looks promising; it's XDP-specific within `stmmac`. `stmmac_drain_xdp` and `stmmac_disable_all_queues` are also looking specific enough.

Any other configurations to consider? Nope, not that I can see.

Let's quickly confirm `stmmac_xdp_release` isn't static. Okay, `void stmmac_xdp_release(struct net_device *dev)` in `stmmac_main.c`. That's good.

So, here's the summary:

WorthFuzzing: true
FocusSymbols:
- stmmac_disable_all_queues
- stmmac_drain_xdp
- stmmac_xdp_release
- stmmac_suspend
- __stmmac_open
- __stmmac_release

EnableConfigs:
- STMMAC_ETH
- STMMAC_PCI

Reasoning: This patch addresses XDP buffer draining and new packet processing during interface down states in the `stmmac` driver. It touches core driver logic via the new `STMMAC_DOWN` flag and modifications to open/release/suspend.

Wait, is `stmmac_xdp_release` reachable? Yes, it's called from `stmmac_xdp_setup_pool` when disabling XDP. What about `stmmac_suspend`? Also reachable via the PM framework.

Right, I'm happy with that analysis. Time to call `set-results`.



14/2 2026/07/08 03:45 tool set-results
0m Args:
{
  "EnableConfigs": [
    "STMMAC_ETH",
    "STMMAC_PCI"
  ],
  "FocusSymbols": [
    "stmmac_disable_all_queues",
    "stmmac_drain_xdp",
    "stmmac_xdp_release",
    "stmmac_suspend",
    "__stmmac_open",
    "__stmmac_release"
  ],
  "Reasoning": "The patch modifies the stmmac driver to properly drain XDP buffers and prevent XDP from processing new packets when the interface is down. It introduces a new STMMAC_DOWN flag and modifies the interface open/release/suspend paths. This is a functional change to reachable core driver logic.",
  "WorthFuzzing": true
}

Results:
{
  "EnableConfigs": [
    "STMMAC_ETH",
    "STMMAC_PCI"
  ],
  "FocusSymbols": [
    "stmmac_disable_all_queues",
    "stmmac_drain_xdp",
    "stmmac_xdp_release",
    "stmmac_suspend",
    "__stmmac_open",
    "__stmmac_release"
  ],
  "Reasoning": "The patch modifies the stmmac driver to properly drain XDP buffers and prevent XDP from processing new packets when the interface is down. It introduces a new STMMAC_DOWN flag and modifies the interface open/release/suspend paths. This is a functional change to reachable core driver logic.",
  "WorthFuzzing": true
}

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