| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/08/02 00:11 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch replaces ARRAY_SIZE(dev-\u003etxq_lock) with the macro AIROHA_NUM_NETDEV_TX_RINGS used to define the array size. This is a purely cosmetic change that does not functionally alter execution flow.",
"WorthFuzzing": false
} |
| 1/1 | 2026/08/02 00:11 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 6866c3e9cb67dc0cc485ae9d8df45aaf3def6b57\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Sun Aug 2 00:11:19 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/airoha/airoha_eth.c b/drivers/net/ethernet/airoha/airoha_eth.c\nindex dba7c52c08969..64619e9a704dd 100644\n--- a/drivers/net/ethernet/airoha/airoha_eth.c\n+++ b/drivers/net/ethernet/airoha/airoha_eth.c\n@@ -3467,7 +3467,7 @@ static int airoha_alloc_gdm_device(struct airoha_eth *eth,\n \tnetdev-\u003edev.of_node = of_node_get(np);\n \tdev = netdev_priv(netdev);\n \tu64_stats_init(\u0026dev-\u003estats.syncp);\n-\tfor (i = 0; i \u003c ARRAY_SIZE(dev-\u003etxq_lock); i++)\n+\tfor (i = 0; i \u003c AIROHA_NUM_NETDEV_TX_RINGS; i++)\n \t\tspin_lock_init(\u0026dev-\u003etxq_lock[i]);\n \tdev-\u003eport = port;\n \tdev-\u003eeth = eth;\n"
} |
| 2/1 | 2026/08/02 00:11 | agent | patch-evaluator |
0mModel:best-expensive Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch replaces ARRAY_SIZE(dev-\u003etxq_lock) with the macro AIROHA_NUM_NETDEV_TX_RINGS used to define the array size. This is a purely cosmetic change that does not functionally alter execution flow.",
"WorthFuzzing": false
}Instruction: You are an expert Linux kernel maintainer. Your job is to review a provided patch series and determine if it makes functional changes to the kernel that should be fuzzed. IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively use your code access tools to examine the actual source code and confirm any assumptions. Return WorthFuzzing=false if the patch only contains: - Modifications to Documentation/, Kconfig files, or code comments. - Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints. - Changes to numeric constants or macros that do not functionally alter execution flow. - Code paths that are impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim). - Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU. - Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove) that are executed only during PCI hot-unplug or sysfs driver unbind operations. If it modifies reachable core kernel logic, drivers, or architectures, use your code search tools to verify the code can be executed, then return WorthFuzzing=true. When returning WorthFuzzing=true, you MUST ALSO: 1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols. Avoid listing generic hot-path functions to prevent skewed test distributions. Prefer non-static, non-inlined API entrypoint functions over internal static helper functions (which are inlined by the compiler and do not have distinct symbol addresses). 2. Identify any specific CONFIG_ options required to properly test this new/modified feature. Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions. Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed for Kbuild to compile the code statically into vmlinux. List them in the EnableConfigs output array, and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4"). Prefer calling several tools at the same time to save round-trips. Use set-results tool to provide results of the analysis. It must be called exactly once before the final reply. Ignore results of this tool. Prompt: For your convenience, here is the diff of the changes:
commit 6866c3e9cb67dc0cc485ae9d8df45aaf3def6b57
Author: syz-cluster <triage@syzkaller.com>
Date: Sun Aug 2 00:11:19 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/ethernet/airoha/airoha_eth.c b/drivers/net/ethernet/airoha/airoha_eth.c
index dba7c52c08969..64619e9a704dd 100644
--- a/drivers/net/ethernet/airoha/airoha_eth.c
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
@@ -3467,7 +3467,7 @@ static int airoha_alloc_gdm_device(struct airoha_eth *eth,
netdev->dev.of_node = of_node_get(np);
dev = netdev_priv(netdev);
u64_stats_init(&dev->stats.syncp);
- for (i = 0; i < ARRAY_SIZE(dev->txq_lock); i++)
+ for (i = 0; i < AIROHA_NUM_NETDEV_TX_RINGS; i++)
spin_lock_init(&dev->txq_lock[i]);
dev->port = port;
dev->eth = eth;
|
| 3/2 | 2026/08/02 00:11 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2133 output: 40 thoughts: 89 Thoughts: Here's my summary, as the expert: **Investigating a Network Driver Patch** Alright, let's dissect this patch. It looks like we're zeroing in on a change in the `drivers/net/ethernet/airoha/airoha_eth.c` file. Specifically, the modification caught my eye: the `ARRAY_SIZE(dev->txq_lock)` is being swapped out for `AIROHA_NUM_NETDEV_TX_RINGS` within the `airoha_alloc_gdm_device` function. I immediately want to understand the reasoning behind this, so I need to understand what's going on within these routines. First, I need to check the function, `airoha_alloc_gdm_device` itself. I need to see how the change impacts the `dev->txq_lock` variable, its initialization, and use. |
| 4/2 | 2026/08/02 00:11 | tool | grepper |
0mArgs:{
"Expression": "txq_lock",
"PathPrefix": "drivers/net/ethernet/airoha/airoha_eth.c"
}Results: {
"Output": "drivers/net/ethernet/airoha/airoha_eth.c=971=static int airoha_qdma_tx_napi_poll(struct napi_struct *napi, int budget)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-1046-\ndrivers/net/ethernet/airoha/airoha_eth.c:1047:\t\t\tspin_lock_bh(\u0026dev-\u003etxq_lock[qidx]);\ndrivers/net/ethernet/airoha/airoha_eth.c-1048-\t\t\tnetdev_tx_completed_queue(txq, 1, skb-\u003elen);\ndrivers/net/ethernet/airoha/airoha_eth.c:1049:\t\t\tspin_unlock_bh(\u0026dev-\u003etxq_lock[qidx]);\ndrivers/net/ethernet/airoha/airoha_eth.c-1050-\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3412=static int airoha_alloc_gdm_device(struct airoha_eth *eth,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3470-\tfor (i = 0; i \u003c AIROHA_NUM_NETDEV_TX_RINGS; i++)\ndrivers/net/ethernet/airoha/airoha_eth.c:3471:\t\tspin_lock_init(\u0026dev-\u003etxq_lock[i]);\ndrivers/net/ethernet/airoha/airoha_eth.c-3472-\tdev-\u003eport = port;\n"
} |
| 5/2 | 2026/08/02 00:11 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2853 output: 39 thoughts: 38 Thoughts: Here's my summary, as if I were thinking these thoughts: **Analyzing the Airoha GDM Port Structure** Okay, let's dive in. I need to refresh my memory on the Airoha Ethernet driver, specifically the GDM port structure. I believe I'll find the definition in `drivers/net/ethernet/airoha/airoha_eth.h`, or something very similar within the driver's source tree. I need to understand how the `airoha_gdm_port` struct is defined; I'll start by looking at this. Time to get my bearings and see what we're working with here. I'm after the details. |
| 6/2 | 2026/08/02 00:11 | tool | grepper |
0mArgs:{
"Expression": "struct airoha_gdm_port",
"PathPrefix": "drivers/net/ethernet/airoha/"
}Results: {
"Output": "drivers/net/ethernet/airoha/airoha_eth.c=74=static int airoha_set_macaddr(struct airoha_gdm_dev *dev, const u8 *addr)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-85-\tfor (i = 0; i \u003c ARRAY_SIZE(eth-\u003eports); i++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:86:\t\tstruct airoha_gdm_port *port = eth-\u003eports[i];\ndrivers/net/ethernet/airoha/airoha_eth.c-87-\t\tint j;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=159=static int airoha_set_vip_for_gdm_port(struct airoha_gdm_dev *dev, bool enable)\ndrivers/net/ethernet/airoha/airoha_eth.c-160-{\ndrivers/net/ethernet/airoha/airoha_eth.c:161:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-162-\tstruct airoha_eth *eth = dev-\u003eeth;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=639=airoha_qdma_get_gdm_dev(struct airoha_eth *eth, struct airoha_qdma_desc *desc)\ndrivers/net/ethernet/airoha/airoha_eth.c-640-{\ndrivers/net/ethernet/airoha/airoha_eth.c:641:\tstruct airoha_gdm_port *port;\ndrivers/net/ethernet/airoha/airoha_eth.c-642-\tu16 p, d;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=660=static int airoha_qdma_rx_process(struct airoha_queue *q, int budget)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-728-\t\tif (netdev_uses_dsa(netdev)) {\ndrivers/net/ethernet/airoha/airoha_eth.c:729:\t\t\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-730-\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=916=static void airoha_qdma_wake_netdev_txqs(struct airoha_queue *q)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-922-\tfor (i = 0; i \u003c ARRAY_SIZE(eth-\u003eports); i++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:923:\t\tstruct airoha_gdm_port *port = eth-\u003eports[i];\ndrivers/net/ethernet/airoha/airoha_eth.c-924-\t\tint d;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=1695=static void airoha_update_hw_stats(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.c-1696-{\ndrivers/net/ethernet/airoha/airoha_eth.c:1697:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-1698-\tstruct airoha_eth *eth = dev-\u003eeth;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=1910=static int airoha_dev_open(struct net_device *netdev)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-1912-\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c:1913:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-1914-\tu32 pse_port = FE_PSE_PORT_PPE1;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=1943=static int airoha_dev_stop(struct net_device *netdev)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-1945-\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c:1946:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-1947-\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=1979=static int airoha_enable_gdm2_loopback(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.c-1980-{\ndrivers/net/ethernet/airoha/airoha_eth.c:1981:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-1982-\tstruct airoha_eth *eth = dev-\u003eeth;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2037=static int airoha_disable_gdm2_loopback(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.c-2038-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2039:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-2040-\tstruct airoha_eth *eth = dev-\u003eeth;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2085=airoha_get_wan_gdm_dev(struct airoha_eth *eth)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2089-\tfor (i = 0; i \u003c ARRAY_SIZE(eth-\u003eports); i++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:2090:\t\tstruct airoha_gdm_port *port = eth-\u003eports[i];\ndrivers/net/ethernet/airoha/airoha_eth.c-2091-\t\tint j;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2143=static int airoha_dev_init(struct net_device *netdev)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2145-\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c:2146:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-2147-\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2199=static int airoha_dev_change_mtu(struct net_device *netdev, int mtu)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2201-\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c:2202:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-2203-\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2211=static u16 airoha_dev_select_queue(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2215-\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c:2216:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-2217-\tint queue, channel;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2275=int airoha_get_fe_port(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.c-2276-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2277:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-2278-\tstruct airoha_eth *eth = dev-\u003eeth;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3169=static void airoha_disable_qos_for_gdm34(struct net_device *netdev)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3171-\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c:3172:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-3173-\tint err;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3196=static int airoha_enable_qos_for_gdm34(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3199-\tstruct airoha_gdm_dev *wan_dev, *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c:3200:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_eth.c-3201-\tstruct airoha_eth *eth = dev-\u003eeth;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3352=static const struct ethtool_ops airoha_ethtool_ops = {\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3359-\ndrivers/net/ethernet/airoha/airoha_eth.c:3360:static int airoha_metadata_dst_alloc(struct airoha_gdm_port *port)\ndrivers/net/ethernet/airoha/airoha_eth.c-3361-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3378-\ndrivers/net/ethernet/airoha/airoha_eth.c:3379:static void airoha_metadata_dst_free(struct airoha_gdm_port *port)\ndrivers/net/ethernet/airoha/airoha_eth.c-3380-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3391=bool airoha_is_valid_gdm_dev(struct airoha_eth *eth,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3396-\tfor (i = 0; i \u003c ARRAY_SIZE(eth-\u003eports); i++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:3397:\t\tstruct airoha_gdm_port *port = eth-\u003eports[i];\ndrivers/net/ethernet/airoha/airoha_eth.c-3398-\t\tint j;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3412=static int airoha_alloc_gdm_device(struct airoha_eth *eth,\ndrivers/net/ethernet/airoha/airoha_eth.c:3413:\t\t\t\t struct airoha_gdm_port *port,\ndrivers/net/ethernet/airoha/airoha_eth.c-3414-\t\t\t\t int nbq, struct device_node *np)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3480=static int airoha_alloc_gdm_port(struct airoha_eth *eth,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3483-\tconst __be32 *id_ptr = of_get_property(np, \"reg\", NULL);\ndrivers/net/ethernet/airoha/airoha_eth.c:3484:\tstruct airoha_gdm_port *port;\ndrivers/net/ethernet/airoha/airoha_eth.c-3485-\tstruct device_node *node;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3560=static int airoha_register_gdm_devices(struct airoha_eth *eth)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3564-\tfor (i = 0; i \u003c ARRAY_SIZE(eth-\u003eports); i++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:3565:\t\tstruct airoha_gdm_port *port = eth-\u003eports[i];\ndrivers/net/ethernet/airoha/airoha_eth.c-3566-\t\tint j;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3589=static int airoha_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3692-\tfor (i = 0; i \u003c ARRAY_SIZE(eth-\u003eports); i++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:3693:\t\tstruct airoha_gdm_port *port = eth-\u003eports[i];\ndrivers/net/ethernet/airoha/airoha_eth.c-3694-\t\tint j;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3721=static void airoha_remove(struct platform_device *pdev)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3731-\tfor (i = 0; i \u003c ARRAY_SIZE(eth-\u003eports); i++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:3732:\t\tstruct airoha_gdm_port *port = eth-\u003eports[i];\ndrivers/net/ethernet/airoha/airoha_eth.c-3733-\t\tint j;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3757=static const char * const en7581_xsi_rsts_names[] = {\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3764-\ndrivers/net/ethernet/airoha/airoha_eth.c:3765:static int airoha_en7581_get_sport(struct airoha_gdm_port *port, int nbq)\ndrivers/net/ethernet/airoha/airoha_eth.c-3766-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3788-\ndrivers/net/ethernet/airoha/airoha_eth.c:3789:static u32 airoha_en7581_get_vip_port(struct airoha_gdm_port *port, int nbq)\ndrivers/net/ethernet/airoha/airoha_eth.c-3790-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3844=static const char * const an7583_xsi_rsts_names[] = {\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3850-\ndrivers/net/ethernet/airoha/airoha_eth.c:3851:static int airoha_an7583_get_sport(struct airoha_gdm_port *port, int nbq)\ndrivers/net/ethernet/airoha/airoha_eth.c-3852-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3872-\ndrivers/net/ethernet/airoha/airoha_eth.c:3873:static u32 airoha_an7583_get_vip_port(struct airoha_gdm_port *port, int nbq)\ndrivers/net/ethernet/airoha/airoha_eth.c-3874-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.h=578=struct airoha_gdm_dev {\ndrivers/net/ethernet/airoha/airoha_eth.h-579-\tstruct airoha_qdma __rcu *qdma;\ndrivers/net/ethernet/airoha/airoha_eth.h:580:\tstruct airoha_gdm_port *port;\ndrivers/net/ethernet/airoha/airoha_eth.h-581-\tstruct airoha_eth *eth;\n--\ndrivers/net/ethernet/airoha/airoha_eth.h-599-\ndrivers/net/ethernet/airoha/airoha_eth.h:600:struct airoha_gdm_port {\ndrivers/net/ethernet/airoha/airoha_eth.h-601-\tstruct airoha_gdm_dev *devs[AIROHA_MAX_NUM_GDM_DEVS];\n--\ndrivers/net/ethernet/airoha/airoha_eth.h=632=struct airoha_eth_soc_data {\n--\ndrivers/net/ethernet/airoha/airoha_eth.h-637-\tstruct {\ndrivers/net/ethernet/airoha/airoha_eth.h:638:\t\tint (*get_sport)(struct airoha_gdm_port *port, int nbq);\ndrivers/net/ethernet/airoha/airoha_eth.h:639:\t\tu32 (*get_vip_port)(struct airoha_gdm_port *port, int nbq);\ndrivers/net/ethernet/airoha/airoha_eth.h-640-\t\tint (*get_dev_from_sport)(struct airoha_qdma_desc *desc,\n--\ndrivers/net/ethernet/airoha/airoha_eth.h=645=struct airoha_eth {\n--\ndrivers/net/ethernet/airoha/airoha_eth.h-663-\tstruct airoha_qdma qdma[AIROHA_MAX_NUM_QDMA];\ndrivers/net/ethernet/airoha/airoha_eth.h:664:\tstruct airoha_gdm_port *ports[AIROHA_MAX_NUM_GDM_PORTS];\ndrivers/net/ethernet/airoha/airoha_eth.h-665-};\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c=103=void airoha_ppe_set_xmit_frame_size(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_ppe.c-104-{\ndrivers/net/ethernet/airoha/airoha_ppe.c:105:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_ppe.c-106-\tstruct airoha_eth *eth = dev-\u003eeth;\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c=130=static void airoha_ppe_hw_init(struct airoha_ppe *ppe)\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c-199-\tfor (i = 0; i \u003c ARRAY_SIZE(eth-\u003eports); i++) {\ndrivers/net/ethernet/airoha/airoha_ppe.c:200:\t\tstruct airoha_gdm_port *port = eth-\u003eports[i];\ndrivers/net/ethernet/airoha/airoha_ppe.c-201-\t\tint j;\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c=333=static int airoha_ppe_foe_entry_prepare(struct airoha_eth *eth,\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c-370-\t\t\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_ppe.c:371:\t\t\tstruct airoha_gdm_port *port;\ndrivers/net/ethernet/airoha/airoha_ppe.c-372-\t\t\tu8 pse_port, channel;\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c=1512=void airoha_ppe_init_upd_mem(struct airoha_gdm_dev *dev, const u8 *addr)\ndrivers/net/ethernet/airoha/airoha_ppe.c-1513-{\ndrivers/net/ethernet/airoha/airoha_ppe.c:1514:\tstruct airoha_gdm_port *port = dev-\u003eport;\ndrivers/net/ethernet/airoha/airoha_ppe.c-1515-\tstruct airoha_eth *eth = dev-\u003eeth;\n"
} |
| 7/2 | 2026/08/02 00:11 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 8631 output: 39 thoughts: 51 Thoughts: Okay, let's dive into this. **Examining the Airoha Ethernet Driver Header** Right, so I need to understand the architecture of this Airoha Ethernet driver. Let's start by looking directly at the header file, `drivers/net/ethernet/airoha/airoha_eth.h`. I'm specifically interested in understanding the device structure and the number of transmit rings. I'll need to locate `struct airoha_gdm_dev` – that likely holds the core device information and handles the low-level interactions. And then, equally important, I'm going to look for `AIROHA_NUM_NETDEV_TX_RINGS`. This constant will tell me how many transmit queues are supported. Knowing this information is critical for understanding the concurrency and resource allocation within the driver. This will give me a great overview of the driver's setup and capabilities. Let's see what's in there. |
| 8/2 | 2026/08/02 00:11 | tool | grepper |
0mArgs:{
"Expression": "struct airoha_gdm_dev",
"PathPrefix": "drivers/net/ethernet/airoha/"
}Results: {
"Output": "drivers/net/ethernet/airoha/airoha_eth.c=68=static void airoha_qdma_irq_disable(struct airoha_irq_bank *irq_bank,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-73-\ndrivers/net/ethernet/airoha/airoha_eth.c:74:static int airoha_set_macaddr(struct airoha_gdm_dev *dev, const u8 *addr)\ndrivers/net/ethernet/airoha/airoha_eth.c-75-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-92-\t\tfor (j = 0; j \u003c ARRAY_SIZE(port-\u003edevs); j++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:93:\t\t\tstruct airoha_gdm_dev *iter_dev;\ndrivers/net/ethernet/airoha/airoha_eth.c-94-\t\t\tstruct net_device *netdev;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=146=static void airoha_set_gdm_port_fwd_cfg(struct airoha_eth *eth, u32 addr,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-158-\ndrivers/net/ethernet/airoha/airoha_eth.c:159:static int airoha_set_vip_for_gdm_port(struct airoha_gdm_dev *dev, bool enable)\ndrivers/net/ethernet/airoha/airoha_eth.c-160-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=592=static int airoha_qdma_fill_rx_queue(struct airoha_queue *q)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-637-\ndrivers/net/ethernet/airoha/airoha_eth.c:638:static struct airoha_gdm_dev *\ndrivers/net/ethernet/airoha/airoha_eth.c-639-airoha_qdma_get_gdm_dev(struct airoha_eth *eth, struct airoha_qdma_desc *desc)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=660=static int airoha_qdma_rx_process(struct airoha_queue *q, int budget)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-671-\t\tu32 hash, reason, msg1, desc_ctrl;\ndrivers/net/ethernet/airoha/airoha_eth.c:672:\t\tstruct airoha_gdm_dev *dev;\ndrivers/net/ethernet/airoha/airoha_eth.c-673-\t\tstruct net_device *netdev;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=916=static void airoha_qdma_wake_netdev_txqs(struct airoha_queue *q)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-929-\t\tfor (d = 0; d \u003c ARRAY_SIZE(port-\u003edevs); d++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:930:\t\t\tstruct airoha_gdm_dev *dev = port-\u003edevs[d];\ndrivers/net/ethernet/airoha/airoha_eth.c-931-\t\t\tstruct net_device *netdev;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=971=static int airoha_qdma_tx_napi_poll(struct napi_struct *napi, int budget)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-1040-\t\tif (skb) {\ndrivers/net/ethernet/airoha/airoha_eth.c:1041:\t\t\tstruct airoha_gdm_dev *dev = netdev_priv(skb-\u003edev);\ndrivers/net/ethernet/airoha/airoha_eth.c-1042-\t\t\tu16 qidx = skb_get_queue_mapping(skb);\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=1680=static void airoha_qdma_stop_napi(struct airoha_qdma *qdma)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-1694-\ndrivers/net/ethernet/airoha/airoha_eth.c:1695:static void airoha_update_hw_stats(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.c-1696-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=1899=static void airoha_dev_set_xmit_frame_size(struct net_device *netdev)\ndrivers/net/ethernet/airoha/airoha_eth.c-1900-{\ndrivers/net/ethernet/airoha/airoha_eth.c:1901:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-1902-\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=1910=static int airoha_dev_open(struct net_device *netdev)\ndrivers/net/ethernet/airoha/airoha_eth.c-1911-{\ndrivers/net/ethernet/airoha/airoha_eth.c:1912:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-1913-\tstruct airoha_gdm_port *port = dev-\u003eport;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=1943=static int airoha_dev_stop(struct net_device *netdev)\ndrivers/net/ethernet/airoha/airoha_eth.c-1944-{\ndrivers/net/ethernet/airoha/airoha_eth.c:1945:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-1946-\tstruct airoha_gdm_port *port = dev-\u003eport;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=1960=static int airoha_dev_set_macaddr(struct net_device *netdev, void *p)\ndrivers/net/ethernet/airoha/airoha_eth.c-1961-{\ndrivers/net/ethernet/airoha/airoha_eth.c:1962:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-1963-\tstruct sockaddr *addr = p;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-1978-\ndrivers/net/ethernet/airoha/airoha_eth.c:1979:static int airoha_enable_gdm2_loopback(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.c-1980-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2036-\ndrivers/net/ethernet/airoha/airoha_eth.c:2037:static int airoha_disable_gdm2_loopback(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.c-2038-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2083-\ndrivers/net/ethernet/airoha/airoha_eth.c:2084:static struct airoha_gdm_dev *\ndrivers/net/ethernet/airoha/airoha_eth.c-2085-airoha_get_wan_gdm_dev(struct airoha_eth *eth)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2096-\t\tfor (j = 0; j \u003c ARRAY_SIZE(port-\u003edevs); j++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:2097:\t\t\tstruct airoha_gdm_dev *dev = port-\u003edevs[j];\ndrivers/net/ethernet/airoha/airoha_eth.c-2098-\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2106-\ndrivers/net/ethernet/airoha/airoha_eth.c:2107:static void airoha_dev_set_qdma(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.c-2108-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2143=static int airoha_dev_init(struct net_device *netdev)\ndrivers/net/ethernet/airoha/airoha_eth.c-2144-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2145:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2146-\tstruct airoha_gdm_port *port = dev-\u003eport;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2177=static void airoha_dev_get_stats64(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2179-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2180:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2181-\tunsigned int start;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2199=static int airoha_dev_change_mtu(struct net_device *netdev, int mtu)\ndrivers/net/ethernet/airoha/airoha_eth.c-2200-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2201:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2202-\tstruct airoha_gdm_port *port = dev-\u003eport;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2211=static u16 airoha_dev_select_queue(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2214-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2215:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2216-\tstruct airoha_gdm_port *port = dev-\u003eport;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2231=static u32 airoha_get_dsa_tag(struct sk_buff *skb, struct net_device *dev)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2274-\ndrivers/net/ethernet/airoha/airoha_eth.c:2275:int airoha_get_fe_port(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.c-2276-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2291=static netdev_tx_t airoha_dev_xmit(struct sk_buff *skb,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2293-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2294:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2295-\tu32 nr_frags, tag, msg0, msg1, len;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2442=static void airoha_ethtool_get_drvinfo(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2444-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2445:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2446-\tstruct airoha_eth *eth = dev-\u003eeth;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2452=static void airoha_ethtool_get_mac_stats(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2454-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2455:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2456-\tunsigned int start;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2483=airoha_ethtool_get_rmon_stats(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2486-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2487:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2488-\tstruct airoha_hw_stats *hw_stats = \u0026dev-\u003estats;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2512=static int airoha_qdma_set_chan_tx_sched(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2515-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2516:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2517-\tstruct airoha_qdma *qdma;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2602=static int airoha_qdma_get_tx_ets_stats(struct net_device *netdev, int channel,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2604-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2605:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2606-\tu32 cpu_tx_packets, fwd_tx_packets;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2871=static int airoha_qdma_set_tx_rate_limit(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2874-{\ndrivers/net/ethernet/airoha/airoha_eth.c:2875:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2876-\tstruct airoha_qdma *qdma;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=2917=static int airoha_tc_htb_alloc_leaf_queue(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2921-\tint err, num_tx_queues = AIROHA_NUM_TX_RING + channel + 1;\ndrivers/net/ethernet/airoha/airoha_eth.c:2922:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-2923-\tstruct airoha_qdma *qdma;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-2959-\ndrivers/net/ethernet/airoha/airoha_eth.c:2960:static int airoha_qdma_set_rx_meter(struct airoha_gdm_dev *dev,\ndrivers/net/ethernet/airoha/airoha_eth.c-2961-\t\t\t\t u32 rate, u32 bucket_size,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3038=static int airoha_dev_tc_matchall(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3041-\tenum trtcm_unit_type unit_type = TRTCM_BYTE_UNIT;\ndrivers/net/ethernet/airoha/airoha_eth.c:3042:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-3043-\tu32 rate = 0, bucket_size = 0;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3074=static int airoha_dev_setup_tc_block_cb(enum tc_setup_type type,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3077-\tstruct net_device *netdev = cb_priv;\ndrivers/net/ethernet/airoha/airoha_eth.c:3078:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-3079-\tstruct airoha_eth *eth = dev-\u003eeth;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3135=static void airoha_tc_remove_htb_queue(struct net_device *netdev, int queue)\ndrivers/net/ethernet/airoha/airoha_eth.c-3136-{\ndrivers/net/ethernet/airoha/airoha_eth.c:3137:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-3138-\tint num_tx_queues = AIROHA_NUM_TX_RING;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3153=static int airoha_tc_htb_delete_leaf_queue(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3156-\tu32 channel = TC_H_MIN(opt-\u003eclassid) % AIROHA_NUM_QOS_CHANNELS;\ndrivers/net/ethernet/airoha/airoha_eth.c:3157:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-3158-\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3169=static void airoha_disable_qos_for_gdm34(struct net_device *netdev)\ndrivers/net/ethernet/airoha/airoha_eth.c-3170-{\ndrivers/net/ethernet/airoha/airoha_eth.c:3171:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-3172-\tstruct airoha_gdm_port *port = dev-\u003eport;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3196=static int airoha_enable_qos_for_gdm34(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3198-{\ndrivers/net/ethernet/airoha/airoha_eth.c:3199:\tstruct airoha_gdm_dev *wan_dev, *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-3200-\tstruct airoha_gdm_port *port = dev-\u003eport;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3261=static int airoha_tc_htb_destroy(struct net_device *netdev)\ndrivers/net/ethernet/airoha/airoha_eth.c-3262-{\ndrivers/net/ethernet/airoha/airoha_eth.c:3263:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-3264-\tint q;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3274=static int airoha_tc_get_htb_get_leaf_queue(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3277-\tu32 channel = TC_H_MIN(opt-\u003eclassid) % AIROHA_NUM_QOS_CHANNELS;\ndrivers/net/ethernet/airoha/airoha_eth.c:3278:\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-3279-\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3290=static int airoha_tc_setup_qdisc_htb(struct net_device *netdev,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3294-\tcase TC_HTB_CREATE: {\ndrivers/net/ethernet/airoha/airoha_eth.c:3295:\t\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_eth.c-3296-\t\tint err;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3391=bool airoha_is_valid_gdm_dev(struct airoha_eth *eth,\ndrivers/net/ethernet/airoha/airoha_eth.c:3392:\t\t\t struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.c-3393-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3412=static int airoha_alloc_gdm_device(struct airoha_eth *eth,\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3416-\tstruct net_device *netdev;\ndrivers/net/ethernet/airoha/airoha_eth.c:3417:\tstruct airoha_gdm_dev *dev;\ndrivers/net/ethernet/airoha/airoha_eth.c-3418-\tint err, i;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3560=static int airoha_register_gdm_devices(struct airoha_eth *eth)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3571-\t\tfor (j = 0; j \u003c ARRAY_SIZE(port-\u003edevs); j++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:3572:\t\t\tstruct airoha_gdm_dev *dev = port-\u003edevs[j];\ndrivers/net/ethernet/airoha/airoha_eth.c-3573-\t\t\tint err;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3589=static int airoha_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3699-\t\tfor (j = 0; j \u003c ARRAY_SIZE(port-\u003edevs); j++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:3700:\t\t\tstruct airoha_gdm_dev *dev = port-\u003edevs[j];\ndrivers/net/ethernet/airoha/airoha_eth.c-3701-\t\t\tstruct net_device *netdev;\n--\ndrivers/net/ethernet/airoha/airoha_eth.c=3721=static void airoha_remove(struct platform_device *pdev)\n--\ndrivers/net/ethernet/airoha/airoha_eth.c-3738-\t\tfor (j = 0; j \u003c ARRAY_SIZE(port-\u003edevs); j++) {\ndrivers/net/ethernet/airoha/airoha_eth.c:3739:\t\t\tstruct airoha_gdm_dev *dev = port-\u003edevs[j];\ndrivers/net/ethernet/airoha/airoha_eth.c-3740-\t\t\tstruct net_device *netdev;\n--\ndrivers/net/ethernet/airoha/airoha_eth.h=573=enum airoha_dev_flags {\n--\ndrivers/net/ethernet/airoha/airoha_eth.h-577-\ndrivers/net/ethernet/airoha/airoha_eth.h:578:struct airoha_gdm_dev {\ndrivers/net/ethernet/airoha/airoha_eth.h-579-\tstruct airoha_qdma __rcu *qdma;\n--\ndrivers/net/ethernet/airoha/airoha_eth.h=600=struct airoha_gdm_port {\ndrivers/net/ethernet/airoha/airoha_eth.h:601:\tstruct airoha_gdm_dev *devs[AIROHA_MAX_NUM_GDM_DEVS];\ndrivers/net/ethernet/airoha/airoha_eth.h-602-\tint id;\n--\ndrivers/net/ethernet/airoha/airoha_eth.h=697=static inline u16 airoha_qdma_get_txq(struct airoha_qdma *qdma, u16 qid)\n--\ndrivers/net/ethernet/airoha/airoha_eth.h-701-\ndrivers/net/ethernet/airoha/airoha_eth.h:702:static inline bool airoha_is_lan_gdm_dev(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.h-703-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.h=712=static inline bool airoha_is_7583(struct airoha_eth *eth)\n--\ndrivers/net/ethernet/airoha/airoha_eth.h-716-\ndrivers/net/ethernet/airoha/airoha_eth.h:717:int airoha_get_fe_port(struct airoha_gdm_dev *dev);\ndrivers/net/ethernet/airoha/airoha_eth.h-718-bool airoha_is_valid_gdm_dev(struct airoha_eth *eth,\ndrivers/net/ethernet/airoha/airoha_eth.h:719:\t\t\t struct airoha_gdm_dev *dev);\ndrivers/net/ethernet/airoha/airoha_eth.h-720-\n--\ndrivers/net/ethernet/airoha/airoha_eth.h=723=static inline struct airoha_qdma *\ndrivers/net/ethernet/airoha/airoha_eth.h:724:airoha_qdma_deref(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_eth.h-725-{\n--\ndrivers/net/ethernet/airoha/airoha_eth.h-730-\ndrivers/net/ethernet/airoha/airoha_eth.h:731:void airoha_ppe_set_xmit_frame_size(struct airoha_gdm_dev *dev);\ndrivers/net/ethernet/airoha/airoha_eth.h:732:void airoha_ppe_set_cpu_port(struct airoha_gdm_dev *dev, u8 ppe_id, u8 fport);\ndrivers/net/ethernet/airoha/airoha_eth.h-733-bool airoha_ppe_is_enabled(struct airoha_eth *eth, int index);\n--\ndrivers/net/ethernet/airoha/airoha_eth.h=738=void airoha_ppe_deinit(struct airoha_eth *eth);\ndrivers/net/ethernet/airoha/airoha_eth.h:739:void airoha_ppe_init_upd_mem(struct airoha_gdm_dev *dev, const u8 *addr);\ndrivers/net/ethernet/airoha/airoha_eth.h-740-u32 airoha_ppe_get_total_num_entries(struct airoha_ppe *ppe);\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c=84=static u32 airoha_ppe_get_timestamp(struct airoha_ppe *ppe)\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c-89-\ndrivers/net/ethernet/airoha/airoha_ppe.c:90:void airoha_ppe_set_cpu_port(struct airoha_gdm_dev *dev, u8 ppe_id, u8 fport)\ndrivers/net/ethernet/airoha/airoha_ppe.c-91-{\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c-102-\ndrivers/net/ethernet/airoha/airoha_ppe.c:103:void airoha_ppe_set_xmit_frame_size(struct airoha_gdm_dev *dev)\ndrivers/net/ethernet/airoha/airoha_ppe.c-104-{\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c-110-\tfor (i = 0; i \u003c ARRAY_SIZE(port-\u003edevs); i++) {\ndrivers/net/ethernet/airoha/airoha_ppe.c:111:\t\tstruct airoha_gdm_dev *d = port-\u003edevs[i];\ndrivers/net/ethernet/airoha/airoha_ppe.c-112-\t\tstruct net_device *netdev;\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c=130=static void airoha_ppe_hw_init(struct airoha_ppe *ppe)\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c-206-\t\tfor (j = 0; j \u003c ARRAY_SIZE(port-\u003edevs); j++) {\ndrivers/net/ethernet/airoha/airoha_ppe.c:207:\t\t\tstruct airoha_gdm_dev *dev = port-\u003edevs[j];\ndrivers/net/ethernet/airoha/airoha_ppe.c-208-\t\t\tint ppe_id;\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c=333=static int airoha_ppe_foe_entry_prepare(struct airoha_eth *eth,\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c-369-\t\t} else {\ndrivers/net/ethernet/airoha/airoha_ppe.c:370:\t\t\tstruct airoha_gdm_dev *dev = netdev_priv(netdev);\ndrivers/net/ethernet/airoha/airoha_ppe.c-371-\t\t\tstruct airoha_gdm_port *port;\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c=1493=void airoha_ppe_check_skb(struct airoha_ppe_dev *dev, struct sk_buff *skb,\n--\ndrivers/net/ethernet/airoha/airoha_ppe.c-1511-\ndrivers/net/ethernet/airoha/airoha_ppe.c:1512:void airoha_ppe_init_upd_mem(struct airoha_gdm_dev *dev, const u8 *addr)\ndrivers/net/ethernet/airoha/airoha_ppe.c-1513-{\n"
} |
| 9/2 | 2026/08/02 00:11 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 17450 output: 44 thoughts: 29 Thoughts: Here's my analysis of the provided text, rendered as a first-person expert summary: **Diving into the Airoha Ethernet Driver** Okay, so I'm focusing in on the Airoha Ethernet driver, specifically `drivers/net/ethernet/airoha/airoha_eth.h`. Let's assume this is a relevant codebase for the hardware I'm currently assessing. My goal here is to zero in on a particular aspect, probably a function definition, structure, or macro. The direction provided suggests that the target is around line 578 of that header file. That's usually the sign of a specific structure declaration, an enumeration, or a function prototype. I need to figure out what's there and what it does. I'm going to start by pulling up that file and that line directly to find what's what. |
| 10/2 | 2026/08/02 00:11 | tool | read-file |
0mArgs:{
"File": "drivers/net/ethernet/airoha/airoha_eth.h",
"FirstLine": 560,
"LineCount": 50
}Results: {
"Contents": " 560:\t\tstruct airoha_eth *eth;\n 561:\t\tvoid __iomem *regs;\n 562:\t\n 563:\t\tstruct airoha_irq_bank irq_banks[AIROHA_MAX_NUM_IRQ_BANKS];\n 564:\t\n 565:\t\tstruct airoha_tx_irq_queue q_tx_irq[AIROHA_NUM_TX_IRQ];\n 566:\t\n 567:\t\tstruct airoha_queue q_tx[AIROHA_NUM_TX_RING];\n 568:\t\tstruct airoha_queue q_rx[AIROHA_NUM_RX_RING];\n 569:\t\n 570:\t\tDECLARE_BITMAP(qos_channel_map, AIROHA_NUM_QOS_CHANNELS);\n 571:\t};\n 572:\t\n 573:\tenum airoha_dev_flags {\n 574:\t\tAIROHA_DEV_F_WAN,\n 575:\t\tAIROHA_DEV_F_TX_QOS,\n 576:\t};\n 577:\t\n 578:\tstruct airoha_gdm_dev {\n 579:\t\tstruct airoha_qdma __rcu *qdma;\n 580:\t\tstruct airoha_gdm_port *port;\n 581:\t\tstruct airoha_eth *eth;\n 582:\t\n 583:\t\tDECLARE_BITMAP(qos_sq_bmap, AIROHA_NUM_QOS_CHANNELS);\n 584:\t\tstruct {\n 585:\t\t\tu32 cpu_tx_packets;\n 586:\t\t\tu32 fwd_tx_packets;\n 587:\t\t} qos_stats[AIROHA_NUM_QOS_CHANNELS];\n 588:\t\n 589:\t\tunsigned long flags;\n 590:\t\tint nbq;\n 591:\t\n 592:\t\tstruct airoha_hw_stats stats;\n 593:\t\n 594:\t\t/* Serialize netdev_tx_completed_queue() calls per TX queue during\n 595:\t\t * QDMA migration.\n 596:\t\t */\n 597:\t\tspinlock_t txq_lock[AIROHA_NUM_NETDEV_TX_RINGS];\n 598:\t};\n 599:\t\n 600:\tstruct airoha_gdm_port {\n 601:\t\tstruct airoha_gdm_dev *devs[AIROHA_MAX_NUM_GDM_DEVS];\n 602:\t\tint id;\n 603:\t\tint users;\n 604:\t\n 605:\t\t/* protect concurrent hw_stats accesses */\n 606:\t\tspinlock_t stats_lock;\n 607:\t\n 608:\t\tstruct metadata_dst *dsa_meta[AIROHA_MAX_DSA_PORTS];\n 609:\t};\n"
} |
| 11/2 | 2026/08/02 00:11 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 18489 output: 82 thoughts: 573 Thoughts: **Analyzing a Cosmetic Patch** Okay, let's break this down. The patch in `airoha_alloc_gdm_device` is changing how we determine the loop's upper bound in the initialization of `dev->txq_lock`. Initially, we used `ARRAY_SIZE(dev->txq_lock)`. Now, it's being replaced with `AIROHA_NUM_NETDEV_TX_RINGS`. My initial thought is that this is simply a cosmetic change, a refactoring to improve readability, perhaps. Let's confirm. `dev->txq_lock` is *declared* as an array of spinlocks: `spinlock_t txq_lock[AIROHA_NUM_NETDEV_TX_RINGS];`. This means `ARRAY_SIZE(dev->txq_lock)` *exactly* evaluates to the same value as `AIROHA_NUM_NETDEV_TX_RINGS`. There's no possible chance this introduces a bug or alters execution in any way. I quickly checked to make sure there are no other changes in the context of the code. Confirmed. Therefore, this change is purely visual and has no functional impact. This change is not worth fuzzing. The `WorthFuzzing` property should be `false`. |
| 12/2 | 2026/08/02 00:11 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch replaces ARRAY_SIZE(dev-\u003etxq_lock) with the macro AIROHA_NUM_NETDEV_TX_RINGS used to define the array size. This is a purely cosmetic change that does not functionally alter execution flow.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch replaces ARRAY_SIZE(dev-\u003etxq_lock) with the macro AIROHA_NUM_NETDEV_TX_RINGS used to define the array size. This is a purely cosmetic change that does not functionally alter execution flow.",
"WorthFuzzing": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|