| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/09/05 18:23 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "",
"NeedsKMSAN": false,
"Reasoning": "The patch modifies error handling in drivers/net/ethernet/intel/idpf/idpf_txrx.c (handling allocation failure and cleanup for kasprintf in idpf_vport_intr_req_irq). The idpf driver is a PCIe device driver for Intel Infrastructure Data Path Function (IPU/SmartNIC) hardware devices, which are not emulated in standard QEMU/GCE virtualized environments and thus structurally unreachable.",
"WorthFuzzing": false
} |
| 1/1 | 2026/09/05 18:23 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit a5d6f238bb17f08ad886313eb6dbb602edb75c58\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Sat Sep 5 18:23:18 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/intel/idpf/idpf_txrx.c b/drivers/net/ethernet/intel/idpf/idpf_txrx.c\nindex 24b91be256762..86dedf5c1c093 100644\n--- a/drivers/net/ethernet/intel/idpf/idpf_txrx.c\n+++ b/drivers/net/ethernet/intel/idpf/idpf_txrx.c\n@@ -4063,12 +4063,17 @@ static int idpf_vport_intr_req_irq(struct idpf_vport *vport,\n \n \t\tname = kasprintf(GFP_KERNEL, \"%s-%s-%s-%d\", drv_name, if_name,\n \t\t\t\t vec_name, vector);\n+\t\tif (!name) {\n+\t\t\terr = -ENOMEM;\n+\t\t\tgoto free_q_irqs;\n+\t\t}\n \n \t\terr = request_irq(irq_num, idpf_vport_intr_clean_queues, 0,\n \t\t\t\t name, q_vector);\n \t\tif (err) {\n \t\t\tnetdev_err(vport-\u003enetdev,\n \t\t\t\t \"Request_irq failed, error: %d\\n\", err);\n+\t\t\tkfree(name);\n \t\t\tgoto free_q_irqs;\n \t\t}\n \n"
} |
| 2/1 | 2026/09/05 18:23 | agent | patch-evaluator |
0mModel:core Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies error handling in drivers/net/ethernet/intel/idpf/idpf_txrx.c (handling allocation failure and cleanup for kasprintf in idpf_vport_intr_req_irq). The idpf driver is a PCIe device driver for Intel Infrastructure Data Path Function (IPU/SmartNIC) hardware devices, which are not emulated in standard QEMU/GCE virtualized environments and thus structurally unreachable.",
"WorthFuzzing": false
}Instruction: You are an expert Linux kernel maintainer and security engineer.
Your job is to review a provided patch series and evaluate whether it warrants fuzzing with syzkaller.
IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on internal assumptions. You must actively use your code access
tools to inspect the actual source code, callers, and surrounding context.
================================================================================
1. CORE TRIAGE PHILOSOPHY
================================================================================
The goal of patch fuzzing is to discover crashes, regressions, exposed latent bugs,
and newly triggered assertions introduced by the patch series.
- REACHABILITY IS THE PRIMARY GATE:
Fuzzing can only discover bugs in code that can actually execute in standard virtualized
environments (GCE or QEMU, utilizing software-emulated devices like USB gadgets, netdev, tun/tap).
If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed,
regardless of whether it adds assertions or complex logic.
- DO NOT BLINDLY TRUST "NO FUNCTIONAL CHANGE" (NFCI) OR "REFACTORING" CLAIMS:
Patch authors routinely label changes as "cleanups", "refactorings", or state
"No functional change intended". Do NOT take these claims at face value.
Code refactorings that rearrange logic, introduce helper functions, or alter state management
in core subsystems frequently introduce subtle semantic shifts or uncover latent kernel bugs.
If reachable executable code is modified or refactored, it MUST be fuzzed.
- NEW OR MODIFIED ASSERTIONS IN REACHABLE CODE MUST BE FUZZED:
When a patch introduces or modifies runtime checks or assertions (e.g., WARN_ON*, VM_WARN_ON*,
BUG_ON*, lockdep_assert*) in reachable code paths, it enforces new or stricter invariants.
Even if the author believes the invariant always holds, fuzzing is essential to verify whether
an unusual sequence of operations can violate it.
================================================================================
2. WHEN TO RETURN WorthFuzzing=false (NEGATIVE CRITERIA)
================================================================================
Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories:
- Non-kernel and non-executable changes:
* Modifications to Documentation/, comments, or spelling fixes.
* User-space directories, self-tests, samples, or scripts (e.g., tools/, samples/, scripts/, usr/)
that do not affect the compiled kernel image (vmlinux) or kernel modules.
* Purely decorative logging (e.g., message strings in pr_err, printk, dev_info) or tracepoints
that do not alter control flow or data structures.
* Build system or Kconfig changes that do not alter compiled C logic.
- Structurally unreachable hardware:
* Vendor-specific PCIe switches, SmartNICs, or GPU drivers (e.g., mlxsw, pds_core, qed,
ionic, amdgpu) requiring physical ASIC/PCIe cards not emulated in standard QEMU.
- Unreachable execution paths:
* Driver teardown callbacks (.remove, .shutdown, pci_unregister_driver) executed only during
physical PCI hot-unplug or manual sysfs driver unbinding.
* Code paths exclusive to architectures other than the target architecture.
================================================================================
3. WHEN TO RETURN WorthFuzzing=true (POSITIVE CRITERIA)
================================================================================
Return WorthFuzzing=true whenever the patch touches reachable executable code, including:
- Core Subsystems:
* Any logic modifications in memory management (mm/), synchronization/locking (kernel/locking/),
BPF, scheduler, core networking, VFS, or syscall handling.
- Refactorings and Code Cleanups:
* Any restructuring of reachable data structures, helper abstractions, or algorithm flows.
- Runtime Assertions and Defensive Checks:
* Any introduction or alteration of assertions (WARN_ON*, VM_WARN_ON*, BUG_ON*, etc.) in reachable paths.
- Reachable Drivers and Protocols:
* Drivers accessible via virtual buses (virtio, USB gadget, loopback, netlink, binder, sockets, etc.).
================================================================================
4. EXTRACTING FocusSymbols (PREVENTING DILUTION)
================================================================================
When WorthFuzzing=true, you must extract specific kernel functions into FocusSymbols to guide the fuzzer:
- AVOID UBIQUITOUS LIFECYCLE HOT-PATHS:
Do NOT list generic, ubiquitous functions called by almost every program in the corpus
(including, but not limited to: general memory allocators and deallocators, page fault
and trap handlers, or core synchronization primitives; this is not an exhaustive list).
Listing ubiquitous functions causes the fuzzer to classify thousands of unrelated tests as "focused",
which severely dilutes fuzzing effort away from the actual changes.
- TARGET SPECIFIC FEATURE LOGIC AND ENTRYPOINTS:
List functions that specifically implement the logic being added or altered, or direct API entrypoints
for the subsystem feature under review.
- HANDLING STATIC INLINE FUNCTIONS IN HEADERS (.h):
Compiler-inlined static functions (such as static inlines in mm/*.h or include/linux/*.h) lack
distinct symbol addresses in vmlinux and cannot be targeted directly by symbol coverage filters.
If the changes are primarily in static inline helpers, identify non-static, feature-specific caller
functions in .c files that exercise them (avoiding ubiquitous lifecycle wrappers).
================================================================================
5. IDENTIFYING EnableConfigs
================================================================================
Identify any specific CONFIG_ options required to properly compile and reach the modified code:
- Inspect Kconfig files and #ifdef guards; do not make assumptions.
- Check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed.
- Strip any '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: Target architecture: amd64
For your convenience, here is the diff of the changes:
commit a5d6f238bb17f08ad886313eb6dbb602edb75c58
Author: syz-cluster <triage@syzkaller.com>
Date: Sat Sep 5 18:23:18 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/ethernet/intel/idpf/idpf_txrx.c b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
index 24b91be256762..86dedf5c1c093 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_txrx.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
@@ -4063,12 +4063,17 @@ static int idpf_vport_intr_req_irq(struct idpf_vport *vport,
name = kasprintf(GFP_KERNEL, "%s-%s-%s-%d", drv_name, if_name,
vec_name, vector);
+ if (!name) {
+ err = -ENOMEM;
+ goto free_q_irqs;
+ }
err = request_irq(irq_num, idpf_vport_intr_clean_queues, 0,
name, q_vector);
if (err) {
netdev_err(vport->netdev,
"Request_irq failed, error: %d\n", err);
+ kfree(name);
goto free_q_irqs;
}
|
| 3/2 | 2026/09/05 18:23 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 3013 output: 30 thoughts: 115 Thoughts: **Analyzing the Patch: Intel IDPF Driver** Okay, let's dive into this. First, I need to understand what this patch is actually changing, so I'll start by taking a close look at the patch itself and pinpoint the specific files involved. It seems the modification is centered around `drivers/net/ethernet/intel/idpf/idpf_txrx.c`. Right, so this is about the `idpf` driver. Now, a quick memory refresh is in order. What exactly *is* this `idpf` driver again? Intel Infrastructure Data Path Function, right? Okay, that helps. My experience tells me this is likely related to physical hardware. I'll need to confirm that suspicion, so let's cross-reference and check the `Kconfig` files – probably in `drivers/net/ethernet/intel/idpf/Kconfig` or even the broader `drivers/net/ethernet/intel/Kconfig` directory – to get a better sense of whether we're talking about Intel IPUs, SmartNICs, FPGAs, or something similar. Confirming the underlying hardware is crucial for properly assessing the impact and potential implications of this patch. |
| 4/2 | 2026/09/05 18:23 | tool | grepper |
0mArgs:{
"Expression": "IDPF",
"PathPrefix": "drivers/net/ethernet/intel"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 3087 lines.\nUse more precise expression if possible.\n\ndrivers/net/ethernet/intel/Makefile=20=obj-$(CONFIG_ICE) += ice/\ndrivers/net/ethernet/intel/Makefile:21:obj-$(CONFIG_IDPF) += idpf/\ndrivers/net/ethernet/intel/Makefile-22-obj-$(CONFIG_IXD) += ixd/\n--\ndrivers/net/ethernet/intel/idpf/Kconfig-3-\ndrivers/net/ethernet/intel/idpf/Kconfig:4:config IDPF\ndrivers/net/ethernet/intel/idpf/Kconfig-5-\ttristate \"Intel(R) Infrastructure Data Path Function Support\"\n--\ndrivers/net/ethernet/intel/idpf/Kconfig-17-\ndrivers/net/ethernet/intel/idpf/Kconfig:18:if IDPF\ndrivers/net/ethernet/intel/idpf/Kconfig-19-\ndrivers/net/ethernet/intel/idpf/Kconfig:20:config IDPF_SINGLEQ\ndrivers/net/ethernet/intel/idpf/Kconfig-21-\tbool \"idpf singleq support\"\n--\ndrivers/net/ethernet/intel/idpf/Kconfig-27-\ndrivers/net/ethernet/intel/idpf/Kconfig:28:endif # IDPF\n--\ndrivers/net/ethernet/intel/idpf/Makefile-5-\ndrivers/net/ethernet/intel/idpf/Makefile:6:obj-$(CONFIG_IDPF) += idpf.o\ndrivers/net/ethernet/intel/idpf/Makefile-7-\ndrivers/net/ethernet/intel/idpf/Makefile=8=idpf-y := \\\n--\ndrivers/net/ethernet/intel/idpf/Makefile-17-\ndrivers/net/ethernet/intel/idpf/Makefile:18:idpf-$(CONFIG_IDPF_SINGLEQ)\t+= idpf_singleq_txrx.o\ndrivers/net/ethernet/intel/idpf/Makefile-19-\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-3-\ndrivers/net/ethernet/intel/idpf/idpf.h:4:#ifndef _IDPF_H_\ndrivers/net/ethernet/intel/idpf/idpf.h:5:#define _IDPF_H_\ndrivers/net/ethernet/intel/idpf/idpf.h-6-\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=12=struct idpf_rss_data;\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-32-\ndrivers/net/ethernet/intel/idpf/idpf.h:33:#define IDPF_NO_FREE_SLOT\t\t0xffff\ndrivers/net/ethernet/intel/idpf/idpf.h-34-\ndrivers/net/ethernet/intel/idpf/idpf.h-35-/* Default Mailbox settings */\ndrivers/net/ethernet/intel/idpf/idpf.h:36:#define IDPF_NUM_FILTERS_PER_MSG\t20\ndrivers/net/ethernet/intel/idpf/idpf.h:37:#define IDPF_NUM_DFLT_MBX_Q\t\t2\t/* includes both TX and RX */\ndrivers/net/ethernet/intel/idpf/idpf.h:38:#define IDPF_DFLT_MBX_Q_LEN\t\t64\ndrivers/net/ethernet/intel/idpf/idpf.h-39-/* maximum number of times to try before resetting mailbox */\ndrivers/net/ethernet/intel/idpf/idpf.h:40:#define IDPF_MB_MAX_ERR\t\t\t20\ndrivers/net/ethernet/intel/idpf/idpf.h:41:#define IDPF_NUM_CHUNKS_PER_MSG(struct_sz, chunk_sz)\t\\\ndrivers/net/ethernet/intel/idpf/idpf.h-42-\t((LIBIE_CTLQ_MAX_BUF_LEN - (struct_sz)) / (chunk_sz))\ndrivers/net/ethernet/intel/idpf/idpf.h-43-\ndrivers/net/ethernet/intel/idpf/idpf.h:44:#define IDPF_WAIT_FOR_MARKER_TIMEO\t500\ndrivers/net/ethernet/intel/idpf/idpf.h:45:#define IDPF_MAX_WAIT\t\t\t500\ndrivers/net/ethernet/intel/idpf/idpf.h-46-\ndrivers/net/ethernet/intel/idpf/idpf.h-47-/* available message levels */\ndrivers/net/ethernet/intel/idpf/idpf.h:48:#define IDPF_AVAIL_NETIF_M (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK)\ndrivers/net/ethernet/intel/idpf/idpf.h-49-\ndrivers/net/ethernet/intel/idpf/idpf.h:50:#define IDPF_DIM_PROFILE_SLOTS 5\ndrivers/net/ethernet/intel/idpf/idpf.h-51-\ndrivers/net/ethernet/intel/idpf/idpf.h:52:#define IDPF_VIRTCHNL_VERSION_MAJOR VIRTCHNL2_VERSION_MAJOR_2\ndrivers/net/ethernet/intel/idpf/idpf.h:53:#define IDPF_VIRTCHNL_VERSION_MINOR VIRTCHNL2_VERSION_MINOR_0\ndrivers/net/ethernet/intel/idpf/idpf.h-54-\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=62=struct idpf_mac_filter {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-70- * enum idpf_state - State machine to handle bring up\ndrivers/net/ethernet/intel/idpf/idpf.h:71: * @__IDPF_VER_CHECK: Negotiate virtchnl version\ndrivers/net/ethernet/intel/idpf/idpf.h:72: * @__IDPF_GET_CAPS: Negotiate capabilities\ndrivers/net/ethernet/intel/idpf/idpf.h:73: * @__IDPF_INIT_SW: Init based on given capabilities\ndrivers/net/ethernet/intel/idpf/idpf.h:74: * @__IDPF_STATE_LAST: Must be last, used to determine size\ndrivers/net/ethernet/intel/idpf/idpf.h-75- */\ndrivers/net/ethernet/intel/idpf/idpf.h=76=enum idpf_state {\ndrivers/net/ethernet/intel/idpf/idpf.h:77:\t__IDPF_VER_CHECK,\ndrivers/net/ethernet/intel/idpf/idpf.h:78:\t__IDPF_GET_CAPS,\ndrivers/net/ethernet/intel/idpf/idpf.h:79:\t__IDPF_INIT_SW,\ndrivers/net/ethernet/intel/idpf/idpf.h:80:\t__IDPF_STATE_LAST,\ndrivers/net/ethernet/intel/idpf/idpf.h-81-};\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-84- * enum idpf_flags - Hard reset causes.\ndrivers/net/ethernet/intel/idpf/idpf.h:85: * @IDPF_HR_FUNC_RESET: Hard reset when TxRx timeout\ndrivers/net/ethernet/intel/idpf/idpf.h:86: * @IDPF_HR_DRV_LOAD: Set on driver load for a clean HW\ndrivers/net/ethernet/intel/idpf/idpf.h:87: * @IDPF_HR_RESET_IN_PROG: Reset in progress\ndrivers/net/ethernet/intel/idpf/idpf.h:88: * @IDPF_REMOVE_IN_PROG: Driver remove in progress\ndrivers/net/ethernet/intel/idpf/idpf.h:89: * @IDPF_MB_INTR_MODE: Mailbox in interrupt mode\ndrivers/net/ethernet/intel/idpf/idpf.h:90: * @IDPF_VC_CORE_INIT: virtchnl core has been init\ndrivers/net/ethernet/intel/idpf/idpf.h:91: * @IDPF_FLAGS_NBITS: Must be last\ndrivers/net/ethernet/intel/idpf/idpf.h-92- */\ndrivers/net/ethernet/intel/idpf/idpf.h=93=enum idpf_flags {\ndrivers/net/ethernet/intel/idpf/idpf.h:94:\tIDPF_HR_FUNC_RESET,\ndrivers/net/ethernet/intel/idpf/idpf.h:95:\tIDPF_HR_DRV_LOAD,\ndrivers/net/ethernet/intel/idpf/idpf.h:96:\tIDPF_HR_RESET_IN_PROG,\ndrivers/net/ethernet/intel/idpf/idpf.h:97:\tIDPF_REMOVE_IN_PROG,\ndrivers/net/ethernet/intel/idpf/idpf.h:98:\tIDPF_MB_INTR_MODE,\ndrivers/net/ethernet/intel/idpf/idpf.h:99:\tIDPF_VC_CORE_INIT,\ndrivers/net/ethernet/intel/idpf/idpf.h:100:\tIDPF_FLAGS_NBITS,\ndrivers/net/ethernet/intel/idpf/idpf.h-101-};\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-104- * enum idpf_cap_field - Offsets into capabilities struct for specific caps\ndrivers/net/ethernet/intel/idpf/idpf.h:105: * @IDPF_BASE_CAPS: generic base capabilities\ndrivers/net/ethernet/intel/idpf/idpf.h:106: * @IDPF_CSUM_CAPS: checksum offload capabilities\ndrivers/net/ethernet/intel/idpf/idpf.h:107: * @IDPF_SEG_CAPS: segmentation offload capabilities\ndrivers/net/ethernet/intel/idpf/idpf.h:108: * @IDPF_RSS_CAPS: RSS offload capabilities\ndrivers/net/ethernet/intel/idpf/idpf.h:109: * @IDPF_HSPLIT_CAPS: Header split capabilities\ndrivers/net/ethernet/intel/idpf/idpf.h:110: * @IDPF_RSC_CAPS: RSC offload capabilities\ndrivers/net/ethernet/intel/idpf/idpf.h:111: * @IDPF_OTHER_CAPS: miscellaneous offloads\ndrivers/net/ethernet/intel/idpf/idpf.h-112- *\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=117=enum idpf_cap_field {\ndrivers/net/ethernet/intel/idpf/idpf.h:118:\tIDPF_BASE_CAPS\t\t= -1,\ndrivers/net/ethernet/intel/idpf/idpf.h:119:\tIDPF_CSUM_CAPS\t\t= offsetof(struct virtchnl2_get_capabilities,\ndrivers/net/ethernet/intel/idpf/idpf.h-120-\t\t\t\t\t csum_caps),\ndrivers/net/ethernet/intel/idpf/idpf.h:121:\tIDPF_SEG_CAPS\t\t= offsetof(struct virtchnl2_get_capabilities,\ndrivers/net/ethernet/intel/idpf/idpf.h-122-\t\t\t\t\t seg_caps),\ndrivers/net/ethernet/intel/idpf/idpf.h:123:\tIDPF_RSS_CAPS\t\t= offsetof(struct virtchnl2_get_capabilities,\ndrivers/net/ethernet/intel/idpf/idpf.h-124-\t\t\t\t\t rss_caps),\ndrivers/net/ethernet/intel/idpf/idpf.h:125:\tIDPF_HSPLIT_CAPS\t= offsetof(struct virtchnl2_get_capabilities,\ndrivers/net/ethernet/intel/idpf/idpf.h-126-\t\t\t\t\t hsplit_caps),\ndrivers/net/ethernet/intel/idpf/idpf.h:127:\tIDPF_RSC_CAPS\t\t= offsetof(struct virtchnl2_get_capabilities,\ndrivers/net/ethernet/intel/idpf/idpf.h-128-\t\t\t\t\t rsc_caps),\ndrivers/net/ethernet/intel/idpf/idpf.h:129:\tIDPF_OTHER_CAPS\t\t= offsetof(struct virtchnl2_get_capabilities,\ndrivers/net/ethernet/intel/idpf/idpf.h-130-\t\t\t\t\t other_caps),\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-134- * enum idpf_vport_state - Current vport state\ndrivers/net/ethernet/intel/idpf/idpf.h:135: * @IDPF_VPORT_UP: Vport is up\ndrivers/net/ethernet/intel/idpf/idpf.h:136: * @IDPF_VPORT_STATE_NBITS: Must be last, number of states\ndrivers/net/ethernet/intel/idpf/idpf.h-137- */\ndrivers/net/ethernet/intel/idpf/idpf.h=138=enum idpf_vport_state {\ndrivers/net/ethernet/intel/idpf/idpf.h:139:\tIDPF_VPORT_UP,\ndrivers/net/ethernet/intel/idpf/idpf.h:140:\tIDPF_VPORT_STATE_NBITS\ndrivers/net/ethernet/intel/idpf/idpf.h-141-};\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=156=struct idpf_netdev_priv {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-163-\tu16 tx_max_bufs;\ndrivers/net/ethernet/intel/idpf/idpf.h:164:\tDECLARE_BITMAP(state, IDPF_VPORT_STATE_NBITS);\ndrivers/net/ethernet/intel/idpf/idpf.h-165-\tstruct rtnl_link_stats64 netstats;\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=202=struct idpf_reg_ops {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-213-\ndrivers/net/ethernet/intel/idpf/idpf.h:214:#define IDPF_MMIO_REG_NUM_STATIC\t2\ndrivers/net/ethernet/intel/idpf/idpf.h:215:#define IDPF_PF_MBX_REGION_SZ\t\t4096\ndrivers/net/ethernet/intel/idpf/idpf.h:216:#define IDPF_PF_RSTAT_REGION_SZ\t\t2048\ndrivers/net/ethernet/intel/idpf/idpf.h:217:#define IDPF_VF_MBX_REGION_SZ\t\t10240\ndrivers/net/ethernet/intel/idpf/idpf.h:218:#define IDPF_VF_RSTAT_REGION_SZ\t\t2048\ndrivers/net/ethernet/intel/idpf/idpf.h-219-\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=226=struct idpf_dev_ops {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-231-\t/* static_reg_info[0] is mailbox region, static_reg_info[1] is rstat */\ndrivers/net/ethernet/intel/idpf/idpf.h:232:\tstruct resource static_reg_info[IDPF_MMIO_REG_NUM_STATIC];\ndrivers/net/ethernet/intel/idpf/idpf.h-233-};\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-236- * enum idpf_vport_reset_cause - Vport soft reset causes\ndrivers/net/ethernet/intel/idpf/idpf.h:237: * @IDPF_SR_Q_CHANGE: Soft reset queue change\ndrivers/net/ethernet/intel/idpf/idpf.h:238: * @IDPF_SR_Q_DESC_CHANGE: Soft reset descriptor change\ndrivers/net/ethernet/intel/idpf/idpf.h:239: * @IDPF_SR_MTU_CHANGE: Soft reset MTU change\ndrivers/net/ethernet/intel/idpf/idpf.h:240: * @IDPF_SR_RSC_CHANGE: Soft reset RSC change\ndrivers/net/ethernet/intel/idpf/idpf.h-241- */\ndrivers/net/ethernet/intel/idpf/idpf.h=242=enum idpf_vport_reset_cause {\ndrivers/net/ethernet/intel/idpf/idpf.h:243:\tIDPF_SR_Q_CHANGE,\ndrivers/net/ethernet/intel/idpf/idpf.h:244:\tIDPF_SR_Q_DESC_CHANGE,\ndrivers/net/ethernet/intel/idpf/idpf.h:245:\tIDPF_SR_MTU_CHANGE,\ndrivers/net/ethernet/intel/idpf/idpf.h:246:\tIDPF_SR_RSC_CHANGE,\ndrivers/net/ethernet/intel/idpf/idpf.h-247-};\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-250- * enum idpf_vport_flags - Vport flags\ndrivers/net/ethernet/intel/idpf/idpf.h:251: * @IDPF_VPORT_DEL_QUEUES: To send delete queues message\ndrivers/net/ethernet/intel/idpf/idpf.h:252: * @IDPF_VPORT_FLAGS_NBITS: Must be last\ndrivers/net/ethernet/intel/idpf/idpf.h-253- */\ndrivers/net/ethernet/intel/idpf/idpf.h=254=enum idpf_vport_flags {\ndrivers/net/ethernet/intel/idpf/idpf.h:255:\tIDPF_VPORT_DEL_QUEUES,\ndrivers/net/ethernet/intel/idpf/idpf.h:256:\tIDPF_VPORT_FLAGS_NBITS,\ndrivers/net/ethernet/intel/idpf/idpf.h-257-};\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=322=struct idpf_q_vec_rsrc {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-345-\tu32\t\t\trxq_desc_count;\ndrivers/net/ethernet/intel/idpf/idpf.h:346:\tu32\t\t\tbufq_desc_count[IDPF_MAX_BUFQS_PER_RXQ_GRP];\ndrivers/net/ethernet/intel/idpf/idpf.h-347-\tu8\t\t\tnum_bufqs_per_qgrp;\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=381=struct idpf_vport {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-392-\tstruct net_device *netdev;\ndrivers/net/ethernet/intel/idpf/idpf.h:393:\tDECLARE_BITMAP(flags, IDPF_VPORT_FLAGS_NBITS);\ndrivers/net/ethernet/intel/idpf/idpf.h-394-\tu32 compln_clean_budget;\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-400-\tu8 default_mac_addr[ETH_ALEN];\ndrivers/net/ethernet/intel/idpf/idpf.h:401:\tu16 rx_itr_profile[IDPF_DIM_PROFILE_SLOTS];\ndrivers/net/ethernet/intel/idpf/idpf.h:402:\tu16 tx_itr_profile[IDPF_DIM_PROFILE_SLOTS];\ndrivers/net/ethernet/intel/idpf/idpf.h-403-\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-416- * enum idpf_user_flags\ndrivers/net/ethernet/intel/idpf/idpf.h:417: * @__IDPF_USER_FLAG_HSPLIT: header split state\ndrivers/net/ethernet/intel/idpf/idpf.h:418: * @__IDPF_PROMISC_UC: Unicast promiscuous mode\ndrivers/net/ethernet/intel/idpf/idpf.h:419: * @__IDPF_PROMISC_MC: Multicast promiscuous mode\ndrivers/net/ethernet/intel/idpf/idpf.h:420: * @__IDPF_USER_FLAGS_NBITS: Must be last\ndrivers/net/ethernet/intel/idpf/idpf.h-421- */\ndrivers/net/ethernet/intel/idpf/idpf.h=422=enum idpf_user_flags {\ndrivers/net/ethernet/intel/idpf/idpf.h:423:\t__IDPF_USER_FLAG_HSPLIT = 0U,\ndrivers/net/ethernet/intel/idpf/idpf.h:424:\t__IDPF_PROMISC_UC = 32,\ndrivers/net/ethernet/intel/idpf/idpf.h:425:\t__IDPF_PROMISC_MC,\ndrivers/net/ethernet/intel/idpf/idpf.h-426-\ndrivers/net/ethernet/intel/idpf/idpf.h:427:\t__IDPF_USER_FLAGS_NBITS,\ndrivers/net/ethernet/intel/idpf/idpf.h-428-};\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=480=struct idpf_vport_user_config_data {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-487-\tstruct bpf_prog *xdp_prog;\ndrivers/net/ethernet/intel/idpf/idpf.h:488:\tDECLARE_BITMAP(user_flags, __IDPF_USER_FLAGS_NBITS);\ndrivers/net/ethernet/intel/idpf/idpf.h-489-\tstruct list_head mac_filter_list;\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-495- * enum idpf_vport_config_flags - Vport config flags\ndrivers/net/ethernet/intel/idpf/idpf.h:496: * @IDPF_VPORT_REG_NETDEV: Register netdev\ndrivers/net/ethernet/intel/idpf/idpf.h:497: * @IDPF_VPORT_UP_REQUESTED: Set if interface up is requested on core reset\ndrivers/net/ethernet/intel/idpf/idpf.h:498: * @IDPF_VPORT_CONFIG_FLAGS_NBITS: Must be last\ndrivers/net/ethernet/intel/idpf/idpf.h-499- */\ndrivers/net/ethernet/intel/idpf/idpf.h=500=enum idpf_vport_config_flags {\ndrivers/net/ethernet/intel/idpf/idpf.h:501:\tIDPF_VPORT_REG_NETDEV,\ndrivers/net/ethernet/intel/idpf/idpf.h:502:\tIDPF_VPORT_UP_REQUESTED,\ndrivers/net/ethernet/intel/idpf/idpf.h:503:\tIDPF_VPORT_CONFIG_FLAGS_NBITS,\ndrivers/net/ethernet/intel/idpf/idpf.h-504-};\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=531=struct idpf_vector_info {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-548- * pool' and other one is called 'free pool'. Vector distribution algorithm\ndrivers/net/ethernet/intel/idpf/idpf.h:549: * gives priority to default vports in a way that at least IDPF_MIN_Q_VEC\ndrivers/net/ethernet/intel/idpf/idpf.h-550- * vectors are allocated per default vport and the relative vector indexes for\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=598=struct idpf_vport_config {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-603-\tspinlock_t flow_steer_list_lock;\ndrivers/net/ethernet/intel/idpf/idpf.h:604:\tDECLARE_BITMAP(flags, IDPF_VPORT_CONFIG_FLAGS_NBITS);\ndrivers/net/ethernet/intel/idpf/idpf.h-605-};\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=673=struct idpf_adapter {\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-680-\tenum idpf_state state;\ndrivers/net/ethernet/intel/idpf/idpf.h:681:\tDECLARE_BITMAP(flags, IDPF_FLAGS_NBITS);\ndrivers/net/ethernet/intel/idpf/idpf.h-682-\tstruct idpf_reset_reg reset_reg;\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=745=static inline int idpf_is_queue_model_split(u16 q_model)\ndrivers/net/ethernet/intel/idpf/idpf.h-746-{\ndrivers/net/ethernet/intel/idpf/idpf.h:747:\treturn !IS_ENABLED(CONFIG_IDPF_SINGLEQ) ||\ndrivers/net/ethernet/intel/idpf/idpf.h-748-\t q_model == VIRTCHNL2_QUEUE_MODEL_SPLIT;\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=770=static inline bool idpf_is_rdma_cap_ena(struct idpf_adapter *adapter)\ndrivers/net/ethernet/intel/idpf/idpf.h-771-{\ndrivers/net/ethernet/intel/idpf/idpf.h:772:\treturn idpf_is_cap_ena(adapter, IDPF_OTHER_CAPS, VIRTCHNL2_CAP_RDMA);\ndrivers/net/ethernet/intel/idpf/idpf.h-773-}\ndrivers/net/ethernet/intel/idpf/idpf.h-774-\ndrivers/net/ethernet/intel/idpf/idpf.h:775:#define IDPF_CAP_RSS (\\\ndrivers/net/ethernet/intel/idpf/idpf.h-776-\tVIRTCHNL2_FLOW_IPV4_TCP\t\t|\\\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-784-\ndrivers/net/ethernet/intel/idpf/idpf.h:785:#define IDPF_CAP_RSC (\\\ndrivers/net/ethernet/intel/idpf/idpf.h-786-\tVIRTCHNL2_CAP_RSC_IPV4_TCP\t|\\\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-788-\ndrivers/net/ethernet/intel/idpf/idpf.h:789:#define IDPF_CAP_HSPLIT\t(\\\ndrivers/net/ethernet/intel/idpf/idpf.h-790-\tVIRTCHNL2_CAP_RX_HSPLIT_AT_L4V4\t|\\\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-792-\ndrivers/net/ethernet/intel/idpf/idpf.h:793:#define IDPF_CAP_TX_CSUM_L4V4 (\\\ndrivers/net/ethernet/intel/idpf/idpf.h-794-\tVIRTCHNL2_CAP_TX_CSUM_L4_IPV4_TCP\t|\\\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-796-\ndrivers/net/ethernet/intel/idpf/idpf.h:797:#define IDPF_CAP_TX_CSUM_L4V6 (\\\ndrivers/net/ethernet/intel/idpf/idpf.h-798-\tVIRTCHNL2_CAP_TX_CSUM_L4_IPV6_TCP\t|\\\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-800-\ndrivers/net/ethernet/intel/idpf/idpf.h:801:#define IDPF_CAP_RX_CSUM (\\\ndrivers/net/ethernet/intel/idpf/idpf.h-802-\tVIRTCHNL2_CAP_RX_CSUM_L3_IPV4\t\t|\\\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-807-\ndrivers/net/ethernet/intel/idpf/idpf.h:808:#define IDPF_CAP_TX_SCTP_CSUM (\\\ndrivers/net/ethernet/intel/idpf/idpf.h-809-\tVIRTCHNL2_CAP_TX_CSUM_L4_IPV4_SCTP\t|\\\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-811-\ndrivers/net/ethernet/intel/idpf/idpf.h:812:#define IDPF_CAP_TUNNEL_TX_CSUM (\\\ndrivers/net/ethernet/intel/idpf/idpf.h-813-\tVIRTCHNL2_CAP_TX_CSUM_L3_SINGLE_TUNNEL\t|\\\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=867=static inline u8 idpf_get_min_tx_pkt_len(struct idpf_adapter *adapter)\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-870-\ndrivers/net/ethernet/intel/idpf/idpf.h:871:\treturn pkt_len ? pkt_len : IDPF_TX_MIN_PKT_LEN;\ndrivers/net/ethernet/intel/idpf/idpf.h-872-}\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=896=static inline bool idpf_is_reset_in_prog(struct idpf_adapter *adapter)\ndrivers/net/ethernet/intel/idpf/idpf.h-897-{\ndrivers/net/ethernet/intel/idpf/idpf.h:898:\treturn (test_bit(IDPF_HR_RESET_IN_PROG, adapter-\u003eflags) ||\ndrivers/net/ethernet/intel/idpf/idpf.h:899:\t\ttest_bit(IDPF_HR_FUNC_RESET, adapter-\u003eflags) ||\ndrivers/net/ethernet/intel/idpf/idpf.h:900:\t\ttest_bit(IDPF_HR_DRV_LOAD, adapter-\u003eflags));\ndrivers/net/ethernet/intel/idpf/idpf.h-901-}\n--\ndrivers/net/ethernet/intel/idpf/idpf.h=1012=int idpf_add_del_fsteer_filters(struct idpf_adapter *adapter,\n--\ndrivers/net/ethernet/intel/idpf/idpf.h-1014-\t\t\t\tenum virtchnl2_op opcode);\ndrivers/net/ethernet/intel/idpf/idpf.h:1015:#endif /* !_IDPF_H_ */\n--\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-8-\ndrivers/net/ethernet/intel/idpf/idpf_dev.c:9:#define IDPF_PF_ITR_IDX_SPACING\t\t0x4\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-10-\n--\ndrivers/net/ethernet/intel/idpf/idpf_dev.c=63=static int idpf_intr_reg_init(struct idpf_vport *vport,\n--\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-88-\t\tstruct idpf_q_vector *q_vector = \u0026rsrc-\u003eq_vectors[i];\ndrivers/net/ethernet/intel/idpf/idpf_dev.c:89:\t\tu16 vec_id = rsrc-\u003eq_vector_idxs[i] - IDPF_MBX_Q_VEC;\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-90-\t\tstruct idpf_intr_reg *intr = \u0026q_vector-\u003eintr_reg;\n--\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-104-\ndrivers/net/ethernet/intel/idpf/idpf_dev.c:105:\t\tspacing = IDPF_ITR_IDX_SPACING(reg-\u003eitrn_index_spacing,\ndrivers/net/ethernet/intel/idpf/idpf_dev.c:106:\t\t\t\t\t IDPF_PF_ITR_IDX_SPACING);\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-107-\t\trx_itr = PF_GLINT_ITR_ADDR(VIRTCHNL2_ITR_IDX_0,\n--\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-116-\ndrivers/net/ethernet/intel/idpf/idpf_dev.c:117:\tval = reg_vals[rsrc-\u003eq_vector_idxs[i] - IDPF_MBX_Q_VEC].dyn_ctl_reg;\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-118-\trsrc-\u003enoirq_dyn_ctl =\n--\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-121-\tval = PF_GLINT_DYN_CTL_WB_ON_ITR_M | PF_GLINT_DYN_CTL_INTENA_MSK_M |\ndrivers/net/ethernet/intel/idpf/idpf_dev.c:122:\t FIELD_PREP(PF_GLINT_DYN_CTL_ITR_INDX_M, IDPF_NO_ITR_UPDATE_IDX);\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-123-\trsrc-\u003enoirq_dyn_ctl_ena = val;\n--\ndrivers/net/ethernet/intel/idpf/idpf_dev.c=199=void idpf_dev_ops_init(struct idpf_adapter *adapter)\n--\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-205-\tresource_set_range(\u0026adapter-\u003edev_ops.static_reg_info[0],\ndrivers/net/ethernet/intel/idpf/idpf_dev.c:206:\t\t\t PF_FW_BASE, IDPF_PF_MBX_REGION_SZ);\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-207-\tresource_set_range(\u0026adapter-\u003edev_ops.static_reg_info[1],\ndrivers/net/ethernet/intel/idpf/idpf_dev.c:208:\t\t\t PFGEN_RTRIG, IDPF_PF_RSTAT_REGION_SZ);\ndrivers/net/ethernet/intel/idpf/idpf_dev.c-209-}\n--\ndrivers/net/ethernet/intel/idpf/idpf_devids.h-3-\ndrivers/net/ethernet/intel/idpf/idpf_devids.h:4:#ifndef _IDPF_DEVIDS_H_\ndrivers/net/ethernet/intel/idpf/idpf_devids.h:5:#define _IDPF_DEVIDS_H_\ndrivers/net/ethernet/intel/idpf/idpf_devids.h-6-\ndrivers/net/ethernet/intel/idpf/idpf_devids.h:7:#define IDPF_DEV_ID_PF\t\t\t0x1452\ndrivers/net/ethernet/intel/idpf/idpf_devids.h:8:#define IDPF_DEV_ID_VF\t\t\t0x145C\ndrivers/net/ethernet/intel/idpf/idpf_devids.h-9-\ndrivers/net/ethernet/intel/idpf/idpf_devids.h:10:#endif /* _IDPF_DEVIDS_H_ */\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=366=static u32 idpf_get_rxfh_key_size(struct net_device *netdev)\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-370-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:371:\tif (!idpf_is_cap_ena_all(np-\u003eadapter, IDPF_RSS_CAPS, IDPF_CAP_RSS))\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-372-\t\treturn 0;\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=385=static u32 idpf_get_rxfh_indir_size(struct net_device *netdev)\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-389-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:390:\tif (!idpf_is_cap_ena_all(np-\u003eadapter, IDPF_RSS_CAPS, IDPF_CAP_RSS))\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-391-\t\treturn 0;\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=408=static int idpf_get_rxfh(struct net_device *netdev,\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-423-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:424:\tif (!idpf_is_cap_ena_all(adapter, IDPF_RSS_CAPS, IDPF_CAP_RSS)) {\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-425-\t\terr = -EOPNOTSUPP;\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=457=static int idpf_set_rxfh(struct net_device *netdev,\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-472-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:473:\tif (!idpf_is_cap_ena_all(adapter, IDPF_RSS_CAPS, IDPF_CAP_RSS)) {\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-474-\t\terr = -EOPNOTSUPP;\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-493-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:494:\tif (test_bit(IDPF_VPORT_UP, np-\u003estate))\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-495-\t\terr = idpf_config_rss(vport, rss_data);\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=511=static void idpf_get_channels(struct net_device *netdev,\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-531-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:532:\tch-\u003emax_other = IDPF_MAX_MBXQ;\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:533:\tch-\u003eother_count = IDPF_MAX_MBXQ;\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-534-\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=548=static int idpf_set_channels(struct net_device *netdev,\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-600-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:601:\terr = idpf_initiate_soft_reset(vport, IDPF_SR_Q_CHANGE);\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-602-\tif (err) {\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=624=static void idpf_get_ringparam(struct net_device *netdev,\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-633-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:634:\tring-\u003erx_max_pending = IDPF_MAX_RXQ_DESC;\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:635:\tring-\u003etx_max_pending = IDPF_MAX_TXQ_DESC;\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-636-\tring-\u003erx_pending = vport-\u003edflt_qv_rsrc.rxq_desc_count;\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=654=static int idpf_set_ringparam(struct net_device *netdev,\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-670-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:671:\tif (ring-\u003etx_pending \u003c IDPF_MIN_TXQ_DESC) {\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-672-\t\tnetdev_err(netdev, \"Descriptors requested (Tx: %u) is less than min supported (%u)\\n\",\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-673-\t\t\t ring-\u003etx_pending,\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:674:\t\t\t IDPF_MIN_TXQ_DESC);\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-675-\t\terr = -EINVAL;\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-678-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:679:\tif (ring-\u003erx_pending \u003c IDPF_MIN_RXQ_DESC) {\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-680-\t\tnetdev_err(netdev, \"Descriptors requested (Rx: %u) is less than min supported (%u)\\n\",\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-681-\t\t\t ring-\u003erx_pending,\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:682:\t\t\t IDPF_MIN_RXQ_DESC);\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-683-\t\terr = -EINVAL;\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-686-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:687:\tnew_rx_count = ALIGN(ring-\u003erx_pending, IDPF_REQ_RXQ_DESC_MULTIPLE);\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-688-\tif (new_rx_count != ring-\u003erx_pending)\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-691-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:692:\tnew_tx_count = ALIGN(ring-\u003etx_pending, IDPF_REQ_DESC_MULTIPLE);\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-693-\tif (new_tx_count != ring-\u003etx_pending)\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-719-\t\trsrc-\u003ebufq_desc_count[i] =\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:720:\t\t\tIDPF_RX_BUFQ_DESC_COUNT(new_rx_count,\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-721-\t\t\t\t\t\trsrc-\u003enum_bufqs_per_qgrp);\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-722-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:723:\terr = idpf_initiate_soft_reset(vport, IDPF_SR_Q_DESC_CHANGE);\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-724-\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-738- * It defines a statistic as offset from a common base pointer. Stats should\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:739: * be defined in constant arrays using the IDPF_STAT macro, with every element\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-740- * of the array using the same _type for calculating the sizeof_stat and\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=753=struct idpf_stats {\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-762- */\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:763:#define IDPF_STAT(_type, _name, _stat) { \\\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-764-\t.stat_string = _name, \\\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-769-/* Helper macros for defining some statistics related to queues */\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:770:#define IDPF_RX_QUEUE_STAT(_name, _stat) \\\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:771:\tIDPF_STAT(struct idpf_rx_queue, _name, _stat)\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:772:#define IDPF_TX_QUEUE_STAT(_name, _stat) \\\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:773:\tIDPF_STAT(struct idpf_tx_queue, _name, _stat)\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-774-\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=776=static const struct idpf_stats idpf_gstrings_tx_queue_stats[] = {\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:777:\tIDPF_TX_QUEUE_STAT(\"pkts\", q_stats.packets),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:778:\tIDPF_TX_QUEUE_STAT(\"bytes\", q_stats.bytes),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:779:\tIDPF_TX_QUEUE_STAT(\"lso_pkts\", q_stats.lso_pkts),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-780-};\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=783=static const struct idpf_stats idpf_gstrings_rx_queue_stats[] = {\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:784:\tIDPF_RX_QUEUE_STAT(\"pkts\", q_stats.packets),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:785:\tIDPF_RX_QUEUE_STAT(\"bytes\", q_stats.bytes),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:786:\tIDPF_RX_QUEUE_STAT(\"rx_gro_hw_pkts\", q_stats.rsc_pkts),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-787-};\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-788-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:789:#define IDPF_TX_QUEUE_STATS_LEN\t\tARRAY_SIZE(idpf_gstrings_tx_queue_stats)\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:790:#define IDPF_RX_QUEUE_STATS_LEN\t\tARRAY_SIZE(idpf_gstrings_rx_queue_stats)\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-791-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:792:#define IDPF_PORT_STAT(_name, _stat) \\\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:793:\tIDPF_STAT(struct idpf_vport, _name, _stat)\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-794-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=795=static const struct idpf_stats idpf_gstrings_port_stats[] = {\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:796:\tIDPF_PORT_STAT(\"rx-csum_errors\", port_stats.rx_hw_csum_err),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:797:\tIDPF_PORT_STAT(\"rx-hsplit\", port_stats.rx_hsplit),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:798:\tIDPF_PORT_STAT(\"rx-hsplit_hbo\", port_stats.rx_hsplit_hbo),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:799:\tIDPF_PORT_STAT(\"rx-bad_descs\", port_stats.rx_bad_descs),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:800:\tIDPF_PORT_STAT(\"tx-skb_drops\", port_stats.tx_drops),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:801:\tIDPF_PORT_STAT(\"tx-dma_map_errs\", port_stats.tx_dma_map_errs),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:802:\tIDPF_PORT_STAT(\"tx-linearized_pkts\", port_stats.tx_linearize),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:803:\tIDPF_PORT_STAT(\"tx-busy_events\", port_stats.tx_busy),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:804:\tIDPF_PORT_STAT(\"rx-unicast_pkts\", port_stats.vport_stats.rx_unicast),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:805:\tIDPF_PORT_STAT(\"rx-multicast_pkts\", port_stats.vport_stats.rx_multicast),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:806:\tIDPF_PORT_STAT(\"rx-broadcast_pkts\", port_stats.vport_stats.rx_broadcast),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:807:\tIDPF_PORT_STAT(\"rx-unknown_protocol\", port_stats.vport_stats.rx_unknown_protocol),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:808:\tIDPF_PORT_STAT(\"tx-unicast_pkts\", port_stats.vport_stats.tx_unicast),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:809:\tIDPF_PORT_STAT(\"tx-multicast_pkts\", port_stats.vport_stats.tx_multicast),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:810:\tIDPF_PORT_STAT(\"tx-broadcast_pkts\", port_stats.vport_stats.tx_broadcast),\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-811-};\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-812-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:813:#define IDPF_PORT_STATS_LEN ARRAY_SIZE(idpf_gstrings_port_stats)\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-814-\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=876=static void idpf_get_stat_strings(struct net_device *netdev, u8 *data)\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-882-\tidpf_add_stat_strings(\u0026data, idpf_gstrings_port_stats,\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:883:\t\t\t IDPF_PORT_STATS_LEN);\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-884-\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=925=static int idpf_get_sset_count(struct net_device *netdev, int sset)\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-947-\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:948:\treturn IDPF_PORT_STATS_LEN + (IDPF_TX_QUEUE_STATS_LEN * max_txq) +\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:949:\t (IDPF_RX_QUEUE_STATS_LEN * max_rxq);\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-950-}\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=1010=static void idpf_add_queue_stats(u64 **data, const void *q,\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-1019-\tif (type == VIRTCHNL2_QUEUE_TYPE_RX) {\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:1020:\t\tsize = IDPF_RX_QUEUE_STATS_LEN;\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-1021-\t\tstats = idpf_gstrings_rx_queue_stats;\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-1023-\t} else {\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:1024:\t\tsize = IDPF_TX_QUEUE_STATS_LEN;\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-1025-\t\tstats = idpf_gstrings_tx_queue_stats;\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c=1054=static void idpf_add_empty_queue_stats(u64 **data, u16 qtype)\n--\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-1059-\tif (qtype == VIRTCHNL2_QUEUE_TYPE_RX)\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:1060:\t\tstats_len = IDPF_RX_QUEUE_STATS_LEN;\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-1061-\telse\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c:1062:\t\tstats_len = IDPF_TX_QUEUE_STATS_LEN;\ndrivers/net/ethernet/intel/idpf/idpf_ethtool.c-1063-\n--\n\n"
} |
| 5/2 | 2026/09/05 18:23 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 18158 output: 40 thoughts: 41 Thoughts: Here's my take on the thought process, as if it were my own: **Investigating the IDPF Driver Initialization** Okay, I need to understand something about the initialization flow for the Intel IDPF driver. My initial instinct is to go directly to the core files. I'll start with `drivers/net/ethernet/intel/idpf/idpf_main.c`. That's where I'd expect to find the driver's entry points, the `module_init` or `driver_init` function, and the overall setup routine. I'm looking for the primary initialization logic: how the device is probed, resources are allocated, and the networking stack is integrated. Following that, I'll definitely want to cross-reference with the `Kconfig` file in the same directory, which is located at `drivers/net/ethernet/intel/idpf/Kconfig`. That configuration file will show me how this driver is included in the build process. Is it modular? Built-in? What dependencies are controlled through configuration options? Understanding the Kconfig dependencies will give me a broader picture of when and why the driver is actually compiled and loaded, and how it's integrated with other related components. These files are essential starting points for any deeper dive into the driver's inner workings. |
| 6/2 | 2026/09/05 18:23 | tool | read-file |
0mArgs:{
"File": "drivers/net/ethernet/intel/idpf/Kconfig",
"FirstLine": 1,
"LineCount": 40
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0-only\n 2:\t# Copyright (C) 2024 Intel Corporation\n 3:\t\n 4:\tconfig IDPF\n 5:\t\ttristate \"Intel(R) Infrastructure Data Path Function Support\"\n 6:\t\tdepends on PCI_MSI\n 7:\t\tdepends on PTP_1588_CLOCK_OPTIONAL\n 8:\t\tselect DIMLIB\n 9:\t\tselect LIBIE_CP\n 10:\t\tselect LIBETH_XDP\n 11:\t\thelp\n 12:\t\t This driver supports Intel(R) Infrastructure Data Path Function\n 13:\t\t devices.\n 14:\t\n 15:\t\t To compile this driver as a module, choose M here. The module\n 16:\t\t will be called idpf.\n 17:\t\n 18:\tif IDPF\n 19:\t\n 20:\tconfig IDPF_SINGLEQ\n 21:\t\tbool \"idpf singleq support\"\n 22:\t\thelp\n 23:\t\t This option enables support for legacy single Rx/Tx queues w/no\n 24:\t\t completion and fill queues. Only enable if you have hardware which\n 25:\t\t wants to work in this mode as it increases the driver size and adds\n 26:\t\t runtme checks on hotpath.\n 27:\t\n 28:\tendif # IDPF\n"
} |
| 7/2 | 2026/09/05 18:23 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 18878 output: 50 thoughts: 25 Thoughts: Here's my summary, as though I'm thinking through this process: **Driver Registration Deep Dive** Okay, so I need to understand exactly how this driver integrates with the system. Let's start at the very beginning, tracing the registration process. I'm going to dig into `idpf_main.c`. That should be the starting point, where the driver's core initialization and setup routines are likely located. I'm expecting to find the standard `module_init` macro or similar, pointing me towards the function responsible for registering the driver with the relevant subsystem. From there, I'll be able to follow the calls to see how the various device structures are initialized, allocated, and ultimately, how the driver's operational entry points are hooked into the system. Knowing the registration details is crucial to understanding how this driver interacts with the hardware and other kernel components. Time to get my hands dirty. |
| 8/2 | 2026/09/05 18:23 | tool | grepper |
0mArgs:{
"Expression": "module_pci_driver|pci_register_driver|idpf_pci",
"PathPrefix": "drivers/net/ethernet/intel/idpf"
}Results: {
"Output": "drivers/net/ethernet/intel/idpf/idpf_main.c=29=static int idpf_get_device_type(struct pci_dev *pdev)\n--\ndrivers/net/ethernet/intel/idpf/idpf_main.c-53- * @adapter: adapter to initialize\ndrivers/net/ethernet/intel/idpf/idpf_main.c:54: * @ent: entry in idpf_pci_tbl\ndrivers/net/ethernet/intel/idpf/idpf_main.c-55- *\n--\ndrivers/net/ethernet/intel/idpf/idpf_main.c=207=static int idpf_cfg_device(struct idpf_adapter *adapter)\n--\ndrivers/net/ethernet/intel/idpf/idpf_main.c-246- * @pdev: PCI device information struct\ndrivers/net/ethernet/intel/idpf/idpf_main.c:247: * @ent: entry in idpf_pci_tbl\ndrivers/net/ethernet/intel/idpf/idpf_main.c-248- *\n--\ndrivers/net/ethernet/intel/idpf/idpf_main.c=251=static int idpf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)\n--\ndrivers/net/ethernet/intel/idpf/idpf_main.c-364-\ndrivers/net/ethernet/intel/idpf/idpf_main.c:365:/* idpf_pci_tbl - PCI Dev idpf ID Table\ndrivers/net/ethernet/intel/idpf/idpf_main.c-366- */\ndrivers/net/ethernet/intel/idpf/idpf_main.c:367:static const struct pci_device_id idpf_pci_tbl[] = {\ndrivers/net/ethernet/intel/idpf/idpf_main.c-368-\t{ PCI_VDEVICE(INTEL, IDPF_DEV_ID_PF)},\n--\ndrivers/net/ethernet/intel/idpf/idpf_main.c-372-};\ndrivers/net/ethernet/intel/idpf/idpf_main.c:373:MODULE_DEVICE_TABLE(pci, idpf_pci_tbl);\ndrivers/net/ethernet/intel/idpf/idpf_main.c-374-\ndrivers/net/ethernet/intel/idpf/idpf_main.c=375=static struct pci_driver idpf_driver = {\ndrivers/net/ethernet/intel/idpf/idpf_main.c-376-\t.name\t\t\t= KBUILD_MODNAME,\ndrivers/net/ethernet/intel/idpf/idpf_main.c:377:\t.id_table\t\t= idpf_pci_tbl,\ndrivers/net/ethernet/intel/idpf/idpf_main.c-378-\t.probe\t\t\t= idpf_probe,\n--\ndrivers/net/ethernet/intel/idpf/idpf_main.c-382-};\ndrivers/net/ethernet/intel/idpf/idpf_main.c:383:module_pci_driver(idpf_driver);\n"
} |
| 9/2 | 2026/09/05 18:23 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 19959 output: 125 thoughts: 768 Thoughts: **My Assessment of the `idpf` Driver's Fuzzing Suitability** Okay, let's break this down. My initial assessment is that this `idpf` driver, which is Intel's PCI driver for their SmartNIC/IPU hardware (like the E2000 or Mount Evans), isn't a good candidate for fuzzing. Here's why: First, I've identified the modified code: it's within `drivers/net/ethernet/intel/idpf/idpf_txrx.c`, specifically in the `idpf_vport_intr_req_irq()` function. The modification I'm seeing adds checks for `kasprintf` and frees `name` on `request_irq` failure. This is involved in vport open and interrupt allocation for the `idpf` device. Now, the crucial point: this `idpf` driver is for *real* hardware – a SmartNIC or IPU. It's not something emulated in standard environments like QEMU or GCE. I've verified this: it's registered as a PCI driver with specific device IDs (`IDPF_DEV_ID_PF` (0x1452) and `IDPF_DEV_ID_VF` (0x145c)). These are vendor-specific hardware identifiers, which confirms it. Therefore, according to the criteria I'm using, since the modified code interacts with structurally unreachable hardware (specifically, SmartNIC/IPU hardware requiring physical PCIe cards), it falls under the "not worth fuzzing" category. This is explicitly stated in section 2 of my guidelines. Therefore, my conclusions are: * `WorthFuzzing = false` * `FocusSymbols = []` * `EnableConfigs = []` Time to call `set-results`. |
| 10/2 | 2026/09/05 18:23 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies error handling in drivers/net/ethernet/intel/idpf/idpf_txrx.c (handling allocation failure and cleanup for kasprintf in idpf_vport_intr_req_irq). The idpf driver is a PCIe device driver for Intel Infrastructure Data Path Function (IPU/SmartNIC) hardware devices, which are not emulated in standard QEMU/GCE virtualized environments and thus structurally unreachable.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies error handling in drivers/net/ethernet/intel/idpf/idpf_txrx.c (handling allocation failure and cleanup for kasprintf in idpf_vport_intr_req_irq). The idpf driver is a PCIe device driver for Intel Infrastructure Data Path Function (IPU/SmartNIC) hardware devices, which are not emulated in standard QEMU/GCE virtualized environments and thus structurally unreachable.",
"WorthFuzzing": false
} |
| 11/1 | 2026/09/05 18:23 | action | If |
0mArgs:{
"WorthFuzzing": false
}Results: null |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|