| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/07/25 07:00 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the i40e driver (Intel 40 Gigabit Ethernet / XL710), which requires physical PCIe hardware not emulated in standard QEMU environments. Therefore, the modified code is unreachable during fuzzing in virtualized environments.",
"WorthFuzzing": false
} |
| 1/1 | 2026/07/25 07:00 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit f5f92f58008ad4323185576cfe25c0e58f71525d\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Sat Jul 25 07:00:10 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c b/drivers/net/ethernet/intel/i40e/i40e_xsk.c\nindex 9f47388eaba538..13932b36142db4 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c\n@@ -3,6 +3,7 @@\n \n #include \u003clinux/bpf_trace.h\u003e\n #include \u003clinux/unroll.h\u003e\n+#include \u003cnet/xdp.h\u003e\n #include \u003cnet/xdp_sock_drv.h\u003e\n #include \"i40e_txrx_common.h\"\n #include \"i40e_xsk.h\"\n@@ -277,70 +278,6 @@ bool i40e_alloc_rx_buffers_zc(struct i40e_ring *rx_ring, u16 count)\n \treturn count == nb_buffs;\n }\n \n-/**\n- * i40e_construct_skb_zc - Create skbuff from zero-copy Rx buffer\n- * @rx_ring: Rx ring\n- * @xdp: xdp_buff\n- *\n- * This functions allocates a new skb from a zero-copy Rx buffer.\n- *\n- * Returns the skb, or NULL on failure.\n- **/\n-static struct sk_buff *i40e_construct_skb_zc(struct i40e_ring *rx_ring,\n-\t\t\t\t\t struct xdp_buff *xdp)\n-{\n-\tunsigned int totalsize = xdp-\u003edata_end - xdp-\u003edata_meta;\n-\tunsigned int metasize = xdp-\u003edata - xdp-\u003edata_meta;\n-\tstruct skb_shared_info *sinfo = NULL;\n-\tstruct sk_buff *skb;\n-\tu32 nr_frags = 0;\n-\n-\tif (unlikely(xdp_buff_has_frags(xdp))) {\n-\t\tsinfo = xdp_get_shared_info_from_buff(xdp);\n-\t\tnr_frags = sinfo-\u003enr_frags;\n-\t}\n-\tnet_prefetch(xdp-\u003edata_meta);\n-\n-\t/* allocate a skb to store the frags */\n-\tskb = napi_alloc_skb(\u0026rx_ring-\u003eq_vector-\u003enapi, totalsize);\n-\tif (unlikely(!skb))\n-\t\tgoto out;\n-\n-\tmemcpy(__skb_put(skb, totalsize), xdp-\u003edata_meta,\n-\t ALIGN(totalsize, sizeof(long)));\n-\n-\tif (metasize) {\n-\t\tskb_metadata_set(skb, metasize);\n-\t\t__skb_pull(skb, metasize);\n-\t}\n-\n-\tif (likely(!xdp_buff_has_frags(xdp)))\n-\t\tgoto out;\n-\n-\tfor (int i = 0; i \u003c nr_frags; i++) {\n-\t\tstruct skb_shared_info *skinfo = skb_shinfo(skb);\n-\t\tskb_frag_t *frag = \u0026sinfo-\u003efrags[i];\n-\t\tstruct page *page;\n-\t\tvoid *addr;\n-\n-\t\tpage = dev_alloc_page();\n-\t\tif (!page) {\n-\t\t\tdev_kfree_skb(skb);\n-\t\t\treturn NULL;\n-\t\t}\n-\t\taddr = page_to_virt(page);\n-\n-\t\tmemcpy(addr, skb_frag_page(frag), skb_frag_size(frag));\n-\n-\t\t__skb_fill_page_desc_noacc(skinfo, skinfo-\u003enr_frags++,\n-\t\t\t\t\t addr, 0, skb_frag_size(frag));\n-\t}\n-\n-out:\n-\txsk_buff_free(xdp);\n-\treturn skb;\n-}\n-\n static void i40e_handle_xdp_result_zc(struct i40e_ring *rx_ring,\n \t\t\t\t struct xdp_buff *xdp_buff,\n \t\t\t\t union i40e_rx_desc *rx_desc,\n@@ -372,14 +309,21 @@ static void i40e_handle_xdp_result_zc(struct i40e_ring *rx_ring,\n \t\t * BIT(I40E_RXD_QW1_ERROR_SHIFT). This is due to that\n \t\t * SBP is *not* set in PRT_SBPVSI (default not set).\n \t\t */\n-\t\tskb = i40e_construct_skb_zc(rx_ring, xdp_buff);\n+\t\tskb = xdp_build_skb_from_zc(xdp_buff);\n \t\tif (!skb) {\n+\t\t\txsk_buff_free(xdp_buff);\n \t\t\trx_ring-\u003erx_stats.alloc_buff_failed++;\n \t\t\t*rx_packets = 0;\n \t\t\t*rx_bytes = 0;\n \t\t\treturn;\n \t\t}\n \n+\t\t/*\n+\t\t * xdp_build_skb_from_zc() already ran eth_type_trans();\n+\t\t * restore the header for eth_skb_pad()/process_skb_fields().\n+\t\t */\n+\t\t__skb_push(skb, skb-\u003edata - skb_mac_header(skb));\n+\n \t\tif (eth_skb_pad(skb)) {\n \t\t\t*rx_packets = 0;\n \t\t\t*rx_bytes = 0;\n"
} |
| 2/1 | 2026/07/25 07:00 | agent | patch-evaluator |
0mModel:best-expensive Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the i40e driver (Intel 40 Gigabit Ethernet / XL710), which requires physical PCIe hardware not emulated in standard QEMU environments. Therefore, the modified code is unreachable during fuzzing in virtualized environments.",
"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 f5f92f58008ad4323185576cfe25c0e58f71525d
Author: syz-cluster <triage@syzkaller.com>
Date: Sat Jul 25 07:00:10 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c b/drivers/net/ethernet/intel/i40e/i40e_xsk.c
index 9f47388eaba538..13932b36142db4 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c
@@ -3,6 +3,7 @@
#include <linux/bpf_trace.h>
#include <linux/unroll.h>
+#include <net/xdp.h>
#include <net/xdp_sock_drv.h>
#include "i40e_txrx_common.h"
#include "i40e_xsk.h"
@@ -277,70 +278,6 @@ bool i40e_alloc_rx_buffers_zc(struct i40e_ring *rx_ring, u16 count)
return count == nb_buffs;
}
-/**
- * i40e_construct_skb_zc - Create skbuff from zero-copy Rx buffer
- * @rx_ring: Rx ring
- * @xdp: xdp_buff
- *
- * This functions allocates a new skb from a zero-copy Rx buffer.
- *
- * Returns the skb, or NULL on failure.
- **/
-static struct sk_buff *i40e_construct_skb_zc(struct i40e_ring *rx_ring,
- struct xdp_buff *xdp)
-{
- unsigned int totalsize = xdp->data_end - xdp->data_meta;
- unsigned int metasize = xdp->data - xdp->data_meta;
- struct skb_shared_info *sinfo = NULL;
- struct sk_buff *skb;
- u32 nr_frags = 0;
-
- if (unlikely(xdp_buff_has_frags(xdp))) {
- sinfo = xdp_get_shared_info_from_buff(xdp);
- nr_frags = sinfo->nr_frags;
- }
- net_prefetch(xdp->data_meta);
-
- /* allocate a skb to store the frags */
- skb = napi_alloc_skb(&rx_ring->q_vector->napi, totalsize);
- if (unlikely(!skb))
- goto out;
-
- memcpy(__skb_put(skb, totalsize), xdp->data_meta,
- ALIGN(totalsize, sizeof(long)));
-
- if (metasize) {
- skb_metadata_set(skb, metasize);
- __skb_pull(skb, metasize);
- }
-
- if (likely(!xdp_buff_has_frags(xdp)))
- goto out;
-
- for (int i = 0; i < nr_frags; i++) {
- struct skb_shared_info *skinfo = skb_shinfo(skb);
- skb_frag_t *frag = &sinfo->frags[i];
- struct page *page;
- void *addr;
-
- page = dev_alloc_page();
- if (!page) {
- dev_kfree_skb(skb);
- return NULL;
- }
- addr = page_to_virt(page);
-
- memcpy(addr, skb_frag_page(frag), skb_frag_size(frag));
-
- __skb_fill_page_desc_noacc(skinfo, skinfo->nr_frags++,
- addr, 0, skb_frag_size(frag));
- }
-
-out:
- xsk_buff_free(xdp);
- return skb;
-}
-
static void i40e_handle_xdp_result_zc(struct i40e_ring *rx_ring,
struct xdp_buff *xdp_buff,
union i40e_rx_desc *rx_desc,
@@ -372,14 +309,21 @@ static void i40e_handle_xdp_result_zc(struct i40e_ring *rx_ring,
* BIT(I40E_RXD_QW1_ERROR_SHIFT). This is due to that
* SBP is *not* set in PRT_SBPVSI (default not set).
*/
- skb = i40e_construct_skb_zc(rx_ring, xdp_buff);
+ skb = xdp_build_skb_from_zc(xdp_buff);
if (!skb) {
+ xsk_buff_free(xdp_buff);
rx_ring->rx_stats.alloc_buff_failed++;
*rx_packets = 0;
*rx_bytes = 0;
return;
}
+ /*
+ * xdp_build_skb_from_zc() already ran eth_type_trans();
+ * restore the header for eth_skb_pad()/process_skb_fields().
+ */
+ __skb_push(skb, skb->data - skb_mac_header(skb));
+
if (eth_skb_pad(skb)) {
*rx_packets = 0;
*rx_bytes = 0;
|
| 3/2 | 2026/07/25 07:00 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3264 output: 38 thoughts: 194 Thoughts: **Analyzing the i40e Patch and QEMU Reachability** Okay, so I'm looking at this patch targeting `drivers/net/ethernet/intel/i40e/i40e_xsk.c`. It looks like they've removed `i40e_construct_skb_zc` and swapped it out with `xdp_build_skb_from_zc(xdp_buff)`. That's interesting, suggesting a potential XDP optimization, probably aiming for zero-copy SKB construction within the i40e driver. This is specifically for Intel 40 Gigabit Ethernet adapters, the `i40e` driver. The immediate question I have is about how easy it'll be to test this change. Is this driver even reachable in a typical QEMU setup? I know QEMU pretty well, and I'm pretty sure it doesn't emulate the i40e. It's usually the older and more common adapters like e1000, e1000e, igb, rtl8139, and virtio-net, or those that are easier to simulate. But wait, I should double check. Let me just confirm that QEMU indeed doesn't have an i40e device. Just to be sure. |
| 4/2 | 2026/07/25 07:00 | tool | grepper |
0mArgs:{
"Expression": "i40e",
"PathPrefix": "drivers/net/ethernet/intel/i40e/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 24549 lines.\nUse more precise expression if possible.\n\ndrivers/net/ethernet/intel/i40e/Makefile-4-#\ndrivers/net/ethernet/intel/i40e/Makefile:5:# Makefile for the Intel(R) Ethernet Connection XL710 (i40e.ko) driver\ndrivers/net/ethernet/intel/i40e/Makefile-6-#\n--\ndrivers/net/ethernet/intel/i40e/Makefile=9=subdir-ccflags-y += -I$(src)\ndrivers/net/ethernet/intel/i40e/Makefile-10-\ndrivers/net/ethernet/intel/i40e/Makefile:11:obj-$(CONFIG_I40E) += i40e.o\ndrivers/net/ethernet/intel/i40e/Makefile-12-\ndrivers/net/ethernet/intel/i40e/Makefile:13:i40e-y := i40e_main.o \\\ndrivers/net/ethernet/intel/i40e/Makefile:14:\ti40e_ethtool.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:15:\ti40e_adminq.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:16:\ti40e_common.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:17:\ti40e_hmc.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:18:\ti40e_lan_hmc.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:19:\ti40e_nvm.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:20:\ti40e_debugfs.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:21:\ti40e_diag.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:22:\ti40e_txrx.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:23:\ti40e_ptp.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:24:\ti40e_ddp.o \\\ndrivers/net/ethernet/intel/i40e/Makefile:25:\ti40e_client.o \\\ndrivers/net/ethernet/intel/i40e/Makefile:26:\ti40e_virtchnl_pf.o \\\ndrivers/net/ethernet/intel/i40e/Makefile:27:\ti40e_xsk.o\t\\\ndrivers/net/ethernet/intel/i40e/Makefile:28:\ti40e_devlink.o\ndrivers/net/ethernet/intel/i40e/Makefile-29-\ndrivers/net/ethernet/intel/i40e/Makefile:30:i40e-$(CONFIG_I40E_DCB) += i40e_dcb.o i40e_dcb_nl.o\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-11-#include \u003clinux/avf/virtchnl.h\u003e\ndrivers/net/ethernet/intel/i40e/i40e.h:12:#include \u003clinux/net/intel/i40e_client.h\u003e\ndrivers/net/ethernet/intel/i40e/i40e.h-13-#include \u003cnet/devlink.h\u003e\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-15-#include \u003cnet/udp_tunnel.h\u003e\ndrivers/net/ethernet/intel/i40e/i40e.h:16:#include \"i40e_dcb.h\"\ndrivers/net/ethernet/intel/i40e/i40e.h:17:#include \"i40e_debug.h\"\ndrivers/net/ethernet/intel/i40e/i40e.h:18:#include \"i40e_devlink.h\"\ndrivers/net/ethernet/intel/i40e/i40e.h:19:#include \"i40e_io.h\"\ndrivers/net/ethernet/intel/i40e/i40e.h:20:#include \"i40e_prototype.h\"\ndrivers/net/ethernet/intel/i40e/i40e.h:21:#include \"i40e_register.h\"\ndrivers/net/ethernet/intel/i40e/i40e.h:22:#include \"i40e_txrx.h\"\ndrivers/net/ethernet/intel/i40e/i40e.h-23-\ndrivers/net/ethernet/intel/i40e/i40e.h:24:/* Useful i40e defaults */\ndrivers/net/ethernet/intel/i40e/i40e.h-25-#define I40E_MAX_VEB\t\t\t16\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-36-/* max 16 qps */\ndrivers/net/ethernet/intel/i40e/i40e.h:37:#define i40e_default_queues_per_vmdq(pf) \\\ndrivers/net/ethernet/intel/i40e/i40e.h-38-\t(test_bit(I40E_HW_CAP_RSS_AQ, (pf)-\u003ehw.caps) ? 4 : 1)\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-40-#define I40E_MAX_VF_QUEUES\t\t16\ndrivers/net/ethernet/intel/i40e/i40e.h:41:#define i40e_pf_get_max_q_per_tc(pf) \\\ndrivers/net/ethernet/intel/i40e/i40e.h-42-\t(test_bit(I40E_HW_CAP_128_QP_RSS, (pf)-\u003ehw.caps) ? 128 : 64)\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-68-#define I40E_RX_DESC(R, i)\t\\\ndrivers/net/ethernet/intel/i40e/i40e.h:69:\t(\u0026(((union i40e_rx_desc *)((R)-\u003edesc))[i]))\ndrivers/net/ethernet/intel/i40e/i40e.h-70-#define I40E_TX_DESC(R, i)\t\\\ndrivers/net/ethernet/intel/i40e/i40e.h:71:\t(\u0026(((struct i40e_tx_desc *)((R)-\u003edesc))[i]))\ndrivers/net/ethernet/intel/i40e/i40e.h-72-#define I40E_TX_CTXTDESC(R, i)\t\\\ndrivers/net/ethernet/intel/i40e/i40e.h:73:\t(\u0026(((struct i40e_tx_context_desc *)((R)-\u003edesc))[i]))\ndrivers/net/ethernet/intel/i40e/i40e.h-74-#define I40E_TX_FDIRDESC(R, i)\t\\\ndrivers/net/ethernet/intel/i40e/i40e.h:75:\t(\u0026(((struct i40e_filter_program_desc *)((R)-\u003edesc))[i]))\ndrivers/net/ethernet/intel/i40e/i40e.h-76-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-82-/* driver state flags */\ndrivers/net/ethernet/intel/i40e/i40e.h:83:enum i40e_state {\ndrivers/net/ethernet/intel/i40e/i40e.h-84-\t__I40E_TESTING,\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-119-\t__I40E_RECOVERY_MODE,\ndrivers/net/ethernet/intel/i40e/i40e.h:120:\t__I40E_VF_RESETS_DISABLED,\t/* disable resets during i40e_remove */\ndrivers/net/ethernet/intel/i40e/i40e.h-121-\t__I40E_IN_REMOVE,\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-131-/* VSI state flags */\ndrivers/net/ethernet/intel/i40e/i40e.h:132:enum i40e_vsi_state {\ndrivers/net/ethernet/intel/i40e/i40e.h-133-\t__I40E_VSI_DOWN,\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-143-\ndrivers/net/ethernet/intel/i40e/i40e.h:144:enum i40e_pf_flags {\ndrivers/net/ethernet/intel/i40e/i40e.h-145-\tI40E_FLAG_MSI_ENA,\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-190-\t * bit (I40E_AQ_PHY_ENABLE_LINK) in abilities field of\ndrivers/net/ethernet/intel/i40e/i40e.h:191:\t * i40e_aq_set_phy_config structure\ndrivers/net/ethernet/intel/i40e/i40e.h-192-\t */\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-198-\ndrivers/net/ethernet/intel/i40e/i40e.h:199:enum i40e_interrupt_policy {\ndrivers/net/ethernet/intel/i40e/i40e.h-200-\tI40E_INTERRUPT_BEST_CASE,\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-204-\ndrivers/net/ethernet/intel/i40e/i40e.h:205:struct i40e_lump_tracking {\ndrivers/net/ethernet/intel/i40e/i40e.h-206-\tu16 num_entries;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-221-\ndrivers/net/ethernet/intel/i40e/i40e.h:222:enum i40e_fd_stat_idx {\ndrivers/net/ethernet/intel/i40e/i40e.h-223-\tI40E_FD_STAT_ATR,\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-238- */\ndrivers/net/ethernet/intel/i40e/i40e.h:239:struct i40e_rx_flow_userdef {\ndrivers/net/ethernet/intel/i40e/i40e.h-240-\tbool flex_filter;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-244-\ndrivers/net/ethernet/intel/i40e/i40e.h:245:struct i40e_fdir_filter {\ndrivers/net/ethernet/intel/i40e/i40e.h-246-\tstruct hlist_node fdir_node;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-296-\ndrivers/net/ethernet/intel/i40e/i40e.h:297:struct i40e_cloud_filter {\ndrivers/net/ethernet/intel/i40e/i40e.h-298-\tstruct hlist_node cloud_node;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-332-/* DCB per TC information data structure */\ndrivers/net/ethernet/intel/i40e/i40e.h:333:struct i40e_tc_info {\ndrivers/net/ethernet/intel/i40e/i40e.h-334-\tu16\tqoffset;\t/* Queue offset from base queue */\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-339-/* TC configuration data structure */\ndrivers/net/ethernet/intel/i40e/i40e.h:340:struct i40e_tc_configuration {\ndrivers/net/ethernet/intel/i40e/i40e.h-341-\tu8\tnumtc;\t\t/* Total number of enabled TCs */\ndrivers/net/ethernet/intel/i40e/i40e.h-342-\tu8\tenabled_tc;\t/* TC map */\ndrivers/net/ethernet/intel/i40e/i40e.h:343:\tstruct i40e_tc_info tc_info[I40E_MAX_TRAFFIC_CLASS];\ndrivers/net/ethernet/intel/i40e/i40e.h-344-};\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-346-#define I40E_UDP_PORT_INDEX_UNUSED\t255\ndrivers/net/ethernet/intel/i40e/i40e.h:347:struct i40e_udp_port_config {\ndrivers/net/ethernet/intel/i40e/i40e.h-348-\t/* AdminQ command interface expects port number in Host byte order */\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-420-\ndrivers/net/ethernet/intel/i40e/i40e.h:421:struct i40e_flex_pit {\ndrivers/net/ethernet/intel/i40e/i40e.h-422-\tstruct list_head list;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-426-\ndrivers/net/ethernet/intel/i40e/i40e.h:427:struct i40e_fwd_adapter {\ndrivers/net/ethernet/intel/i40e/i40e.h-428-\tstruct net_device *netdev;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-431-\ndrivers/net/ethernet/intel/i40e/i40e.h:432:struct i40e_channel {\ndrivers/net/ethernet/intel/i40e/i40e.h-433-\tstruct list_head list;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-442-\tu8 enabled_tc;\ndrivers/net/ethernet/intel/i40e/i40e.h:443:\tstruct i40e_aqc_vsi_properties_data info;\ndrivers/net/ethernet/intel/i40e/i40e.h-444-\ndrivers/net/ethernet/intel/i40e/i40e.h-445-\tu64 max_tx_rate;\ndrivers/net/ethernet/intel/i40e/i40e.h:446:\tstruct i40e_fwd_adapter *fwd;\ndrivers/net/ethernet/intel/i40e/i40e.h-447-\ndrivers/net/ethernet/intel/i40e/i40e.h-448-\t/* track this channel belongs to which VSI */\ndrivers/net/ethernet/intel/i40e/i40e.h:449:\tstruct i40e_vsi *parent_vsi;\ndrivers/net/ethernet/intel/i40e/i40e.h-450-};\ndrivers/net/ethernet/intel/i40e/i40e.h-451-\ndrivers/net/ethernet/intel/i40e/i40e.h:452:struct i40e_ptp_pins_settings;\ndrivers/net/ethernet/intel/i40e/i40e.h-453-\ndrivers/net/ethernet/intel/i40e/i40e.h:454:static inline bool i40e_is_channel_macvlan(struct i40e_channel *ch)\ndrivers/net/ethernet/intel/i40e/i40e.h-455-{\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-458-\ndrivers/net/ethernet/intel/i40e/i40e.h:459:static inline const u8 *i40e_channel_mac(struct i40e_channel *ch)\ndrivers/net/ethernet/intel/i40e/i40e.h-460-{\ndrivers/net/ethernet/intel/i40e/i40e.h:461:\tif (i40e_is_channel_macvlan(ch))\ndrivers/net/ethernet/intel/i40e/i40e.h-462-\t\treturn ch-\u003efwd-\u003enetdev-\u003edev_addr;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-467-/* struct that defines the Ethernet device */\ndrivers/net/ethernet/intel/i40e/i40e.h:468:struct i40e_pf {\ndrivers/net/ethernet/intel/i40e/i40e.h-469-\tstruct pci_dev *pdev;\ndrivers/net/ethernet/intel/i40e/i40e.h-470-\tstruct devlink_port devlink_port;\ndrivers/net/ethernet/intel/i40e/i40e.h:471:\tstruct i40e_hw hw;\ndrivers/net/ethernet/intel/i40e/i40e.h-472-\tDECLARE_BITMAP(state, __I40E_STATE_SIZE__);\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-536-\tDECLARE_BITMAP(flags, I40E_PF_FLAGS_NBITS);\ndrivers/net/ethernet/intel/i40e/i40e.h:537:\tstruct i40e_client_instance *cinst;\ndrivers/net/ethernet/intel/i40e/i40e.h-538-\tbool stat_offsets_loaded;\ndrivers/net/ethernet/intel/i40e/i40e.h:539:\tstruct i40e_hw_port_stats stats;\ndrivers/net/ethernet/intel/i40e/i40e.h:540:\tstruct i40e_hw_port_stats stats_offsets;\ndrivers/net/ethernet/intel/i40e/i40e.h-541-\tu32 tx_timeout_count;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-558-\tu16 next_vsi; /* Next unallocated VSI - 0-based! */\ndrivers/net/ethernet/intel/i40e/i40e.h:559:\tstruct i40e_vsi **vsi;\ndrivers/net/ethernet/intel/i40e/i40e.h:560:\tstruct i40e_veb *veb[I40E_MAX_VEB];\ndrivers/net/ethernet/intel/i40e/i40e.h-561-\ndrivers/net/ethernet/intel/i40e/i40e.h:562:\tstruct i40e_lump_tracking *qp_pile;\ndrivers/net/ethernet/intel/i40e/i40e.h:563:\tstruct i40e_lump_tracking *irq_pile;\ndrivers/net/ethernet/intel/i40e/i40e.h-564-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-568-#ifdef CONFIG_DEBUG_FS\ndrivers/net/ethernet/intel/i40e/i40e.h:569:\tstruct dentry *i40e_dbg_pf;\ndrivers/net/ethernet/intel/i40e/i40e.h-570-#endif /* CONFIG_DEBUG_FS */\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-573-\t/* sr-iov config info */\ndrivers/net/ethernet/intel/i40e/i40e.h:574:\tstruct i40e_vf *vf;\ndrivers/net/ethernet/intel/i40e/i40e.h-575-\tint num_alloc_vfs;\t/* actual number of VFs allocated */\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-591-\ndrivers/net/ethernet/intel/i40e/i40e.h:592:\tstruct i40e_filter_control_settings filter_settings;\ndrivers/net/ethernet/intel/i40e/i40e.h:593:\tstruct i40e_rx_pb_config pb_cfg; /* Current Rx packet buffer config */\ndrivers/net/ethernet/intel/i40e/i40e.h:594:\tstruct i40e_dcbx_config tmp_cfg;\ndrivers/net/ethernet/intel/i40e/i40e.h-595-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-681-\tbool ptp_rx;\ndrivers/net/ethernet/intel/i40e/i40e.h:682:\tstruct i40e_ptp_pins_settings *ptp_pins;\ndrivers/net/ethernet/intel/i40e/i40e.h-683-\tu16 rss_table_size; /* HW RSS table size */\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-697-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:698: * __i40e_pf_next_vsi - get next valid VSI\ndrivers/net/ethernet/intel/i40e/i40e.h-699- * @pf: pointer to the PF struct\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-704- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:705:static __always_inline struct i40e_vsi *\ndrivers/net/ethernet/intel/i40e/i40e.h:706:__i40e_pf_next_vsi(struct i40e_pf *pf, int *idx)\ndrivers/net/ethernet/intel/i40e/i40e.h-707-{\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-715-\ndrivers/net/ethernet/intel/i40e/i40e.h:716:#define i40e_pf_for_each_vsi(_pf, _i, _vsi)\t\t\t\\\ndrivers/net/ethernet/intel/i40e/i40e.h:717:\tfor (_i = 0, _vsi = __i40e_pf_next_vsi(_pf, \u0026_i);\t\\\ndrivers/net/ethernet/intel/i40e/i40e.h-718-\t _vsi;\t\t\t\t\t\t\\\ndrivers/net/ethernet/intel/i40e/i40e.h:719:\t _i++, _vsi = __i40e_pf_next_vsi(_pf, \u0026_i))\ndrivers/net/ethernet/intel/i40e/i40e.h-720-\ndrivers/net/ethernet/intel/i40e/i40e.h-721-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:722: * __i40e_pf_next_veb - get next valid VEB\ndrivers/net/ethernet/intel/i40e/i40e.h-723- * @pf: pointer to the PF struct\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-728- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:729:static __always_inline struct i40e_veb *\ndrivers/net/ethernet/intel/i40e/i40e.h:730:__i40e_pf_next_veb(struct i40e_pf *pf, int *idx)\ndrivers/net/ethernet/intel/i40e/i40e.h-731-{\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-739-\ndrivers/net/ethernet/intel/i40e/i40e.h:740:#define i40e_pf_for_each_veb(_pf, _i, _veb)\t\t\t\\\ndrivers/net/ethernet/intel/i40e/i40e.h:741:\tfor (_i = 0, _veb = __i40e_pf_next_veb(_pf, \u0026_i);\t\\\ndrivers/net/ethernet/intel/i40e/i40e.h-742-\t _veb;\t\t\t\t\t\t\\\ndrivers/net/ethernet/intel/i40e/i40e.h:743:\t _i++, _veb = __i40e_pf_next_veb(_pf, \u0026_i))\ndrivers/net/ethernet/intel/i40e/i40e.h-744-\ndrivers/net/ethernet/intel/i40e/i40e.h-745-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:746: * i40e_addr_to_hkey - Convert a 6-byte MAC Address to a u64 hash key\ndrivers/net/ethernet/intel/i40e/i40e.h-747- * @macaddr: the MAC Address as the base key\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-750- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:751:static inline u64 i40e_addr_to_hkey(const u8 *macaddr)\ndrivers/net/ethernet/intel/i40e/i40e.h-752-{\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-758-\ndrivers/net/ethernet/intel/i40e/i40e.h:759:enum i40e_filter_state {\ndrivers/net/ethernet/intel/i40e/i40e.h-760-\tI40E_FILTER_INVALID = 0,\t/* Invalid state */\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-764-\tI40E_FILTER_REMOVE,\t\t/* To be removed */\ndrivers/net/ethernet/intel/i40e/i40e.h:765:\tI40E_FILTER_NEW_SYNC,\t\t/* New, not sent yet, is in i40e_sync_vsi_filters() */\ndrivers/net/ethernet/intel/i40e/i40e.h-766-/* There is no 'removed' state; the filter struct is freed */\ndrivers/net/ethernet/intel/i40e/i40e.h-767-};\ndrivers/net/ethernet/intel/i40e/i40e.h:768:struct i40e_mac_filter {\ndrivers/net/ethernet/intel/i40e/i40e.h-769-\tstruct hlist_node hlist;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-772-\ts16 vlan;\ndrivers/net/ethernet/intel/i40e/i40e.h:773:\tenum i40e_filter_state state;\ndrivers/net/ethernet/intel/i40e/i40e.h-774-};\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-783- */\ndrivers/net/ethernet/intel/i40e/i40e.h:784:struct i40e_new_mac_filter {\ndrivers/net/ethernet/intel/i40e/i40e.h-785-\tstruct hlist_node hlist;\ndrivers/net/ethernet/intel/i40e/i40e.h:786:\tstruct i40e_mac_filter *f;\ndrivers/net/ethernet/intel/i40e/i40e.h-787-\ndrivers/net/ethernet/intel/i40e/i40e.h-788-\t/* Track future changes to state separately */\ndrivers/net/ethernet/intel/i40e/i40e.h:789:\tenum i40e_filter_state state;\ndrivers/net/ethernet/intel/i40e/i40e.h-790-};\ndrivers/net/ethernet/intel/i40e/i40e.h-791-\ndrivers/net/ethernet/intel/i40e/i40e.h:792:struct i40e_veb {\ndrivers/net/ethernet/intel/i40e/i40e.h:793:\tstruct i40e_pf *pf;\ndrivers/net/ethernet/intel/i40e/i40e.h-794-\tu16 idx;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-807-\tbool stat_offsets_loaded;\ndrivers/net/ethernet/intel/i40e/i40e.h:808:\tstruct i40e_eth_stats stats;\ndrivers/net/ethernet/intel/i40e/i40e.h:809:\tstruct i40e_eth_stats stats_offsets;\ndrivers/net/ethernet/intel/i40e/i40e.h:810:\tstruct i40e_veb_tc_stats tc_stats;\ndrivers/net/ethernet/intel/i40e/i40e.h:811:\tstruct i40e_veb_tc_stats tc_stats_offsets;\ndrivers/net/ethernet/intel/i40e/i40e.h-812-};\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-814-/* struct that defines a VSI, associated with a dev */\ndrivers/net/ethernet/intel/i40e/i40e.h:815:struct i40e_vsi {\ndrivers/net/ethernet/intel/i40e/i40e.h-816-\tstruct net_device *netdev;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-835-\tstruct rtnl_link_stats64 net_stats_offsets;\ndrivers/net/ethernet/intel/i40e/i40e.h:836:\tstruct i40e_eth_stats eth_stats;\ndrivers/net/ethernet/intel/i40e/i40e.h:837:\tstruct i40e_eth_stats eth_stats_offsets;\ndrivers/net/ethernet/intel/i40e/i40e.h-838-\tu64 tx_restart;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-850-\t/* These are containers of ring pointers, allocated at run-time */\ndrivers/net/ethernet/intel/i40e/i40e.h:851:\tstruct i40e_ring **rx_rings;\ndrivers/net/ethernet/intel/i40e/i40e.h:852:\tstruct i40e_ring **tx_rings;\ndrivers/net/ethernet/intel/i40e/i40e.h:853:\tstruct i40e_ring **xdp_rings; /* XDP Tx rings */\ndrivers/net/ethernet/intel/i40e/i40e.h-854-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-872-\t/* List of q_vectors allocated to this VSI */\ndrivers/net/ethernet/intel/i40e/i40e.h:873:\tstruct i40e_q_vector **q_vectors;\ndrivers/net/ethernet/intel/i40e/i40e.h-874-\tint num_q_vectors;\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-887-\tu16 num_rx_desc;\ndrivers/net/ethernet/intel/i40e/i40e.h:888:\tenum i40e_vsi_type type; /* VSI type, e.g., LAN, FCoE, etc */\ndrivers/net/ethernet/intel/i40e/i40e.h-889-\ts16 vf_id;\t\t/* Virtual function ID for SRIOV VSIs */\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-891-\tstruct tc_mqprio_qopt_offload mqprio_qopt; /* queue parameters */\ndrivers/net/ethernet/intel/i40e/i40e.h:892:\tstruct i40e_tc_configuration tc_config;\ndrivers/net/ethernet/intel/i40e/i40e.h:893:\tstruct i40e_aqc_vsi_properties_data info;\ndrivers/net/ethernet/intel/i40e/i40e.h-894-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-905-\ndrivers/net/ethernet/intel/i40e/i40e.h:906:\tstruct i40e_pf *back;\t/* Backreference to associated PF */\ndrivers/net/ethernet/intel/i40e/i40e.h-907-\tu16 idx;\t\t/* index in pf-\u003evsi[] */\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-910-\tbool current_isup;\t/* Sync 'link up' logging */\ndrivers/net/ethernet/intel/i40e/i40e.h:911:\tenum i40e_aq_link_speed current_speed;\t/* Sync link speed logging */\ndrivers/net/ethernet/intel/i40e/i40e.h-912-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-938-\ndrivers/net/ethernet/intel/i40e/i40e.h:939:struct i40e_netdev_priv {\ndrivers/net/ethernet/intel/i40e/i40e.h:940:\tstruct i40e_vsi *vsi;\ndrivers/net/ethernet/intel/i40e/i40e.h-941-};\ndrivers/net/ethernet/intel/i40e/i40e.h-942-\ndrivers/net/ethernet/intel/i40e/i40e.h:943:extern struct ida i40e_client_ida;\ndrivers/net/ethernet/intel/i40e/i40e.h-944-\ndrivers/net/ethernet/intel/i40e/i40e.h-945-/* struct that defines an interrupt vector */\ndrivers/net/ethernet/intel/i40e/i40e.h:946:struct i40e_q_vector {\ndrivers/net/ethernet/intel/i40e/i40e.h:947:\tstruct i40e_vsi *vsi;\ndrivers/net/ethernet/intel/i40e/i40e.h-948-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-954-\ndrivers/net/ethernet/intel/i40e/i40e.h:955:\tstruct i40e_ring_container rx;\ndrivers/net/ethernet/intel/i40e/i40e.h:956:\tstruct i40e_ring_container tx;\ndrivers/net/ethernet/intel/i40e/i40e.h-957-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-970-/* lan device */\ndrivers/net/ethernet/intel/i40e/i40e.h:971:struct i40e_device {\ndrivers/net/ethernet/intel/i40e/i40e.h-972-\tstruct list_head list;\ndrivers/net/ethernet/intel/i40e/i40e.h:973:\tstruct i40e_pf *pf;\ndrivers/net/ethernet/intel/i40e/i40e.h-974-};\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-976-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:977: * i40e_info_nvm_ver - format the NVM version string\ndrivers/net/ethernet/intel/i40e/i40e.h-978- * @hw: ptr to the hardware info\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-985- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:986:static inline void i40e_info_nvm_ver(struct i40e_hw *hw, char *buf, size_t len)\ndrivers/net/ethernet/intel/i40e/i40e.h-987-{\ndrivers/net/ethernet/intel/i40e/i40e.h:988:\tstruct i40e_nvm_info *nvm = \u0026hw-\u003envm;\ndrivers/net/ethernet/intel/i40e/i40e.h-989-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1008-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:1009: * i40e_info_eetrack - format the EETrackID string\ndrivers/net/ethernet/intel/i40e/i40e.h-1010- * @hw: ptr to the hardware info\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1016- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:1017:static inline void i40e_info_eetrack(struct i40e_hw *hw, char *buf, size_t len)\ndrivers/net/ethernet/intel/i40e/i40e.h-1018-{\ndrivers/net/ethernet/intel/i40e/i40e.h:1019:\tstruct i40e_nvm_info *nvm = \u0026hw-\u003envm;\ndrivers/net/ethernet/intel/i40e/i40e.h-1020-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1026-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:1027: * i40e_info_civd_ver - format the NVM version strings\ndrivers/net/ethernet/intel/i40e/i40e.h-1028- * @hw: ptr to the hardware info\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1034- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:1035:static inline void i40e_info_civd_ver(struct i40e_hw *hw, char *buf, size_t len)\ndrivers/net/ethernet/intel/i40e/i40e.h-1036-{\ndrivers/net/ethernet/intel/i40e/i40e.h:1037:\tstruct i40e_nvm_info *nvm = \u0026hw-\u003envm;\ndrivers/net/ethernet/intel/i40e/i40e.h-1038-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1052-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:1053: * i40e_nvm_version_str - format the NVM version strings\ndrivers/net/ethernet/intel/i40e/i40e.h-1054- * @hw: ptr to the hardware info\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1057- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:1058:static inline char *i40e_nvm_version_str(struct i40e_hw *hw, char *buf,\ndrivers/net/ethernet/intel/i40e/i40e.h-1059-\t\t\t\t\t size_t len)\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1063-\t/* Get NVM version */\ndrivers/net/ethernet/intel/i40e/i40e.h:1064:\ti40e_info_nvm_ver(hw, buf, len);\ndrivers/net/ethernet/intel/i40e/i40e.h-1065-\ndrivers/net/ethernet/intel/i40e/i40e.h-1066-\t/* Append EETrackID if provided */\ndrivers/net/ethernet/intel/i40e/i40e.h:1067:\ti40e_info_eetrack(hw, \u0026ver[1], sizeof(ver) - 1);\ndrivers/net/ethernet/intel/i40e/i40e.h-1068-\tif (strlen(ver) \u003e 1)\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1071-\t/* Append combo image version if provided */\ndrivers/net/ethernet/intel/i40e/i40e.h:1072:\ti40e_info_civd_ver(hw, \u0026ver[1], sizeof(ver) - 1);\ndrivers/net/ethernet/intel/i40e/i40e.h-1073-\tif (strlen(ver) \u003e 1)\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1079-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:1080: * i40e_netdev_to_pf: Retrieve the PF struct for given netdev\ndrivers/net/ethernet/intel/i40e/i40e.h-1081- * @netdev: the corresponding netdev\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1084- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:1085:static inline struct i40e_pf *i40e_netdev_to_pf(struct net_device *netdev)\ndrivers/net/ethernet/intel/i40e/i40e.h-1086-{\ndrivers/net/ethernet/intel/i40e/i40e.h:1087:\tstruct i40e_netdev_priv *np = netdev_priv(netdev);\ndrivers/net/ethernet/intel/i40e/i40e.h:1088:\tstruct i40e_vsi *vsi = np-\u003evsi;\ndrivers/net/ethernet/intel/i40e/i40e.h-1089-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1092-\ndrivers/net/ethernet/intel/i40e/i40e.h:1093:static inline void i40e_vsi_setup_irqhandler(struct i40e_vsi *vsi,\ndrivers/net/ethernet/intel/i40e/i40e.h-1094-\t\t\t\tirqreturn_t (*irq_handler)(int, void *))\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1099-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:1100: * i40e_get_fd_cnt_all - get the total FD filter space available\ndrivers/net/ethernet/intel/i40e/i40e.h-1101- * @pf: pointer to the PF struct\ndrivers/net/ethernet/intel/i40e/i40e.h-1102- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:1103:static inline int i40e_get_fd_cnt_all(struct i40e_pf *pf)\ndrivers/net/ethernet/intel/i40e/i40e.h-1104-{\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1108-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:1109: * i40e_read_fd_input_set - reads value of flow director input set register\ndrivers/net/ethernet/intel/i40e/i40e.h-1110- * @pf: pointer to the PF struct\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1115- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:1116:static inline u64 i40e_read_fd_input_set(struct i40e_pf *pf, u16 addr)\ndrivers/net/ethernet/intel/i40e/i40e.h-1117-{\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1119-\ndrivers/net/ethernet/intel/i40e/i40e.h:1120:\tval = i40e_read_rx_ctl(\u0026pf-\u003ehw, I40E_PRTQF_FD_INSET(addr, 1));\ndrivers/net/ethernet/intel/i40e/i40e.h-1121-\tval \u003c\u003c= 32;\ndrivers/net/ethernet/intel/i40e/i40e.h:1122:\tval += i40e_read_rx_ctl(\u0026pf-\u003ehw, I40E_PRTQF_FD_INSET(addr, 0));\ndrivers/net/ethernet/intel/i40e/i40e.h-1123-\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1127-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:1128: * i40e_write_fd_input_set - writes value into flow director input set register\ndrivers/net/ethernet/intel/i40e/i40e.h-1129- * @pf: pointer to the PF struct\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1135- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:1136:static inline void i40e_write_fd_input_set(struct i40e_pf *pf,\ndrivers/net/ethernet/intel/i40e/i40e.h-1137-\t\t\t\t\t u16 addr, u64 val)\ndrivers/net/ethernet/intel/i40e/i40e.h-1138-{\ndrivers/net/ethernet/intel/i40e/i40e.h:1139:\ti40e_write_rx_ctl(\u0026pf-\u003ehw, I40E_PRTQF_FD_INSET(addr, 1),\ndrivers/net/ethernet/intel/i40e/i40e.h-1140-\t\t\t (u32)(val \u003e\u003e 32));\ndrivers/net/ethernet/intel/i40e/i40e.h:1141:\ti40e_write_rx_ctl(\u0026pf-\u003ehw, I40E_PRTQF_FD_INSET(addr, 0),\ndrivers/net/ethernet/intel/i40e/i40e.h-1142-\t\t\t (u32)(val \u0026 0xFFFFFFFFULL));\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1145-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:1146: * i40e_get_pf_count - get PCI PF count.\ndrivers/net/ethernet/intel/i40e/i40e.h-1147- * @hw: pointer to a hw.\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1153- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:1154:static inline u32 i40e_get_pf_count(struct i40e_hw *hw)\ndrivers/net/ethernet/intel/i40e/i40e.h-1155-{\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1159-\ndrivers/net/ethernet/intel/i40e/i40e.h:1160:/* needed by i40e_ethtool.c */\ndrivers/net/ethernet/intel/i40e/i40e.h:1161:int i40e_up(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1162:void i40e_down(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1163:extern const char i40e_driver_name[];\ndrivers/net/ethernet/intel/i40e/i40e.h:1164:void i40e_do_reset_safe(struct i40e_pf *pf, u32 reset_flags);\ndrivers/net/ethernet/intel/i40e/i40e.h:1165:void i40e_do_reset(struct i40e_pf *pf, u32 reset_flags, bool lock_acquired);\ndrivers/net/ethernet/intel/i40e/i40e.h:1166:int i40e_config_rss(struct i40e_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size);\ndrivers/net/ethernet/intel/i40e/i40e.h:1167:int i40e_get_rss(struct i40e_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size);\ndrivers/net/ethernet/intel/i40e/i40e.h:1168:void i40e_fill_rss_lut(struct i40e_pf *pf, u8 *lut,\ndrivers/net/ethernet/intel/i40e/i40e.h-1169-\t\t u16 rss_table_size, u16 rss_size);\ndrivers/net/ethernet/intel/i40e/i40e.h:1170:struct i40e_vsi *i40e_find_vsi_from_id(struct i40e_pf *pf, u16 id);\ndrivers/net/ethernet/intel/i40e/i40e.h-1171-/**\ndrivers/net/ethernet/intel/i40e/i40e.h:1172: * i40e_find_vsi_by_type - Find and return Flow Director VSI\ndrivers/net/ethernet/intel/i40e/i40e.h-1173- * @pf: PF to search for VSI\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1175- **/\ndrivers/net/ethernet/intel/i40e/i40e.h:1176:static inline struct i40e_vsi *\ndrivers/net/ethernet/intel/i40e/i40e.h:1177:i40e_find_vsi_by_type(struct i40e_pf *pf, u16 type)\ndrivers/net/ethernet/intel/i40e/i40e.h-1178-{\ndrivers/net/ethernet/intel/i40e/i40e.h:1179:\tstruct i40e_vsi *vsi;\ndrivers/net/ethernet/intel/i40e/i40e.h-1180-\tint i;\ndrivers/net/ethernet/intel/i40e/i40e.h-1181-\ndrivers/net/ethernet/intel/i40e/i40e.h:1182:\ti40e_pf_for_each_vsi(pf, i, vsi)\ndrivers/net/ethernet/intel/i40e/i40e.h-1183-\t\tif (vsi-\u003etype == type)\n--\ndrivers/net/ethernet/intel/i40e/i40e.h-1187-}\ndrivers/net/ethernet/intel/i40e/i40e.h:1188:void i40e_update_stats(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1189:void i40e_update_veb_stats(struct i40e_veb *veb);\ndrivers/net/ethernet/intel/i40e/i40e.h:1190:void i40e_update_eth_stats(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1191:struct rtnl_link_stats64 *i40e_get_vsi_stats_struct(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1192:int i40e_fetch_switch_configuration(struct i40e_pf *pf,\ndrivers/net/ethernet/intel/i40e/i40e.h-1193-\t\t\t\t bool printconfig);\ndrivers/net/ethernet/intel/i40e/i40e.h-1194-\ndrivers/net/ethernet/intel/i40e/i40e.h:1195:int i40e_add_del_fdir(struct i40e_vsi *vsi,\ndrivers/net/ethernet/intel/i40e/i40e.h:1196:\t\t struct i40e_fdir_filter *input, bool add);\ndrivers/net/ethernet/intel/i40e/i40e.h:1197:void i40e_fdir_check_and_reenable(struct i40e_pf *pf);\ndrivers/net/ethernet/intel/i40e/i40e.h:1198:u32 i40e_get_current_fd_count(struct i40e_pf *pf);\ndrivers/net/ethernet/intel/i40e/i40e.h:1199:u32 i40e_get_current_atr_cnt(struct i40e_pf *pf);\ndrivers/net/ethernet/intel/i40e/i40e.h:1200:u32 i40e_get_global_fd_count(struct i40e_pf *pf);\ndrivers/net/ethernet/intel/i40e/i40e.h:1201:bool i40e_set_ntuple(struct i40e_pf *pf, netdev_features_t features);\ndrivers/net/ethernet/intel/i40e/i40e.h:1202:void i40e_set_ethtool_ops(struct net_device *netdev);\ndrivers/net/ethernet/intel/i40e/i40e.h:1203:struct i40e_mac_filter *i40e_add_filter(struct i40e_vsi *vsi,\ndrivers/net/ethernet/intel/i40e/i40e.h-1204-\t\t\t\t\tconst u8 *macaddr, s16 vlan);\ndrivers/net/ethernet/intel/i40e/i40e.h:1205:void __i40e_del_filter(struct i40e_vsi *vsi, struct i40e_mac_filter *f);\ndrivers/net/ethernet/intel/i40e/i40e.h:1206:int i40e_sync_vsi_filters(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1207:struct i40e_vsi *i40e_vsi_setup(struct i40e_pf *pf, u8 type,\ndrivers/net/ethernet/intel/i40e/i40e.h-1208-\t\t\t\tu16 uplink, u32 param1);\ndrivers/net/ethernet/intel/i40e/i40e.h:1209:int i40e_vsi_release(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1210:void i40e_service_event_schedule(struct i40e_pf *pf);\ndrivers/net/ethernet/intel/i40e/i40e.h:1211:void i40e_notify_client_of_vf_msg(struct i40e_vsi *vsi, u32 vf_id,\ndrivers/net/ethernet/intel/i40e/i40e.h-1212-\t\t\t\t u8 *msg, u16 len);\ndrivers/net/ethernet/intel/i40e/i40e.h-1213-\ndrivers/net/ethernet/intel/i40e/i40e.h:1214:int i40e_control_wait_tx_q(int seid, struct i40e_pf *pf, int pf_q, bool is_xdp,\ndrivers/net/ethernet/intel/i40e/i40e.h-1215-\t\t\t bool enable);\ndrivers/net/ethernet/intel/i40e/i40e.h:1216:int i40e_control_wait_rx_q(struct i40e_pf *pf, int pf_q, bool enable);\ndrivers/net/ethernet/intel/i40e/i40e.h:1217:int i40e_vsi_start_rings(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1218:void i40e_vsi_stop_rings(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1219:void i40e_vsi_stop_rings_no_wait(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1220:int i40e_vsi_wait_queues_disabled(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1221:int i40e_reconfig_rss_queues(struct i40e_pf *pf, int queue_count);\ndrivers/net/ethernet/intel/i40e/i40e.h:1222:struct i40e_veb *i40e_veb_setup(struct i40e_pf *pf, u16 uplink_seid,\ndrivers/net/ethernet/intel/i40e/i40e.h-1223-\t\t\t\tu16 downlink_seid, u8 enabled_tc);\ndrivers/net/ethernet/intel/i40e/i40e.h:1224:void i40e_veb_release(struct i40e_veb *veb);\ndrivers/net/ethernet/intel/i40e/i40e.h-1225-\ndrivers/net/ethernet/intel/i40e/i40e.h:1226:int i40e_veb_config_tc(struct i40e_veb *veb, u8 enabled_tc);\ndrivers/net/ethernet/intel/i40e/i40e.h:1227:int i40e_vsi_add_pvid(struct i40e_vsi *vsi, u16 vid);\ndrivers/net/ethernet/intel/i40e/i40e.h:1228:void i40e_vsi_remove_pvid(struct i40e_vsi *vsi);\ndrivers/net/ethernet/intel/i40e/i40e.h:1229:void i40e_vsi_reset_stats(struct i40e_vsi *vsi);\n\n"
} |
| 5/2 | 2026/07/25 07:00 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 20276 output: 35 thoughts: 222 Thoughts: **Analyzing the Implications of an i40e Driver Patch in a QEMU Context** Okay, so the driver in question is `i40e` – that's Intel's 40 Gigabit Ethernet adapter. My first thought is: can I even *get* to this code within a QEMU environment? Considering this patch specifically touches `i40e_xsk.c`, which is the AF_XDP zero-copy support for the i40e driver, the answer seems initially obvious. Since QEMU doesn't directly emulate i40e hardware, the driver shouldn't be loaded, and this particular code path wouldn't be executed in a standard QEMU setup. But wait, I need to be absolutely certain. Does QEMU, perhaps, provide *some* level of i40e emulation? It's worth a double-check to see if there's any software-based interpretation. Time to verify if it is hardware exclusive. Nope. Quick scan confirms QEMU offers a range of network devices like e1000, e1000e, igb, rtl8139, pcnet, ne2k_pci, vmxnet3, virtio-net, and tulip. No i40e. Just to be absolutely, positively sure, let me take a quick peak at the `hw/net` directory within the QEMU source. |
| 6/2 | 2026/07/25 07:00 | tool | grepper |
0mArgs:{
"Expression": "i40e",
"PathPrefix": "drivers/net/ethernet/intel/Kconfig"
}Results: {
"Output": "drivers/net/ethernet/intel/Kconfig=229=config I40E\n--\ndrivers/net/ethernet/intel/Kconfig-244-\t More specific information on configuring the driver is in\ndrivers/net/ethernet/intel/Kconfig:245:\t \u003cfile:Documentation/networking/device_drivers/ethernet/intel/i40e.rst\u003e.\ndrivers/net/ethernet/intel/Kconfig-246-\ndrivers/net/ethernet/intel/Kconfig-247-\t To compile this driver as a module, choose M here. The module\ndrivers/net/ethernet/intel/Kconfig:248:\t will be called i40e.\ndrivers/net/ethernet/intel/Kconfig-249-\n--\ndrivers/net/ethernet/intel/Kconfig=268=config I40EVF\n--\ndrivers/net/ethernet/intel/Kconfig-281-\ndrivers/net/ethernet/intel/Kconfig:282:\t This driver was formerly named i40evf.\ndrivers/net/ethernet/intel/Kconfig-283-\n"
} |
| 7/2 | 2026/07/25 07:00 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 21131 output: 83 thoughts: 198 Thoughts: **WorthFuzzing Decision for i40e Driver Code** Okay, let's break this down. The `i40e` driver – that's the one for the Intel XL710 Ethernet Connection. This is a *physical* PCIe hardware component, a real card you stick in a server. And as I know from experience, QEMU, the common virtualization tool, doesn't emulate the XL710 or the i40e driver. So, in any typical virtualized environment like Google Compute Engine (GCE) or, more directly, QEMU, this particular code is simply never going to be executed. Now, let's double-check the instructions. They specifically say to set `WorthFuzzing=false` if the patch concerns code in certain types of drivers, and, let me see, *right here*, it mentions "vendor-specific PCIe... drivers... that require physical PCIe hardware cards not emulated in standard QEMU." Bingo. `i40e` is *exactly* that: a vendor-specific PCIe driver specifically for Intel XL710 cards. It needs the physical hardware, which QEMU doesn't offer. Therefore, based on the instruction set, and my understanding of the environment, `WorthFuzzing=false`. |
| 8/2 | 2026/07/25 07:00 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies the i40e driver (Intel 40 Gigabit Ethernet / XL710), which requires physical PCIe hardware not emulated in standard QEMU environments. Therefore, the modified code is unreachable during fuzzing in virtualized environments.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the i40e driver (Intel 40 Gigabit Ethernet / XL710), which requires physical PCIe hardware not emulated in standard QEMU environments. Therefore, the modified code is unreachable during fuzzing in virtualized environments.",
"WorthFuzzing": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|