| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/08/02 05:05 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies a vendor-specific PCIe Ethernet driver (Broadcom ThorUltra 'bnge') which requires physical hardware not emulated in standard QEMU. Furthermore, the modified function `bnge_aux_dev_release` is a device release/teardown callback executed only during device removal or driver unbind operations.",
"WorthFuzzing": false
} |
| 1/1 | 2026/08/02 05:05 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 29f6b1f69e4fbe703522cee1683d57e21d865cd9\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Sun Aug 2 05:04:59 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c b/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c\nindex 67e93e17d4d9f..0955b488b6fea 100644\n--- a/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c\n+++ b/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c\n@@ -141,12 +141,15 @@ static void bnge_aux_dev_release(struct device *dev)\n {\n \tstruct bnge_auxr_priv *aux_priv =\n \t\t\tcontainer_of(dev, struct bnge_auxr_priv, aux_dev.dev);\n-\tstruct bnge_dev *bd = pci_get_drvdata(aux_priv-\u003eauxr_dev-\u003epdev);\n+\tstruct bnge_auxr_dev *auxr_dev = aux_priv-\u003eauxr_dev;\n+\tstruct bnge_dev *bd = pci_get_drvdata(to_pci_dev(dev-\u003eparent));\n \n \tida_free(\u0026bnge_aux_dev_ids, aux_priv-\u003eid);\n-\tkfree(aux_priv-\u003eauxr_dev-\u003eauxr_info);\n+\tif (auxr_dev) {\n+\t\tkfree(auxr_dev-\u003eauxr_info);\n+\t\tkfree(auxr_dev);\n+\t}\n \tbd-\u003eauxr_dev = NULL;\n-\tkfree(aux_priv-\u003eauxr_dev);\n \tkfree(aux_priv);\n \tbd-\u003eaux_priv = NULL;\n }\n"
} |
| 2/1 | 2026/08/02 05:05 | agent | patch-evaluator |
0mModel:best-expensive Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies a vendor-specific PCIe Ethernet driver (Broadcom ThorUltra 'bnge') which requires physical hardware not emulated in standard QEMU. Furthermore, the modified function `bnge_aux_dev_release` is a device release/teardown callback executed only during device removal or driver unbind operations.",
"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 29f6b1f69e4fbe703522cee1683d57e21d865cd9
Author: syz-cluster <triage@syzkaller.com>
Date: Sun Aug 2 05:04:59 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c b/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c
index 67e93e17d4d9f..0955b488b6fea 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c
@@ -141,12 +141,15 @@ static void bnge_aux_dev_release(struct device *dev)
{
struct bnge_auxr_priv *aux_priv =
container_of(dev, struct bnge_auxr_priv, aux_dev.dev);
- struct bnge_dev *bd = pci_get_drvdata(aux_priv->auxr_dev->pdev);
+ struct bnge_auxr_dev *auxr_dev = aux_priv->auxr_dev;
+ struct bnge_dev *bd = pci_get_drvdata(to_pci_dev(dev->parent));
ida_free(&bnge_aux_dev_ids, aux_priv->id);
- kfree(aux_priv->auxr_dev->auxr_info);
+ if (auxr_dev) {
+ kfree(auxr_dev->auxr_info);
+ kfree(auxr_dev);
+ }
bd->auxr_dev = NULL;
- kfree(aux_priv->auxr_dev);
kfree(aux_priv);
bd->aux_priv = NULL;
}
|
| 3/2 | 2026/08/02 05:05 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2274 output: 32 thoughts: 341 Thoughts: **Analyzing a Patch to `bnge_auxr.c`** Okay, so I'm looking at this patch for `drivers/net/ethernet/broadcom/bnge/bnge_auxr.c`. It's touching `bnge_aux_dev_release`, and from a quick glance, it seems to be addressing a potential use-after-free, null pointer dereference, or maybe even a memory leak. The fix appears to involve a check for `auxr_dev` and conditional freeing of `auxr_dev->auxr_info` and `auxr_dev` itself. Also, they are getting `bd` from `to_pci_dev(dev->parent)` which is different from the original code that used `aux_priv->auxr_dev->pdev`. Good, that's what I want to see! Robust error handling is key. Hold on a sec... "bnge"? That rings a bell, but I need to make sure. Is `bnge` an actual, legitimate Broadcom driver? Let me double-check the driver directory structure... Yep, it's there: `drivers/net/ethernet/broadcom/bnge/`. Phew, my memory isn't *completely* failing me yet. Right, so this is a network driver. Now, is this a physical PCIe device driver? Looking at the code again, especially that `pci_get_drvdata(to_pci_dev(dev->parent))` call, yeah, that strongly suggests it's a PCI device driver. That also means it's likely a driver for physical hardware, not necessarily something that QEMU emulates perfectly. The potential for issues related to specific PCIe switches or SmartNICs makes me a little cautious. Let's make sure it's not something that relies on a physical hardware card that is not fully emulated in QEMU. Just to be safe, a quick grep within the `drivers/net/ethernet/broadcom/` directory will confirm that `bnge` is indeed the driver and not a typo. I'll make sure there are no other drivers that it could be. |
| 4/2 | 2026/08/02 05:05 | tool | grepper |
0mArgs:{
"Expression": "bnge",
"PathPrefix": "drivers/net/ethernet/broadcom/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 6121 lines.\nUse more precise expression if possible.\n\ndrivers/net/ethernet/broadcom/Makefile=20=obj-$(CONFIG_BCMASP) += asp2/\ndrivers/net/ethernet/broadcom/Makefile:21:obj-$(CONFIG_BNGE) += bnge/\n--\ndrivers/net/ethernet/broadcom/bnge/Makefile=3=obj-$(CONFIG_BNGE) += bng_en.o\ndrivers/net/ethernet/broadcom/bnge/Makefile-4-\ndrivers/net/ethernet/broadcom/bnge/Makefile:5:bng_en-y := bnge_core.o \\\ndrivers/net/ethernet/broadcom/bnge/Makefile:6:\t bnge_devlink.o \\\ndrivers/net/ethernet/broadcom/bnge/Makefile:7:\t bnge_hwrm.o \\\ndrivers/net/ethernet/broadcom/bnge/Makefile:8:\t bnge_hwrm_lib.o \\\ndrivers/net/ethernet/broadcom/bnge/Makefile:9:\t bnge_rmem.o \\\ndrivers/net/ethernet/broadcom/bnge/Makefile:10:\t bnge_resc.o \\\ndrivers/net/ethernet/broadcom/bnge/Makefile:11:\t bnge_netdev.o \\\ndrivers/net/ethernet/broadcom/bnge/Makefile:12:\t bnge_ethtool.o \\\ndrivers/net/ethernet/broadcom/bnge/Makefile:13:\t bnge_auxr.o \\\ndrivers/net/ethernet/broadcom/bnge/Makefile:14:\t bnge_txrx.o \\\ndrivers/net/ethernet/broadcom/bnge/Makefile:15:\t bnge_link.o\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-10-#include \u003clinux/etherdevice.h\u003e\ndrivers/net/ethernet/broadcom/bnge/bnge.h:11:#include \u003clinux/bnge/hsi.h\u003e\ndrivers/net/ethernet/broadcom/bnge/bnge.h:12:#include \"bnge_rmem.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge.h:13:#include \"bnge_resc.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge.h:14:#include \"bnge_auxr.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge.h-15-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-19-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:20:extern char bnge_driver_name[];\ndrivers/net/ethernet/broadcom/bnge/bnge.h-21-\ndrivers/net/ethernet/broadcom/bnge/bnge.h=22=enum board_idx {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-25-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:26:struct bnge_auxr_priv {\ndrivers/net/ethernet/broadcom/bnge/bnge.h-27-\tstruct auxiliary_device aux_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge.h:28:\tstruct bnge_auxr_dev *auxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge.h-29-\tint id;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-31-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:32:struct bnge_pf_info {\ndrivers/net/ethernet/broadcom/bnge/bnge.h-33-\tu16\tfw_fid;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h=81=enum {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-92-#define BNGE_MAX_QUEUE\t\t8\ndrivers/net/ethernet/broadcom/bnge/bnge.h:93:struct bnge_queue_info {\ndrivers/net/ethernet/broadcom/bnge/bnge.h-94-\tu8 queue_id;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-102-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:103:struct bnge_dev {\ndrivers/net/ethernet/broadcom/bnge/bnge.h-104-\tstruct device\t*dev;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-144-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:145:\tstruct bnge_pf_info\tpf;\ndrivers/net/ethernet/broadcom/bnge/bnge.h-146-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-153-\t/* Backing stores */\ndrivers/net/ethernet/broadcom/bnge/bnge.h:154:\tstruct bnge_ctx_mem_info\t*ctx;\ndrivers/net/ethernet/broadcom/bnge/bnge.h-155-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-157-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:158:\tstruct bnge_hw_resc\thw_resc;\ndrivers/net/ethernet/broadcom/bnge/bnge.h-159-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-204-\tu8\t\t\tmax_lltc;\t/* lossless TCs */\ndrivers/net/ethernet/broadcom/bnge/bnge.h:205:\tstruct bnge_queue_info\tq_info[BNGE_MAX_QUEUE];\ndrivers/net/ethernet/broadcom/bnge/bnge.h-206-\tu8\t\t\ttc_to_qidx[BNGE_MAX_QUEUE];\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-210-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:211:\tstruct bnge_irq\t\t*irq_tbl;\ndrivers/net/ethernet/broadcom/bnge/bnge.h-212-\tu16\t\t\tirqs_acquired;\ndrivers/net/ethernet/broadcom/bnge/bnge.h-213-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:214:\tstruct bnge_auxr_priv\t*aux_priv;\ndrivers/net/ethernet/broadcom/bnge/bnge.h:215:\tstruct bnge_auxr_dev\t*auxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge.h-216-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:217:\tstruct bnge_link_info\tlink_info;\ndrivers/net/ethernet/broadcom/bnge/bnge.h-218-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-222-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:223:static inline bool bnge_is_roce_en(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge.h-224-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-227-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:228:static inline bool bnge_is_agg_reqd(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge.h-229-{\ndrivers/net/ethernet/broadcom/bnge/bnge.h-230-\tif (bd-\u003enetdev) {\ndrivers/net/ethernet/broadcom/bnge/bnge.h:231:\t\tstruct bnge_net *bn = netdev_priv(bd-\u003enetdev);\ndrivers/net/ethernet/broadcom/bnge/bnge.h-232-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-242-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:243:static inline void bnge_writeq(struct bnge_dev *bd, u64 val,\ndrivers/net/ethernet/broadcom/bnge/bnge.h-244-\t\t\t void __iomem *addr)\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-255-/* For TX and RX ring doorbells */\ndrivers/net/ethernet/broadcom/bnge/bnge.h:256:static inline void bnge_db_write(struct bnge_dev *bd, struct bnge_db_info *db,\ndrivers/net/ethernet/broadcom/bnge/bnge.h-257-\t\t\t\t u32 idx)\ndrivers/net/ethernet/broadcom/bnge/bnge.h-258-{\ndrivers/net/ethernet/broadcom/bnge/bnge.h:259:\tbnge_writeq(bd, db-\u003edb_key64 | DB_RING_IDX(db, idx),\ndrivers/net/ethernet/broadcom/bnge/bnge.h-260-\t\t db-\u003edoorbell);\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-262-\ndrivers/net/ethernet/broadcom/bnge/bnge.h:263:bool bnge_aux_registered(struct bnge_dev *bd);\ndrivers/net/ethernet/broadcom/bnge/bnge.h:264:u16 bnge_aux_get_msix(struct bnge_dev *bd);\ndrivers/net/ethernet/broadcom/bnge/bnge.h-265-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-16-#include \u003clinux/auxiliary_bus.h\u003e\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:17:#include \u003clinux/bnge/hsi.h\u003e\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-18-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:19:#include \"bnge.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:20:#include \"bnge_hwrm.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:21:#include \"bnge_auxr.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-22-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:23:static DEFINE_IDA(bnge_aux_dev_ids);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-24-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:25:static void bnge_fill_msix_vecs(struct bnge_dev *bd,\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:26:\t\t\t\tstruct bnge_msix_info *info)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-27-{\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:28:\tstruct bnge_auxr_dev *auxr_dev = bd-\u003eauxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-29-\tint num_msix, i;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-42-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:43:int bnge_register_dev(struct bnge_auxr_dev *auxr_dev,\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-44-\t\t void *handle)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-45-{\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:46:\tstruct bnge_dev *bd = pci_get_drvdata(auxr_dev-\u003epdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:47:\tstruct bnge_auxr_info *auxr_info;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-48-\tint rc = 0;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-56-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:57:\tif (!bnge_aux_has_enough_resources(bd)) {\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-58-\t\trc = -ENOMEM;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-66-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:67:\tbnge_fill_msix_vecs(bd, bd-\u003eauxr_dev-\u003emsix_info);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-68-\tauxr_dev-\u003eflags |= BNGE_ARDEV_MSIX_ALLOC;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-74-}\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:75:EXPORT_SYMBOL(bnge_register_dev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-76-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:77:void bnge_unregister_dev(struct bnge_auxr_dev *auxr_dev)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-78-{\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:79:\tstruct bnge_dev *bd = pci_get_drvdata(auxr_dev-\u003epdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:80:\tstruct bnge_auxr_info *auxr_info;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-81-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-91-}\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:92:EXPORT_SYMBOL(bnge_unregister_dev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-93-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:94:int bnge_send_msg(struct bnge_auxr_dev *auxr_dev, struct bnge_fw_msg *fw_msg)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-95-{\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:96:\tstruct bnge_dev *bd = pci_get_drvdata(auxr_dev-\u003epdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-97-\tstruct output *resp;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-101-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:102:\trc = bnge_hwrm_req_init(bd, req, 0 /* don't care */);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-103-\tif (rc)\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-105-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:106:\trc = bnge_hwrm_req_replace(bd, req, fw_msg-\u003emsg, fw_msg-\u003emsg_len);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-107-\tif (rc)\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-109-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:110:\tbnge_hwrm_req_timeout(bd, req, fw_msg-\u003etimeout);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:111:\tresp = bnge_hwrm_req_hold(bd, req);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:112:\trc = bnge_hwrm_req_send(bd, req);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-113-\tresp_len = le16_to_cpu(resp-\u003eresp_len);\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-120-drop_req:\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:121:\tbnge_hwrm_req_drop(bd, req);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-122-\treturn rc;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-123-}\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:124:EXPORT_SYMBOL(bnge_send_msg);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-125-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:126:void bnge_rdma_aux_device_uninit(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-127-{\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:128:\tstruct bnge_auxr_priv *aux_priv;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-129-\tstruct auxiliary_device *adev;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-139-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:140:static void bnge_aux_dev_release(struct device *dev)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-141-{\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:142:\tstruct bnge_auxr_priv *aux_priv =\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:143:\t\t\tcontainer_of(dev, struct bnge_auxr_priv, aux_dev.dev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:144:\tstruct bnge_auxr_dev *auxr_dev = aux_priv-\u003eauxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:145:\tstruct bnge_dev *bd = pci_get_drvdata(to_pci_dev(dev-\u003eparent));\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-146-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:147:\tida_free(\u0026bnge_aux_dev_ids, aux_priv-\u003eid);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-148-\tif (auxr_dev) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-156-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:157:void bnge_rdma_aux_device_del(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-158-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-164-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:165:static void bnge_set_auxr_dev_info(struct bnge_auxr_dev *auxr_dev,\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:166:\t\t\t\t struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-167-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-185-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:186:void bnge_rdma_aux_device_add(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-187-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-205-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:206:void bnge_rdma_aux_device_init(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-207-{\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-208-\tstruct auxiliary_device *aux_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:209:\tstruct bnge_auxr_info *auxr_info;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:210:\tstruct bnge_auxr_priv *aux_priv;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:211:\tstruct bnge_auxr_dev *auxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-212-\tint rc;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-213-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:214:\tif (!bnge_is_roce_en(bd))\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-215-\t\treturn;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-220-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:221:\taux_priv-\u003eid = ida_alloc(\u0026bnge_aux_dev_ids, GFP_KERNEL);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-222-\tif (aux_priv-\u003eid \u003c 0) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-231-\taux_dev-\u003edev.parent = \u0026bd-\u003epdev-\u003edev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:232:\taux_dev-\u003edev.release = bnge_aux_dev_release;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-233-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-235-\tif (rc) {\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:236:\t\tida_free(\u0026bnge_aux_dev_ids, aux_priv-\u003eid);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-237-\t\tkfree(aux_priv);\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-253-\tbd-\u003eauxr_dev = auxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:254:\tbnge_set_auxr_dev_info(auxr_dev, bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-255-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h=14=struct hwrm_async_event_cmpl;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:15:struct bnge;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-16-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:17:struct bnge_msix_info {\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-18-\tu32\tvector;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-22-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:23:struct bnge_fw_msg {\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-24-\tvoid\t*msg;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-30-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:31:struct bnge_auxr_info {\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-32-\tvoid\t\t*handle;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h=36=enum {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-44-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:45:struct bnge_auxr_dev {\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-46-\tstruct net_device\t*net;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-49-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:50:\tstruct bnge_msix_info\tmsix_info[BNGE_MAX_ROCE_MSIX];\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-51-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-53-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:54:\tstruct bnge_auxr_info\t*auxr_info;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-55-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-74-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:75:void bnge_rdma_aux_device_uninit(struct bnge_dev *bdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:76:void bnge_rdma_aux_device_del(struct bnge_dev *bdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:77:void bnge_rdma_aux_device_add(struct bnge_dev *bdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:78:void bnge_rdma_aux_device_init(struct bnge_dev *bdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:79:int bnge_register_dev(struct bnge_auxr_dev *adev,\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-80-\t\t void *handle);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:81:void bnge_unregister_dev(struct bnge_auxr_dev *adev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h:82:int bnge_send_msg(struct bnge_auxr_dev *adev, struct bnge_fw_msg *fw_msg);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.h-83-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-8-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:9:#include \"bnge.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:10:#include \"bnge_devlink.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:11:#include \"bnge_hwrm.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:12:#include \"bnge_hwrm_lib.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:13:#include \"bnge_link.h\"\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-14-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c=16=MODULE_DESCRIPTION(DRV_SUMMARY);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-17-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:18:char bnge_driver_name[] = DRV_NAME;\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-19-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c=20=static const struct {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-25-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:26:static const struct pci_device_id bnge_pci_tbl[] = {\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-27-\t{ PCI_VDEVICE(BROADCOM, 0x1780), .driver_data = BCM57708 },\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-30-};\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:31:MODULE_DEVICE_TABLE(pci, bnge_pci_tbl);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-32-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:33:static void bnge_print_device_info(struct pci_dev *pdev, enum board_idx idx)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-34-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-42-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:43:bool bnge_aux_registered(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-44-{\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:45:\tstruct bnge_auxr_dev *ba_dev = bd-\u003eauxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-46-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-52-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:53:static void bnge_nvm_cfg_ver_get(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-54-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-56-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:57:\tif (!bnge_hwrm_nvm_dev_info(bd, \u0026nvm_info))\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-58-\t\tsnprintf(bd-\u003envm_cfg_ver, FW_VER_STR_LEN, \"%d.%d.%d\",\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-62-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:63:static int bnge_func_qcaps(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-64-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-66-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:67:\trc = bnge_hwrm_func_qcaps(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-68-\tif (rc)\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-70-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:71:\trc = bnge_hwrm_queue_qportcfg(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-72-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-79-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:80:static int bnge_func_qrcaps_qcfg(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-81-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-83-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:84:\trc = bnge_hwrm_func_resc_qcaps(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-85-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-89-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:90:\trc = bnge_hwrm_func_qcfg(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-91-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-95-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:96:\trc = bnge_hwrm_vnic_qcaps(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-97-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-104-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:105:static void bnge_fw_unregister_dev(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-106-{\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-107-\t/* ctx mem free after unrgtr only */\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:108:\tbnge_hwrm_func_drv_unrgtr(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:109:\tbnge_free_ctx_mem(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-110-}\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-111-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:112:static void bnge_set_dflt_rss_hash_type(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-113-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-121-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:122:static int bnge_fw_register_dev(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-123-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-126-\tbd-\u003efw_cap = 0;\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:127:\trc = bnge_hwrm_ver_get(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-128-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-132-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:133:\tbnge_nvm_cfg_ver_get(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-134-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:135:\trc = bnge_hwrm_func_reset(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-136-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-140-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:141:\tbnge_hwrm_fw_set_time(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-142-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-143-\t/* Get the resources and configuration from firmware */\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:144:\trc = bnge_func_qcaps(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-145-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-149-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:150:\trc = bnge_alloc_ctx_mem(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-151-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-155-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:156:\trc = bnge_hwrm_func_drv_rgtr(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-157-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-161-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:162:\trc = bnge_func_qrcaps_qcfg(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-163-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-167-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:168:\tbnge_set_dflt_rss_hash_type(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-169-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-172-err_func_unrgtr:\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:173:\tbnge_hwrm_func_drv_unrgtr(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-174-err_free_ctx_mem:\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:175:\tbnge_free_ctx_mem(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-176-\treturn rc;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-178-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:179:static void bnge_pci_disable(struct pci_dev *pdev)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-180-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-185-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:186:static int bnge_pci_enable(struct pci_dev *pdev)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-187-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-202-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:203:\trc = pci_request_regions(pdev, bnge_driver_name);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-204-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-219-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:220:static void bnge_unmap_bars(struct pci_dev *pdev)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-221-{\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:222:\tstruct bnge_dev *bd = pci_get_drvdata(pdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-223-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-234-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:235:static void bnge_set_max_func_irqs(struct bnge_dev *bd,\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-236-\t\t\t\t unsigned int max_irqs)\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-240-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:241:static int bnge_get_max_irq(struct pci_dev *pdev)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-242-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-248-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:249:static int bnge_map_db_bar(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-250-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-260-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:261:static int bnge_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-262-{\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-263-\tunsigned int max_irqs;\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:264:\tstruct bnge_dev *bd;\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-265-\tint rc;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-279-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:280:\trc = bnge_pci_enable(pdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-281-\tif (rc)\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-283-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:284:\tbnge_print_device_info(pdev, ent-\u003edriver_data);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-285-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:286:\tbd = bnge_devlink_alloc(pdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-287-\tif (!bd) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-299-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:300:\trc = bnge_init_hwrm_resources(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-301-\tif (rc)\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-303-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:304:\trc = bnge_fw_register_dev(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-305-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-309-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:310:\tbnge_devlink_register(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-311-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:312:\tmax_irqs = bnge_get_max_irq(pdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:313:\tbnge_set_max_func_irqs(bd, max_irqs);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-314-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:315:\tbnge_aux_init_dflt_config(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-316-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:317:\trc = bnge_net_init_dflt_config(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-318-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-323-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:324:\trc = bnge_map_db_bar(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-325-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-334-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:335:\tbnge_rdma_aux_device_init(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-336-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:337:\trc = bnge_alloc_irqs(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-338-\tif (rc) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-342-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:343:\trc = bnge_netdev_alloc(bd, max_irqs);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-344-\tif (rc)\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-346-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:347:\tbnge_rdma_aux_device_add(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-348-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-353-err_free_irq:\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:354:\tbnge_free_irqs(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-355-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-356-err_uninit_auxr:\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:357:\tbnge_rdma_aux_device_uninit(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-358-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-359-err_config_uninit:\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:360:\tbnge_net_uninit_dflt_config(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-361-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-362-err_fw_reg:\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:363:\tbnge_devlink_unregister(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:364:\tbnge_fw_unregister_dev(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-365-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-366-err_hwrm_cleanup:\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:367:\tbnge_cleanup_hwrm_resources(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-368-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-369-err_bar_unmap:\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:370:\tbnge_unmap_bars(pdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-371-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-372-err_devl_free:\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:373:\tbnge_devlink_free(bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-374-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-375-err_pci_disable:\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:376:\tbnge_pci_disable(pdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-377-\treturn rc;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-379-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:380:static void bnge_remove_one(struct pci_dev *pdev)\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-381-{\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:382:\tstruct bnge_dev *bd = pci_get_drvdata(pdev);\n\n"
} |
| 5/2 | 2026/08/02 05:05 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 16947 output: 46 thoughts: 168 Thoughts: **Analyzing the `bnge` Driver** Okay, so I'm looking at `bnge`, and it appears to be a driver located in `drivers/net/ethernet/broadcom/bnge/`. My first instinct is to confirm that this is indeed a physical PCIe device driver. The clue is in the use of `pci_get_drvdata(to_pci_dev(dev->parent))`. That confirms it – it's definitely dealing with PCI devices. Now, the critical question: does this particular driver *require* actual, physical hardware that wouldn't be emulated properly in something like QEMU? I need to know if it's one of those special cases. I recall seeing code examples with similar behaviors in things like vendor-specific PCIe switch, SmartNIC, or GPU drivers. I'm thinking of `mlxsw`, `pds_core`, `qed`, `ionic`, or `amdgpu`. Those types of drivers often have dependencies on the underlying physical hardware. My next step? I need to check `bnge_pci_tbl` in `bnge_core.c`. That's where I'll find the device ID table and, likely, some more definitive clues. |
| 6/2 | 2026/08/02 05:05 | tool | grepper |
0mArgs:{
"Expression": "bnge_pci_tbl",
"PathPrefix": "drivers/net/ethernet/broadcom/bnge/bnge_core.c"
}Results: {
"Output": "drivers/net/ethernet/broadcom/bnge/bnge_core.c=20=static const struct {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-25-\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:26:static const struct pci_device_id bnge_pci_tbl[] = {\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-27-\t{ PCI_VDEVICE(BROADCOM, 0x1780), .driver_data = BCM57708 },\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-30-};\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:31:MODULE_DEVICE_TABLE(pci, bnge_pci_tbl);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-32-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c=417=static struct pci_driver bnge_driver = {\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-418-\t.name\t\t= bnge_driver_name,\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:419:\t.id_table\t= bnge_pci_tbl,\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-420-\t.probe\t\t= bnge_probe_one,\n"
} |
| 7/2 | 2026/08/02 05:05 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 17832 output: 33 thoughts: 103 Thoughts: **Analyzing a Broadcom PCIe Driver** Okay, so I'm looking at something – looks like a Broadcom PCIe device driver. My initial thought is to figure out the context. Is this something I'm seeing emulated within QEMU, perhaps for testing? Hold on, something feels off. There's no immediate familiarity with a `bnge` driver in the mainline Linux kernel. That rings a bell, but I need to be sure. I'm going to quickly verify if `bnge` is a legitimate, supported driver within the kernel tree, or if it's something specific to testing frameworks like syzkaller. I need to know if this is a real thing, or a stub. Time to go dig around in the Kconfig files, starting with `drivers/net/ethernet/broadcom/bnge/Kconfig` and then checking the broader `drivers/net/ethernet/broadcom/Kconfig` to see if it’s defined. Let's see what we can find. |
| 8/2 | 2026/08/02 05:05 | tool | grepper |
0mArgs:{
"Expression": "config BNGE",
"PathPrefix": "drivers/net/ethernet/broadcom/"
}Results: {
"Output": "drivers/net/ethernet/broadcom/Kconfig=250=config BNXT_HWMON\n--\ndrivers/net/ethernet/broadcom/Kconfig-257-\ndrivers/net/ethernet/broadcom/Kconfig:258:config BNGE\ndrivers/net/ethernet/broadcom/Kconfig-259-\ttristate \"Broadcom ThorUltra Ethernet device support\"\n"
} |
| 9/2 | 2026/08/02 05:05 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 18291 output: 41 thoughts: 403 Thoughts: **Analyzing the Fuzzing Eligibility of a Broadcom ThorUltra Ethernet Driver Patch** Okay, so I'm looking at this patch related to the "Broadcom ThorUltra Ethernet device." The first thing that jumps out is the potential for physical PCIe hardware dependency. Is this *just* a standard QEMU-emulated network card, or something more specialized? The prompt clearly states that patches targeting vendor-specific PCIe drivers that need *real* hardware—things like mlxsw, qed, and amdgpu—are not considered fuzzable, and given the vendor and the "ThorUltra" name, I'm leaning toward the latter. Yes, this is definitely a Broadcom Ethernet device driver (ThorUltra/BNGE). The text specifically refers to it. Based on the prompt criteria, it's pretty clear that it *requires* actual hardware. I need to make sure I don't overlook something obvious, though. Are there any chances it's emulated? Usually, when it comes to emulation within QEMU, the usual suspects are e1000, e1000e, igb, rtl8139, ne2k_pci, pcnet, vmxnet3, and virtio-net. The fact that the text explicitly states the Broadcom ThorUltra (BNGE) is *not* emulated is important. So, that's a check in the "no fuzzing" box. Then I noticed that the patch modifies `bnge_aux_dev_release`, which catches my attention because that is the release callback for an auxiliary device. That points to a "teardown" scenario, executed only when the device is removed or the driver unbinds. And there it is: the prompt specifically calls out driver teardown callbacks like `.remove`, `.shutdown`, or `pci_unregister_driver`. Those are triggered during PCI hot-unplug or driver unbind operations. And that confirms the "teardown" callback nature of `bnge_aux_dev_release`. It is called when the auxiliary device is released which usually happens during device teardown. So, both the physical hardware requirement AND the teardown nature of this specific code change mean this patch is not eligible for fuzzing. |
| 10/2 | 2026/08/02 05:05 | tool | grepper |
0mArgs:{
"Expression": "bnge_aux_dev_release",
"PathPrefix": "drivers/net/ethernet/broadcom/bnge/"
}Results: {
"Output": "drivers/net/ethernet/broadcom/bnge/bnge_auxr.c=126=void bnge_rdma_aux_device_uninit(struct bnge_dev *bd)\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-139-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:140:static void bnge_aux_dev_release(struct device *dev)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-141-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c=206=void bnge_rdma_aux_device_init(struct bnge_dev *bd)\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-231-\taux_dev-\u003edev.parent = \u0026bd-\u003epdev-\u003edev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:232:\taux_dev-\u003edev.release = bnge_aux_dev_release;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-233-\n"
} |
| 11/2 | 2026/08/02 05:05 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 19531 output: 98 thoughts: 154 Thoughts: **WorthFuzzing Decision** Okay, let's break this down. Yep, I've confirmed it: we're dealing with the `release` callback, specifically for the `auxiliary_device`. This is a teardown function, meaning it's handling device removal or unbinding. Now, the crucial piece is that this code resides within a vendor-specific PCIe driver – the `bnge` driver, if I recall correctly – and that one's the Broadcom ThorUltra driver. The real kicker is that this driver, by its nature, needs physical hardware; standard QEMU just won't cut it for this particular driver. Therefore, fuzzing this patch is a dead end. I need to make a judgement call here, and I'm setting WorthFuzzing to `false`. My reasoning is solid: the driver's hardware dependency, and the nature of the function, which will not execute without the hardware. |
| 12/2 | 2026/08/02 05:05 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies a vendor-specific PCIe Ethernet driver (Broadcom ThorUltra 'bnge') which requires physical hardware not emulated in standard QEMU. Furthermore, the modified function `bnge_aux_dev_release` is a device release/teardown callback executed only during device removal or driver unbind operations.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies a vendor-specific PCIe Ethernet driver (Broadcom ThorUltra 'bnge') which requires physical hardware not emulated in standard QEMU. Furthermore, the modified function `bnge_aux_dev_release` is a device release/teardown callback executed only during device removal or driver unbind operations.",
"WorthFuzzing": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|