| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/08/01 19:23 | flow | patch-triage |
1mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Intel Adaptive Virtual Function (iavf) Ethernet driver and the Intel Ethernet library (libeth). These are vendor-specific PCIe drivers that require physical Intel network hardware, which is not emulated in standard QEMU or GCE environments. Therefore, the modified code paths are unreachable during fuzzing.",
"WorthFuzzing": false
} |
| 1/1 | 2026/08/01 19:23 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 2bf56ef31426f50a48e8513cc535d38f22597182\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Sat Aug 1 19:23:36 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/intel/iavf/iavf_txrx.c b/drivers/net/ethernet/intel/iavf/iavf_txrx.c\nindex c30abf17cf5d3..9dc5f0761d8ba 100644\n--- a/drivers/net/ethernet/intel/iavf/iavf_txrx.c\n+++ b/drivers/net/ethernet/intel/iavf/iavf_txrx.c\n@@ -1184,6 +1184,7 @@ static bool iavf_cleanup_headers(struct iavf_ring *rx_ring, struct sk_buff *skb)\n \n /**\n * iavf_add_rx_frag - Add contents of Rx buffer to sk_buff\n+ * @pp: page pool the buffer was allocated from\n * @skb: sk_buff to place the data into\n * @rx_buffer: buffer containing page to add\n * @size: packet length from rx_desc\n@@ -1193,11 +1194,11 @@ static bool iavf_cleanup_headers(struct iavf_ring *rx_ring, struct sk_buff *skb)\n *\n * The function will then update the page offset.\n **/\n-static void iavf_add_rx_frag(struct sk_buff *skb,\n+static void iavf_add_rx_frag(const struct page_pool *pp, struct sk_buff *skb,\n \t\t\t const struct libeth_fqe *rx_buffer,\n \t\t\t unsigned int size)\n {\n-\tu32 hr = netmem_get_pp(rx_buffer-\u003enetmem)-\u003ep.offset;\n+\tu32 hr = pp-\u003ep.offset;\n \n \tskb_add_rx_frag_netmem(skb, skb_shinfo(skb)-\u003enr_frags,\n \t\t\t rx_buffer-\u003enetmem, rx_buffer-\u003eoffset + hr,\n@@ -1206,17 +1207,19 @@ static void iavf_add_rx_frag(struct sk_buff *skb,\n \n /**\n * iavf_build_skb - Build skb around an existing buffer\n+ * @pp: page pool the buffer was allocated from\n * @rx_buffer: Rx buffer to pull data from\n * @size: size of buffer to add to skb\n *\n * This function builds an skb around an existing Rx buffer, taking care\n * to set up the skb correctly and avoid any memcpy overhead.\n */\n-static struct sk_buff *iavf_build_skb(const struct libeth_fqe *rx_buffer,\n+static struct sk_buff *iavf_build_skb(const struct page_pool *pp,\n+\t\t\t\t const struct libeth_fqe *rx_buffer,\n \t\t\t\t unsigned int size)\n {\n \tstruct page *buf_page = __netmem_to_page(rx_buffer-\u003enetmem);\n-\tu32 hr = pp_page_to_nmdesc(buf_page)-\u003epp-\u003ep.offset;\n+\tu32 hr = pp-\u003ep.offset;\n \tstruct sk_buff *skb;\n \tvoid *va;\n \n@@ -1387,6 +1390,7 @@ static int iavf_clean_rx_irq(struct iavf_ring *rx_ring, int budget)\n {\n \tbool flex = rx_ring-\u003erxdid == VIRTCHNL_RXDID_2_FLEX_SQ_NIC;\n \tunsigned int total_rx_bytes = 0, total_rx_packets = 0;\n+\tconst struct page_pool *pp = rx_ring-\u003epp;\n \tstruct sk_buff *skb = rx_ring-\u003eskb;\n \tu16 cleaned_count = IAVF_DESC_UNUSED(rx_ring);\n \tbool failure = false;\n@@ -1424,14 +1428,14 @@ static int iavf_clean_rx_irq(struct iavf_ring *rx_ring, int budget)\n \t\tiavf_trace(clean_rx_irq, rx_ring, rx_desc, skb);\n \n \t\trx_buffer = \u0026rx_ring-\u003erx_fqes[rx_ring-\u003enext_to_clean];\n-\t\tif (!libeth_rx_sync_for_cpu(rx_buffer, fields.len))\n+\t\tif (!__libeth_rx_sync_for_cpu(pp, rx_buffer, fields.len))\n \t\t\tgoto skip_data;\n \n \t\t/* retrieve a buffer from the ring */\n \t\tif (skb)\n-\t\t\tiavf_add_rx_frag(skb, rx_buffer, fields.len);\n+\t\t\tiavf_add_rx_frag(pp, skb, rx_buffer, fields.len);\n \t\telse\n-\t\t\tskb = iavf_build_skb(rx_buffer, fields.len);\n+\t\t\tskb = iavf_build_skb(pp, rx_buffer, fields.len);\n \n \t\t/* exit if we failed to retrieve a buffer */\n \t\tif (!skb) {\ndiff --git a/include/net/libeth/rx.h b/include/net/libeth/rx.h\nindex 5d991404845e6..fddac084e001e 100644\n--- a/include/net/libeth/rx.h\n+++ b/include/net/libeth/rx.h\n@@ -118,36 +118,51 @@ static inline dma_addr_t libeth_rx_alloc(const struct libeth_fq_fp *fq, u32 i)\n void libeth_rx_recycle_slow(netmem_ref netmem);\n \n /**\n- * libeth_rx_sync_for_cpu - synchronize or recycle buffer post DMA\n+ * __libeth_rx_sync_for_cpu - synchronize or recycle buffer post DMA\n+ * @pool: \u0026page_pool the buffer was allocated from\n * @fqe: buffer to process\n * @len: frame length from the descriptor\n *\n- * Process the buffer after it's written by HW. The regular path is to\n- * synchronize DMA for CPU, but in case of no data it will be immediately\n- * recycled back to its PP.\n+ * Variant for callers which already know the buffer's pool, typically\n+ * their Rx queue's fill queue pool.\n *\n * Return: true when there's data to process, false otherwise.\n */\n-static inline bool libeth_rx_sync_for_cpu(const struct libeth_fqe *fqe,\n-\t\t\t\t\t u32 len)\n+static inline bool __libeth_rx_sync_for_cpu(const struct page_pool *pool,\n+\t\t\t\t\t const struct libeth_fqe *fqe,\n+\t\t\t\t\t u32 len)\n {\n-\tnetmem_ref netmem = fqe-\u003enetmem;\n-\n \t/* Very rare, but possible case. The most common reason:\n \t * the last fragment contained FCS only, which was then\n \t * stripped by the HW.\n \t */\n \tif (unlikely(!len)) {\n-\t\tlibeth_rx_recycle_slow(netmem);\n+\t\tlibeth_rx_recycle_slow(fqe-\u003enetmem);\n \t\treturn false;\n \t}\n \n-\tpage_pool_dma_sync_netmem_for_cpu(netmem_get_pp(netmem), netmem,\n-\t\t\t\t\t fqe-\u003eoffset, len);\n+\tpage_pool_dma_sync_netmem_for_cpu(pool, fqe-\u003enetmem, fqe-\u003eoffset, len);\n \n \treturn true;\n }\n \n+/**\n+ * libeth_rx_sync_for_cpu - synchronize or recycle buffer post DMA\n+ * @fqe: buffer to process\n+ * @len: frame length from the descriptor\n+ *\n+ * Process the buffer after it's written by HW. The regular path is to\n+ * synchronize DMA for CPU, but in case of no data it will be immediately\n+ * recycled back to its PP.\n+ *\n+ * Return: true when there's data to process, false otherwise.\n+ */\n+static inline bool libeth_rx_sync_for_cpu(const struct libeth_fqe *fqe,\n+\t\t\t\t\t u32 len)\n+{\n+\treturn __libeth_rx_sync_for_cpu(netmem_get_pp(fqe-\u003enetmem), fqe, len);\n+}\n+\n /* Converting abstract packet type numbers into a software structure with\n * the packet parameters to do O(1) lookup on Rx.\n */\n"
} |
| 2/1 | 2026/08/01 19:23 | agent | patch-evaluator |
1mModel:best-expensive Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Intel Adaptive Virtual Function (iavf) Ethernet driver and the Intel Ethernet library (libeth). These are vendor-specific PCIe drivers that require physical Intel network hardware, which is not emulated in standard QEMU or GCE environments. Therefore, the modified code paths are unreachable during fuzzing.",
"WorthFuzzing": false
}Instruction: You are an expert Linux kernel maintainer. Your job is to review a provided patch series and determine if it makes functional changes to the kernel that should be fuzzed. IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively use your code access tools to examine the actual source code and confirm any assumptions. Return WorthFuzzing=false if the patch only contains: - Modifications to Documentation/, Kconfig files, or code comments. - Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints. - Changes to numeric constants or macros that do not functionally alter execution flow. - Code paths that are impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim). - Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU. - Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove) that are executed only during PCI hot-unplug or sysfs driver unbind operations. If it modifies reachable core kernel logic, drivers, or architectures, use your code search tools to verify the code can be executed, then return WorthFuzzing=true. When returning WorthFuzzing=true, you MUST ALSO: 1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols. Avoid listing generic hot-path functions to prevent skewed test distributions. Prefer non-static, non-inlined API entrypoint functions over internal static helper functions (which are inlined by the compiler and do not have distinct symbol addresses). 2. Identify any specific CONFIG_ options required to properly test this new/modified feature. Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions. Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed for Kbuild to compile the code statically into vmlinux. List them in the EnableConfigs output array, and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4"). Prefer calling several tools at the same time to save round-trips. Use set-results tool to provide results of the analysis. It must be called exactly once before the final reply. Ignore results of this tool. Prompt: For your convenience, here is the diff of the changes:
commit 2bf56ef31426f50a48e8513cc535d38f22597182
Author: syz-cluster <triage@syzkaller.com>
Date: Sat Aug 1 19:23:36 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/ethernet/intel/iavf/iavf_txrx.c b/drivers/net/ethernet/intel/iavf/iavf_txrx.c
index c30abf17cf5d3..9dc5f0761d8ba 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_txrx.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_txrx.c
@@ -1184,6 +1184,7 @@ static bool iavf_cleanup_headers(struct iavf_ring *rx_ring, struct sk_buff *skb)
/**
* iavf_add_rx_frag - Add contents of Rx buffer to sk_buff
+ * @pp: page pool the buffer was allocated from
* @skb: sk_buff to place the data into
* @rx_buffer: buffer containing page to add
* @size: packet length from rx_desc
@@ -1193,11 +1194,11 @@ static bool iavf_cleanup_headers(struct iavf_ring *rx_ring, struct sk_buff *skb)
*
* The function will then update the page offset.
**/
-static void iavf_add_rx_frag(struct sk_buff *skb,
+static void iavf_add_rx_frag(const struct page_pool *pp, struct sk_buff *skb,
const struct libeth_fqe *rx_buffer,
unsigned int size)
{
- u32 hr = netmem_get_pp(rx_buffer->netmem)->p.offset;
+ u32 hr = pp->p.offset;
skb_add_rx_frag_netmem(skb, skb_shinfo(skb)->nr_frags,
rx_buffer->netmem, rx_buffer->offset + hr,
@@ -1206,17 +1207,19 @@ static void iavf_add_rx_frag(struct sk_buff *skb,
/**
* iavf_build_skb - Build skb around an existing buffer
+ * @pp: page pool the buffer was allocated from
* @rx_buffer: Rx buffer to pull data from
* @size: size of buffer to add to skb
*
* This function builds an skb around an existing Rx buffer, taking care
* to set up the skb correctly and avoid any memcpy overhead.
*/
-static struct sk_buff *iavf_build_skb(const struct libeth_fqe *rx_buffer,
+static struct sk_buff *iavf_build_skb(const struct page_pool *pp,
+ const struct libeth_fqe *rx_buffer,
unsigned int size)
{
struct page *buf_page = __netmem_to_page(rx_buffer->netmem);
- u32 hr = pp_page_to_nmdesc(buf_page)->pp->p.offset;
+ u32 hr = pp->p.offset;
struct sk_buff *skb;
void *va;
@@ -1387,6 +1390,7 @@ static int iavf_clean_rx_irq(struct iavf_ring *rx_ring, int budget)
{
bool flex = rx_ring->rxdid == VIRTCHNL_RXDID_2_FLEX_SQ_NIC;
unsigned int total_rx_bytes = 0, total_rx_packets = 0;
+ const struct page_pool *pp = rx_ring->pp;
struct sk_buff *skb = rx_ring->skb;
u16 cleaned_count = IAVF_DESC_UNUSED(rx_ring);
bool failure = false;
@@ -1424,14 +1428,14 @@ static int iavf_clean_rx_irq(struct iavf_ring *rx_ring, int budget)
iavf_trace(clean_rx_irq, rx_ring, rx_desc, skb);
rx_buffer = &rx_ring->rx_fqes[rx_ring->next_to_clean];
- if (!libeth_rx_sync_for_cpu(rx_buffer, fields.len))
+ if (!__libeth_rx_sync_for_cpu(pp, rx_buffer, fields.len))
goto skip_data;
/* retrieve a buffer from the ring */
if (skb)
- iavf_add_rx_frag(skb, rx_buffer, fields.len);
+ iavf_add_rx_frag(pp, skb, rx_buffer, fields.len);
else
- skb = iavf_build_skb(rx_buffer, fields.len);
+ skb = iavf_build_skb(pp, rx_buffer, fields.len);
/* exit if we failed to retrieve a buffer */
if (!skb) {
diff --git a/include/net/libeth/rx.h b/include/net/libeth/rx.h
index 5d991404845e6..fddac084e001e 100644
--- a/include/net/libeth/rx.h
+++ b/include/net/libeth/rx.h
@@ -118,36 +118,51 @@ static inline dma_addr_t libeth_rx_alloc(const struct libeth_fq_fp *fq, u32 i)
void libeth_rx_recycle_slow(netmem_ref netmem);
/**
- * libeth_rx_sync_for_cpu - synchronize or recycle buffer post DMA
+ * __libeth_rx_sync_for_cpu - synchronize or recycle buffer post DMA
+ * @pool: &page_pool the buffer was allocated from
* @fqe: buffer to process
* @len: frame length from the descriptor
*
- * Process the buffer after it's written by HW. The regular path is to
- * synchronize DMA for CPU, but in case of no data it will be immediately
- * recycled back to its PP.
+ * Variant for callers which already know the buffer's pool, typically
+ * their Rx queue's fill queue pool.
*
* Return: true when there's data to process, false otherwise.
*/
-static inline bool libeth_rx_sync_for_cpu(const struct libeth_fqe *fqe,
- u32 len)
+static inline bool __libeth_rx_sync_for_cpu(const struct page_pool *pool,
+ const struct libeth_fqe *fqe,
+ u32 len)
{
- netmem_ref netmem = fqe->netmem;
-
/* Very rare, but possible case. The most common reason:
* the last fragment contained FCS only, which was then
* stripped by the HW.
*/
if (unlikely(!len)) {
- libeth_rx_recycle_slow(netmem);
+ libeth_rx_recycle_slow(fqe->netmem);
return false;
}
- page_pool_dma_sync_netmem_for_cpu(netmem_get_pp(netmem), netmem,
- fqe->offset, len);
+ page_pool_dma_sync_netmem_for_cpu(pool, fqe->netmem, fqe->offset, len);
return true;
}
+/**
+ * libeth_rx_sync_for_cpu - synchronize or recycle buffer post DMA
+ * @fqe: buffer to process
+ * @len: frame length from the descriptor
+ *
+ * Process the buffer after it's written by HW. The regular path is to
+ * synchronize DMA for CPU, but in case of no data it will be immediately
+ * recycled back to its PP.
+ *
+ * Return: true when there's data to process, false otherwise.
+ */
+static inline bool libeth_rx_sync_for_cpu(const struct libeth_fqe *fqe,
+ u32 len)
+{
+ return __libeth_rx_sync_for_cpu(netmem_get_pp(fqe->netmem), fqe, len);
+}
+
/* Converting abstract packet type numbers into a software structure with
* the packet parameters to do O(1) lookup on Rx.
*/
|
| 3/2 | 2026/08/01 19:23 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3947 output: 34 thoughts: 425 Thoughts: **Analyzing the IAVF Patch and its Implications** Okay, so I'm looking at this patch and it's making some pretty specific changes within the Intel IAVF driver. It's touching `iavf_txrx.c` and `rx.h`, and specifically, it's updating how the `page_pool` is handled within `iavf_add_rx_frag`, `iavf_build_skb`, and `iavf_clean_rx_irq`. The important thing I'm seeing is that it's no longer implicitly deriving the `page_pool` from a `netmem` reference. It's been made explicit. It also looks like a new function called `__libeth_rx_sync_for_cpu` has been introduced, again taking a `page_pool` pointer. `libeth_rx_sync_for_cpu` has also been modified to use the `page_pool` pointer. Now, the `iavf` driver... that's the Intel Ethernet Adaptive Virtual Function driver. Right, it's a VF driver. So, this is typically used in a virtualized environment, right? Especially when you're talking about SR-IOV. And that means it is a Virtual Function, which needs the physical NIC (like an i40e or ice) to be present to work. The immediate question that pops into my head is, can I even *test* this in a standard QEMU environment? QEMU doesn't natively emulate Intel AVFs. Hmmm, could there be some way to fudge it with software emulation or maybe if it's considered core enough? Wait, the prompt says something that might apply: "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." This is exactly what I'm dealing with. Is `iavf` a vendor-specific driver that requires physical hardware? Yes, that's what a VF driver is like. Usually, VF drivers require the physical PF driver and physical hardware, unless I can find an emulator. Alright, so the key thing is whether `iavf` *can* be fuzzed in any reasonable way or if I absolutely need the physical hardware to test this. The patch is touching a PCI driver, `iavf`. Better check the kernel source to make sure that's accurate. |
| 4/2 | 2026/08/01 19:23 | tool | grepper |
0mArgs:{
"Expression": "iavf",
"PathPrefix": "drivers/net/ethernet/intel/iavf/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 7366 lines.\nUse more precise expression if possible.\n\ndrivers/net/ethernet/intel/iavf/Makefile-3-#\ndrivers/net/ethernet/intel/iavf/Makefile:4:# Makefile for the Intel(R) Ethernet Adaptive Virtual Function (iavf)\ndrivers/net/ethernet/intel/iavf/Makefile-5-# driver\n--\ndrivers/net/ethernet/intel/iavf/Makefile=10=subdir-ccflags-y += -I$(src)\ndrivers/net/ethernet/intel/iavf/Makefile-11-\ndrivers/net/ethernet/intel/iavf/Makefile:12:obj-$(CONFIG_IAVF) += iavf.o\ndrivers/net/ethernet/intel/iavf/Makefile-13-\ndrivers/net/ethernet/intel/iavf/Makefile:14:iavf-y := iavf_main.o iavf_ethtool.o iavf_virtchnl.o iavf_fdir.o \\\ndrivers/net/ethernet/intel/iavf/Makefile:15:\t iavf_adv_rss.o iavf_txrx.o iavf_common.o iavf_adminq.o\ndrivers/net/ethernet/intel/iavf/Makefile-16-\ndrivers/net/ethernet/intel/iavf/Makefile:17:iavf-$(CONFIG_PTP_1588_CLOCK) += iavf_ptp.o\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-38-\ndrivers/net/ethernet/intel/iavf/iavf.h:39:#include \"iavf_type.h\"\ndrivers/net/ethernet/intel/iavf/iavf.h-40-#include \u003clinux/avf/virtchnl.h\u003e\ndrivers/net/ethernet/intel/iavf/iavf.h:41:#include \"iavf_txrx.h\"\ndrivers/net/ethernet/intel/iavf/iavf.h:42:#include \"iavf_fdir.h\"\ndrivers/net/ethernet/intel/iavf/iavf.h:43:#include \"iavf_adv_rss.h\"\ndrivers/net/ethernet/intel/iavf/iavf.h:44:#include \"iavf_types.h\"\ndrivers/net/ethernet/intel/iavf/iavf.h-45-#include \u003clinux/bitmap.h\u003e\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-47-#define DEFAULT_DEBUG_LEVEL_SHIFT 3\ndrivers/net/ethernet/intel/iavf/iavf.h:48:#define PFX \"iavf: \"\ndrivers/net/ethernet/intel/iavf/iavf.h-49-\ndrivers/net/ethernet/intel/iavf/iavf.h:50:int iavf_status_to_errno(enum iavf_status status);\ndrivers/net/ethernet/intel/iavf/iavf.h-51-int virtchnl_status_to_errno(enum virtchnl_status_code v_status);\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-53-/* VSI state flags shared with common code */\ndrivers/net/ethernet/intel/iavf/iavf.h:54:enum iavf_vsi_state_t {\ndrivers/net/ethernet/intel/iavf/iavf.h-55-\t__IAVF_VSI_DOWN,\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-60-/* dummy struct to make common code less painful */\ndrivers/net/ethernet/intel/iavf/iavf.h:61:struct iavf_vsi {\ndrivers/net/ethernet/intel/iavf/iavf.h:62:\tstruct iavf_adapter *back;\ndrivers/net/ethernet/intel/iavf/iavf.h-63-\tstruct net_device *netdev;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-85-\ndrivers/net/ethernet/intel/iavf/iavf.h:86:#define IAVF_RX_DESC(R, i) (\u0026(((struct iavf_rx_desc *)((R)-\u003edesc))[i]))\ndrivers/net/ethernet/intel/iavf/iavf.h:87:#define IAVF_TX_DESC(R, i) (\u0026(((struct iavf_tx_desc *)((R)-\u003edesc))[i]))\ndrivers/net/ethernet/intel/iavf/iavf.h-88-#define IAVF_TX_CTXTDESC(R, i) \\\ndrivers/net/ethernet/intel/iavf/iavf.h:89:\t(\u0026(((struct iavf_tx_context_desc *)((R)-\u003edesc))[i]))\ndrivers/net/ethernet/intel/iavf/iavf.h-90-#define IAVF_MAX_REQ_QUEUES 16\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-103- */\ndrivers/net/ethernet/intel/iavf/iavf.h:104:struct iavf_q_vector {\ndrivers/net/ethernet/intel/iavf/iavf.h:105:\tstruct iavf_adapter *adapter;\ndrivers/net/ethernet/intel/iavf/iavf.h:106:\tstruct iavf_vsi *vsi;\ndrivers/net/ethernet/intel/iavf/iavf.h-107-\tstruct napi_struct napi;\ndrivers/net/ethernet/intel/iavf/iavf.h:108:\tstruct iavf_ring_container rx;\ndrivers/net/ethernet/intel/iavf/iavf.h:109:\tstruct iavf_ring_container tx;\ndrivers/net/ethernet/intel/iavf/iavf.h-110-\tu32 ring_mask;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-120- * And yes, it's the same math going both ways. The lowest value\ndrivers/net/ethernet/intel/iavf/iavf.h:121: * supported by all of the iavf hardware is 8.\ndrivers/net/ethernet/intel/iavf/iavf.h-122- */\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-138-#define IAVF_FREE_VECTOR 0x7FFF\ndrivers/net/ethernet/intel/iavf/iavf.h:139:struct iavf_mac_filter {\ndrivers/net/ethernet/intel/iavf/iavf.h-140-\tstruct list_head list;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-151-\ndrivers/net/ethernet/intel/iavf/iavf.h:152:#define IAVF_VLAN(vid, tpid) ((struct iavf_vlan){ vid, tpid })\ndrivers/net/ethernet/intel/iavf/iavf.h:153:struct iavf_vlan {\ndrivers/net/ethernet/intel/iavf/iavf.h-154-\tu16 vid;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-157-\ndrivers/net/ethernet/intel/iavf/iavf.h:158:enum iavf_vlan_state_t {\ndrivers/net/ethernet/intel/iavf/iavf.h-159-\tIAVF_VLAN_INVALID,\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-166-\ndrivers/net/ethernet/intel/iavf/iavf.h:167:struct iavf_vlan_filter {\ndrivers/net/ethernet/intel/iavf/iavf.h-168-\tstruct list_head list;\ndrivers/net/ethernet/intel/iavf/iavf.h:169:\tstruct iavf_vlan vlan;\ndrivers/net/ethernet/intel/iavf/iavf.h:170:\tenum iavf_vlan_state_t state;\ndrivers/net/ethernet/intel/iavf/iavf.h-171-};\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-174-/* State of traffic class creation */\ndrivers/net/ethernet/intel/iavf/iavf.h:175:enum iavf_tc_state_t {\ndrivers/net/ethernet/intel/iavf/iavf.h-176-\t__IAVF_TC_INVALID, /* no traffic class, default state */\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-180-/* channel info */\ndrivers/net/ethernet/intel/iavf/iavf.h:181:struct iavf_channel_config {\ndrivers/net/ethernet/intel/iavf/iavf.h-182-\tstruct virtchnl_channel_info ch_info[IAVF_MAX_TRAFFIC_CLASS];\ndrivers/net/ethernet/intel/iavf/iavf.h:183:\tenum iavf_tc_state_t state;\ndrivers/net/ethernet/intel/iavf/iavf.h-184-\tu8 total_qps;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-187-/* State of cloud filter */\ndrivers/net/ethernet/intel/iavf/iavf.h:188:enum iavf_cloud_filter_state_t {\ndrivers/net/ethernet/intel/iavf/iavf.h-189-\t__IAVF_CF_INVALID,\t /* cloud filter not added */\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-195-/* Driver state. The order of these is important! */\ndrivers/net/ethernet/intel/iavf/iavf.h:196:enum iavf_state_t {\ndrivers/net/ethernet/intel/iavf/iavf.h-197-\t__IAVF_STARTUP,\t\t/* driver loaded, probe complete */\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-213-\ndrivers/net/ethernet/intel/iavf/iavf.h:214:enum iavf_critical_section_t {\ndrivers/net/ethernet/intel/iavf/iavf.h-215-\t__IAVF_IN_REMOVE_TASK,\t/* device being removed */\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-238-/* bookkeeping of cloud filters */\ndrivers/net/ethernet/intel/iavf/iavf.h:239:struct iavf_cloud_filter {\ndrivers/net/ethernet/intel/iavf/iavf.h:240:\tenum iavf_cloud_filter_state_t state;\ndrivers/net/ethernet/intel/iavf/iavf.h-241-\tstruct list_head list;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-255-/* board specific private data structure */\ndrivers/net/ethernet/intel/iavf/iavf.h:256:struct iavf_adapter {\ndrivers/net/ethernet/intel/iavf/iavf.h-257-\tstruct workqueue_struct *wq;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-262-\twait_queue_head_t vc_waitqueue;\ndrivers/net/ethernet/intel/iavf/iavf.h:263:\tstruct iavf_q_vector *q_vectors;\ndrivers/net/ethernet/intel/iavf/iavf.h-264-\tstruct list_head vlan_filter_list;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-274-\t/* TX */\ndrivers/net/ethernet/intel/iavf/iavf.h:275:\tstruct iavf_ring *tx_rings;\ndrivers/net/ethernet/intel/iavf/iavf.h-276-\tu32 tx_timeout_count;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-279-\t/* RX */\ndrivers/net/ethernet/intel/iavf/iavf.h:280:\tstruct iavf_ring *rx_rings;\ndrivers/net/ethernet/intel/iavf/iavf.h-281-\tu64 hw_csum_rx_error;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-387-\ndrivers/net/ethernet/intel/iavf/iavf.h:388:\tstruct iavf_hw hw; /* defined in iavf_type.h */\ndrivers/net/ethernet/intel/iavf/iavf.h-389-\ndrivers/net/ethernet/intel/iavf/iavf.h:390:\tenum iavf_state_t state;\ndrivers/net/ethernet/intel/iavf/iavf.h:391:\tenum iavf_state_t last_state;\ndrivers/net/ethernet/intel/iavf/iavf.h-392-\tunsigned long crit_section;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-446-\tu64 supp_rxdids;\ndrivers/net/ethernet/intel/iavf/iavf.h:447:\tstruct iavf_ptp ptp;\ndrivers/net/ethernet/intel/iavf/iavf.h-448-\tu16 msg_enable;\ndrivers/net/ethernet/intel/iavf/iavf.h:449:\tstruct iavf_eth_stats current_stats;\ndrivers/net/ethernet/intel/iavf/iavf.h-450-\tstruct virtchnl_qos_cap_list *qos_caps;\ndrivers/net/ethernet/intel/iavf/iavf.h:451:\tstruct iavf_vsi vsi;\ndrivers/net/ethernet/intel/iavf/iavf.h-452-\tu32 aq_wait_count;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-460-\t/* ADQ related members */\ndrivers/net/ethernet/intel/iavf/iavf.h:461:\tstruct iavf_channel_config ch_config;\ndrivers/net/ethernet/intel/iavf/iavf.h-462-\tu8 num_tc;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-483-/* Must be called with fdir_fltr_lock lock held */\ndrivers/net/ethernet/intel/iavf/iavf.h:484:static inline bool iavf_fdir_max_reached(struct iavf_adapter *adapter)\ndrivers/net/ethernet/intel/iavf/iavf.h-485-{\n--\ndrivers/net/ethernet/intel/iavf/iavf.h=490=static inline void\ndrivers/net/ethernet/intel/iavf/iavf.h:491:iavf_inc_fdir_active_fltr(struct iavf_adapter *adapter,\ndrivers/net/ethernet/intel/iavf/iavf.h:492:\t\t\t struct iavf_fdir_fltr *fltr)\ndrivers/net/ethernet/intel/iavf/iavf.h-493-{\ndrivers/net/ethernet/intel/iavf/iavf.h:494:\tif (iavf_is_raw_fdir(fltr))\ndrivers/net/ethernet/intel/iavf/iavf.h-495-\t\tadapter-\u003eraw_fdir_active_fltr++;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h=500=static inline void\ndrivers/net/ethernet/intel/iavf/iavf.h:501:iavf_dec_fdir_active_fltr(struct iavf_adapter *adapter,\ndrivers/net/ethernet/intel/iavf/iavf.h:502:\t\t\t struct iavf_fdir_fltr *fltr)\ndrivers/net/ethernet/intel/iavf/iavf.h-503-{\ndrivers/net/ethernet/intel/iavf/iavf.h:504:\tif (iavf_is_raw_fdir(fltr))\ndrivers/net/ethernet/intel/iavf/iavf.h-505-\t\tadapter-\u003eraw_fdir_active_fltr--;\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-511-\ndrivers/net/ethernet/intel/iavf/iavf.h:512:/* needed by iavf_ethtool.c */\ndrivers/net/ethernet/intel/iavf/iavf.h:513:extern char iavf_driver_name[];\ndrivers/net/ethernet/intel/iavf/iavf.h-514-\ndrivers/net/ethernet/intel/iavf/iavf.h:515:static inline const char *iavf_state_str(enum iavf_state_t state)\ndrivers/net/ethernet/intel/iavf/iavf.h-516-{\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-550-\ndrivers/net/ethernet/intel/iavf/iavf.h:551:static inline void iavf_change_state(struct iavf_adapter *adapter,\ndrivers/net/ethernet/intel/iavf/iavf.h:552:\t\t\t\t enum iavf_state_t state)\ndrivers/net/ethernet/intel/iavf/iavf.h-553-{\n--\ndrivers/net/ethernet/intel/iavf/iavf.h-559-\t\t\"state transition from:%s to:%s\\n\",\ndrivers/net/ethernet/intel/iavf/iavf.h:560:\t\tiavf_state_str(adapter-\u003elast_state),\ndrivers/net/ethernet/intel/iavf/iavf.h:561:\t\tiavf_state_str(adapter-\u003estate));\ndrivers/net/ethernet/intel/iavf/iavf.h-562-}\ndrivers/net/ethernet/intel/iavf/iavf.h-563-\ndrivers/net/ethernet/intel/iavf/iavf.h:564:void iavf_down(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:565:int iavf_process_config(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:566:int iavf_parse_vf_resource_msg(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:567:void iavf_schedule_reset(struct iavf_adapter *adapter, u64 flags);\ndrivers/net/ethernet/intel/iavf/iavf.h:568:void iavf_schedule_aq_request(struct iavf_adapter *adapter, u64 flags);\ndrivers/net/ethernet/intel/iavf/iavf.h:569:void iavf_schedule_finish_config(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:570:void iavf_set_ethtool_ops(struct net_device *netdev);\ndrivers/net/ethernet/intel/iavf/iavf.h:571:void iavf_free_all_tx_resources(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:572:void iavf_free_all_rx_resources(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h-573-\ndrivers/net/ethernet/intel/iavf/iavf.h:574:int iavf_send_api_ver(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:575:int iavf_verify_api_ver(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:576:int iavf_send_vf_config_msg(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:577:int iavf_get_vf_config(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:578:int iavf_get_vf_vlan_v2_caps(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:579:int iavf_send_vf_offload_vlan_v2_msg(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:580:int iavf_send_vf_supported_rxdids_msg(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:581:int iavf_get_vf_supported_rxdids(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:582:int iavf_send_vf_ptp_caps_msg(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:583:int iavf_get_vf_ptp_caps(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:584:void iavf_set_queue_vlan_tag_loc(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:585:u16 iavf_get_num_vlans_added(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:586:void iavf_irq_enable(struct iavf_adapter *adapter, bool flush);\ndrivers/net/ethernet/intel/iavf/iavf.h:587:void iavf_configure_queues(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:588:void iavf_enable_queues(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:589:void iavf_disable_queues(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:590:void iavf_map_queues(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:591:void iavf_add_ether_addrs(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:592:void iavf_del_ether_addrs(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:593:void iavf_add_vlans(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:594:void iavf_del_vlans(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:595:void iavf_set_promiscuous(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:596:bool iavf_promiscuous_mode_changed(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:597:void iavf_request_stats(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:598:int iavf_request_reset(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:599:void iavf_get_rss_hashcfg(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:600:void iavf_set_rss_hashcfg(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:601:void iavf_set_rss_key(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:602:void iavf_set_rss_lut(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:603:void iavf_set_rss_hfunc(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:604:void iavf_enable_vlan_stripping(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:605:void iavf_disable_vlan_stripping(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:606:void iavf_virtchnl_completion(struct iavf_adapter *adapter,\ndrivers/net/ethernet/intel/iavf/iavf.h-607-\t\t\t enum virtchnl_ops v_opcode,\ndrivers/net/ethernet/intel/iavf/iavf.h:608:\t\t\t enum iavf_status v_retval, u8 *msg, u16 msglen);\ndrivers/net/ethernet/intel/iavf/iavf.h:609:int iavf_config_rss(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:610:void iavf_cfg_queues_bw(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:611:void iavf_cfg_queues_quanta_size(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:612:void iavf_get_qos_caps(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:613:void iavf_enable_channels(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:614:void iavf_disable_channels(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:615:void iavf_add_cloud_filter(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:616:void iavf_del_cloud_filter(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:617:void iavf_enable_vlan_stripping_v2(struct iavf_adapter *adapter, u16 tpid);\ndrivers/net/ethernet/intel/iavf/iavf.h:618:void iavf_disable_vlan_stripping_v2(struct iavf_adapter *adapter, u16 tpid);\ndrivers/net/ethernet/intel/iavf/iavf.h:619:void iavf_enable_vlan_insertion_v2(struct iavf_adapter *adapter, u16 tpid);\ndrivers/net/ethernet/intel/iavf/iavf.h:620:void iavf_disable_vlan_insertion_v2(struct iavf_adapter *adapter, u16 tpid);\ndrivers/net/ethernet/intel/iavf/iavf.h:621:void iavf_add_fdir_filter(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:622:void iavf_del_fdir_filter(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:623:void iavf_add_adv_rss_cfg(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:624:void iavf_del_adv_rss_cfg(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h:625:struct iavf_mac_filter *iavf_add_filter(struct iavf_adapter *adapter,\ndrivers/net/ethernet/intel/iavf/iavf.h-626-\t\t\t\t\tconst u8 *macaddr);\ndrivers/net/ethernet/intel/iavf/iavf.h:627:void iavf_reset_step(struct iavf_adapter *adapter);\ndrivers/net/ethernet/intel/iavf/iavf.h-628-#endif /* _IAVF_H_ */\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-3-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:4:#include \"iavf_status.h\"\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:5:#include \"iavf_type.h\"\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:6:#include \"iavf_register.h\"\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:7:#include \"iavf_adminq.h\"\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:8:#include \"iavf_prototype.h\"\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-9-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-10-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:11: * iavf_alloc_adminq_asq_ring - Allocate Admin Queue send rings\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-12- * @hw: pointer to the hardware structure\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-13- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:14:static enum iavf_status iavf_alloc_adminq_asq_ring(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-15-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:16:\tenum iavf_status ret_code;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-17-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:18:\tret_code = iavf_allocate_dma_mem(hw, \u0026hw-\u003eaq.asq.desc_buf,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:19:\t\t\t\t\t iavf_mem_atq_ring,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-20-\t\t\t\t\t (hw-\u003eaq.num_asq_entries *\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-25-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:26:\tret_code = iavf_allocate_virt_mem(hw, \u0026hw-\u003eaq.asq.cmd_buf,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-27-\t\t\t\t\t (hw-\u003eaq.num_asq_entries *\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:28:\t\t\t\t\t sizeof(struct iavf_asq_cmd_details)));\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-29-\tif (ret_code) {\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:30:\t\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.asq.desc_buf);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-31-\t\treturn ret_code;\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-37-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:38: * iavf_alloc_adminq_arq_ring - Allocate Admin Queue receive rings\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-39- * @hw: pointer to the hardware structure\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-40- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:41:static enum iavf_status iavf_alloc_adminq_arq_ring(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-42-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:43:\tenum iavf_status ret_code;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-44-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:45:\tret_code = iavf_allocate_dma_mem(hw, \u0026hw-\u003eaq.arq.desc_buf,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:46:\t\t\t\t\t iavf_mem_arq_ring,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-47-\t\t\t\t\t (hw-\u003eaq.num_arq_entries *\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-54-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:55: * iavf_free_adminq_asq - Free Admin Queue send rings\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-56- * @hw: pointer to the hardware structure\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-60- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:61:static void iavf_free_adminq_asq(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-62-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:63:\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.asq.desc_buf);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-64-}\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-66-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:67: * iavf_free_adminq_arq - Free Admin Queue receive rings\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-68- * @hw: pointer to the hardware structure\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-72- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:73:static void iavf_free_adminq_arq(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-74-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:75:\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.arq.desc_buf);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-76-}\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-78-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:79: * iavf_alloc_arq_bufs - Allocate pre-posted buffers for the receive queue\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-80- * @hw: pointer to the hardware structure\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-81- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:82:static enum iavf_status iavf_alloc_arq_bufs(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-83-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-84-\tstruct libie_aq_desc *desc;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:85:\tstruct iavf_dma_mem *bi;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:86:\tenum iavf_status ret_code;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-87-\tint i;\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-93-\t/* buffer_info structures do not need alignment */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:94:\tret_code = iavf_allocate_virt_mem(hw, \u0026hw-\u003eaq.arq.dma_head,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-95-\t\t\t\t\t (hw-\u003eaq.num_arq_entries *\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:96:\t\t\t\t\t sizeof(struct iavf_dma_mem)));\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-97-\tif (ret_code)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-98-\t\tgoto alloc_arq_bufs;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:99:\thw-\u003eaq.arq.r.arq_bi = (struct iavf_dma_mem *)hw-\u003eaq.arq.dma_head.va;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-100-\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-103-\t\tbi = \u0026hw-\u003eaq.arq.r.arq_bi[i];\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:104:\t\tret_code = iavf_allocate_dma_mem(hw, bi,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:105:\t\t\t\t\t\t iavf_mem_arq_buf,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-106-\t\t\t\t\t\t hw-\u003eaq.arq_buf_size,\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-139-\tfor (; i \u003e= 0; i--)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:140:\t\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.arq.r.arq_bi[i]);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:141:\tiavf_free_virt_mem(hw, \u0026hw-\u003eaq.arq.dma_head);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-142-\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-146-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:147: * iavf_alloc_asq_bufs - Allocate empty buffer structs for the send queue\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-148- * @hw: pointer to the hardware structure\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-149- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:150:static enum iavf_status iavf_alloc_asq_bufs(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-151-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:152:\tstruct iavf_dma_mem *bi;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:153:\tenum iavf_status ret_code;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-154-\tint i;\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-156-\t/* No mapped memory needed yet, just the buffer info structures */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:157:\tret_code = iavf_allocate_virt_mem(hw, \u0026hw-\u003eaq.asq.dma_head,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-158-\t\t\t\t\t (hw-\u003eaq.num_asq_entries *\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:159:\t\t\t\t\t sizeof(struct iavf_dma_mem)));\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-160-\tif (ret_code)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-161-\t\tgoto alloc_asq_bufs;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:162:\thw-\u003eaq.asq.r.asq_bi = (struct iavf_dma_mem *)hw-\u003eaq.asq.dma_head.va;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-163-\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-166-\t\tbi = \u0026hw-\u003eaq.asq.r.asq_bi[i];\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:167:\t\tret_code = iavf_allocate_dma_mem(hw, bi,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:168:\t\t\t\t\t\t iavf_mem_asq_buf,\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-169-\t\t\t\t\t\t hw-\u003eaq.asq_buf_size,\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-180-\tfor (; i \u003e= 0; i--)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:181:\t\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.asq.r.asq_bi[i]);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:182:\tiavf_free_virt_mem(hw, \u0026hw-\u003eaq.asq.dma_head);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-183-\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-187-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:188: * iavf_free_arq_bufs - Free receive queue buffer info elements\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-189- * @hw: pointer to the hardware structure\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-190- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:191:static void iavf_free_arq_bufs(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-192-{\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-196-\tfor (i = 0; i \u003c hw-\u003eaq.num_arq_entries; i++)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:197:\t\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.arq.r.arq_bi[i]);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-198-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-199-\t/* free the descriptor memory */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:200:\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.arq.desc_buf);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-201-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-202-\t/* free the dma header */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:203:\tiavf_free_virt_mem(hw, \u0026hw-\u003eaq.arq.dma_head);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-204-}\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-206-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:207: * iavf_free_asq_bufs - Free send queue buffer info elements\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-208- * @hw: pointer to the hardware structure\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-209- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:210:static void iavf_free_asq_bufs(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-211-{\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-216-\t\tif (hw-\u003eaq.asq.r.asq_bi[i].pa)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:217:\t\t\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.asq.r.asq_bi[i]);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-218-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-219-\t/* free the buffer info list */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:220:\tiavf_free_virt_mem(hw, \u0026hw-\u003eaq.asq.cmd_buf);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-221-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-222-\t/* free the descriptor memory */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:223:\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.asq.desc_buf);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-224-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-225-\t/* free the dma header */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:226:\tiavf_free_virt_mem(hw, \u0026hw-\u003eaq.asq.dma_head);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-227-}\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-229-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:230: * iavf_config_asq_regs - configure ASQ registers\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-231- * @hw: pointer to the hardware structure\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-234- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:235:static enum iavf_status iavf_config_asq_regs(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-236-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:237:\tenum iavf_status ret_code = 0;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-238-\tu32 reg = 0;\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-258-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:259: * iavf_config_arq_regs - ARQ register configuration\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-260- * @hw: pointer to the hardware structure\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-263- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:264:static enum iavf_status iavf_config_arq_regs(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-265-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:266:\tenum iavf_status ret_code = 0;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-267-\tu32 reg = 0;\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-290-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:291: * iavf_init_asq - main initialization routine for ASQ\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-292- * @hw: pointer to the hardware structure\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-302- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:303:static enum iavf_status iavf_init_asq(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-304-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:305:\tenum iavf_status ret_code = 0;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-306-\tint i;\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-324-\t/* allocate the ring memory */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:325:\tret_code = iavf_alloc_adminq_asq_ring(hw);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-326-\tif (ret_code)\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-329-\t/* allocate buffers in the rings */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:330:\tret_code = iavf_alloc_asq_bufs(hw);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-331-\tif (ret_code)\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-334-\t/* initialize base registers */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:335:\tret_code = iavf_config_asq_regs(hw);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-336-\tif (ret_code)\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-344-\tfor (i = 0; i \u003c hw-\u003eaq.num_asq_entries; i++)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:345:\t\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.asq.r.asq_bi[i]);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:346:\tiavf_free_virt_mem(hw, \u0026hw-\u003eaq.asq.dma_head);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-347-\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-348-init_adminq_free_rings:\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:349:\tiavf_free_adminq_asq(hw);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-350-\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-355-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:356: * iavf_init_arq - initialize ARQ\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-357- * @hw: pointer to the hardware structure\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-367- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:368:static enum iavf_status iavf_init_arq(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-369-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:370:\tenum iavf_status ret_code = 0;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-371-\tint i;\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-389-\t/* allocate the ring memory */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:390:\tret_code = iavf_alloc_adminq_arq_ring(hw);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-391-\tif (ret_code)\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-394-\t/* allocate buffers in the rings */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:395:\tret_code = iavf_alloc_arq_bufs(hw);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-396-\tif (ret_code)\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-399-\t/* initialize base registers */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:400:\tret_code = iavf_config_arq_regs(hw);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-401-\tif (ret_code)\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-409-\tfor (i = 0; i \u003c hw-\u003eaq.num_arq_entries; i++)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:410:\t\tiavf_free_dma_mem(hw, \u0026hw-\u003eaq.arq.r.arq_bi[i]);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:411:\tiavf_free_virt_mem(hw, \u0026hw-\u003eaq.arq.dma_head);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-412-init_adminq_free_rings:\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:413:\tiavf_free_adminq_arq(hw);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-414-\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-419-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:420: * iavf_shutdown_asq - shutdown the ASQ\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-421- * @hw: pointer to the hardware structure\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-424- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:425:static enum iavf_status iavf_shutdown_asq(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-426-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:427:\tenum iavf_status ret_code = 0;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-428-\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-445-\t/* free ring buffers */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:446:\tiavf_free_asq_bufs(hw);\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-447-\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-453-/**\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:454: * iavf_shutdown_arq - shutdown ARQ\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-455- * @hw: pointer to the hardware structure\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-458- **/\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:459:static enum iavf_status iavf_shutdown_arq(struct iavf_hw *hw)\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-460-{\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:461:\tenum iavf_status ret_code = 0;\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-462-\n--\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c-479-\t/* free ring buffers */\ndrivers/net/ethernet/intel/iavf/iavf_adminq.c:480:\tiavf_free_arq_bufs(hw);\n\n"
} |
| 5/2 | 2026/08/01 19:23 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 20085 output: 24 thoughts: 279 Thoughts: **My Assessment of the IAVF Driver and its Fuzzing Potential** Okay, so I'm looking at this `iavf` driver – Intel's Ethernet Adaptive Virtual Function driver. The `Makefile` confirms it, and the name alone screams virtualization, which makes me think of SR-IOV. Ah, right, VF drivers are *specifically* for VMs with SR-IOV. But the critical piece is that they need dedicated hardware, passed through via PCI passthrough. Can `iavf` be emulated then? No, QEMU doesn't natively emulate the Intel AVF. The next question then becomes: does syzkaller fuzz this? I need to think this through. The prompt mentions a restriction, focusing on vendor-specific PCIe switch, SmartNIC, or GPU drivers, like mlxsw, pds_core, qed, ionic, amdgpu, that depend on *actual* PCIe hardware. Is `iavf` one of *those*? Well, it's an Intel Ethernet driver, so yes, I'd say that fits the description. But wait a minute, syzkaller *does* have `syz_pci_device`, which *can* emulate PCI devices. I need to clarify what the implications are with this mechanism, and how it handles the interaction between the physical and virtual components. Perhaps it can handle `iavf`? I need to check if there is a description in syzkaller for `iavf`. |
| 6/2 | 2026/08/01 19:23 | tool | grepper |
0mError:no matches Args: {
"Expression": "iavf",
"PathPrefix": "sys/"
}Results: {
"error": "no matches"
} |
| 7/2 | 2026/08/01 19:23 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 20717 output: 29 thoughts: 389 Thoughts: **My Analysis of the Task and Available Tools** Okay, first things first, I need to make sure I understand the restrictions. I see the prompt explicitly forbids using `default_api:grepper` to search within `sys/`. That's a key detail – it seems like these `syz_*` calls are specific to syzkaller and not directly present in the Linux kernel source. I was expecting `read-syz-spec` and `syz-grepper` but I don't see those tools listed. I am constrained to using `default_api:grepper`, `default_api:codesearch-dir-index`, `default_api:read-file`, and `default_api:set-results`. Right, I have to work with what's available. Now, I need to apply the rule: "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." I see `iavf` mentioned. Is that a vendor-specific PCIe driver? Yes, it's an Intel Ethernet driver. Okay, but the next question is if it's emulated in QEMU. Let's see... QEMU emulates `e1000`, `e1000e`, `rtl8139`, `virtio-net`, `vmxnet3`, `pcnet`, `ne2k_pci`, `i82559er`, `tulip`. No, it doesn't emulate `iavf`. Wait, what about `libeth`? The patch also modifies `include/net/libeth/rx.h`. I'd better figure out what `libeth` is. |
| 8/2 | 2026/08/01 19:23 | tool | grepper |
0mArgs:{
"Expression": "libeth",
"PathPrefix": "include/net/libeth/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 1653 lines.\nUse more precise expression if possible.\n\ninclude/net/libeth/cache.h-9-/**\ninclude/net/libeth/cache.h:10: * libeth_cacheline_group_assert - make sure cacheline group size is expected\ninclude/net/libeth/cache.h-11- * @type: type of the structure containing the group\n--\ninclude/net/libeth/cache.h-15-#if defined(CONFIG_64BIT) \u0026\u0026 SMP_CACHE_BYTES == 64\ninclude/net/libeth/cache.h:16:#define libeth_cacheline_group_assert(type, grp, sz)\t\t\t \\\ninclude/net/libeth/cache.h-17-\tstatic_assert(offsetof(type, __cacheline_group_end__##grp) -\t \\\n--\ninclude/net/libeth/cache.h-19-\t\t (sz))\ninclude/net/libeth/cache.h:20:#define __libeth_cacheline_struct_assert(type, sz)\t\t\t \\\ninclude/net/libeth/cache.h-21-\tstatic_assert(sizeof(type) == (sz))\ninclude/net/libeth/cache.h-22-#else /* !CONFIG_64BIT || SMP_CACHE_BYTES != 64 */\ninclude/net/libeth/cache.h:23:#define libeth_cacheline_group_assert(type, grp, sz)\t\t\t \\\ninclude/net/libeth/cache.h-24-\tstatic_assert(offsetof(type, __cacheline_group_end__##grp) -\t \\\n--\ninclude/net/libeth/cache.h-26-\t\t (sz))\ninclude/net/libeth/cache.h:27:#define __libeth_cacheline_struct_assert(type, sz)\t\t\t \\\ninclude/net/libeth/cache.h-28-\tstatic_assert(sizeof(type) \u003c= (sz))\n--\ninclude/net/libeth/cache.h-30-\ninclude/net/libeth/cache.h:31:#define __libeth_cls1(sz1)\tSMP_CACHE_ALIGN(sz1)\ninclude/net/libeth/cache.h:32:#define __libeth_cls2(sz1, sz2)\t(SMP_CACHE_ALIGN(sz1) + SMP_CACHE_ALIGN(sz2))\ninclude/net/libeth/cache.h:33:#define __libeth_cls3(sz1, sz2, sz3)\t\t\t\t\t \\\ninclude/net/libeth/cache.h-34-\t(SMP_CACHE_ALIGN(sz1) + SMP_CACHE_ALIGN(sz2) + SMP_CACHE_ALIGN(sz3))\ninclude/net/libeth/cache.h:35:#define __libeth_cls(...)\t\t\t\t\t\t \\\ninclude/net/libeth/cache.h:36:\tCONCATENATE(__libeth_cls, COUNT_ARGS(__VA_ARGS__))(__VA_ARGS__)\ninclude/net/libeth/cache.h-37-\ninclude/net/libeth/cache.h-38-/**\ninclude/net/libeth/cache.h:39: * libeth_cacheline_struct_assert - make sure CL-based struct size is expected\ninclude/net/libeth/cache.h-40- * @type: type of the struct\n--\ninclude/net/libeth/cache.h-46- */\ninclude/net/libeth/cache.h:47:#define libeth_cacheline_struct_assert(type, ...)\t\t\t \\\ninclude/net/libeth/cache.h:48:\t__libeth_cacheline_struct_assert(type, __libeth_cls(__VA_ARGS__)); \\\ninclude/net/libeth/cache.h-49-\tstatic_assert(__alignof(type) \u003e= SMP_CACHE_BYTES)\n--\ninclude/net/libeth/cache.h-51-/**\ninclude/net/libeth/cache.h:52: * libeth_cacheline_set_assert - make sure CL-based struct layout is expected\ninclude/net/libeth/cache.h-53- * @type: type of the struct\n--\ninclude/net/libeth/cache.h-59- */\ninclude/net/libeth/cache.h:60:#define libeth_cacheline_set_assert(type, ro, rw, c)\t\t\t \\\ninclude/net/libeth/cache.h:61:\tlibeth_cacheline_group_assert(type, read_mostly, ro);\t\t \\\ninclude/net/libeth/cache.h:62:\tlibeth_cacheline_group_assert(type, read_write, rw);\t\t \\\ninclude/net/libeth/cache.h:63:\tlibeth_cacheline_group_assert(type, cold, c);\t\t\t \\\ninclude/net/libeth/cache.h:64:\tlibeth_cacheline_struct_assert(type, ro, rw, c)\ninclude/net/libeth/cache.h-65-\n--\ninclude/net/libeth/rx.h-34-/**\ninclude/net/libeth/rx.h:35: * struct libeth_fqe - structure representing an Rx buffer (fill queue element)\ninclude/net/libeth/rx.h-36- * @netmem: network memory reference holding the buffer\n--\ninclude/net/libeth/rx.h-43- */\ninclude/net/libeth/rx.h:44:struct libeth_fqe {\ninclude/net/libeth/rx.h-45-\tnetmem_ref\t\tnetmem;\n--\ninclude/net/libeth/rx.h-50-/**\ninclude/net/libeth/rx.h:51: * enum libeth_fqe_type - enum representing types of Rx buffers\ninclude/net/libeth/rx.h-52- * @LIBETH_FQE_MTU: buffer size is determined by MTU\n--\ninclude/net/libeth/rx.h-55- */\ninclude/net/libeth/rx.h:56:enum libeth_fqe_type {\ninclude/net/libeth/rx.h-57-\tLIBETH_FQE_MTU\t\t= 0U,\n--\ninclude/net/libeth/rx.h-62-/**\ninclude/net/libeth/rx.h:63: * struct libeth_fq - structure representing a buffer (fill) queue\ninclude/net/libeth/rx.h-64- * @fp: hotpath part of the structure\n--\ninclude/net/libeth/rx.h-74- */\ninclude/net/libeth/rx.h:75:struct libeth_fq {\ninclude/net/libeth/rx.h:76:\tstruct_group_tagged(libeth_fq_fp, fp,\ninclude/net/libeth/rx.h-77-\t\tstruct page_pool\t*pp;\ninclude/net/libeth/rx.h:78:\t\tstruct libeth_fqe\t*fqes;\ninclude/net/libeth/rx.h-79-\n--\ninclude/net/libeth/rx.h-84-\t/* Cold fields */\ninclude/net/libeth/rx.h:85:\tenum libeth_fqe_type\ttype:2;\ninclude/net/libeth/rx.h-86-\tbool\t\t\thsplit:1;\n--\ninclude/net/libeth/rx.h-92-\ninclude/net/libeth/rx.h:93:int libeth_rx_fq_create(struct libeth_fq *fq, struct napi_struct *napi);\ninclude/net/libeth/rx.h:94:void libeth_rx_fq_destroy(struct libeth_fq *fq);\ninclude/net/libeth/rx.h-95-\ninclude/net/libeth/rx.h-96-/**\ninclude/net/libeth/rx.h:97: * libeth_rx_alloc - allocate a new Rx buffer\ninclude/net/libeth/rx.h-98- * @fq: fill queue to allocate for\n--\ninclude/net/libeth/rx.h-103- */\ninclude/net/libeth/rx.h:104:static inline dma_addr_t libeth_rx_alloc(const struct libeth_fq_fp *fq, u32 i)\ninclude/net/libeth/rx.h-105-{\ninclude/net/libeth/rx.h:106:\tstruct libeth_fqe *buf = \u0026fq-\u003efqes[i];\ninclude/net/libeth/rx.h-107-\n--\ninclude/net/libeth/rx.h-117-\ninclude/net/libeth/rx.h:118:void libeth_rx_recycle_slow(netmem_ref netmem);\ninclude/net/libeth/rx.h-119-\ninclude/net/libeth/rx.h-120-/**\ninclude/net/libeth/rx.h:121: * __libeth_rx_sync_for_cpu - synchronize or recycle buffer post DMA\ninclude/net/libeth/rx.h-122- * @pool: \u0026page_pool the buffer was allocated from\n--\ninclude/net/libeth/rx.h-130- */\ninclude/net/libeth/rx.h:131:static inline bool __libeth_rx_sync_for_cpu(const struct page_pool *pool,\ninclude/net/libeth/rx.h:132:\t\t\t\t\t const struct libeth_fqe *fqe,\ninclude/net/libeth/rx.h-133-\t\t\t\t\t u32 len)\n--\ninclude/net/libeth/rx.h-139-\tif (unlikely(!len)) {\ninclude/net/libeth/rx.h:140:\t\tlibeth_rx_recycle_slow(fqe-\u003enetmem);\ninclude/net/libeth/rx.h-141-\t\treturn false;\n--\ninclude/net/libeth/rx.h-149-/**\ninclude/net/libeth/rx.h:150: * libeth_rx_sync_for_cpu - synchronize or recycle buffer post DMA\ninclude/net/libeth/rx.h-151- * @fqe: buffer to process\n--\ninclude/net/libeth/rx.h-159- */\ninclude/net/libeth/rx.h:160:static inline bool libeth_rx_sync_for_cpu(const struct libeth_fqe *fqe,\ninclude/net/libeth/rx.h-161-\t\t\t\t\t u32 len)\ninclude/net/libeth/rx.h-162-{\ninclude/net/libeth/rx.h:163:\treturn __libeth_rx_sync_for_cpu(netmem_get_pp(fqe-\u003enetmem), fqe, len);\ninclude/net/libeth/rx.h-164-}\n--\ninclude/net/libeth/rx.h=195=enum {\n--\ninclude/net/libeth/rx.h-208-\ninclude/net/libeth/rx.h:209:struct libeth_rx_pt {\ninclude/net/libeth/rx.h-210-\tu32\t\t\t\t\touter_ip:2;\n--\ninclude/net/libeth/rx.h-222-/**\ninclude/net/libeth/rx.h:223: * struct libeth_rx_csum - checksum offload bits decoded from the Rx descriptor\ninclude/net/libeth/rx.h-224- * @l3l4p: detectable L3 and L4 integrity check is processed by the hardware\n--\ninclude/net/libeth/rx.h-235- */\ninclude/net/libeth/rx.h:236:struct libeth_rx_csum {\ninclude/net/libeth/rx.h-237-\tu32\t\t\t\t\tl3l4p:1;\n--\ninclude/net/libeth/rx.h-251-/**\ninclude/net/libeth/rx.h:252: * struct libeth_rqe_info - receive queue element info\ninclude/net/libeth/rx.h-253- * @len: packet length\n--\ninclude/net/libeth/rx.h-258- */\ninclude/net/libeth/rx.h:259:struct libeth_rqe_info {\ninclude/net/libeth/rx.h-260-\tu32\t\t\t\t\tlen;\n--\ninclude/net/libeth/rx.h-268-\ninclude/net/libeth/rx.h:269:void libeth_rx_pt_gen_hash_type(struct libeth_rx_pt *pt);\ninclude/net/libeth/rx.h-270-\ninclude/net/libeth/rx.h-271-/**\ninclude/net/libeth/rx.h:272: * libeth_rx_pt_get_ip_ver - get IP version from a packet type structure\ninclude/net/libeth/rx.h-273- * @pt: packet type params\n--\ninclude/net/libeth/rx.h-279- */\ninclude/net/libeth/rx.h:280:static inline u32 libeth_rx_pt_get_ip_ver(struct libeth_rx_pt pt)\ninclude/net/libeth/rx.h-281-{\n--\ninclude/net/libeth/rx.h-293-\ninclude/net/libeth/rx.h:294:/* libeth_has_*() can be used to quickly check whether the HW metadata is\ninclude/net/libeth/rx.h-295- * available to avoid further expensive processing such as descriptor reads.\n--\ninclude/net/libeth/rx.h-299-\ninclude/net/libeth/rx.h:300:static inline bool libeth_rx_pt_has_checksum(const struct net_device *dev,\ninclude/net/libeth/rx.h:301:\t\t\t\t\t struct libeth_rx_pt pt)\ninclude/net/libeth/rx.h-302-{\n--\ninclude/net/libeth/rx.h-309-\ninclude/net/libeth/rx.h:310:static inline bool libeth_rx_pt_has_hash(const struct net_device *dev,\ninclude/net/libeth/rx.h:311:\t\t\t\t\t struct libeth_rx_pt pt)\ninclude/net/libeth/rx.h-312-{\n--\ninclude/net/libeth/rx.h-317-/**\ninclude/net/libeth/rx.h:318: * libeth_rx_pt_set_hash - fill in skb hash value basing on the PT\ninclude/net/libeth/rx.h-319- * @skb: skb to fill the hash in\n--\ninclude/net/libeth/rx.h-322- */\ninclude/net/libeth/rx.h:323:static inline void libeth_rx_pt_set_hash(struct sk_buff *skb, u32 hash,\ninclude/net/libeth/rx.h:324:\t\t\t\t\t struct libeth_rx_pt pt)\ninclude/net/libeth/rx.h-325-{\n--\ninclude/net/libeth/tx.h-8-\ninclude/net/libeth/tx.h:9:#include \u003cnet/libeth/types.h\u003e\ninclude/net/libeth/tx.h-10-\n--\ninclude/net/libeth/tx.h-13-/**\ninclude/net/libeth/tx.h:14: * enum libeth_sqe_type - type of \u0026libeth_sqe to act on Tx completion\ninclude/net/libeth/tx.h-15- * @LIBETH_SQE_EMPTY: unused/empty OR XDP_TX/XSk frame, no action required\n--\ninclude/net/libeth/tx.h-20- * @__LIBETH_SQE_XDP_START: separator between skb and XDP types\ninclude/net/libeth/tx.h:21: * @LIBETH_SQE_XDP_TX: \u0026skb_shared_info, libeth_xdp_return_buff_bulk(), stats\ninclude/net/libeth/tx.h-22- * @LIBETH_SQE_XDP_XMIT: \u0026xdp_frame, unmap and xdp_return_frame_bulk(), stats\ninclude/net/libeth/tx.h-23- * @LIBETH_SQE_XDP_XMIT_FRAG: \u0026xdp_frame frag, only unmap DMA\ninclude/net/libeth/tx.h:24: * @LIBETH_SQE_XSK_TX: \u0026libeth_xdp_buff on XSk queue, xsk_buff_free(), stats\ninclude/net/libeth/tx.h:25: * @LIBETH_SQE_XSK_TX_FRAG: \u0026libeth_xdp_buff frag on XSk queue, xsk_buff_free()\ninclude/net/libeth/tx.h-26- */\ninclude/net/libeth/tx.h:27:enum libeth_sqe_type {\ninclude/net/libeth/tx.h-28-\tLIBETH_SQE_EMPTY\t\t= 0U,\n--\ninclude/net/libeth/tx.h-42-/**\ninclude/net/libeth/tx.h:43: * struct libeth_sqe - represents a Send Queue Element / Tx buffer\ninclude/net/libeth/tx.h-44- * @type: type of the buffer, see the enum above\n--\ninclude/net/libeth/tx.h-57- */\ninclude/net/libeth/tx.h:58:struct libeth_sqe {\ninclude/net/libeth/tx.h:59:\tenum libeth_sqe_type\t\ttype:32;\ninclude/net/libeth/tx.h-60-\tu32\t\t\t\trs_idx;\n--\ninclude/net/libeth/tx.h-66-\t\tstruct xdp_frame\t\t*xdpf;\ninclude/net/libeth/tx.h:67:\t\tstruct libeth_xdp_buff\t\t*xsk;\ninclude/net/libeth/tx.h-68-\t};\n--\ninclude/net/libeth/tx.h-81- * LIBETH_SQE_CHECK_PRIV - check the driver's private SQE data\ninclude/net/libeth/tx.h:82: * @p: type or name of the object the driver wants to fit into \u0026libeth_sqe\ninclude/net/libeth/tx.h-83- *\ninclude/net/libeth/tx.h:84: * Make sure the driver's private data fits into libeth_sqe::priv. To be used\ninclude/net/libeth/tx.h-85- * right after its declaration.\n--\ninclude/net/libeth/tx.h-87-#define LIBETH_SQE_CHECK_PRIV(p)\t\t\t\t\t \\\ninclude/net/libeth/tx.h:88:\tstatic_assert(sizeof(p) \u003c= sizeof_field(struct libeth_sqe, priv))\ninclude/net/libeth/tx.h-89-\ninclude/net/libeth/tx.h-90-/**\ninclude/net/libeth/tx.h:91: * struct libeth_cq_pp - completion queue poll params\ninclude/net/libeth/tx.h-92- * @dev: \u0026device to perform DMA unmapping\n--\ninclude/net/libeth/tx.h-98- *\ninclude/net/libeth/tx.h:99: * libeth uses this structure to access objects needed for performing full\ninclude/net/libeth/tx.h-100- * Tx complete operation without passing lots of arguments and change the\n--\ninclude/net/libeth/tx.h-102- */\ninclude/net/libeth/tx.h:103:struct libeth_cq_pp {\ninclude/net/libeth/tx.h-104-\tstruct device\t\t\t*dev;\n--\ninclude/net/libeth/tx.h-107-\tunion {\ninclude/net/libeth/tx.h:108:\t\tstruct libeth_sq_napi_stats\t*ss;\ninclude/net/libeth/tx.h:109:\t\tstruct libeth_xdpsq_napi_stats\t*xss;\ninclude/net/libeth/tx.h-110-\t};\n--\ninclude/net/libeth/tx.h-116-/**\ninclude/net/libeth/tx.h:117: * libeth_tx_complete - perform Tx completion for one SQE\ninclude/net/libeth/tx.h-118- * @sqe: SQE to complete\n--\ninclude/net/libeth/tx.h-123- */\ninclude/net/libeth/tx.h:124:static inline void libeth_tx_complete(struct libeth_sqe *sqe,\ninclude/net/libeth/tx.h:125:\t\t\t\t const struct libeth_cq_pp *cp)\ninclude/net/libeth/tx.h-126-{\n--\ninclude/net/libeth/tx.h-156-\ninclude/net/libeth/tx.h:157:void libeth_tx_complete_any(struct libeth_sqe *sqe, struct libeth_cq_pp *cp);\ninclude/net/libeth/tx.h-158-\n--\ninclude/net/libeth/types.h-11-/**\ninclude/net/libeth/types.h:12: * struct libeth_rq_napi_stats - \"hot\" counters to update in Rx polling loop\ninclude/net/libeth/types.h-13- * @packets: received frames counter\n--\ninclude/net/libeth/types.h-18- */\ninclude/net/libeth/types.h:19:struct libeth_rq_napi_stats {\ninclude/net/libeth/types.h-20-\tunion {\n--\ninclude/net/libeth/types.h-31-/**\ninclude/net/libeth/types.h:32: * struct libeth_sq_napi_stats - \"hot\" counters to update in Tx completion loop\ninclude/net/libeth/types.h-33- * @packets: completed frames counter\n--\ninclude/net/libeth/types.h-36- */\ninclude/net/libeth/types.h:37:struct libeth_sq_napi_stats {\ninclude/net/libeth/types.h-38-\tunion {\n--\ninclude/net/libeth/types.h-47-/**\ninclude/net/libeth/types.h:48: * struct libeth_xdpsq_napi_stats - \"hot\" counters to update in XDP Tx\ninclude/net/libeth/types.h-49- *\t\t\t\t completion loop\n--\ninclude/net/libeth/types.h-54- */\ninclude/net/libeth/types.h:55:struct libeth_xdpsq_napi_stats {\ninclude/net/libeth/types.h-56-\tunion {\n--\ninclude/net/libeth/types.h-69- * The following structures should be embedded into driver's queue structure\ninclude/net/libeth/types.h:70: * and passed to the libeth_xdp helpers, never used directly.\ninclude/net/libeth/types.h-71- */\n--\ninclude/net/libeth/types.h-75-/**\ninclude/net/libeth/types.h:76: * struct libeth_xdpsq_lock - locking primitive for sharing XDPSQs\ninclude/net/libeth/types.h-77- * @lock: spinlock for locking the queue\n--\ninclude/net/libeth/types.h-79- */\ninclude/net/libeth/types.h:80:struct libeth_xdpsq_lock {\ninclude/net/libeth/types.h-81-\tspinlock_t\t\t\tlock;\n--\ninclude/net/libeth/types.h-87-/**\ninclude/net/libeth/types.h:88: * struct libeth_xdpsq_timer - timer for cleaning up XDPSQs w/o interrupts\ninclude/net/libeth/types.h-89- * @xdpsq: queue this timer belongs to\n--\ninclude/net/libeth/types.h-96- */\ninclude/net/libeth/types.h:97:struct libeth_xdpsq_timer {\ninclude/net/libeth/types.h-98-\tvoid\t\t\t\t*xdpsq;\ninclude/net/libeth/types.h:99:\tstruct libeth_xdpsq_lock\t*lock;\ninclude/net/libeth/types.h-100-\n--\ninclude/net/libeth/types.h-106-/**\ninclude/net/libeth/types.h:107: * struct libeth_xdp_buff_stash - struct for stashing \u0026xdp_buff onto a queue\ninclude/net/libeth/types.h-108- * @data: pointer to the start of the frame, xdp_buff.data\n--\ninclude/net/libeth/types.h-113- *\ninclude/net/libeth/types.h:114: * \u0026xdp_buff is 56 bytes long on x64, \u0026libeth_xdp_buff is 64 bytes. This\ninclude/net/libeth/types.h-115- * structure carries only necessary fields to save/restore a partially built\n--\ninclude/net/libeth/types.h-117- */\ninclude/net/libeth/types.h:118:struct libeth_xdp_buff_stash {\ninclude/net/libeth/types.h-119-\tvoid\t\t\t\t*data;\n--\ninclude/net/libeth/xdp.h-9-\ninclude/net/libeth/xdp.h:10:#include \u003cnet/libeth/rx.h\u003e\ninclude/net/libeth/xdp.h:11:#include \u003cnet/libeth/tx.h\u003e\ninclude/net/libeth/xdp.h-12-#include \u003cnet/xsk_buff_pool.h\u003e\n--\ninclude/net/libeth/xdp.h=18=enum {\n--\ninclude/net/libeth/xdp.h-26-/*\ninclude/net/libeth/xdp.h:27: * \u0026xdp_buff_xsk is the largest structure \u0026libeth_xdp_buff gets casted to,\ninclude/net/libeth/xdp.h-28- * pick maximum pointer-compatible alignment.\n--\ninclude/net/libeth/xdp.h-35-/**\ninclude/net/libeth/xdp.h:36: * struct libeth_xdp_buff - libeth extension over \u0026xdp_buff\ninclude/net/libeth/xdp.h-37- * @base: main \u0026xdp_buff\n--\ninclude/net/libeth/xdp.h-46- */\ninclude/net/libeth/xdp.h:47:struct libeth_xdp_buff {\ninclude/net/libeth/xdp.h-48-\tunion {\n--\ninclude/net/libeth/xdp.h-56-} __aligned(__LIBETH_XDP_BUFF_ALIGN);\ninclude/net/libeth/xdp.h:57:static_assert(offsetof(struct libeth_xdp_buff, data) ==\ninclude/net/libeth/xdp.h-58-\t offsetof(struct xdp_buff_xsk, xdp.data));\ninclude/net/libeth/xdp.h:59:static_assert(offsetof(struct libeth_xdp_buff, desc) ==\ninclude/net/libeth/xdp.h-60-\t offsetof(struct xdp_buff_xsk, cb));\ninclude/net/libeth/xdp.h=61=static_assert(IS_ALIGNED(sizeof(struct xdp_buff_xsk),\ninclude/net/libeth/xdp.h:62:\t\t\t __alignof(struct libeth_xdp_buff)));\ninclude/net/libeth/xdp.h-63-\ninclude/net/libeth/xdp.h-64-/**\ninclude/net/libeth/xdp.h:65: * __LIBETH_XDP_ONSTACK_BUFF - declare a \u0026libeth_xdp_buff on the stack\ninclude/net/libeth/xdp.h-66- * @name: name of the variable to declare\n--\ninclude/net/libeth/xdp.h-71-/**\ninclude/net/libeth/xdp.h:72: * LIBETH_XDP_ONSTACK_BUFF - declare a \u0026libeth_xdp_buff on the stack\ninclude/net/libeth/xdp.h-73- * @name: name of the variable to declare\n--\ninclude/net/libeth/xdp.h-76-#define LIBETH_XDP_ONSTACK_BUFF(name, ...)\t\t\t\t \\\ninclude/net/libeth/xdp.h:77:\t__LIBETH_XDP_ONSTACK_BUFF(name, __libeth_xdp_priv_sz(__VA_ARGS__))\ninclude/net/libeth/xdp.h-78-\ninclude/net/libeth/xdp.h-79-#define ___LIBETH_XDP_ONSTACK_BUFF(name, ...)\t\t\t\t \\\ninclude/net/libeth/xdp.h:80:\t__DEFINE_FLEX(struct libeth_xdp_buff, name, priv,\t\t \\\ninclude/net/libeth/xdp.h-81-\t\t LIBETH_XDP_PRIV_SZ(__VA_ARGS__ + 0),\t\t \\\n--\ninclude/net/libeth/xdp.h-84-\ninclude/net/libeth/xdp.h:85:#define __libeth_xdp_priv_sz(...)\t\t\t\t\t \\\ninclude/net/libeth/xdp.h:86:\tCONCATENATE(__libeth_xdp_psz, COUNT_ARGS(__VA_ARGS__))(__VA_ARGS__)\ninclude/net/libeth/xdp.h-87-\ninclude/net/libeth/xdp.h:88:#define __libeth_xdp_psz0(...)\ninclude/net/libeth/xdp.h:89:#define __libeth_xdp_psz1(...)\t\tsizeof(__VA_ARGS__)\ninclude/net/libeth/xdp.h-90-\ninclude/net/libeth/xdp.h-91-#define LIBETH_XDP_PRIV_SZ(sz)\t\t\t\t\t\t \\\ninclude/net/libeth/xdp.h:92:\t(ALIGN(sz, __alignof(struct libeth_xdp_buff)) / sizeof(long))\ninclude/net/libeth/xdp.h-93-\n--\ninclude/net/libeth/xdp.h-96-\tstatic_assert(offsetofend(struct xdp_buff_xsk, cb) \u003e=\t\t \\\ninclude/net/libeth/xdp.h:97:\t\t struct_size_t(struct libeth_xdp_buff, priv,\t \\\ninclude/net/libeth/xdp.h-98-\t\t\t\t LIBETH_XDP_PRIV_SZ(sz)))\n--\ninclude/net/libeth/xdp.h-101-\ninclude/net/libeth/xdp.h:102:DECLARE_STATIC_KEY_FALSE(libeth_xdpsq_share);\ninclude/net/libeth/xdp.h-103-\ninclude/net/libeth/xdp.h-104-/**\ninclude/net/libeth/xdp.h:105: * libeth_xdpsq_num - calculate optimal number of XDPSQs for this device + sys\ninclude/net/libeth/xdp.h-106- * @rxq: current number of active Rx queues\n--\ninclude/net/libeth/xdp.h-115- */\ninclude/net/libeth/xdp.h:116:static inline u32 libeth_xdpsq_num(u32 rxq, u32 txq, u32 max)\ninclude/net/libeth/xdp.h-117-{\n--\ninclude/net/libeth/xdp.h-121-/**\ninclude/net/libeth/xdp.h:122: * libeth_xdpsq_shared - whether XDPSQs can be shared between several CPUs\ninclude/net/libeth/xdp.h-123- * @num: number of active XDPSQs\n--\ninclude/net/libeth/xdp.h-126- */\ninclude/net/libeth/xdp.h:127:static inline bool libeth_xdpsq_shared(u32 num)\ninclude/net/libeth/xdp.h-128-{\n--\ninclude/net/libeth/xdp.h-132-/**\ninclude/net/libeth/xdp.h:133: * libeth_xdpsq_id - get XDPSQ index corresponding to this CPU\ninclude/net/libeth/xdp.h-134- * @num: number of active XDPSQs\ninclude/net/libeth/xdp.h-135- *\ninclude/net/libeth/xdp.h:136: * Helper for libeth_xdp routines, do not use in drivers directly.\ninclude/net/libeth/xdp.h-137- *\n--\ninclude/net/libeth/xdp.h-139- */\ninclude/net/libeth/xdp.h:140:static inline u32 libeth_xdpsq_id(u32 num)\ninclude/net/libeth/xdp.h-141-{\n--\ninclude/net/libeth/xdp.h-143-\ninclude/net/libeth/xdp.h:144:\tif (static_branch_unlikely(\u0026libeth_xdpsq_share) \u0026\u0026\ninclude/net/libeth/xdp.h:145:\t libeth_xdpsq_shared(num))\ninclude/net/libeth/xdp.h-146-\t\tret %= num;\n--\ninclude/net/libeth/xdp.h-150-\ninclude/net/libeth/xdp.h:151:void __libeth_xdpsq_get(struct libeth_xdpsq_lock *lock,\ninclude/net/libeth/xdp.h-152-\t\t\tconst struct net_device *dev);\ninclude/net/libeth/xdp.h:153:void __libeth_xdpsq_put(struct libeth_xdpsq_lock *lock,\ninclude/net/libeth/xdp.h-154-\t\t\tconst struct net_device *dev);\n--\ninclude/net/libeth/xdp.h-156-/**\ninclude/net/libeth/xdp.h:157: * libeth_xdpsq_get - initialize \u0026libeth_xdpsq_lock\ninclude/net/libeth/xdp.h-158- * @lock: lock to initialize\n--\ninclude/net/libeth/xdp.h-164- */\ninclude/net/libeth/xdp.h:165:static inline void libeth_xdpsq_get(struct libeth_xdpsq_lock *lock,\ninclude/net/libeth/xdp.h-166-\t\t\t\t const struct net_device *dev,\n--\ninclude/net/libeth/xdp.h-169-\tif (unlikely(share))\ninclude/net/libeth/xdp.h:170:\t\t__libeth_xdpsq_get(lock, dev);\ninclude/net/libeth/xdp.h-171-}\n--\ninclude/net/libeth/xdp.h-173-/**\ninclude/net/libeth/xdp.h:174: * libeth_xdpsq_put - deinitialize \u0026libeth_xdpsq_lock\ninclude/net/libeth/xdp.h-175- * @lock: lock to deinitialize\n--\ninclude/net/libeth/xdp.h-180- */\ninclude/net/libeth/xdp.h:181:static inline void libeth_xdpsq_put(struct libeth_xdpsq_lock *lock,\ninclude/net/libeth/xdp.h-182-\t\t\t\t const struct net_device *dev)\ninclude/net/libeth/xdp.h-183-{\ninclude/net/libeth/xdp.h:184:\tif (static_branch_unlikely(\u0026libeth_xdpsq_share) \u0026\u0026 lock-\u003eshare)\ninclude/net/libeth/xdp.h:185:\t\t__libeth_xdpsq_put(lock, dev);\ninclude/net/libeth/xdp.h-186-}\ninclude/net/libeth/xdp.h-187-\ninclude/net/libeth/xdp.h:188:void __libeth_xdpsq_lock(struct libeth_xdpsq_lock *lock);\ninclude/net/libeth/xdp.h:189:void __libeth_xdpsq_unlock(struct libeth_xdpsq_lock *lock);\ninclude/net/libeth/xdp.h-190-\ninclude/net/libeth/xdp.h-191-/**\ninclude/net/libeth/xdp.h:192: * libeth_xdpsq_lock - grab \u0026libeth_xdpsq_lock if needed\ninclude/net/libeth/xdp.h-193- * @lock: lock to take\n--\ninclude/net/libeth/xdp.h-197- */\ninclude/net/libeth/xdp.h:198:static inline void libeth_xdpsq_lock(struct libeth_xdpsq_lock *lock)\ninclude/net/libeth/xdp.h-199-{\ninclude/net/libeth/xdp.h:200:\tif (static_branch_unlikely(\u0026libeth_xdpsq_share) \u0026\u0026 lock-\u003eshare)\ninclude/net/libeth/xdp.h:201:\t\t__libeth_xdpsq_lock(lock);\ninclude/net/libeth/xdp.h-202-}\n--\ninclude/net/libeth/xdp.h-204-/**\ninclude/net/libeth/xdp.h:205: * libeth_xdpsq_unlock - free \u0026libeth_xdpsq_lock if needed\ninclude/net/libeth/xdp.h-206- * @lock: lock to free\n--\ninclude/net/libeth/xdp.h-210- */\ninclude/net/libeth/xdp.h:211:static inline void libeth_xdpsq_unlock(struct libeth_xdpsq_lock *lock)\ninclude/net/libeth/xdp.h-212-{\ninclude/net/libeth/xdp.h:213:\tif (static_branch_unlikely(\u0026libeth_xdpsq_share) \u0026\u0026 lock-\u003eshare)\ninclude/net/libeth/xdp.h:214:\t\t__libeth_xdpsq_unlock(lock);\ninclude/net/libeth/xdp.h-215-}\n--\ninclude/net/libeth/xdp.h-218-\ninclude/net/libeth/xdp.h:219:void libeth_xdpsq_init_timer(struct libeth_xdpsq_timer *timer, void *xdpsq,\ninclude/net/libeth/xdp.h:220:\t\t\t struct libeth_xdpsq_lock *lock,\ninclude/net/libeth/xdp.h-221-\t\t\t void (*poll)(struct work_struct *work));\n--\ninclude/net/libeth/xdp.h-223-/**\ninclude/net/libeth/xdp.h:224: * libeth_xdpsq_deinit_timer - deinitialize \u0026libeth_xdpsq_timer\ninclude/net/libeth/xdp.h-225- * @timer: timer to deinitialize\n--\ninclude/net/libeth/xdp.h-228- */\ninclude/net/libeth/xdp.h:229:static inline void libeth_xdpsq_deinit_timer(struct libeth_xdpsq_timer *timer)\ninclude/net/libeth/xdp.h-230-{\n--\ninclude/net/libeth/xdp.h-234-/**\ninclude/net/libeth/xdp.h:235: * libeth_xdpsq_queue_timer - run \u0026libeth_xdpsq_timer\ninclude/net/libeth/xdp.h-236- * @timer: timer to queue\n--\ninclude/net/libeth/xdp.h-243- */\ninclude/net/libeth/xdp.h:244:static inline void libeth_xdpsq_queue_timer(struct libeth_xdpsq_timer *timer)\ninclude/net/libeth/xdp.h-245-{\n--\ninclude/net/libeth/xdp.h-250-/**\ninclude/net/libeth/xdp.h:251: * libeth_xdpsq_run_timer - wrapper to run a queue clean-up on a timer event\ninclude/net/libeth/xdp.h-252- * @work: workqueue belonging to the corresponding timer\n--\ninclude/net/libeth/xdp.h=259=static __always_inline void\ninclude/net/libeth/xdp.h:260:libeth_xdpsq_run_timer(struct work_struct *work,\ninclude/net/libeth/xdp.h-261-\t\t u32 (*poll)(void *xdpsq, u32 budget))\ninclude/net/libeth/xdp.h-262-{\ninclude/net/libeth/xdp.h:263:\tstruct libeth_xdpsq_timer *timer = container_of(work, typeof(*timer),\ninclude/net/libeth/xdp.h-264-\t\t\t\t\t\t\tdwork.work);\ninclude/net/libeth/xdp.h-265-\ninclude/net/libeth/xdp.h:266:\tlibeth_xdpsq_lock(timer-\u003elock);\ninclude/net/libeth/xdp.h-267-\ninclude/net/libeth/xdp.h-268-\tif (poll(timer-\u003exdpsq, U32_MAX))\ninclude/net/libeth/xdp.h:269:\t\tlibeth_xdpsq_queue_timer(timer);\ninclude/net/libeth/xdp.h-270-\ninclude/net/libeth/xdp.h:271:\tlibeth_xdpsq_unlock(timer-\u003elock);\ninclude/net/libeth/xdp.h-272-}\n--\ninclude/net/libeth/xdp.h-276-/**\ninclude/net/libeth/xdp.h:277: * enum - libeth_xdp internal Tx flags\ninclude/net/libeth/xdp.h-278- * @LIBETH_XDP_TX_BULK: one bulk size at which it will be flushed to the queue\n--\ninclude/net/libeth/xdp.h=284=enum {\n--\ninclude/net/libeth/xdp.h-293-/**\ninclude/net/libeth/xdp.h:294: * enum - \u0026libeth_xdp_tx_frame and \u0026libeth_xdp_tx_desc flags\ninclude/net/libeth/xdp.h-295- * @LIBETH_XDP_TX_LEN: only for ``XDP_TX``, [15:0] of ::len_fl is actual length\n\n"
} |
| 9/2 | 2026/08/01 19:23 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 32482 output: 29 thoughts: 627 Thoughts: **Analyzing the Reach of a Patch and its Implications for Virtualized Environments** Okay, so I'm looking at this patch and my initial thought is that it touches `libeth`, which appears to be a generic Ethernet driver library. This library is likely used by `iavf` and maybe some other drivers. The patch modifies `iavf_txrx.c` which is specific to the Intel AVF driver, and also `include/net/libeth/rx.h`, but those changes are just inline functions. My first impression is, this seems straightforward, potentially a minor update. But then I re-read the prompt. It's focused on code in *vendor-specific PCIe switch, SmartNIC, or GPU drivers* that require physical PCIe hardware. The prompt says it's not emulated in standard QEMU. Wait a minute, is `iavf` one of those drivers? Yes, it is! `iavf` is the Intel Ethernet Adaptive Virtual Function driver. You need an Intel physical NIC (like i40e or ice) to create the VF, which is then passed to the VM. QEMU definitely doesn't emulate `iavf` natively. I'm starting to see where this is going. Can I even fuzz it with Syzkaller? Syzkaller does have `syz_pci_device`, which can emulate PCI devices, but only if they have device descriptions. I need to check if Syzkaller actually fuzzed `iavf`. I can't look that up online right now, but I can check the kernel source to see if `iavf` is considered a vendor-specific driver. Yes, it's under `drivers/net/ethernet/intel/iavf/`. Definitely vendor-specific. But is it a SmartNIC or PCIe switch? No, it's just a standard Ethernet VF driver. Okay, let's circle back to the prompt, which says, *"vendor-specific PCIe switch, SmartNIC, or GPU drivers."* Standard Ethernet drivers like `e1000e`, `igb`, `ixgbe`, `i40e`, `ice`, and `iavf` are all vendor-specific PCIe drivers, right? And they require physical hardware unless emulated? Right again! QEMU does emulate `e1000`, `e1000e`, and *recently* `igb`, but it *does not* emulate `iavf`. So, `iavf` requires physical hardware. That means it's not reachable in virtualized environments like GCE or standard QEMU. That's a significant constraint. But, the patch does touch `libeth`. If `libeth` is used by *other* drivers, there might be a route to reach the changes if those drivers *are* emulated. Time to check what other drivers use `libeth`. That's the next step. |
| 10/2 | 2026/08/01 19:24 | tool | grepper |
0mArgs:{
"Expression": "libeth",
"PathPrefix": "drivers/net/ethernet/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 1988 lines.\nUse more precise expression if possible.\n\ndrivers/net/ethernet/intel/Kconfig=17=if NET_VENDOR_INTEL\ndrivers/net/ethernet/intel/Kconfig-18-\ndrivers/net/ethernet/intel/Kconfig:19:source \"drivers/net/ethernet/intel/libeth/Kconfig\"\ndrivers/net/ethernet/intel/Kconfig-20-source \"drivers/net/ethernet/intel/libie/Kconfig\"\n--\ndrivers/net/ethernet/intel/Makefile-5-\ndrivers/net/ethernet/intel/Makefile:6:obj-$(CONFIG_LIBETH) += libeth/\ndrivers/net/ethernet/intel/Makefile-7-obj-y += libie/\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c=1742=static inline void i40e_rx_checksum(struct i40e_vsi *vsi,\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1745-{\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1746:\tstruct libeth_rx_pt decoded;\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1747-\tu32 rx_error, rx_status;\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1757-\tdecoded = libie_rx_pt_parse(ptype);\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1758:\tif (!libeth_rx_pt_has_checksum(vsi-\u003enetdev, decoded))\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1759-\t\treturn;\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1767-\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1768:\tipv4 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV4;\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1769:\tipv6 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV6;\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1770-\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c=1814=static inline void i40e_rx_hash(struct i40e_ring *ring,\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1818-{\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1819:\tstruct libeth_rx_pt decoded;\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1820-\tu32 hash;\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1825-\tdecoded = libie_rx_pt_parse(rx_ptype);\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1826:\tif (!libeth_rx_pt_has_hash(ring-\u003enetdev, decoded))\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1827-\t\treturn;\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1830-\t\thash = le32_to_cpu(rx_desc-\u003ewb.qword0.hi_dword.rss);\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1831:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded);\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1832-\t}\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=711=static void iavf_clean_rx_ring(struct iavf_ring *rx_ring)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-723-\tfor (u32 i = rx_ring-\u003enext_to_clean; i != rx_ring-\u003enext_to_use; ) {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:724:\t\tconst struct libeth_fqe *rx_fqes = \u0026rx_ring-\u003erx_fqes[i];\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-725-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:726:\t\tlibeth_rx_recycle_slow(rx_fqes-\u003enetmem);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-727-\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=742=void iavf_free_rx_resources(struct iavf_ring *rx_ring)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-743-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:744:\tstruct libeth_fq fq = {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-745-\t\t.fqes\t= rx_ring-\u003erx_fqes,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-756-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:757:\tlibeth_rx_fq_destroy(\u0026fq);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-758-\trx_ring-\u003erx_fqes = NULL;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=768=int iavf_setup_rx_descriptors(struct iavf_ring *rx_ring)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-769-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:770:\tstruct libeth_fq fq = {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-771-\t\t.count\t\t= rx_ring-\u003ecount,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-776-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:777:\tret = libeth_rx_fq_create(\u0026fq, \u0026rx_ring-\u003eq_vector-\u003enapi);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-778-\tif (ret)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-805-err:\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:806:\tlibeth_rx_fq_destroy(\u0026fq);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-807-\trx_ring-\u003erx_fqes = NULL;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=859=bool iavf_alloc_rx_buffers(struct iavf_ring *rx_ring, u16 cleaned_count)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-860-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:861:\tconst struct libeth_fq_fp fq = {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-862-\t\t.pp\t\t= rx_ring-\u003epp,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-878-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:879:\t\taddr = libeth_rx_alloc(\u0026fq, ntu);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-880-\t\tif (addr == DMA_MAPPING_ERROR)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=925=static void iavf_rx_csum(const struct iavf_vsi *vsi, struct sk_buff *skb,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:926:\t\t\t struct libeth_rx_pt decoded_pt,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:927:\t\t\t struct libeth_rx_csum csum_bits)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-928-{\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-936-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:937:\tipv4 = libeth_rx_pt_get_ip_ver(decoded_pt) == LIBETH_RX_PT_OUTER_IPV4;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:938:\tipv6 = libeth_rx_pt_get_ip_ver(decoded_pt) == LIBETH_RX_PT_OUTER_IPV6;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-939-\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-975- **/\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:976:static struct libeth_rx_csum\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-977-iavf_legacy_rx_csum(const struct iavf_vsi *vsi, u64 qw1,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:978:\t\t const struct libeth_rx_pt decoded_pt)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-979-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:980:\tstruct libeth_rx_csum csum_bits = {};\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-981-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:982:\tif (!libeth_rx_pt_has_checksum(vsi-\u003enetdev, decoded_pt))\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-983-\t\treturn csum_bits;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1005- **/\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1006:static struct libeth_rx_csum\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1007-iavf_flex_rx_csum(const struct iavf_vsi *vsi, u64 qw1,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1008:\t\t const struct libeth_rx_pt decoded_pt)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1009-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1010:\tstruct libeth_rx_csum csum_bits = {};\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1011-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1012:\tif (!libeth_rx_pt_has_checksum(vsi-\u003enetdev, decoded_pt))\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1013-\t\treturn csum_bits;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1037=static void iavf_legacy_rx_hash(const struct iavf_ring *ring, __le64 qw0,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1038-\t\t\t\t__le64 qw1, struct sk_buff *skb,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1039:\t\t\t\tconst struct libeth_rx_pt decoded_pt)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1040-{\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1043-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1044:\tif (!libeth_rx_pt_has_hash(ring-\u003enetdev, decoded_pt))\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1045-\t\treturn;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1048-\t\thash = le64_get_bits(qw0, IAVF_RXD_LEGACY_RSS_M);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1049:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded_pt);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1050-\t}\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1063=static void iavf_flex_rx_hash(const struct iavf_ring *ring, __le64 qw1,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1064-\t\t\t struct sk_buff *skb,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1065:\t\t\t const struct libeth_rx_pt decoded_pt)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1066-{\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1069-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1070:\tif (!libeth_rx_pt_has_hash(ring-\u003enetdev, decoded_pt))\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1071-\t\treturn;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1075-\t\thash = le64_get_bits(qw1, IAVF_RXD_FLEX_RSS_HASH_M);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1076:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded_pt);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1077-\t}\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1131=static void iavf_process_skb_fields(const struct iavf_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1135-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1136:\tstruct libeth_rx_csum csum_bits;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1137:\tstruct libeth_rx_pt decoded_pt;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1138-\t__le64 qw0 = rx_desc-\u003eqw0;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1197=static void iavf_add_rx_frag(const struct page_pool *pp, struct sk_buff *skb,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1198:\t\t\t const struct libeth_fqe *rx_buffer,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1199-\t\t\t unsigned int size)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1217=static struct sk_buff *iavf_build_skb(const struct page_pool *pp,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1218:\t\t\t\t const struct libeth_fqe *rx_buffer,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1219-\t\t\t\t unsigned int size)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1254=static bool iavf_is_non_eop(struct iavf_ring *rx_ring,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1255:\t\t\t struct libeth_rqe_info fields)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1256-{\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1286- */\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1287:static struct libeth_rqe_info\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1288-iavf_extract_legacy_rx_fields(const struct iavf_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1293-\tu64 qw2 = le64_to_cpu(rx_desc-\u003eqw2);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1294:\tstruct libeth_rqe_info fields;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1295-\tbool l2tag1p, l2tag2p;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1332- */\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1333:static struct libeth_rqe_info\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1334-iavf_extract_flex_rx_fields(const struct iavf_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1336-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1337:\tstruct libeth_rqe_info fields = {};\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1338-\tu64 qw0 = le64_to_cpu(rx_desc-\u003eqw0);\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1365-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1366:static struct libeth_rqe_info\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1367-iavf_extract_rx_fields(const struct iavf_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1389=static int iavf_clean_rx_irq(struct iavf_ring *rx_ring, int budget)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1398-\twhile (likely(total_rx_packets \u003c (unsigned int)budget)) {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1399:\t\tstruct libeth_rqe_info fields;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1400:\t\tstruct libeth_fqe *rx_buffer;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1401-\t\tstruct iavf_rx_desc *rx_desc;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1430-\t\trx_buffer = \u0026rx_ring-\u003erx_fqes[rx_ring-\u003enext_to_clean];\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1431:\t\tif (!__libeth_rx_sync_for_cpu(pp, rx_buffer, fields.len))\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1432-\t\t\tgoto skip_data;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.h=218=struct iavf_ring {\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.h-226-\tunion {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.h:227:\t\tstruct libeth_fqe *rx_fqes;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.h-228-\t\tstruct iavf_tx_buffer *tx_bi;\n--\ndrivers/net/ethernet/intel/ice/ice_base.c=607=static int ice_rxq_pp_create(struct ice_rx_ring *rq)\ndrivers/net/ethernet/intel/ice/ice_base.c-608-{\ndrivers/net/ethernet/intel/ice/ice_base.c:609:\tstruct libeth_fq fq = {\ndrivers/net/ethernet/intel/ice/ice_base.c-610-\t\t.count\t\t= rq-\u003ecount,\n--\ndrivers/net/ethernet/intel/ice/ice_base.c-617-\ndrivers/net/ethernet/intel/ice/ice_base.c:618:\terr = libeth_rx_fq_create(\u0026fq, \u0026rq-\u003eq_vector-\u003enapi);\ndrivers/net/ethernet/intel/ice/ice_base.c-619-\tif (err)\n--\ndrivers/net/ethernet/intel/ice/ice_base.c-629-\ndrivers/net/ethernet/intel/ice/ice_base.c:630:\tfq = (struct libeth_fq){\ndrivers/net/ethernet/intel/ice/ice_base.c-631-\t\t.count\t\t= rq-\u003ecount,\n--\ndrivers/net/ethernet/intel/ice/ice_base.c-636-\ndrivers/net/ethernet/intel/ice/ice_base.c:637:\terr = libeth_rx_fq_create(\u0026fq, \u0026rq-\u003eq_vector-\u003enapi);\ndrivers/net/ethernet/intel/ice/ice_base.c-638-\tif (err)\n--\ndrivers/net/ethernet/intel/ice/ice_ethtool.c-12-#include \u003cnet/dcbnl.h\u003e\ndrivers/net/ethernet/intel/ice/ice_ethtool.c:13:#include \u003cnet/libeth/rx.h\u003e\ndrivers/net/ethernet/intel/ice/ice_ethtool.c-14-\n--\ndrivers/net/ethernet/intel/ice/ice_ethtool.c=1232=static int ice_lbtest_receive_frames(struct ice_rx_ring *rx_ring)\ndrivers/net/ethernet/intel/ice/ice_ethtool.c-1233-{\ndrivers/net/ethernet/intel/ice/ice_ethtool.c:1234:\tstruct libeth_fqe *rx_buf;\ndrivers/net/ethernet/intel/ice/ice_ethtool.c-1235-\tint valid_frames, i;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-10-#include \u003clinux/net/intel/libie/rx.h\u003e\ndrivers/net/ethernet/intel/ice/ice_txrx.c:11:#include \u003cnet/libeth/xdp.h\u003e\ndrivers/net/ethernet/intel/ice/ice_txrx.c-12-#include \u003cnet/dsfield.h\u003e\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=114=ice_unmap_and_free_tx_buf(struct ice_tx_ring *ring, struct ice_tx_buf *tx_buf)\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-129-\tcase ICE_TX_BUF_XDP_TX:\ndrivers/net/ethernet/intel/ice/ice_txrx.c:130:\t\tlibeth_xdp_return_va(tx_buf-\u003eraw_buf, false);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-131-\t\tbreak;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=512=void ice_rxq_pp_destroy(struct ice_rx_ring *rq)\ndrivers/net/ethernet/intel/ice/ice_txrx.c-513-{\ndrivers/net/ethernet/intel/ice/ice_txrx.c:514:\tstruct libeth_fq fq = {\ndrivers/net/ethernet/intel/ice/ice_txrx.c-515-\t\t.fqes\t= rq-\u003erx_fqes,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-518-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:519:\tlibeth_rx_fq_destroy(\u0026fq);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-520-\trq-\u003erx_fqes = NULL;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-528-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:529:\tlibeth_rx_fq_destroy(\u0026fq);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-530-\trq-\u003ehdr_fqes = NULL;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=538=void ice_clean_rx_ring(struct ice_rx_ring *rx_ring)\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-550-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:551:\tlibeth_xdp_return_stash(\u0026rx_ring-\u003exdp);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-552-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-554-\tfor (u32 i = rx_ring-\u003enext_to_clean; i != rx_ring-\u003enext_to_use; ) {\ndrivers/net/ethernet/intel/ice/ice_txrx.c:555:\t\tlibeth_rx_recycle_slow(rx_ring-\u003erx_fqes[i].netmem);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-556-\ndrivers/net/ethernet/intel/ice/ice_txrx.c-557-\t\tif (rx_ring-\u003ehdr_pp)\ndrivers/net/ethernet/intel/ice/ice_txrx.c:558:\t\t\tlibeth_rx_recycle_slow(rx_ring-\u003ehdr_fqes[i].netmem);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-559-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=651=static u32\ndrivers/net/ethernet/intel/ice/ice_txrx.c:652:ice_run_xdp(struct ice_rx_ring *rx_ring, struct libeth_xdp_buff *xdp,\ndrivers/net/ethernet/intel/ice/ice_txrx.c-653-\t struct bpf_prog *xdp_prog, struct ice_tx_ring *xdp_ring,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-689-\tcase XDP_DROP:\ndrivers/net/ethernet/intel/ice/ice_txrx.c:690:\t\tlibeth_xdp_return_buff(xdp);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-691-\t\tret = ICE_XDP_CONSUMED;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=825=bool ice_alloc_rx_bufs(struct ice_rx_ring *rx_ring, unsigned int cleaned_count)\ndrivers/net/ethernet/intel/ice/ice_txrx.c-826-{\ndrivers/net/ethernet/intel/ice/ice_txrx.c:827:\tconst struct libeth_fq_fp hdr_fq = {\ndrivers/net/ethernet/intel/ice/ice_txrx.c-828-\t\t.pp\t\t= rx_ring-\u003ehdr_pp,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-832-\t};\ndrivers/net/ethernet/intel/ice/ice_txrx.c:833:\tconst struct libeth_fq_fp fq = {\ndrivers/net/ethernet/intel/ice/ice_txrx.c-834-\t\t.pp\t\t= rx_ring-\u003epp,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-851-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:852:\t\taddr = libeth_rx_alloc(\u0026fq, ntu);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-853-\t\tif (addr == DMA_MAPPING_ERROR) {\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-865-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:866:\t\taddr = libeth_rx_alloc(\u0026hdr_fq, ntu);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-867-\t\tif (addr == DMA_MAPPING_ERROR) {\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-869-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:870:\t\t\tlibeth_rx_recycle_slow(fq.fqes[ntu].netmem);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-871-\t\t\tbreak;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=946=static int ice_clean_rx_irq(struct ice_rx_ring *rx_ring, int budget)\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-957-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:958:\tlibeth_xdp_init_buff(xdp, \u0026rx_ring-\u003exdp, \u0026rx_ring-\u003exdp_rxq);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-959-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-968-\t\tunion ice_32b_rx_flex_desc *rx_desc;\ndrivers/net/ethernet/intel/ice/ice_txrx.c:969:\t\tstruct libeth_fqe *rx_buf;\ndrivers/net/ethernet/intel/ice/ice_txrx.c-970-\t\tstruct sk_buff *skb;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1010-\t\trx_buf = \u0026rx_ring-\u003ehdr_fqes[ntc];\ndrivers/net/ethernet/intel/ice/ice_txrx.c:1011:\t\tlibeth_xdp_process_buff(xdp, rx_buf, size);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1012-\t\trx_buf-\u003enetmem = 0;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1021-\t\trx_buf = \u0026rx_ring-\u003erx_fqes[ntc];\ndrivers/net/ethernet/intel/ice/ice_txrx.c:1022:\t\tlibeth_xdp_process_buff(xdp, rx_buf, size);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1023-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1048-\t\tif (!skb) {\ndrivers/net/ethernet/intel/ice/ice_txrx.c:1049:\t\t\tlibeth_xdp_return_buff_slow(xdp);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1050-\t\t\tice_stats_inc(rx_ring-\u003ering_stats, rx_buf_failed);\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1076-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:1077:\tlibeth_xdp_save_buff(\u0026rx_ring-\u003exdp, xdp);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1078-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.h-6-\ndrivers/net/ethernet/intel/ice/ice_txrx.h:7:#include \u003cnet/libeth/types.h\u003e\ndrivers/net/ethernet/intel/ice/ice_txrx.h-8-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.h=277=struct ice_rx_ring {\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.h-285-\tunion {\ndrivers/net/ethernet/intel/ice/ice_txrx.h:286:\t\tstruct libeth_fqe *rx_fqes;\ndrivers/net/ethernet/intel/ice/ice_txrx.h-287-\t\tstruct xdp_buff **xdp_buf;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.h-300-\tstruct page_pool *hdr_pp;\ndrivers/net/ethernet/intel/ice/ice_txrx.h:301:\tstruct libeth_fqe *hdr_fqes;\ndrivers/net/ethernet/intel/ice/ice_txrx.h-302-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.h-317-\tunion {\ndrivers/net/ethernet/intel/ice/ice_txrx.h:318:\t\tstruct libeth_xdp_buff_stash xdp;\ndrivers/net/ethernet/intel/ice/ice_txrx.h:319:\t\tstruct libeth_xdp_buff *xsk;\ndrivers/net/ethernet/intel/ice/ice_txrx.h-320-\t};\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-5-#include \u003clinux/net/intel/libie/rx.h\u003e\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:6:#include \u003cnet/libeth/xdp.h\u003e\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-7-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=65=ice_rx_hash_to_skb(const struct ice_rx_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-68-{\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:69:\tstruct libeth_rx_pt decoded;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-70-\tu32 hash;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-72-\tdecoded = libie_rx_pt_parse(rx_ptype);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:73:\tif (!libeth_rx_pt_has_hash(rx_ring-\u003enetdev, decoded))\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-74-\t\treturn;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-77-\tif (likely(hash))\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:78:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-79-}\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=108=ice_rx_csum(struct ice_rx_ring *ring, struct sk_buff *skb,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-110-{\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:111:\tstruct libeth_rx_pt decoded;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-112-\tu16 rx_status0, rx_status1;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-118-\tdecoded = libie_rx_pt_parse(ptype);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:119:\tif (!libeth_rx_pt_has_checksum(ring-\u003enetdev, decoded))\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-120-\t\treturn;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-137-\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:138:\tipv4 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV4;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:139:\tipv6 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV6;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-140-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=271=ice_clean_xdp_tx_buf(struct device *dev, struct ice_tx_buf *tx_buf,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-275-\tcase ICE_TX_BUF_XDP_TX:\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:276:\t\tlibeth_xdp_return_va(tx_buf-\u003eraw_buf, true);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-277-\t\tbreak;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=523=static int ice_xdp_rx_hw_ts(const struct xdp_md *ctx, u64 *ts_ns)\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-524-{\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:525:\tconst struct libeth_xdp_buff *xdp_ext = (void *)ctx;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-526-\tstruct ice_rx_ring *rx_ring;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-527-\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:528:\trx_ring = libeth_xdp_buff_to_rq(xdp_ext, typeof(*rx_ring), xdp_rxq);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-529-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=556=static int ice_xdp_rx_hash(const struct xdp_md *ctx, u32 *hash,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-558-{\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:559:\tconst struct libeth_xdp_buff *xdp_ext = (void *)ctx;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-560-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=578=static int ice_xdp_rx_vlan_tag(const struct xdp_md *ctx, __be16 *vlan_proto,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-580-{\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:581:\tconst struct libeth_xdp_buff *xdp_ext = (void *)ctx;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-582-\tstruct ice_rx_ring *rx_ring;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-583-\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:584:\trx_ring = libeth_xdp_buff_to_rq(xdp_ext, typeof(*rx_ring), xdp_rxq);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-585-\n--\ndrivers/net/ethernet/intel/ice/ice_xsk.c-5-#include \u003clinux/unroll.h\u003e\ndrivers/net/ethernet/intel/ice/ice_xsk.c:6:#include \u003cnet/libeth/xdp.h\u003e\ndrivers/net/ethernet/intel/ice/ice_xsk.c-7-#include \u003cnet/xdp_sock_drv.h\u003e\n--\ndrivers/net/ethernet/intel/ice/ice_xsk.c=567=int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/ice/ice_xsk.c-631-\ndrivers/net/ethernet/intel/ice/ice_xsk.c:632:\t\t((struct libeth_xdp_buff *)first)-\u003edesc = rx_desc;\ndrivers/net/ethernet/intel/ice/ice_xsk.c-633-\n--\ndrivers/net/ethernet/intel/ice/ice_xsk.c-676-\trx_ring-\u003enext_to_clean = ntc;\ndrivers/net/ethernet/intel/ice/ice_xsk.c:677:\trx_ring-\u003exsk = (struct libeth_xdp_buff *)first;\ndrivers/net/ethernet/intel/ice/ice_xsk.c-678-\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=675=struct idpf_adapter {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-703-\ndrivers/net/ethernet/intel/idpf/idpf.h:704:\tstruct libeth_rx_pt *singleq_pt_lkup;\ndrivers/net/ethernet/intel/idpf/idpf.h:705:\tstruct libeth_rx_pt *splitq_pt_lkup;\ndrivers/net/ethernet/intel/idpf/idpf.h-706-\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-3-\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:4:#include \u003cnet/libeth/xdp.h\u003e\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-5-\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=188=static void idpf_tx_singleq_dma_map_error(struct idpf_tx_queue *txq,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-191-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:192:\tstruct libeth_sq_napi_stats ss = { };\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:193:\tstruct libeth_cq_pp cp = {\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-194-\t\t.dev\t= txq-\u003edev,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-206-\t\ttx_buf = \u0026txq-\u003etx_buf[idx];\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:207:\t\tlibeth_tx_complete(tx_buf, \u0026cp);\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-208-\t\tif (tx_buf == first)\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=481=static bool idpf_tx_singleq_clean(struct idpf_tx_queue *tx_q, int napi_budget,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-483-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:484:\tstruct libeth_sq_napi_stats ss = { };\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-485-\tstruct idpf_base_tx_desc *tx_desc;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-487-\ts16 ntc = tx_q-\u003enext_to_clean;\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:488:\tstruct libeth_cq_pp cp = {\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-489-\t\t.dev\t= tx_q-\u003edev,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-528-\t\t/* update the statistics for this packet */\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:529:\t\tlibeth_tx_complete(tx_buf, \u0026cp);\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-530-\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-542-\t\t\t/* unmap any remaining paged data */\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:543:\t\t\tlibeth_tx_complete(tx_buf, \u0026cp);\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-544-\t\t}\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=649=static void idpf_rx_singleq_csum(struct idpf_rx_queue *rxq,\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-650-\t\t\t\t struct sk_buff *skb,\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:651:\t\t\t\t struct libeth_rx_csum csum_bits,\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:652:\t\t\t\t struct libeth_rx_pt decoded)\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-653-{\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-656-\t/* check if Rx checksum is enabled */\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:657:\tif (!libeth_rx_pt_has_checksum(rxq-\u003exdp_rxq.dev, decoded))\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-658-\t\treturn;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-663-\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:664:\tipv4 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV4;\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:665:\tipv6 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV6;\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-666-\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-716- **/\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:717:static struct libeth_rx_csum\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-718-idpf_rx_singleq_base_csum(const union virtchnl2_rx_desc *rx_desc)\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-719-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:720:\tstruct libeth_rx_csum csum_bits = { };\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-721-\tu32 rx_error, rx_status;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-751- **/\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:752:static struct libeth_rx_csum\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-753-idpf_rx_singleq_flex_csum(const union virtchnl2_rx_desc *rx_desc)\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-754-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:755:\tstruct libeth_rx_csum csum_bits = { };\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-756-\tu16 rx_status0, rx_status1;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=789=static void idpf_rx_singleq_base_hash(struct idpf_rx_queue *rx_q,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-791-\t\t\t\t const union virtchnl2_rx_desc *rx_desc,\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:792:\t\t\t\t struct libeth_rx_pt decoded)\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-793-{\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-795-\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:796:\tif (!libeth_rx_pt_has_hash(rx_q-\u003exdp_rxq.dev, decoded))\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-797-\t\treturn;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-804-\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:805:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded);\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-806-\t}\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=819=static void idpf_rx_singleq_flex_hash(struct idpf_rx_queue *rx_q,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-821-\t\t\t\t const union virtchnl2_rx_desc *rx_desc,\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:822:\t\t\t\t struct libeth_rx_pt decoded)\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-823-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:824:\tif (!libeth_rx_pt_has_hash(rx_q-\u003exdp_rxq.dev, decoded))\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-825-\t\treturn;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-830-\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:831:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded);\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-832-\t}\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=848=__idpf_rx_singleq_process_skb_fields(struct idpf_rx_queue *rx_q,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-852-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:853:\tstruct libeth_rx_pt decoded = rx_q-\u003erx_ptype_lkup[ptype];\n\n"
} |
| 11/2 | 2026/08/01 19:24 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 48004 output: 34 thoughts: 822 Thoughts: **Analyzing the Fuzzing Potential of This Patch** Okay, so this patch touches `libeth`, which is used by several Intel Ethernet drivers: `i40e`, `iavf`, `ice`, and `idpf`. My initial thought is to figure out if syzkaller can reach any of the code affected by the patch. I know `idpf` is an Intel Infrastructure Data Path Function driver and is vendor-specific PCIe. `ice` and `i40e` are also Intel Ethernet drivers, so vendor-specific PCIe as well. The question is, does syzkaller fuzz them? And of course, `iavf` is a virtual function (VF) driver. The prompt specifically mentions focusing on code that's *impossible* to reach in virtualized environments like QEMU or GCE. It gives examples like vendor-specific drivers for PCIe switches, SmartNICs, or GPUs that rely on physical PCIe hardware. Are drivers like `i40e`, `ice`, `iavf` considered this type of driver? Not in the strictest sense of the examples provided, but they are Intel Ethernet NIC drivers and the critical point is that these drivers require hardware that isn't emulated in standard QEMU. That's the key. If they need physical hardware, and that hardware isn't emulated in QEMU, then they're unreachable, right? And I'd bet the answer is that they can't be reached in a standard GCE or QEMU setup unless there's some kind of software emulation. Syzkaller might have some emulation for *some* devices, but it's not a general case. So, the question becomes: does syzkaller emulate these drivers? Can I trigger `iavf` code without the hardware? It probes for a specific PCI ID, so if the device isn't present, the driver won't even bind. Does syzkaller's `syz_pci_device` emulate these? I can't check syzkaller directly but can I use some tricks to infer anything, by looking at existing bugs reported for `iavf`? I need internet access for this. The prompt emphasizes that code unreachable in virtualized environments, even with emulated hardware (like `usb gadget`, `mac80211_hwsim`), should result in `WorthFuzzing=false`. `iavf` is definitely an Intel Ethernet VF driver that requires an Intel NIC. QEMU definitely doesn't emulate the Intel AVF. And because `libeth` is used by all these Intel Ethernet drivers (`iavf`, `i40e`, `ice`, and `idpf`), the conclusion is the same for the patch - the code paths affected by the patch that relate to Intel Ethernet drivers can't be reached in standard QEMU, because they require hardware not emulated. QEMU does emulate other Ethernet interfaces like `e1000`, `e1000e`, and `igb`. So now I have to check, are those interfaces using libeth? |
| 12/2 | 2026/08/01 19:24 | tool | grepper |
0mError:no matches Args: {
"Expression": "libeth",
"PathPrefix": "drivers/net/ethernet/intel/igb/"
}Results: {
"error": "no matches"
} |
| 13/2 | 2026/08/01 19:24 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 49524 output: 38 thoughts: 12 Thoughts: Okay, here's my attempt at summarizing the thought process, as if it were my own, assuming I'm an expert in this field. **Initial Assessment: e1000e** Alright, time to dig in. The first thing that pops into my head is to check the `e1000e`. Just the mention of that name conjures up a specific set of hardware and potential software implications. I know immediately that this refers to a particular Intel Gigabit Ethernet controller family. My mind jumps to the drivers, the firmware versions, known bugs and vulnerabilities, and the common configurations associated with it. This probably points towards an issue related to network connectivity and how it's interacting with the host system. My initial focus is going to be on the low-level drivers and the interrupt handling related to the `e1000e` controller. Let's see what we can find. |
| 14/2 | 2026/08/01 19:24 | tool | grepper |
0mError:no matches Args: {
"Expression": "libeth",
"PathPrefix": "drivers/net/ethernet/intel/e1000e/"
}Results: {
"error": "no matches"
} |
| 15/2 | 2026/08/01 19:24 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 49777 output: 37 thoughts: 11 Thoughts: Okay, here's my interpretation of that thought process, assuming I'm deeply familiar with the relevant technical domain and context. **Initial Assessment: e1000 Check** Alright, the first thought is simple: *e1000*. This is likely a very specific identifier or reference. Given my expertise, my mind instantly jumps to possible meanings. Could be a specific hardware component, a software module, an error code, a configuration file, a debugging tool... the possibilities are numerous, but the brevity suggests a familiar and commonly referenced element within this context. My initial reaction is to quickly perform a mental checklist, starting with what I *expect* to find based on prior experience. What are the common pitfalls? What usually goes wrong with `e1000`? Where do I have recent experience with this component? What's the context I was working in that may require this check? This is where my years of experience kick in. I'm going to start with the most likely and move through the less likely, starting with the area I have the greatest confidence in. I'll need to figure out what needs attention, or what the prompt is actually related to, since e1000 could be a reference to a lot of stuff. |
| 16/2 | 2026/08/01 19:24 | tool | grepper |
0mError:no matches Args: {
"Expression": "libeth",
"PathPrefix": "drivers/net/ethernet/intel/e1000/"
}Results: {
"error": "no matches"
} |
| 17/2 | 2026/08/01 19:24 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 50103 output: 38 thoughts: 256 Thoughts: **My Assessment of the `libeth` Usage and Fuzzing Potential** Okay, so I'm looking at how `libeth` is being utilized, and it seems confined to the `i40e`, `iavf`, `ice`, and `idpf` drivers. None of those are emulated in a standard QEMU setup, which immediately raises a flag. I need to figure out if any of these drivers, specifically `iavf`, are even *fuzzable* in the first place. Hold on, let me check that patch... Ah, it was authored by the `syz-cluster <triage@syzkaller.com>` account. But this isn't a smoking gun. The commit message reads: "syz-cluster: applied patch under review". This is just a boilerplate message that the patch application system adds. It definitely *doesn't* mean Syzkaller found a vulnerability here. The system applied it for my review. I shouldn't jump to conclusions. Alright, back to the question of reachability. Could I possibly fuzz `iavf` or `ice` somehow? The answer is probably a hard no. They require physical hardware to function correctly, meaning those code paths are inaccessible in a virtualized context like GCE or QEMU. Just to be absolutely sure, let me double-check. I'll verify if `iavf` can be instantiated in some virtual bus or software. Okay, that confirms it: `iavf` is a PCI driver. This means it relies on direct hardware interaction and isn't relevant for QEMU fuzzing. This is something I should have remembered. |
| 18/2 | 2026/08/01 19:24 | tool | grepper |
0mArgs:{
"Expression": "pci_register_driver",
"PathPrefix": "drivers/net/ethernet/intel/iavf/"
}Results: {
"Output": "drivers/net/ethernet/intel/iavf/iavf_main.c=5668=static int __init iavf_init_module(void)\n--\ndrivers/net/ethernet/intel/iavf/iavf_main.c-5673-\ndrivers/net/ethernet/intel/iavf/iavf_main.c:5674:\treturn pci_register_driver(\u0026iavf_driver);\ndrivers/net/ethernet/intel/iavf/iavf_main.c-5675-}\n"
} |
| 19/2 | 2026/08/01 19:24 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 50887 output: 26 thoughts: 491 Thoughts: **Analyzing the Viability of `iavf` and `libeth` Changes in a Virtualized Environment** Okay, so I'm thinking about this PCI driver I'm looking at. First, I need to understand if the target environment, QEMU, even *supports* the underlying hardware. My initial thought is about whether QEMU emulates `iavf` or `i40e`. Nope, standard QEMU doesn't do `iavf`, and while there might be some out-of-tree patches for `i40e`, it's not a standard feature. Let's quickly verify my knowledge of what *is* emulated in QEMU. Right, it does `e1000`, `e1000e`, `igb`, `rtl8139`, `virtio-net`, `vmxnet3`, `pcnet`, `ne2k_pci`, `i82559er`, and `tulip`. Okay, that's a good mental checklist. Wait, I should double check `i40e`, just to be certain. I can't immediately check QEMU's source right now, but I know `igb` was added somewhat recently, meaning, that if `i40e` isn't in standard QEMU yet, then it may be worth revisiting that code base. Now, even if `i40e` *were* emulated, `iavf` is the VF driver, and emulating SR-IOV and VFs is usually not done in standard QEMU for these devices, even though `igb` does have some SR-IOV support. But `iavf` is specifically for Intel 700 Series (i40e) and 800 Series (ice) VFs. Since `iavf` requires the physical hardware that's not emulated in standard QEMU, this falls under the category of, "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." Now, the example *doesn't* explicitly list standard Ethernet drivers, but the overarching principle is "require physical PCIe hardware cards not emulated in standard QEMU." Is an Intel Ethernet NIC a "physical PCIe hardware card not emulated in standard QEMU"? Yes, it is. Therefore, changes to `iavf` and `libeth` (which is only used by these Intel drivers) are not reachable in virtualized environments. I should double-check that `libeth` is not used by anything else though, just to be sure. |
| 20/2 | 2026/08/01 19:24 | tool | grepper |
0mArgs:{
"Expression": "libeth",
"PathPrefix": "drivers/net/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 1988 lines.\nUse more precise expression if possible.\n\ndrivers/net/ethernet/intel/Kconfig=17=if NET_VENDOR_INTEL\ndrivers/net/ethernet/intel/Kconfig-18-\ndrivers/net/ethernet/intel/Kconfig:19:source \"drivers/net/ethernet/intel/libeth/Kconfig\"\ndrivers/net/ethernet/intel/Kconfig-20-source \"drivers/net/ethernet/intel/libie/Kconfig\"\n--\ndrivers/net/ethernet/intel/Makefile-5-\ndrivers/net/ethernet/intel/Makefile:6:obj-$(CONFIG_LIBETH) += libeth/\ndrivers/net/ethernet/intel/Makefile-7-obj-y += libie/\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c=1742=static inline void i40e_rx_checksum(struct i40e_vsi *vsi,\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1745-{\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1746:\tstruct libeth_rx_pt decoded;\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1747-\tu32 rx_error, rx_status;\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1757-\tdecoded = libie_rx_pt_parse(ptype);\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1758:\tif (!libeth_rx_pt_has_checksum(vsi-\u003enetdev, decoded))\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1759-\t\treturn;\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1767-\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1768:\tipv4 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV4;\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1769:\tipv6 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV6;\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1770-\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c=1814=static inline void i40e_rx_hash(struct i40e_ring *ring,\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1818-{\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1819:\tstruct libeth_rx_pt decoded;\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1820-\tu32 hash;\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1825-\tdecoded = libie_rx_pt_parse(rx_ptype);\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1826:\tif (!libeth_rx_pt_has_hash(ring-\u003enetdev, decoded))\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1827-\t\treturn;\n--\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1830-\t\thash = le32_to_cpu(rx_desc-\u003ewb.qword0.hi_dword.rss);\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c:1831:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded);\ndrivers/net/ethernet/intel/i40e/i40e_txrx.c-1832-\t}\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=711=static void iavf_clean_rx_ring(struct iavf_ring *rx_ring)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-723-\tfor (u32 i = rx_ring-\u003enext_to_clean; i != rx_ring-\u003enext_to_use; ) {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:724:\t\tconst struct libeth_fqe *rx_fqes = \u0026rx_ring-\u003erx_fqes[i];\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-725-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:726:\t\tlibeth_rx_recycle_slow(rx_fqes-\u003enetmem);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-727-\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=742=void iavf_free_rx_resources(struct iavf_ring *rx_ring)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-743-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:744:\tstruct libeth_fq fq = {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-745-\t\t.fqes\t= rx_ring-\u003erx_fqes,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-756-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:757:\tlibeth_rx_fq_destroy(\u0026fq);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-758-\trx_ring-\u003erx_fqes = NULL;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=768=int iavf_setup_rx_descriptors(struct iavf_ring *rx_ring)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-769-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:770:\tstruct libeth_fq fq = {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-771-\t\t.count\t\t= rx_ring-\u003ecount,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-776-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:777:\tret = libeth_rx_fq_create(\u0026fq, \u0026rx_ring-\u003eq_vector-\u003enapi);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-778-\tif (ret)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-805-err:\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:806:\tlibeth_rx_fq_destroy(\u0026fq);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-807-\trx_ring-\u003erx_fqes = NULL;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=859=bool iavf_alloc_rx_buffers(struct iavf_ring *rx_ring, u16 cleaned_count)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-860-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:861:\tconst struct libeth_fq_fp fq = {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-862-\t\t.pp\t\t= rx_ring-\u003epp,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-878-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:879:\t\taddr = libeth_rx_alloc(\u0026fq, ntu);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-880-\t\tif (addr == DMA_MAPPING_ERROR)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=925=static void iavf_rx_csum(const struct iavf_vsi *vsi, struct sk_buff *skb,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:926:\t\t\t struct libeth_rx_pt decoded_pt,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:927:\t\t\t struct libeth_rx_csum csum_bits)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-928-{\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-936-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:937:\tipv4 = libeth_rx_pt_get_ip_ver(decoded_pt) == LIBETH_RX_PT_OUTER_IPV4;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:938:\tipv6 = libeth_rx_pt_get_ip_ver(decoded_pt) == LIBETH_RX_PT_OUTER_IPV6;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-939-\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-975- **/\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:976:static struct libeth_rx_csum\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-977-iavf_legacy_rx_csum(const struct iavf_vsi *vsi, u64 qw1,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:978:\t\t const struct libeth_rx_pt decoded_pt)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-979-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:980:\tstruct libeth_rx_csum csum_bits = {};\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-981-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:982:\tif (!libeth_rx_pt_has_checksum(vsi-\u003enetdev, decoded_pt))\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-983-\t\treturn csum_bits;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1005- **/\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1006:static struct libeth_rx_csum\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1007-iavf_flex_rx_csum(const struct iavf_vsi *vsi, u64 qw1,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1008:\t\t const struct libeth_rx_pt decoded_pt)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1009-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1010:\tstruct libeth_rx_csum csum_bits = {};\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1011-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1012:\tif (!libeth_rx_pt_has_checksum(vsi-\u003enetdev, decoded_pt))\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1013-\t\treturn csum_bits;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1037=static void iavf_legacy_rx_hash(const struct iavf_ring *ring, __le64 qw0,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1038-\t\t\t\t__le64 qw1, struct sk_buff *skb,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1039:\t\t\t\tconst struct libeth_rx_pt decoded_pt)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1040-{\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1043-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1044:\tif (!libeth_rx_pt_has_hash(ring-\u003enetdev, decoded_pt))\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1045-\t\treturn;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1048-\t\thash = le64_get_bits(qw0, IAVF_RXD_LEGACY_RSS_M);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1049:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded_pt);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1050-\t}\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1063=static void iavf_flex_rx_hash(const struct iavf_ring *ring, __le64 qw1,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1064-\t\t\t struct sk_buff *skb,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1065:\t\t\t const struct libeth_rx_pt decoded_pt)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1066-{\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1069-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1070:\tif (!libeth_rx_pt_has_hash(ring-\u003enetdev, decoded_pt))\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1071-\t\treturn;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1075-\t\thash = le64_get_bits(qw1, IAVF_RXD_FLEX_RSS_HASH_M);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1076:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded_pt);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1077-\t}\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1131=static void iavf_process_skb_fields(const struct iavf_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1135-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1136:\tstruct libeth_rx_csum csum_bits;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1137:\tstruct libeth_rx_pt decoded_pt;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1138-\t__le64 qw0 = rx_desc-\u003eqw0;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1197=static void iavf_add_rx_frag(const struct page_pool *pp, struct sk_buff *skb,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1198:\t\t\t const struct libeth_fqe *rx_buffer,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1199-\t\t\t unsigned int size)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1217=static struct sk_buff *iavf_build_skb(const struct page_pool *pp,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1218:\t\t\t\t const struct libeth_fqe *rx_buffer,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1219-\t\t\t\t unsigned int size)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1254=static bool iavf_is_non_eop(struct iavf_ring *rx_ring,\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1255:\t\t\t struct libeth_rqe_info fields)\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1256-{\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1286- */\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1287:static struct libeth_rqe_info\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1288-iavf_extract_legacy_rx_fields(const struct iavf_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1293-\tu64 qw2 = le64_to_cpu(rx_desc-\u003eqw2);\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1294:\tstruct libeth_rqe_info fields;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1295-\tbool l2tag1p, l2tag2p;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1332- */\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1333:static struct libeth_rqe_info\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1334-iavf_extract_flex_rx_fields(const struct iavf_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1336-{\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1337:\tstruct libeth_rqe_info fields = {};\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1338-\tu64 qw0 = le64_to_cpu(rx_desc-\u003eqw0);\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1365-\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1366:static struct libeth_rqe_info\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1367-iavf_extract_rx_fields(const struct iavf_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c=1389=static int iavf_clean_rx_irq(struct iavf_ring *rx_ring, int budget)\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1398-\twhile (likely(total_rx_packets \u003c (unsigned int)budget)) {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1399:\t\tstruct libeth_rqe_info fields;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1400:\t\tstruct libeth_fqe *rx_buffer;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1401-\t\tstruct iavf_rx_desc *rx_desc;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1430-\t\trx_buffer = \u0026rx_ring-\u003erx_fqes[rx_ring-\u003enext_to_clean];\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c:1431:\t\tif (!__libeth_rx_sync_for_cpu(pp, rx_buffer, fields.len))\ndrivers/net/ethernet/intel/iavf/iavf_txrx.c-1432-\t\t\tgoto skip_data;\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.h=218=struct iavf_ring {\n--\ndrivers/net/ethernet/intel/iavf/iavf_txrx.h-226-\tunion {\ndrivers/net/ethernet/intel/iavf/iavf_txrx.h:227:\t\tstruct libeth_fqe *rx_fqes;\ndrivers/net/ethernet/intel/iavf/iavf_txrx.h-228-\t\tstruct iavf_tx_buffer *tx_bi;\n--\ndrivers/net/ethernet/intel/ice/ice_base.c=607=static int ice_rxq_pp_create(struct ice_rx_ring *rq)\ndrivers/net/ethernet/intel/ice/ice_base.c-608-{\ndrivers/net/ethernet/intel/ice/ice_base.c:609:\tstruct libeth_fq fq = {\ndrivers/net/ethernet/intel/ice/ice_base.c-610-\t\t.count\t\t= rq-\u003ecount,\n--\ndrivers/net/ethernet/intel/ice/ice_base.c-617-\ndrivers/net/ethernet/intel/ice/ice_base.c:618:\terr = libeth_rx_fq_create(\u0026fq, \u0026rq-\u003eq_vector-\u003enapi);\ndrivers/net/ethernet/intel/ice/ice_base.c-619-\tif (err)\n--\ndrivers/net/ethernet/intel/ice/ice_base.c-629-\ndrivers/net/ethernet/intel/ice/ice_base.c:630:\tfq = (struct libeth_fq){\ndrivers/net/ethernet/intel/ice/ice_base.c-631-\t\t.count\t\t= rq-\u003ecount,\n--\ndrivers/net/ethernet/intel/ice/ice_base.c-636-\ndrivers/net/ethernet/intel/ice/ice_base.c:637:\terr = libeth_rx_fq_create(\u0026fq, \u0026rq-\u003eq_vector-\u003enapi);\ndrivers/net/ethernet/intel/ice/ice_base.c-638-\tif (err)\n--\ndrivers/net/ethernet/intel/ice/ice_ethtool.c-12-#include \u003cnet/dcbnl.h\u003e\ndrivers/net/ethernet/intel/ice/ice_ethtool.c:13:#include \u003cnet/libeth/rx.h\u003e\ndrivers/net/ethernet/intel/ice/ice_ethtool.c-14-\n--\ndrivers/net/ethernet/intel/ice/ice_ethtool.c=1232=static int ice_lbtest_receive_frames(struct ice_rx_ring *rx_ring)\ndrivers/net/ethernet/intel/ice/ice_ethtool.c-1233-{\ndrivers/net/ethernet/intel/ice/ice_ethtool.c:1234:\tstruct libeth_fqe *rx_buf;\ndrivers/net/ethernet/intel/ice/ice_ethtool.c-1235-\tint valid_frames, i;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-10-#include \u003clinux/net/intel/libie/rx.h\u003e\ndrivers/net/ethernet/intel/ice/ice_txrx.c:11:#include \u003cnet/libeth/xdp.h\u003e\ndrivers/net/ethernet/intel/ice/ice_txrx.c-12-#include \u003cnet/dsfield.h\u003e\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=114=ice_unmap_and_free_tx_buf(struct ice_tx_ring *ring, struct ice_tx_buf *tx_buf)\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-129-\tcase ICE_TX_BUF_XDP_TX:\ndrivers/net/ethernet/intel/ice/ice_txrx.c:130:\t\tlibeth_xdp_return_va(tx_buf-\u003eraw_buf, false);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-131-\t\tbreak;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=512=void ice_rxq_pp_destroy(struct ice_rx_ring *rq)\ndrivers/net/ethernet/intel/ice/ice_txrx.c-513-{\ndrivers/net/ethernet/intel/ice/ice_txrx.c:514:\tstruct libeth_fq fq = {\ndrivers/net/ethernet/intel/ice/ice_txrx.c-515-\t\t.fqes\t= rq-\u003erx_fqes,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-518-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:519:\tlibeth_rx_fq_destroy(\u0026fq);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-520-\trq-\u003erx_fqes = NULL;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-528-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:529:\tlibeth_rx_fq_destroy(\u0026fq);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-530-\trq-\u003ehdr_fqes = NULL;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=538=void ice_clean_rx_ring(struct ice_rx_ring *rx_ring)\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-550-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:551:\tlibeth_xdp_return_stash(\u0026rx_ring-\u003exdp);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-552-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-554-\tfor (u32 i = rx_ring-\u003enext_to_clean; i != rx_ring-\u003enext_to_use; ) {\ndrivers/net/ethernet/intel/ice/ice_txrx.c:555:\t\tlibeth_rx_recycle_slow(rx_ring-\u003erx_fqes[i].netmem);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-556-\ndrivers/net/ethernet/intel/ice/ice_txrx.c-557-\t\tif (rx_ring-\u003ehdr_pp)\ndrivers/net/ethernet/intel/ice/ice_txrx.c:558:\t\t\tlibeth_rx_recycle_slow(rx_ring-\u003ehdr_fqes[i].netmem);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-559-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=651=static u32\ndrivers/net/ethernet/intel/ice/ice_txrx.c:652:ice_run_xdp(struct ice_rx_ring *rx_ring, struct libeth_xdp_buff *xdp,\ndrivers/net/ethernet/intel/ice/ice_txrx.c-653-\t struct bpf_prog *xdp_prog, struct ice_tx_ring *xdp_ring,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-689-\tcase XDP_DROP:\ndrivers/net/ethernet/intel/ice/ice_txrx.c:690:\t\tlibeth_xdp_return_buff(xdp);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-691-\t\tret = ICE_XDP_CONSUMED;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=825=bool ice_alloc_rx_bufs(struct ice_rx_ring *rx_ring, unsigned int cleaned_count)\ndrivers/net/ethernet/intel/ice/ice_txrx.c-826-{\ndrivers/net/ethernet/intel/ice/ice_txrx.c:827:\tconst struct libeth_fq_fp hdr_fq = {\ndrivers/net/ethernet/intel/ice/ice_txrx.c-828-\t\t.pp\t\t= rx_ring-\u003ehdr_pp,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-832-\t};\ndrivers/net/ethernet/intel/ice/ice_txrx.c:833:\tconst struct libeth_fq_fp fq = {\ndrivers/net/ethernet/intel/ice/ice_txrx.c-834-\t\t.pp\t\t= rx_ring-\u003epp,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-851-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:852:\t\taddr = libeth_rx_alloc(\u0026fq, ntu);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-853-\t\tif (addr == DMA_MAPPING_ERROR) {\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-865-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:866:\t\taddr = libeth_rx_alloc(\u0026hdr_fq, ntu);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-867-\t\tif (addr == DMA_MAPPING_ERROR) {\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-869-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:870:\t\t\tlibeth_rx_recycle_slow(fq.fqes[ntu].netmem);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-871-\t\t\tbreak;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c=946=static int ice_clean_rx_irq(struct ice_rx_ring *rx_ring, int budget)\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-957-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:958:\tlibeth_xdp_init_buff(xdp, \u0026rx_ring-\u003exdp, \u0026rx_ring-\u003exdp_rxq);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-959-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-968-\t\tunion ice_32b_rx_flex_desc *rx_desc;\ndrivers/net/ethernet/intel/ice/ice_txrx.c:969:\t\tstruct libeth_fqe *rx_buf;\ndrivers/net/ethernet/intel/ice/ice_txrx.c-970-\t\tstruct sk_buff *skb;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1010-\t\trx_buf = \u0026rx_ring-\u003ehdr_fqes[ntc];\ndrivers/net/ethernet/intel/ice/ice_txrx.c:1011:\t\tlibeth_xdp_process_buff(xdp, rx_buf, size);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1012-\t\trx_buf-\u003enetmem = 0;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1021-\t\trx_buf = \u0026rx_ring-\u003erx_fqes[ntc];\ndrivers/net/ethernet/intel/ice/ice_txrx.c:1022:\t\tlibeth_xdp_process_buff(xdp, rx_buf, size);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1023-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1048-\t\tif (!skb) {\ndrivers/net/ethernet/intel/ice/ice_txrx.c:1049:\t\t\tlibeth_xdp_return_buff_slow(xdp);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1050-\t\t\tice_stats_inc(rx_ring-\u003ering_stats, rx_buf_failed);\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1076-\ndrivers/net/ethernet/intel/ice/ice_txrx.c:1077:\tlibeth_xdp_save_buff(\u0026rx_ring-\u003exdp, xdp);\ndrivers/net/ethernet/intel/ice/ice_txrx.c-1078-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.h-6-\ndrivers/net/ethernet/intel/ice/ice_txrx.h:7:#include \u003cnet/libeth/types.h\u003e\ndrivers/net/ethernet/intel/ice/ice_txrx.h-8-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.h=277=struct ice_rx_ring {\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.h-285-\tunion {\ndrivers/net/ethernet/intel/ice/ice_txrx.h:286:\t\tstruct libeth_fqe *rx_fqes;\ndrivers/net/ethernet/intel/ice/ice_txrx.h-287-\t\tstruct xdp_buff **xdp_buf;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.h-300-\tstruct page_pool *hdr_pp;\ndrivers/net/ethernet/intel/ice/ice_txrx.h:301:\tstruct libeth_fqe *hdr_fqes;\ndrivers/net/ethernet/intel/ice/ice_txrx.h-302-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx.h-317-\tunion {\ndrivers/net/ethernet/intel/ice/ice_txrx.h:318:\t\tstruct libeth_xdp_buff_stash xdp;\ndrivers/net/ethernet/intel/ice/ice_txrx.h:319:\t\tstruct libeth_xdp_buff *xsk;\ndrivers/net/ethernet/intel/ice/ice_txrx.h-320-\t};\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-5-#include \u003clinux/net/intel/libie/rx.h\u003e\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:6:#include \u003cnet/libeth/xdp.h\u003e\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-7-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=65=ice_rx_hash_to_skb(const struct ice_rx_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-68-{\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:69:\tstruct libeth_rx_pt decoded;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-70-\tu32 hash;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-72-\tdecoded = libie_rx_pt_parse(rx_ptype);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:73:\tif (!libeth_rx_pt_has_hash(rx_ring-\u003enetdev, decoded))\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-74-\t\treturn;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-77-\tif (likely(hash))\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:78:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-79-}\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=108=ice_rx_csum(struct ice_rx_ring *ring, struct sk_buff *skb,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-110-{\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:111:\tstruct libeth_rx_pt decoded;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-112-\tu16 rx_status0, rx_status1;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-118-\tdecoded = libie_rx_pt_parse(ptype);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:119:\tif (!libeth_rx_pt_has_checksum(ring-\u003enetdev, decoded))\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-120-\t\treturn;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-137-\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:138:\tipv4 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV4;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:139:\tipv6 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV6;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-140-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=271=ice_clean_xdp_tx_buf(struct device *dev, struct ice_tx_buf *tx_buf,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-275-\tcase ICE_TX_BUF_XDP_TX:\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:276:\t\tlibeth_xdp_return_va(tx_buf-\u003eraw_buf, true);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-277-\t\tbreak;\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=523=static int ice_xdp_rx_hw_ts(const struct xdp_md *ctx, u64 *ts_ns)\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-524-{\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:525:\tconst struct libeth_xdp_buff *xdp_ext = (void *)ctx;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-526-\tstruct ice_rx_ring *rx_ring;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-527-\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:528:\trx_ring = libeth_xdp_buff_to_rq(xdp_ext, typeof(*rx_ring), xdp_rxq);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-529-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=556=static int ice_xdp_rx_hash(const struct xdp_md *ctx, u32 *hash,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-558-{\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:559:\tconst struct libeth_xdp_buff *xdp_ext = (void *)ctx;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-560-\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c=578=static int ice_xdp_rx_vlan_tag(const struct xdp_md *ctx, __be16 *vlan_proto,\n--\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-580-{\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:581:\tconst struct libeth_xdp_buff *xdp_ext = (void *)ctx;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-582-\tstruct ice_rx_ring *rx_ring;\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-583-\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c:584:\trx_ring = libeth_xdp_buff_to_rq(xdp_ext, typeof(*rx_ring), xdp_rxq);\ndrivers/net/ethernet/intel/ice/ice_txrx_lib.c-585-\n--\ndrivers/net/ethernet/intel/ice/ice_xsk.c-5-#include \u003clinux/unroll.h\u003e\ndrivers/net/ethernet/intel/ice/ice_xsk.c:6:#include \u003cnet/libeth/xdp.h\u003e\ndrivers/net/ethernet/intel/ice/ice_xsk.c-7-#include \u003cnet/xdp_sock_drv.h\u003e\n--\ndrivers/net/ethernet/intel/ice/ice_xsk.c=567=int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring,\n--\ndrivers/net/ethernet/intel/ice/ice_xsk.c-631-\ndrivers/net/ethernet/intel/ice/ice_xsk.c:632:\t\t((struct libeth_xdp_buff *)first)-\u003edesc = rx_desc;\ndrivers/net/ethernet/intel/ice/ice_xsk.c-633-\n--\ndrivers/net/ethernet/intel/ice/ice_xsk.c-676-\trx_ring-\u003enext_to_clean = ntc;\ndrivers/net/ethernet/intel/ice/ice_xsk.c:677:\trx_ring-\u003exsk = (struct libeth_xdp_buff *)first;\ndrivers/net/ethernet/intel/ice/ice_xsk.c-678-\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=675=struct idpf_adapter {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-703-\ndrivers/net/ethernet/intel/idpf/idpf.h:704:\tstruct libeth_rx_pt *singleq_pt_lkup;\ndrivers/net/ethernet/intel/idpf/idpf.h:705:\tstruct libeth_rx_pt *splitq_pt_lkup;\ndrivers/net/ethernet/intel/idpf/idpf.h-706-\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-3-\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:4:#include \u003cnet/libeth/xdp.h\u003e\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-5-\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=188=static void idpf_tx_singleq_dma_map_error(struct idpf_tx_queue *txq,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-191-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:192:\tstruct libeth_sq_napi_stats ss = { };\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:193:\tstruct libeth_cq_pp cp = {\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-194-\t\t.dev\t= txq-\u003edev,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-206-\t\ttx_buf = \u0026txq-\u003etx_buf[idx];\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:207:\t\tlibeth_tx_complete(tx_buf, \u0026cp);\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-208-\t\tif (tx_buf == first)\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=481=static bool idpf_tx_singleq_clean(struct idpf_tx_queue *tx_q, int napi_budget,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-483-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:484:\tstruct libeth_sq_napi_stats ss = { };\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-485-\tstruct idpf_base_tx_desc *tx_desc;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-487-\ts16 ntc = tx_q-\u003enext_to_clean;\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:488:\tstruct libeth_cq_pp cp = {\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-489-\t\t.dev\t= tx_q-\u003edev,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-528-\t\t/* update the statistics for this packet */\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:529:\t\tlibeth_tx_complete(tx_buf, \u0026cp);\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-530-\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-542-\t\t\t/* unmap any remaining paged data */\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:543:\t\t\tlibeth_tx_complete(tx_buf, \u0026cp);\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-544-\t\t}\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=649=static void idpf_rx_singleq_csum(struct idpf_rx_queue *rxq,\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-650-\t\t\t\t struct sk_buff *skb,\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:651:\t\t\t\t struct libeth_rx_csum csum_bits,\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:652:\t\t\t\t struct libeth_rx_pt decoded)\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-653-{\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-656-\t/* check if Rx checksum is enabled */\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:657:\tif (!libeth_rx_pt_has_checksum(rxq-\u003exdp_rxq.dev, decoded))\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-658-\t\treturn;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-663-\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:664:\tipv4 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV4;\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:665:\tipv6 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV6;\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-666-\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-716- **/\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:717:static struct libeth_rx_csum\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-718-idpf_rx_singleq_base_csum(const union virtchnl2_rx_desc *rx_desc)\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-719-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:720:\tstruct libeth_rx_csum csum_bits = { };\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-721-\tu32 rx_error, rx_status;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-751- **/\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:752:static struct libeth_rx_csum\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-753-idpf_rx_singleq_flex_csum(const union virtchnl2_rx_desc *rx_desc)\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-754-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:755:\tstruct libeth_rx_csum csum_bits = { };\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-756-\tu16 rx_status0, rx_status1;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=789=static void idpf_rx_singleq_base_hash(struct idpf_rx_queue *rx_q,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-791-\t\t\t\t const union virtchnl2_rx_desc *rx_desc,\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:792:\t\t\t\t struct libeth_rx_pt decoded)\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-793-{\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-795-\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:796:\tif (!libeth_rx_pt_has_hash(rx_q-\u003exdp_rxq.dev, decoded))\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-797-\t\treturn;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-804-\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:805:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded);\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-806-\t}\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=819=static void idpf_rx_singleq_flex_hash(struct idpf_rx_queue *rx_q,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-821-\t\t\t\t const union virtchnl2_rx_desc *rx_desc,\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:822:\t\t\t\t struct libeth_rx_pt decoded)\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-823-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:824:\tif (!libeth_rx_pt_has_hash(rx_q-\u003exdp_rxq.dev, decoded))\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-825-\t\treturn;\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-830-\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:831:\t\tlibeth_rx_pt_set_hash(skb, hash, decoded);\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-832-\t}\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c=848=__idpf_rx_singleq_process_skb_fields(struct idpf_rx_queue *rx_q,\n--\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c-852-{\ndrivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c:853:\tstruct libeth_rx_pt decoded = rx_q-\u003erx_ptype_lkup[ptype];\n\n"
} |
| 21/2 | 2026/08/01 19:24 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 66242 output: 95 thoughts: 597 Thoughts: **My Assessment of the Patch's Fuzzability** Okay, let's break this down systematically. My initial assessment is that this patch isn't fuzzable in a standard environment, and I'm confident in that conclusion. First, I know that `libeth` is exclusively used by Intel Ethernet drivers. The patch touches both `iavf_txrx.c` and `include/net/libeth/rx.h`. Since `iavf` and `libeth` are both Intel-specific, I need to make sure I'm not missing anything. I quickly double-checked the `drivers/net/` directory and confirmed – no other drivers utilize `libeth`, it's strictly Intel Ethernet. And Intel Ethernet drivers, like `i40e`, `iavf`, `ice`, and `idpf`, inherently depend on physical hardware, not the emulated network cards available in a standard QEMU or GCE environment. Therefore, any code modifications within those drivers are unreachable for fuzzing. I did, however, need to confirm that `iavf` could not be fuzzed in a specific circumstance. I remembered that syzkaller has some mechanisms for fuzzing PCI devices via `syz_pci_device`, but that would depend on a detailed description of the PCI device's BARs and registers. Even if that were possible, the prompt explicitly states that patches modifying vendor-specific PCIe drivers that need physical hardware are not to be considered fuzzable in a standard QEMU environment. The exclusion criteria is very clear: this includes drivers like Intel Ethernet drivers (`iavf`, `ice`, etc.). These Intel drivers *require* physical hardware, and aren't emulated in standard QEMU. This patch hits that specific exclusion criteria directly. Given all of that, I can definitively state that the modified code paths are unreachable during fuzzing. The patch modifies the Intel Adaptive Virtual Function (iavf) Ethernet driver and the Intel Ethernet library (libeth), which are both vendor-specific PCIe drivers that are dependent on physical Intel network hardware, and not emulated in environments like QEMU. That's my reasoning. My final report will be: * Reasoning: The patch modifies the Intel Adaptive Virtual Function (iavf) Ethernet driver and the Intel Ethernet library (libeth). These are vendor-specific PCIe drivers that require physical Intel network hardware, which is not emulated in standard QEMU or GCE environments. Therefore, the modified code paths are unreachable during fuzzing. * WorthFuzzing: false * FocusSymbols: \[ ] * EnableConfigs: \[ ] I can now call `set-results`. |
| 22/2 | 2026/08/01 19:24 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies the Intel Adaptive Virtual Function (iavf) Ethernet driver and the Intel Ethernet library (libeth). These are vendor-specific PCIe drivers that require physical Intel network hardware, which is not emulated in standard QEMU or GCE environments. Therefore, the modified code paths are unreachable during fuzzing.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Intel Adaptive Virtual Function (iavf) Ethernet driver and the Intel Ethernet library (libeth). These are vendor-specific PCIe drivers that require physical Intel network hardware, which is not emulated in standard QEMU or GCE environments. Therefore, the modified code paths are unreachable during fuzzing.",
"WorthFuzzing": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|