| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/08/30 14:35 | flow | patch-triage |
37mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "",
"NeedsKMSAN": false,
"Reasoning": "The patch modifies the fbnic driver (drivers/net/ethernet/meta/fbnic/), which is a driver for Meta's proprietary PCIe ASIC network interface card. This driver requires specific physical PCIe hardware not emulated in standard QEMU or virtualized environments like GCE, making the modified code unreachable for fuzzing.",
"WorthFuzzing": false
} |
| 1/1 | 2026/08/30 14:35 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 8c279b1d81d2f3e2f6033c0179b8f79b46c3cc76\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Sun Aug 30 14:35:51 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/meta/fbnic/fbnic_fw.c b/drivers/net/ethernet/meta/fbnic/fbnic_fw.c\nindex 283d25fae79e7..ff1674eff7ad5 100644\n--- a/drivers/net/ethernet/meta/fbnic/fbnic_fw.c\n+++ b/drivers/net/ethernet/meta/fbnic/fbnic_fw.c\n@@ -1677,16 +1677,19 @@ static void fbnic_mbx_process_rx_msgs(struct fbnic_dev *fbd)\n \t\tif (!length)\n \t\t\tgoto next_page;\n \n-\t\t/* Report descriptors with length greater than page size */\n-\t\tif (length \u003e PAGE_SIZE) {\n+\t\t/* Report descriptors with invalid message extents. */\n+\t\tif (length \u003c sizeof(msg-\u003ehdr) || length \u003e PAGE_SIZE) {\n \t\t\tdev_warn(fbd-\u003edev,\n \t\t\t\t \"Invalid mailbox descriptor length: %lld\\n\",\n \t\t\t\t length);\n \t\t\tgoto next_page;\n \t\t}\n \n-\t\tif (le16_to_cpu(msg-\u003ehdr.len) * sizeof(u32) \u003e length)\n+\t\tif (!le16_to_cpu(msg-\u003ehdr.len) ||\n+\t\t le16_to_cpu(msg-\u003ehdr.len) * sizeof(u32) \u003e length) {\n \t\t\tdev_warn(fbd-\u003edev, \"Mailbox message length mismatch\\n\");\n+\t\t\tgoto next_page;\n+\t\t}\n \n \t\t/* If parsing fails dump contents of message to dmesg */\n \t\terr = fbnic_tlv_msg_parse(fbd, msg, fbnic_fw_tlv_parser);\ndiff --git a/drivers/net/ethernet/meta/fbnic/fbnic_tlv.c b/drivers/net/ethernet/meta/fbnic/fbnic_tlv.c\nindex c55d4f76a5fc0..639f90664d982 100644\n--- a/drivers/net/ethernet/meta/fbnic/fbnic_tlv.c\n+++ b/drivers/net/ethernet/meta/fbnic/fbnic_tlv.c\n@@ -427,9 +427,12 @@ int fbnic_tlv_attr_parse_array(struct fbnic_tlv_msg *attr, int len,\n \t/* Work through list of attributes, parsing them as necessary */\n \twhile (len \u003e 0) {\n \t\tu16 attr_id = attr-\u003ehdr.type;\n-\t\tu16 attr_len;\n+\t\tu16 attr_len = FBNIC_TLV_MSG_SIZE(le16_to_cpu(attr-\u003ehdr.len));\n \t\tint err;\n \n+\t\tif (!attr_len || attr_len \u003e len)\n+\t\t\treturn -EINVAL;\n+\n \t\tif (tlv_attr_id != attr_id)\n \t\t\treturn -EINVAL;\n \n@@ -443,7 +446,6 @@ int fbnic_tlv_attr_parse_array(struct fbnic_tlv_msg *attr, int len,\n \n \t\tresults[i++] = attr;\n \n-\t\tattr_len = FBNIC_TLV_MSG_SIZE(le16_to_cpu(attr-\u003ehdr.len));\n \t\tlen -= attr_len;\n \t\tattr += attr_len;\n \t}\n@@ -476,11 +478,15 @@ int fbnic_tlv_attr_parse(struct fbnic_tlv_msg *attr, int len,\n \n \t/* Work through list of attributes, parsing them as necessary */\n \twhile (len \u003e 0) {\n-\t\tint err = fbnic_tlv_attr_validate(attr, tlv_index);\n \t\tu16 attr_id = attr-\u003ehdr.type;\n-\t\tu16 attr_len;\n+\t\tu16 attr_len = FBNIC_TLV_MSG_SIZE(le16_to_cpu(attr-\u003ehdr.len));\n+\t\tint err;\n+\n+\t\tif (!attr_len || attr_len \u003e len)\n+\t\t\treturn -EINVAL;\n \n \t\t/* Stop parsing on full error */\n+\t\terr = fbnic_tlv_attr_validate(attr, tlv_index);\n \t\tif (err \u003c 0)\n \t\t\treturn err;\n \n@@ -493,7 +499,6 @@ int fbnic_tlv_attr_parse(struct fbnic_tlv_msg *attr, int len,\n \t\t\tresults[attr_id] = attr;\n \t\t}\n \n-\t\tattr_len = FBNIC_TLV_MSG_SIZE(le16_to_cpu(attr-\u003ehdr.len));\n \t\tlen -= attr_len;\n \t\tattr += attr_len;\n \t}\n"
} |
| 2/1 | 2026/08/30 14:35 | agent | patch-evaluator |
37mModel:core Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the fbnic driver (drivers/net/ethernet/meta/fbnic/), which is a driver for Meta's proprietary PCIe ASIC network interface card. This driver requires specific physical PCIe hardware not emulated in standard QEMU or virtualized environments like GCE, making the modified code unreachable for 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 8c279b1d81d2f3e2f6033c0179b8f79b46c3cc76
Author: syz-cluster <triage@syzkaller.com>
Date: Sun Aug 30 14:35:51 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_fw.c b/drivers/net/ethernet/meta/fbnic/fbnic_fw.c
index 283d25fae79e7..ff1674eff7ad5 100644
--- a/drivers/net/ethernet/meta/fbnic/fbnic_fw.c
+++ b/drivers/net/ethernet/meta/fbnic/fbnic_fw.c
@@ -1677,16 +1677,19 @@ static void fbnic_mbx_process_rx_msgs(struct fbnic_dev *fbd)
if (!length)
goto next_page;
- /* Report descriptors with length greater than page size */
- if (length > PAGE_SIZE) {
+ /* Report descriptors with invalid message extents. */
+ if (length < sizeof(msg->hdr) || length > PAGE_SIZE) {
dev_warn(fbd->dev,
"Invalid mailbox descriptor length: %lld\n",
length);
goto next_page;
}
- if (le16_to_cpu(msg->hdr.len) * sizeof(u32) > length)
+ if (!le16_to_cpu(msg->hdr.len) ||
+ le16_to_cpu(msg->hdr.len) * sizeof(u32) > length) {
dev_warn(fbd->dev, "Mailbox message length mismatch\n");
+ goto next_page;
+ }
/* If parsing fails dump contents of message to dmesg */
err = fbnic_tlv_msg_parse(fbd, msg, fbnic_fw_tlv_parser);
diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_tlv.c b/drivers/net/ethernet/meta/fbnic/fbnic_tlv.c
index c55d4f76a5fc0..639f90664d982 100644
--- a/drivers/net/ethernet/meta/fbnic/fbnic_tlv.c
+++ b/drivers/net/ethernet/meta/fbnic/fbnic_tlv.c
@@ -427,9 +427,12 @@ int fbnic_tlv_attr_parse_array(struct fbnic_tlv_msg *attr, int len,
/* Work through list of attributes, parsing them as necessary */
while (len > 0) {
u16 attr_id = attr->hdr.type;
- u16 attr_len;
+ u16 attr_len = FBNIC_TLV_MSG_SIZE(le16_to_cpu(attr->hdr.len));
int err;
+ if (!attr_len || attr_len > len)
+ return -EINVAL;
+
if (tlv_attr_id != attr_id)
return -EINVAL;
@@ -443,7 +446,6 @@ int fbnic_tlv_attr_parse_array(struct fbnic_tlv_msg *attr, int len,
results[i++] = attr;
- attr_len = FBNIC_TLV_MSG_SIZE(le16_to_cpu(attr->hdr.len));
len -= attr_len;
attr += attr_len;
}
@@ -476,11 +478,15 @@ int fbnic_tlv_attr_parse(struct fbnic_tlv_msg *attr, int len,
/* Work through list of attributes, parsing them as necessary */
while (len > 0) {
- int err = fbnic_tlv_attr_validate(attr, tlv_index);
u16 attr_id = attr->hdr.type;
- u16 attr_len;
+ u16 attr_len = FBNIC_TLV_MSG_SIZE(le16_to_cpu(attr->hdr.len));
+ int err;
+
+ if (!attr_len || attr_len > len)
+ return -EINVAL;
/* Stop parsing on full error */
+ err = fbnic_tlv_attr_validate(attr, tlv_index);
if (err < 0)
return err;
@@ -493,7 +499,6 @@ int fbnic_tlv_attr_parse(struct fbnic_tlv_msg *attr, int len,
results[attr_id] = attr;
}
- attr_len = FBNIC_TLV_MSG_SIZE(le16_to_cpu(attr->hdr.len));
len -= attr_len;
attr += attr_len;
}
|
| 3/2 | 2026/08/30 14:35 | llm | patch-evaluator |
33mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 3086 output: 30 thoughts: 320 Thoughts: **Analyzing the Potential for Fuzzing this Patch** Okay, so the diff touches `fbnic_fw.c` and `fbnic_tlv.c` within the `drivers/net/ethernet/meta/fbnic/` directory. My immediate thought is, what *is* `fbnic`? Based on the path, it *feels* like a vendor-specific PCIe NIC driver, probably something internal to Meta. I need to confirm that. I know Meta has a few custom ASICs, so it's a likely candidate. The next question is critical for fuzzing. Does `fbnic` drive hardware that's emulated within a standard QEMU environment, or does it *require* physical PCIe cards that aren't typically emulated? This is where the instructions come in. Let's see: the guidance explicitly states that patches are *not* worth fuzzing if they involve "vendor-specific PCIe switch, SmartNIC, or GPU drivers... that require physical PCIe hardware cards not emulated in standard QEMU." That hits the nail on the head. If `fbnic` falls into that category, then the patch is essentially a dead end for fuzzing in a typical virtualized environment. Time to search the codebase and get a better understanding of what `fbnic` actually *is*. Let's find out! |
| 4/2 | 2026/08/30 15:09 | tool | grepper |
0mArgs:{
"Expression": "fbnic",
"PathPrefix": "drivers/net/ethernet/meta"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 8440 lines.\nUse more precise expression if possible.\n\ndrivers/net/ethernet/meta/Kconfig=20=config FBNIC\n--\ndrivers/net/ethernet/meta/Kconfig-35-\t To compile this driver as a module, choose M here. The module\ndrivers/net/ethernet/meta/Kconfig:36:\t will be called fbnic. MSI-X interrupt support is required.\ndrivers/net/ethernet/meta/Kconfig-37-\n--\ndrivers/net/ethernet/meta/Makefile-5-\ndrivers/net/ethernet/meta/Makefile:6:obj-$(CONFIG_FBNIC) += fbnic/\n--\ndrivers/net/ethernet/meta/fbnic/Makefile-7-\ndrivers/net/ethernet/meta/fbnic/Makefile:8:obj-$(CONFIG_FBNIC) += fbnic.o\ndrivers/net/ethernet/meta/fbnic/Makefile-9-\ndrivers/net/ethernet/meta/fbnic/Makefile:10:fbnic-y := fbnic_csr.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:11:\t fbnic_debugfs.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:12:\t fbnic_devlink.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:13:\t fbnic_ethtool.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:14:\t fbnic_fw.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:15:\t fbnic_fw_log.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:16:\t fbnic_hw_stats.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:17:\t fbnic_hwmon.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:18:\t fbnic_irq.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:19:\t fbnic_mac.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:20:\t fbnic_netdev.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:21:\t fbnic_pci.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:22:\t fbnic_phylink.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:23:\t fbnic_rpc.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:24:\t fbnic_mdio.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:25:\t fbnic_time.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:26:\t fbnic_tlv.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile:27:\t fbnic_txrx.o \\\ndrivers/net/ethernet/meta/fbnic/Makefile-28-# End of objects\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-12-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:13:#include \"fbnic_csr.h\"\ndrivers/net/ethernet/meta/fbnic/fbnic.h:14:#include \"fbnic_fw.h\"\ndrivers/net/ethernet/meta/fbnic/fbnic.h:15:#include \"fbnic_fw_log.h\"\ndrivers/net/ethernet/meta/fbnic/fbnic.h:16:#include \"fbnic_hw_stats.h\"\ndrivers/net/ethernet/meta/fbnic/fbnic.h:17:#include \"fbnic_mac.h\"\ndrivers/net/ethernet/meta/fbnic/fbnic.h:18:#include \"fbnic_rpc.h\"\ndrivers/net/ethernet/meta/fbnic/fbnic.h-19-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:20:struct fbnic_napi_vector;\ndrivers/net/ethernet/meta/fbnic/fbnic.h-21-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-24-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:25:struct fbnic_dev {\ndrivers/net/ethernet/meta/fbnic/fbnic.h-26-\tstruct device *dev;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-34-\tu32 __iomem *uc_addr4;\ndrivers/net/ethernet/meta/fbnic/fbnic.h:35:\tconst struct fbnic_mac *mac;\ndrivers/net/ethernet/meta/fbnic/fbnic.h-36-\tunsigned int fw_msix_vector;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-46-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:47:\tstruct fbnic_fw_mbx mbx[FBNIC_IPC_MBX_INDICES];\ndrivers/net/ethernet/meta/fbnic/fbnic.h:48:\tstruct fbnic_fw_cap fw_cap;\ndrivers/net/ethernet/meta/fbnic/fbnic.h:49:\tstruct fbnic_fw_completion *cmpl_data[FBNIC_MBX_CMPL_SLOTS];\ndrivers/net/ethernet/meta/fbnic/fbnic.h-50-\t/* Lock protecting Tx Mailbox queue to prevent possible races */\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-62-\t/* Local copy of the devices TCAM */\ndrivers/net/ethernet/meta/fbnic/fbnic.h:63:\tstruct fbnic_act_tcam act_tcam[FBNIC_RPC_TCAM_ACT_NUM_ENTRIES];\ndrivers/net/ethernet/meta/fbnic/fbnic.h:64:\tstruct fbnic_mac_addr mac_addr[FBNIC_RPC_TCAM_MACDA_NUM_ENTRIES];\ndrivers/net/ethernet/meta/fbnic/fbnic.h-65-\tu8 mac_addr_boundary;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-68-\t/* IP TCAM */\ndrivers/net/ethernet/meta/fbnic/fbnic.h:69:\tstruct fbnic_ip_addr ip_src[FBNIC_RPC_TCAM_IP_ADDR_NUM_ENTRIES];\ndrivers/net/ethernet/meta/fbnic/fbnic.h:70:\tstruct fbnic_ip_addr ip_dst[FBNIC_RPC_TCAM_IP_ADDR_NUM_ENTRIES];\ndrivers/net/ethernet/meta/fbnic/fbnic.h:71:\tstruct fbnic_ip_addr ipo_src[FBNIC_RPC_TCAM_IP_ADDR_NUM_ENTRIES];\ndrivers/net/ethernet/meta/fbnic/fbnic.h:72:\tstruct fbnic_ip_addr ipo_dst[FBNIC_RPC_TCAM_IP_ADDR_NUM_ENTRIES];\ndrivers/net/ethernet/meta/fbnic/fbnic.h-73-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-76-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:77:\t/* Lock protecting writes to @time_high, @time_offset of fbnic_netdev,\ndrivers/net/ethernet/meta/fbnic/fbnic.h-78-\t * and the HW time CSR machinery.\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-91-\t/* Local copy of hardware statistics */\ndrivers/net/ethernet/meta/fbnic/fbnic.h:92:\tstruct fbnic_hw_stats hw_stats;\ndrivers/net/ethernet/meta/fbnic/fbnic.h-93-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-97-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:98:\tstruct fbnic_fw_log fw_log;\ndrivers/net/ethernet/meta/fbnic/fbnic.h-99-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h=112=enum {\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-117-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:118:static inline bool fbnic_present(struct fbnic_dev *fbd)\ndrivers/net/ethernet/meta/fbnic/fbnic.h-119-{\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-122-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:123:static inline void fbnic_wr32(struct fbnic_dev *fbd, u32 reg, u32 val)\ndrivers/net/ethernet/meta/fbnic/fbnic.h-124-{\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-130-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:131:u32 fbnic_rd32(struct fbnic_dev *fbd, u32 reg);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-132-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:133:static inline void fbnic_wrfl(struct fbnic_dev *fbd)\ndrivers/net/ethernet/meta/fbnic/fbnic.h-134-{\ndrivers/net/ethernet/meta/fbnic/fbnic.h:135:\tfbnic_rd32(fbd, FBNIC_MASTER_SPARE_0);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-136-}\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h=138=static inline void\ndrivers/net/ethernet/meta/fbnic/fbnic.h:139:fbnic_rmw32(struct fbnic_dev *fbd, u32 reg, u32 mask, u32 val)\ndrivers/net/ethernet/meta/fbnic/fbnic.h-140-{\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-142-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:143:\tv = fbnic_rd32(fbd, reg);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-144-\tv \u0026= ~mask;\ndrivers/net/ethernet/meta/fbnic/fbnic.h-145-\tv |= val;\ndrivers/net/ethernet/meta/fbnic/fbnic.h:146:\tfbnic_wr32(fbd, reg, v);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-147-}\ndrivers/net/ethernet/meta/fbnic/fbnic.h-148-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:149:#define wr32(_f, _r, _v)\tfbnic_wr32(_f, _r, _v)\ndrivers/net/ethernet/meta/fbnic/fbnic.h:150:#define rd32(_f, _r)\t\tfbnic_rd32(_f, _r)\ndrivers/net/ethernet/meta/fbnic/fbnic.h:151:#define wrfl(_f)\t\tfbnic_wrfl(_f)\ndrivers/net/ethernet/meta/fbnic/fbnic.h-152-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:153:bool fbnic_fw_present(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:154:u32 fbnic_fw_rd32(struct fbnic_dev *fbd, u32 reg);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:155:void fbnic_fw_wr32(struct fbnic_dev *fbd, u32 reg, u32 val);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-156-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:157:#define fw_rd32(_f, _r)\t\tfbnic_fw_rd32(_f, _r)\ndrivers/net/ethernet/meta/fbnic/fbnic.h:158:#define fw_wr32(_f, _r, _v)\tfbnic_fw_wr32(_f, _r, _v)\ndrivers/net/ethernet/meta/fbnic/fbnic.h:159:#define fw_wrfl(_f)\t\tfbnic_fw_rd32(_f, FBNIC_FW_ZERO_REG)\ndrivers/net/ethernet/meta/fbnic/fbnic.h-160-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:161:static inline bool fbnic_bmc_present(struct fbnic_dev *fbd)\ndrivers/net/ethernet/meta/fbnic/fbnic.h-162-{\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-165-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:166:static inline bool fbnic_init_failure(struct fbnic_dev *fbd)\ndrivers/net/ethernet/meta/fbnic/fbnic.h-167-{\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-170-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:171:extern char fbnic_driver_name[];\ndrivers/net/ethernet/meta/fbnic/fbnic.h-172-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:173:void fbnic_devlink_free(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:174:struct fbnic_dev *fbnic_devlink_alloc(struct pci_dev *pdev);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:175:int fbnic_devlink_health_create(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:176:void fbnic_devlink_health_destroy(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:177:void fbnic_devlink_register(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:178:void fbnic_devlink_unregister(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-179-void __printf(2, 3)\ndrivers/net/ethernet/meta/fbnic/fbnic.h:180:fbnic_devlink_fw_report(struct fbnic_dev *fbd, const char *format, ...);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:181:void fbnic_devlink_otp_check(struct fbnic_dev *fbd, const char *msg);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-182-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:183:int fbnic_fw_request_mbx(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:184:void fbnic_fw_free_mbx(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-185-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:186:void fbnic_hwmon_register(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:187:void fbnic_hwmon_unregister(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-188-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:189:int fbnic_mac_request_irq(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:190:void fbnic_mac_free_irq(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-191-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:192:void fbnic_napi_name_irqs(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:193:int fbnic_napi_request_irq(struct fbnic_dev *fbd,\ndrivers/net/ethernet/meta/fbnic/fbnic.h:194:\t\t\t struct fbnic_napi_vector *nv);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:195:void fbnic_napi_free_irq(struct fbnic_dev *fbd,\ndrivers/net/ethernet/meta/fbnic/fbnic.h:196:\t\t\t struct fbnic_napi_vector *nv);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:197:void fbnic_synchronize_irq(struct fbnic_dev *fbd, int nr);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:198:int fbnic_request_irq(struct fbnic_dev *dev, int nr, irq_handler_t handler,\ndrivers/net/ethernet/meta/fbnic/fbnic.h-199-\t\t unsigned long flags, const char *name, void *data);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:200:void fbnic_free_irq(struct fbnic_dev *dev, int nr, void *data);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-201-\ndrivers/net/ethernet/meta/fbnic/fbnic.h-202-/**\ndrivers/net/ethernet/meta/fbnic/fbnic.h:203: * enum fbnic_msix_self_test_codes - return codes from self test routines\ndrivers/net/ethernet/meta/fbnic/fbnic.h-204- *\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-218- */\ndrivers/net/ethernet/meta/fbnic/fbnic.h:219:enum fbnic_msix_self_test_codes {\ndrivers/net/ethernet/meta/fbnic/fbnic.h-220-\tFBNIC_TEST_MSIX_SUCCESS = 0,\n--\ndrivers/net/ethernet/meta/fbnic/fbnic.h-230-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:231:enum fbnic_msix_self_test_codes fbnic_msix_test(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-232-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:233:void fbnic_free_irqs(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:234:int fbnic_alloc_irqs(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-235-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:236:void fbnic_get_fw_ver_commit_str(struct fbnic_dev *fbd, char *fw_version,\ndrivers/net/ethernet/meta/fbnic/fbnic.h-237-\t\t\t\t const size_t str_sz);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-238-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:239:void fbnic_dbg_fbd_init(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:240:void fbnic_dbg_fbd_exit(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:241:void fbnic_dbg_init(void);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:242:void fbnic_dbg_exit(void);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-243-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:244:void fbnic_rpc_reset_valid_entries(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-245-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:246:int fbnic_mdiobus_create(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-247-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:248:void fbnic_csr_get_regs(struct fbnic_dev *fbd, u32 *data, u32 *regs_version);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:249:int fbnic_csr_regs_len(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-250-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:251:void fbnic_config_txrx_usecs(struct fbnic_napi_vector *nv, u32 arm);\ndrivers/net/ethernet/meta/fbnic/fbnic.h:252:void fbnic_config_rx_frames(struct fbnic_napi_vector *nv);\ndrivers/net/ethernet/meta/fbnic/fbnic.h-253-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:254:enum fbnic_boards {\ndrivers/net/ethernet/meta/fbnic/fbnic.h:255:\tfbnic_board_asic\ndrivers/net/ethernet/meta/fbnic/fbnic.h-256-};\ndrivers/net/ethernet/meta/fbnic/fbnic.h-257-\ndrivers/net/ethernet/meta/fbnic/fbnic.h:258:struct fbnic_info {\ndrivers/net/ethernet/meta/fbnic/fbnic.h-259-\tunsigned int max_num_queues;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-3-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:4:#include \"fbnic.h\"\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-5-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-10-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:11:struct fbnic_csr_bounds {\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-12-\tu32\tstart;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-15-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:16:static const struct fbnic_csr_bounds fbnic_csr_sects[] = {\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-17-\tFBNIC_BOUNDS(INTR),\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-59-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:60:static void fbnic_csr_get_regs_rpc_ram(struct fbnic_dev *fbd, u32 **data_p)\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-61-{\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-114-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:115:void fbnic_csr_get_regs(struct fbnic_dev *fbd, u32 *data, u32 *regs_version)\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-116-{\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:117:\tconst struct fbnic_csr_bounds *bound;\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-118-\tu32 *start = data;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-123-\t/* Skip RPC_RAM section which cannot be dumped linearly */\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:124:\tfor (i = 0, bound = fbnic_csr_sects;\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:125:\t i \u003c ARRAY_SIZE(fbnic_csr_sects) - 1; i++, ++bound) {\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-126-\t\t*(data++) = bound-\u003estart;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-132-\t/* Dump the RPC_RAM as special case registers */\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:133:\tfbnic_csr_get_regs_rpc_ram(fbd, \u0026data);\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-134-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:135:\tWARN_ON(data - start != fbnic_csr_regs_len(fbd));\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-136-}\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-137-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:138:int fbnic_csr_regs_len(struct fbnic_dev *fbd)\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-139-{\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-144-\t */\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:145:\tfor (i = 0; i \u003c ARRAY_SIZE(fbnic_csr_sects); i++)\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:146:\t\tlen += fbnic_csr_sects[i].end - fbnic_csr_sects[i].start + 2;\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-147-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-158- */\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:159:struct fbnic_csr_reg_test_data {\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-160-\tint\treg;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-174-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:175:static const struct fbnic_csr_reg_test_data pattern_test[] = {\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-176-\tFBNIC_QUEUE_REG_TEST(TWQ0_CTL, FBNIC_QUEUE_TWQ_CTL_RESET,\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-211-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:212:static enum fbnic_reg_self_test_codes\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:213:fbnic_csr_reg_pattern_test(struct fbnic_dev *fbd, int index,\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:214:\t\t\t const struct fbnic_csr_reg_test_data *test_data)\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-215-{\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-216-\tstatic const u32 pattern[] = { ~0, 0x5A5A5A5A, 0xA5A5A5A5, 0};\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:217:\tenum fbnic_reg_self_test_codes reg;\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-218-\tint i;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-247-/**\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:248: * fbnic_csr_regs_test() - Verify behavior of NIC registers\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-249- * @fbd: device to test\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-258- **/\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:259:enum fbnic_reg_self_test_codes fbnic_csr_regs_test(struct fbnic_dev *fbd)\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-260-{\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:261:\tconst struct fbnic_csr_reg_test_data *test_data;\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-262-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-267-\t\tfor (i = 0; i \u003c test_data-\u003earray_len; i++) {\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:268:\t\t\tenum fbnic_reg_self_test_codes reg =\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c:269:\t\t\t\tfbnic_csr_reg_pattern_test(fbd, i, test_data);\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.c-270-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h-8-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h:9:struct fbnic_dev;\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h-10-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h=1235=enum{\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h-1239-/**\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h:1240: * enum fbnic_reg_self_test_codes - return codes from self test routines\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h-1241- *\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h-1249- */\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h:1250:enum fbnic_reg_self_test_codes {\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h-1251-\tFBNIC_REG_TEST_SUCCESS = 0,\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h-1253-\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h:1254:enum fbnic_reg_self_test_codes fbnic_csr_regs_test(struct fbnic_dev *fbd);\ndrivers/net/ethernet/meta/fbnic/fbnic_csr.h-1255-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-8-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:9:#include \"fbnic.h\"\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:10:#include \"fbnic_txrx.h\"\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-11-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:12:static struct dentry *fbnic_dbg_root;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-13-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-15-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:16:static void fbnic_dbg_desc_break(struct seq_file *s, int i)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-17-{\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-23-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:24:static void fbnic_dbg_ring_show(struct seq_file *s)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-25-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:26:\tstruct fbnic_ring *ring = s-\u003eprivate;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-27-\tunsigned long doorbell_offset;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-30-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:31:\tcsr_base = fbnic_ring_csr_base(ring);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-32-\tdoorbell_offset = ring-\u003edoorbell - csr_base;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-75-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:76:static void fbnic_dbg_twd_desc_seq_show(struct seq_file *s, int i)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-77-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:78:\tstruct fbnic_ring *ring = s-\u003eprivate;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-79-\tu64 twd = le64_to_cpu(ring-\u003edesc[i]);\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-106-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:107:static int fbnic_dbg_twq_desc_seq_show(struct seq_file *s, void *v)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-108-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:109:\tstruct fbnic_ring *ring = s-\u003eprivate;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-110-\tchar hdr[80];\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-113-\t/* Generate header on first entry */\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:114:\tfbnic_dbg_ring_show(s);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-115-\tsnprintf(hdr, sizeof(hdr), \"%4s %5s %s %s\\n\",\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-117-\tseq_puts(s, hdr);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:118:\tfbnic_dbg_desc_break(s, strnlen(hdr, sizeof(hdr)));\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-119-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-126-\tfor (i = 0; i \u003c= ring-\u003esize_mask; i++)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:127:\t\tfbnic_dbg_twd_desc_seq_show(s, i);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-128-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-131-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:132:static int fbnic_dbg_tcq_desc_seq_show(struct seq_file *s, void *v)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-133-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:134:\tstruct fbnic_ring *ring = s-\u003eprivate;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-135-\tchar hdr[80];\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-138-\t/* Generate header on first entry */\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:139:\tfbnic_dbg_ring_show(s);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-140-\tsnprintf(hdr, sizeof(hdr), \"%4s %s %s %s %5s %-16s %-6s %-6s\\n\",\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-142-\tseq_puts(s, hdr);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:143:\tfbnic_dbg_desc_break(s, strnlen(hdr, sizeof(hdr)));\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-144-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-180-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:181:static int fbnic_dbg_bdq_desc_seq_show(struct seq_file *s, void *v)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-182-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:183:\tstruct fbnic_ring *ring = s-\u003eprivate;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-184-\tchar hdr[80];\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-187-\t/* Generate header on first entry */\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:188:\tfbnic_dbg_ring_show(s);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-189-\tsnprintf(hdr, sizeof(hdr), \"%4s %-4s %s\\n\",\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-191-\tseq_puts(s, hdr);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:192:\tfbnic_dbg_desc_break(s, strnlen(hdr, sizeof(hdr)));\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-193-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-210-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:211:static void fbnic_dbg_rcd_desc_seq_show(struct seq_file *s, int i)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-212-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:213:\tstruct fbnic_ring *ring = s-\u003eprivate;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-214-\tu64 rcd = le64_to_cpu(ring-\u003edesc[i]);\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-253-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:254:static int fbnic_dbg_rcq_desc_seq_show(struct seq_file *s, void *v)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-255-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:256:\tstruct fbnic_ring *ring = s-\u003eprivate;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-257-\tchar hdr[80];\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-260-\t/* Generate header on first entry */\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:261:\tfbnic_dbg_ring_show(s);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-262-\tsnprintf(hdr, sizeof(hdr),\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-268-\tseq_puts(s, hdr);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:269:\tfbnic_dbg_desc_break(s, strnlen(hdr, sizeof(hdr)));\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-270-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-277-\tfor (i = 0; i \u003c= ring-\u003esize_mask; i++)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:278:\t\tfbnic_dbg_rcd_desc_seq_show(s, i);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-279-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-282-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:283:static int fbnic_dbg_desc_open(struct inode *inode, struct file *file)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-284-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:285:\tstruct fbnic_ring *ring = inode-\u003ei_private;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-286-\tint (*show)(struct seq_file *s, void *v);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-287-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:288:\tswitch (ring-\u003edoorbell - fbnic_ring_csr_base(ring)) {\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-289-\tcase FBNIC_QUEUE_TWQ0_TAIL:\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-290-\tcase FBNIC_QUEUE_TWQ1_TAIL:\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:291:\t\tshow = fbnic_dbg_twq_desc_seq_show;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-292-\t\tbreak;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-293-\tcase FBNIC_QUEUE_TCQ_HEAD:\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:294:\t\tshow = fbnic_dbg_tcq_desc_seq_show;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-295-\t\tbreak;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-297-\tcase FBNIC_QUEUE_BDQ_PPQ_TAIL:\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:298:\t\tshow = fbnic_dbg_bdq_desc_seq_show;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-299-\t\tbreak;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-300-\tcase FBNIC_QUEUE_RCQ_HEAD:\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:301:\t\tshow = fbnic_dbg_rcq_desc_seq_show;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-302-\t\tbreak;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-309-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:310:static const struct file_operations fbnic_dbg_desc_fops = {\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-311-\t.owner\t\t= THIS_MODULE,\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:312:\t.open\t\t= fbnic_dbg_desc_open,\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-313-\t.read\t\t= seq_read,\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-317-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:318:void fbnic_dbg_nv_init(struct fbnic_napi_vector *nv)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-319-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:320:\tstruct fbnic_dev *fbd = nv-\u003efbd;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-321-\tchar name[16];\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-330-\tfor (i = 0; i \u003c nv-\u003etxt_count; i++) {\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:331:\t\tstruct fbnic_q_triad *qt = \u0026nv-\u003eqt[i];\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-332-\t\tunsigned int hw_idx;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-333-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:334:\t\thw_idx = fbnic_ring_csr_base(\u0026qt-\u003ecmpl) -\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-335-\t\t\t \u0026fbd-\u003euc_addr0[FBNIC_QUEUE(0)];\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-339-\t\tdebugfs_create_file(name, 0400, nv-\u003edbg_nv, \u0026qt-\u003esub0,\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:340:\t\t\t\t \u0026fbnic_dbg_desc_fops);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-341-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-343-\t\tdebugfs_create_file(name, 0400, nv-\u003edbg_nv, \u0026qt-\u003esub1,\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:344:\t\t\t\t \u0026fbnic_dbg_desc_fops);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-345-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-347-\t\tdebugfs_create_file(name, 0400, nv-\u003edbg_nv, \u0026qt-\u003ecmpl,\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:348:\t\t\t\t \u0026fbnic_dbg_desc_fops);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-349-\t}\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-352-\tfor (j = 0; j \u003c nv-\u003erxt_count; j++, i++) {\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:353:\t\tstruct fbnic_q_triad *qt = \u0026nv-\u003eqt[i];\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-354-\t\tunsigned int hw_idx;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-355-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:356:\t\thw_idx = fbnic_ring_csr_base(\u0026qt-\u003ecmpl) -\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-357-\t\t\t \u0026fbd-\u003euc_addr0[FBNIC_QUEUE(0)];\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-361-\t\tdebugfs_create_file(name, 0400, nv-\u003edbg_nv, \u0026qt-\u003esub0,\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:362:\t\t\t\t \u0026fbnic_dbg_desc_fops);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-363-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-365-\t\tdebugfs_create_file(name, 0400, nv-\u003edbg_nv, \u0026qt-\u003esub1,\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:366:\t\t\t\t \u0026fbnic_dbg_desc_fops);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-367-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-369-\t\tdebugfs_create_file(name, 0400, nv-\u003edbg_nv, \u0026qt-\u003ecmpl,\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:370:\t\t\t\t \u0026fbnic_dbg_desc_fops);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-371-\t}\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-373-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:374:void fbnic_dbg_nv_exit(struct fbnic_napi_vector *nv)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-375-{\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-379-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:380:static int fbnic_dbg_mac_addr_show(struct seq_file *s, void *v)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-381-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:382:\tstruct fbnic_dev *fbd = s-\u003eprivate;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-383-\tchar hdr[80];\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-389-\tseq_puts(s, hdr);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:390:\tfbnic_dbg_desc_break(s, strnlen(hdr, sizeof(hdr)));\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-391-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-392-\tfor (i = 0; i \u003c FBNIC_RPC_TCAM_MACDA_NUM_ENTRIES; i++) {\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:393:\t\tstruct fbnic_mac_addr *mac_addr = \u0026fbd-\u003emac_addr[i];\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-394-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-403-}\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:404:DEFINE_SHOW_ATTRIBUTE(fbnic_dbg_mac_addr);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-405-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:406:static int fbnic_dbg_tce_tcam_show(struct seq_file *s, void *v)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-407-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:408:\tstruct fbnic_dev *fbd = s-\u003eprivate;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-409-\tint i, tcam_idx = 0;\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-415-\tseq_puts(s, hdr);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:416:\tfbnic_dbg_desc_break(s, strnlen(hdr, sizeof(hdr)));\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-417-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-418-\tfor (i = 0; i \u003c ARRAY_SIZE(fbd-\u003emac_addr); i++) {\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:419:\t\tstruct fbnic_mac_addr *mac_addr = \u0026fbd-\u003emac_addr[i];\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-420-\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-437-}\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:438:DEFINE_SHOW_ATTRIBUTE(fbnic_dbg_tce_tcam);\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-439-\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:440:static int fbnic_dbg_act_tcam_show(struct seq_file *s, void *v)\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-441-{\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c:442:\tstruct fbnic_dev *fbd = s-\u003eprivate;\ndrivers/net/ethernet/meta/fbnic/fbnic_debugfs.c-443-\tchar hdr[80];\n--\n\n"
} |
| 5/2 | 2026/08/30 15:09 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 18254 output: 37 thoughts: 28 Thoughts: Okay, here's my take on those thoughts, framed as my own: **Investigating the FBNIC Configuration** Alright, let's get down to brass tacks. I need to understand the configuration options and dependencies for the FBNIC driver. My usual starting point is always the `Kconfig` file, so I'm heading straight for `drivers/net/ethernet/meta/Kconfig`. That's where I expect to find the definitive description of the FBNIC driver, along with all its associated configuration symbols, dependencies on other kernel features, and any platform-specific constraints. Knowing all that will be crucial for understanding how to enable, disable, or customize this particular piece of networking hardware within the overall system build. I need to ensure it integrates seamlessly with the kernel's networking stack. I'll be looking for things like whether it requires specific hardware capabilities, if it depends on any other network drivers, and what kind of performance or resource considerations I need to keep in mind. Let's see what the `Kconfig` has to tell us. |
| 6/2 | 2026/08/30 15:10 | tool | read-file |
0mArgs:{
"File": "drivers/net/ethernet/meta/Kconfig",
"FirstLine": 1,
"LineCount": 50
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0-only\n 2:\t#\n 3:\t# Meta Platforms network device configuration\n 4:\t#\n 5:\t\n 6:\tconfig NET_VENDOR_META\n 7:\t\tbool \"Meta Platforms devices\"\n 8:\t\tdefault y\n 9:\t\thelp\n 10:\t\t If you have a network (Ethernet) card designed by Meta, say Y.\n 11:\t\t That's Meta as in the parent company of Facebook.\n 12:\t\n 13:\t\t Note that the answer to this question doesn't directly affect the\n 14:\t\t kernel: saying N will just cause the configurator to skip all\n 15:\t\t the questions about Meta cards. If you say Y, you will be asked for\n 16:\t\t your specific card in the following questions.\n 17:\t\n 18:\tif NET_VENDOR_META\n 19:\t\n 20:\tconfig FBNIC\n 21:\t\ttristate \"Meta Platforms Host Network Interface\"\n 22:\t\tdepends on 64BIT || COMPILE_TEST\n 23:\t\tdepends on !S390\n 24:\t\tdepends on MAX_SKB_FRAGS \u003c 22\n 25:\t\tdepends on PCI_MSI\n 26:\t\tdepends on PTP_1588_CLOCK_OPTIONAL\n 27:\t\tselect NET_DEVLINK\n 28:\t\tselect PAGE_POOL\n 29:\t\tselect PCS_XPCS\n 30:\t\tselect PHYLINK\n 31:\t\tselect PLDMFW\n 32:\t\thelp\n 33:\t\t This driver supports Meta Platforms Host Network Interface.\n 34:\t\n 35:\t\t To compile this driver as a module, choose M here. The module\n 36:\t\t will be called fbnic. MSI-X interrupt support is required.\n 37:\t\n 38:\tendif # NET_VENDOR_META\n"
} |
| 7/2 | 2026/08/30 15:10 | llm | patch-evaluator |
1mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 19042 output: 37 thoughts: 13 Thoughts: Here's my attempt at summarizing the thought process, tailored for an expert audience: **Investigating `fbnic` Probe PCI IDs** Alright, let's dive in. I need to quickly ascertain the specific PCI IDs that the `fbnic` driver probes for. This is fundamental for understanding its hardware compatibility and potential conflicts, especially when dealing with custom or less common hardware configurations. This information is crucial for any sort of debugging, configuration, or performance tuning I'll need to do regarding the driver. I expect that I will likely need this to figure out device support in the current kernel. |
| 8/2 | 2026/08/30 15:11 | tool | grepper |
0mArgs:{
"Expression": "pci_device_id",
"PathPrefix": "drivers/net/ethernet/meta/fbnic"
}Results: {
"Output": "drivers/net/ethernet/meta/fbnic/fbnic_pci.c=26=static const struct fbnic_info *fbnic_info_tbl[] = {\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_pci.c-29-\ndrivers/net/ethernet/meta/fbnic/fbnic_pci.c:30:static const struct pci_device_id fbnic_pci_tbl[] = {\ndrivers/net/ethernet/meta/fbnic/fbnic_pci.c-31-\t{ PCI_DEVICE_DATA(META, FBNIC_ASIC, fbnic_board_asic) },\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_pci.c=214=static void fbnic_service_task(struct work_struct *work)\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_pci.c-258- **/\ndrivers/net/ethernet/meta/fbnic/fbnic_pci.c:259:static int fbnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)\ndrivers/net/ethernet/meta/fbnic/fbnic_pci.c-260-{\n"
} |
| 9/2 | 2026/08/30 15:12 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 19535 output: 98 thoughts: 592 Thoughts: **My Assessment of the `fbnic` Driver Patch** Okay, let's break this down. We're looking at a patch for the `fbnic` driver, which I know is Meta's custom, vendor-specific PCIe NIC ASIC. First thing, let's review the rules. They specifically say to set `WorthFuzzing=false` if the patch involves code that *requires* physical PCIe hardware not emulated in standard QEMU. Bingo. `fbnic` is *exactly* that. It's not a generic NIC like an e1000 or virtio-net; it's a proprietary ASIC designed for Meta's internal data centers. It's not part of the standard QEMU or other virtualization setups. So, logically, any code paths related to `fbnic` are unreachable in typical fuzzing environments. I can't fuzz code that needs a piece of hardware that isn't accessible. My conclusion? `WorthFuzzing` has to be `false`. Let's make sure we've got everything covered. My assessment should be: * `WorthFuzzing=false` * `FocusSymbols: []` * `EnableConfigs: []` And now, for the concise reasoning. We're dealing with a driver, located in `drivers/net/ethernet/meta/fbnic/`, for Meta's proprietary PCIe NIC ASIC. This particular ASIC *needs* specialized, physical PCIe hardware. Since this hardware is not emulated in standard QEMU or other virtualized setups (like GCE or syzkaller), the code paths in this driver are effectively unreachable in any fuzzing context that uses a virtualized environment. That's the core of it. I should verify this by calling set-results. |
| 10/2 | 2026/08/30 15:12 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies the fbnic driver (drivers/net/ethernet/meta/fbnic/), which is a driver for Meta's proprietary PCIe ASIC network interface card. This driver requires specific physical PCIe hardware not emulated in standard QEMU or virtualized environments like GCE, making the modified code unreachable for fuzzing.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the fbnic driver (drivers/net/ethernet/meta/fbnic/), which is a driver for Meta's proprietary PCIe ASIC network interface card. This driver requires specific physical PCIe hardware not emulated in standard QEMU or virtualized environments like GCE, making the modified code unreachable for fuzzing.",
"WorthFuzzing": false
} |
| 11/1 | 2026/08/30 15:12 | 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) |
|---|