| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/07/04 17:13 | flow | patch-triage |
1mArgs:null Results: {
"EnableConfigs": [
"BNGE",
"INFINIBAND_BNG_RE"
],
"FocusSymbols": [
"hwrm_ring_alloc_send_msg",
"hwrm_ring_free_send_msg",
"bnge_hwrm_ring_alloc",
"bnge_hwrm_ring_free",
"bng_re_net_ring_alloc",
"bng_re_net_ring_free"
],
"Reasoning": "The patch changes the hardware ring ID (fw_ring_id) from 16-bit to 32-bit across the Broadcom ThorUltra Ethernet (bnge) and RDMA (bng_re) drivers. This is a functional change in the driver's hardware resource management and HWRM command structures, which can be reached and tested via the PCI fuzzer.",
"WorthFuzzing": true
} |
| 1/1 | 2026/07/04 17:13 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 22d0af78a9e40b9f9682c87c842596bc3ab28fda\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Sat Jul 4 17:13:34 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/infiniband/hw/bng_re/bng_dev.c b/drivers/infiniband/hw/bng_re/bng_dev.c\nindex 71a7ca2196ad88..311c8bc931603a 100644\n--- a/drivers/infiniband/hw/bng_re/bng_dev.c\n+++ b/drivers/infiniband/hw/bng_re/bng_dev.c\n@@ -113,7 +113,7 @@ static void bng_re_fill_fw_msg(struct bnge_fw_msg *fw_msg, void *msg,\n }\n \n static int bng_re_net_ring_free(struct bng_re_dev *rdev,\n-\t\t\t\tu16 fw_ring_id, int type)\n+\t\t\t\tu32 fw_ring_id, int type)\n {\n \tstruct bnge_auxr_dev *aux_dev = rdev-\u003eaux_dev;\n \tstruct hwrm_ring_free_input req = {};\n@@ -123,7 +123,7 @@ static int bng_re_net_ring_free(struct bng_re_dev *rdev,\n \n \tbng_re_init_hwrm_hdr((void *)\u0026req, HWRM_RING_FREE);\n \treq.ring_type = type;\n-\treq.ring_id = cpu_to_le16(fw_ring_id);\n+\treq.ring_id = cpu_to_le32(fw_ring_id);\n \tbng_re_fill_fw_msg(\u0026fw_msg, (void *)\u0026req, sizeof(req), (void *)\u0026resp,\n \t\t\t sizeof(resp), BNGE_DFLT_HWRM_CMD_TIMEOUT);\n \trc = bnge_send_msg(aux_dev, \u0026fw_msg);\n@@ -161,7 +161,7 @@ static int bng_re_net_ring_alloc(struct bng_re_dev *rdev,\n \t\t\t sizeof(resp), BNGE_DFLT_HWRM_CMD_TIMEOUT);\n \trc = bnge_send_msg(aux_dev, \u0026fw_msg);\n \tif (!rc)\n-\t\t*fw_ring_id = le16_to_cpu(resp.ring_id);\n+\t\t*fw_ring_id = (u16)le32_to_cpu(resp.ring_id);\n \n \treturn rc;\n }\ndiff --git a/drivers/net/ethernet/broadcom/bnge/bnge.h b/drivers/net/ethernet/broadcom/bnge/bnge.h\nindex f21cff651fd44a..4479ccd071f532 100644\n--- a/drivers/net/ethernet/broadcom/bnge/bnge.h\n+++ b/drivers/net/ethernet/broadcom/bnge/bnge.h\n@@ -36,6 +36,7 @@ struct bnge_pf_info {\n };\n \n #define INVALID_HW_RING_ID ((u16)-1)\n+#define INVALID_HW_RING_ID_32BIT\t(U32_MAX)\n \n enum {\n \tBNGE_FW_CAP_SHORT_CMD\t\t\t\t= BIT_ULL(0),\ndiff --git a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c\nindex 1c9cfec1b633fc..651c5e783516cc 100644\n--- a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c\n+++ b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c\n@@ -1283,7 +1283,7 @@ int bnge_hwrm_stat_ctx_alloc(struct bnge_net *bn)\n \n int hwrm_ring_free_send_msg(struct bnge_net *bn,\n \t\t\t struct bnge_ring_struct *ring,\n-\t\t\t u32 ring_type, int cmpl_ring_id)\n+\t\t\t u32 ring_type, u32 cmpl_ring_id)\n {\n \tstruct hwrm_ring_free_input *req;\n \tstruct bnge_dev *bd = bn-\u003ebd;\n@@ -1295,7 +1295,7 @@ int hwrm_ring_free_send_msg(struct bnge_net *bn,\n \n \treq-\u003ecmpl_ring = cpu_to_le16(cmpl_ring_id);\n \treq-\u003ering_type = ring_type;\n-\treq-\u003ering_id = cpu_to_le16(ring-\u003efw_ring_id);\n+\treq-\u003ering_id = cpu_to_le32(ring-\u003efw_ring_id);\n \n \tbnge_hwrm_req_hold(bd, req);\n \trc = bnge_hwrm_req_send(bd, req);\n@@ -1317,7 +1317,7 @@ int hwrm_ring_alloc_send_msg(struct bnge_net *bn,\n \tstruct hwrm_ring_alloc_output *resp;\n \tstruct hwrm_ring_alloc_input *req;\n \tstruct bnge_dev *bd = bn-\u003ebd;\n-\tu16 ring_id, flags = 0;\n+\tu32 ring_id, flags = 0;\n \tint rc;\n \n \trc = bnge_hwrm_req_init(bd, req, HWRM_RING_ALLOC);\n@@ -1401,7 +1401,7 @@ int hwrm_ring_alloc_send_msg(struct bnge_net *bn,\n \n \tresp = bnge_hwrm_req_hold(bd, req);\n \trc = bnge_hwrm_req_send(bd, req);\n-\tring_id = le16_to_cpu(resp-\u003ering_id);\n+\tring_id = le32_to_cpu(resp-\u003ering_id);\n \tbnge_hwrm_req_drop(bd, req);\n \n exit:\ndiff --git a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.h b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.h\nindex 3501de7a89b919..bf452e390d5bd1 100644\n--- a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.h\n+++ b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.h\n@@ -50,7 +50,7 @@ int bnge_hwrm_cfa_l2_set_rx_mask(struct bnge_dev *bd,\n void bnge_hwrm_stat_ctx_free(struct bnge_net *bn);\n int bnge_hwrm_stat_ctx_alloc(struct bnge_net *bn);\n int hwrm_ring_free_send_msg(struct bnge_net *bn, struct bnge_ring_struct *ring,\n-\t\t\t u32 ring_type, int cmpl_ring_id);\n+\t\t\t u32 ring_type, u32 cmpl_ring_id);\n int hwrm_ring_alloc_send_msg(struct bnge_net *bn,\n \t\t\t struct bnge_ring_struct *ring,\n \t\t\t u32 ring_type, u32 map_index);\ndiff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c\nindex 70768193004cb2..6f7ef506d4e18c 100644\n--- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c\n+++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c\n@@ -1327,12 +1327,12 @@ static int bnge_alloc_core(struct bnge_net *bn)\n \treturn rc;\n }\n \n-u16 bnge_cp_ring_for_rx(struct bnge_rx_ring_info *rxr)\n+u32 bnge_cp_ring_for_rx(struct bnge_rx_ring_info *rxr)\n {\n \treturn rxr-\u003erx_cpr-\u003ering_struct.fw_ring_id;\n }\n \n-u16 bnge_cp_ring_for_tx(struct bnge_tx_ring_info *txr)\n+u32 bnge_cp_ring_for_tx(struct bnge_tx_ring_info *txr)\n {\n \treturn txr-\u003etx_cpr-\u003ering_struct.fw_ring_id;\n }\n@@ -1375,12 +1375,12 @@ static void bnge_init_nq_tree(struct bnge_net *bn)\n \t\tstruct bnge_nq_ring_info *nqr = \u0026bn-\u003ebnapi[i]-\u003enq_ring;\n \t\tstruct bnge_ring_struct *ring = \u0026nqr-\u003ering_struct;\n \n-\t\tring-\u003efw_ring_id = INVALID_HW_RING_ID;\n+\t\tring-\u003efw_ring_id = INVALID_HW_RING_ID_32BIT;\n \t\tfor (j = 0; j \u003c nqr-\u003ecp_ring_count; j++) {\n \t\t\tstruct bnge_cp_ring_info *cpr = \u0026nqr-\u003ecp_ring_arr[j];\n \n \t\t\tring = \u0026cpr-\u003ering_struct;\n-\t\t\tring-\u003efw_ring_id = INVALID_HW_RING_ID;\n+\t\t\tring-\u003efw_ring_id = INVALID_HW_RING_ID_32BIT;\n \t\t}\n \t}\n }\n@@ -1637,7 +1637,7 @@ static void bnge_init_one_rx_ring_rxbd(struct bnge_net *bn,\n \n \tring = \u0026rxr-\u003erx_ring_struct;\n \tbnge_init_rxbd_pages(ring, type);\n-\tring-\u003efw_ring_id = INVALID_HW_RING_ID;\n+\tring-\u003efw_ring_id = INVALID_HW_RING_ID_32BIT;\n }\n \n static void bnge_init_one_agg_ring_rxbd(struct bnge_net *bn,\n@@ -1647,7 +1647,7 @@ static void bnge_init_one_agg_ring_rxbd(struct bnge_net *bn,\n \tu32 type;\n \n \tring = \u0026rxr-\u003erx_agg_ring_struct;\n-\tring-\u003efw_ring_id = INVALID_HW_RING_ID;\n+\tring-\u003efw_ring_id = INVALID_HW_RING_ID_32BIT;\n \tif (bnge_is_agg_reqd(bn-\u003ebd)) {\n \t\ttype = ((u32)BNGE_RX_PAGE_SIZE \u003c\u003c RX_BD_LEN_SHIFT) |\n \t\t\tRX_BD_TYPE_RX_AGG_BD | RX_BD_FLAGS_SOP;\n@@ -1708,7 +1708,7 @@ static void bnge_init_tx_rings(struct bnge_net *bn)\n \t\tstruct bnge_tx_ring_info *txr = \u0026bn-\u003etx_ring[i];\n \t\tstruct bnge_ring_struct *ring = \u0026txr-\u003etx_ring_struct;\n \n-\t\tring-\u003efw_ring_id = INVALID_HW_RING_ID;\n+\t\tring-\u003efw_ring_id = INVALID_HW_RING_ID_32BIT;\n \n \t\tnetif_queue_set_napi(bn-\u003enetdev, i, NETDEV_QUEUE_TYPE_TX,\n \t\t\t\t \u0026txr-\u003ebnapi-\u003enapi);\n@@ -1867,7 +1867,7 @@ static int bnge_hwrm_rx_agg_ring_alloc(struct bnge_net *bn,\n \t\t ring-\u003efw_ring_id);\n \tbnge_db_write(bn-\u003ebd, \u0026rxr-\u003erx_agg_db, rxr-\u003erx_agg_prod);\n \tbnge_db_write(bn-\u003ebd, \u0026rxr-\u003erx_db, rxr-\u003erx_prod);\n-\tbn-\u003egrp_info[grp_idx].agg_fw_ring_id = ring-\u003efw_ring_id;\n+\tbn-\u003egrp_info[grp_idx].agg_fw_ring_id = (u16)ring-\u003efw_ring_id;\n \n \treturn 0;\n }\n@@ -1886,7 +1886,7 @@ static int bnge_hwrm_rx_ring_alloc(struct bnge_net *bn,\n \t\treturn rc;\n \n \tbnge_set_db(bn, \u0026rxr-\u003erx_db, type, map_idx, ring-\u003efw_ring_id);\n-\tbn-\u003egrp_info[map_idx].rx_fw_ring_id = ring-\u003efw_ring_id;\n+\tbn-\u003egrp_info[map_idx].rx_fw_ring_id = (u16)ring-\u003efw_ring_id;\n \n \treturn 0;\n }\n@@ -1916,7 +1916,7 @@ static int bnge_hwrm_ring_alloc(struct bnge_net *bn)\n \t\tbnge_set_db(bn, \u0026nqr-\u003enq_db, type, map_idx, ring-\u003efw_ring_id);\n \t\tbnge_db_nq(bn, \u0026nqr-\u003enq_db, nqr-\u003enq_raw_cons);\n \t\tenable_irq(vector);\n-\t\tbn-\u003egrp_info[i].nq_fw_ring_id = ring-\u003efw_ring_id;\n+\t\tbn-\u003egrp_info[i].nq_fw_ring_id = (u16)ring-\u003efw_ring_id;\n \n \t\tif (!i) {\n \t\t\trc = bnge_hwrm_set_async_event_cr(bd, ring-\u003efw_ring_id);\n@@ -1986,15 +1986,13 @@ void bnge_fill_hw_rss_tbl(struct bnge_net *bn, struct bnge_vnic_info *vnic)\n \ttbl_size = bnge_get_rxfh_indir_size(bd);\n \n \tfor (i = 0; i \u003c tbl_size; i++) {\n-\t\tu16 ring_id, j;\n+\t\tu32 j;\n \n \t\tj = bd-\u003erss_indir_tbl[i];\n \t\trxr = \u0026bn-\u003erx_ring[j];\n \n-\t\tring_id = rxr-\u003erx_ring_struct.fw_ring_id;\n-\t\t*ring_tbl++ = cpu_to_le16(ring_id);\n-\t\tring_id = bnge_cp_ring_for_rx(rxr);\n-\t\t*ring_tbl++ = cpu_to_le16(ring_id);\n+\t\t*ring_tbl++ = cpu_to_le16(rxr-\u003erx_ring_struct.fw_ring_id);\n+\t\t*ring_tbl++ = cpu_to_le16(bnge_cp_ring_for_rx(rxr));\n \t}\n }\n \n@@ -2285,7 +2283,7 @@ static void bnge_disable_int(struct bnge_net *bn)\n \t\tnqr = \u0026bnapi-\u003enq_ring;\n \t\tring = \u0026nqr-\u003ering_struct;\n \n-\t\tif (ring-\u003efw_ring_id != INVALID_HW_RING_ID)\n+\t\tif (ring-\u003efw_ring_id != INVALID_HW_RING_ID_32BIT)\n \t\t\tbnge_db_nq(bn, \u0026nqr-\u003enq_db, nqr-\u003enq_raw_cons);\n \t}\n }\n@@ -2401,7 +2399,7 @@ static void bnge_hwrm_rx_ring_free(struct bnge_net *bn,\n \tu32 grp_idx = rxr-\u003ebnapi-\u003eindex;\n \tu32 cmpl_ring_id;\n \n-\tif (ring-\u003efw_ring_id == INVALID_HW_RING_ID)\n+\tif (ring-\u003efw_ring_id == INVALID_HW_RING_ID_32BIT)\n \t\treturn;\n \n \tcmpl_ring_id = bnge_cp_ring_for_rx(rxr);\n@@ -2409,7 +2407,7 @@ static void bnge_hwrm_rx_ring_free(struct bnge_net *bn,\n \t\t\t\tRING_FREE_REQ_RING_TYPE_RX,\n \t\t\t\tclose_path ? cmpl_ring_id :\n \t\t\t\tINVALID_HW_RING_ID);\n-\tring-\u003efw_ring_id = INVALID_HW_RING_ID;\n+\tring-\u003efw_ring_id = INVALID_HW_RING_ID_32BIT;\n \tbn-\u003egrp_info[grp_idx].rx_fw_ring_id = INVALID_HW_RING_ID;\n }\n \n@@ -2421,14 +2419,14 @@ static void bnge_hwrm_rx_agg_ring_free(struct bnge_net *bn,\n \tu32 grp_idx = rxr-\u003ebnapi-\u003eindex;\n \tu32 cmpl_ring_id;\n \n-\tif (ring-\u003efw_ring_id == INVALID_HW_RING_ID)\n+\tif (ring-\u003efw_ring_id == INVALID_HW_RING_ID_32BIT)\n \t\treturn;\n \n \tcmpl_ring_id = bnge_cp_ring_for_rx(rxr);\n \thwrm_ring_free_send_msg(bn, ring, RING_FREE_REQ_RING_TYPE_RX_AGG,\n \t\t\t\tclose_path ? cmpl_ring_id :\n \t\t\t\tINVALID_HW_RING_ID);\n-\tring-\u003efw_ring_id = INVALID_HW_RING_ID;\n+\tring-\u003efw_ring_id = INVALID_HW_RING_ID_32BIT;\n \tbn-\u003egrp_info[grp_idx].agg_fw_ring_id = INVALID_HW_RING_ID;\n }\n \n@@ -2439,14 +2437,14 @@ static void bnge_hwrm_tx_ring_free(struct bnge_net *bn,\n \tstruct bnge_ring_struct *ring = \u0026txr-\u003etx_ring_struct;\n \tu32 cmpl_ring_id;\n \n-\tif (ring-\u003efw_ring_id == INVALID_HW_RING_ID)\n+\tif (ring-\u003efw_ring_id == INVALID_HW_RING_ID_32BIT)\n \t\treturn;\n \n \tcmpl_ring_id = close_path ? bnge_cp_ring_for_tx(txr) :\n \t\t INVALID_HW_RING_ID;\n \thwrm_ring_free_send_msg(bn, ring, RING_FREE_REQ_RING_TYPE_TX,\n \t\t\t\tcmpl_ring_id);\n-\tring-\u003efw_ring_id = INVALID_HW_RING_ID;\n+\tring-\u003efw_ring_id = INVALID_HW_RING_ID_32BIT;\n }\n \n static void bnge_hwrm_cp_ring_free(struct bnge_net *bn,\n@@ -2455,12 +2453,12 @@ static void bnge_hwrm_cp_ring_free(struct bnge_net *bn,\n \tstruct bnge_ring_struct *ring;\n \n \tring = \u0026cpr-\u003ering_struct;\n-\tif (ring-\u003efw_ring_id == INVALID_HW_RING_ID)\n+\tif (ring-\u003efw_ring_id == INVALID_HW_RING_ID_32BIT)\n \t\treturn;\n \n \thwrm_ring_free_send_msg(bn, ring, RING_FREE_REQ_RING_TYPE_L2_CMPL,\n \t\t\t\tINVALID_HW_RING_ID);\n-\tring-\u003efw_ring_id = INVALID_HW_RING_ID;\n+\tring-\u003efw_ring_id = INVALID_HW_RING_ID_32BIT;\n }\n \n static void bnge_hwrm_ring_free(struct bnge_net *bn, bool close_path)\n@@ -2496,11 +2494,11 @@ static void bnge_hwrm_ring_free(struct bnge_net *bn, bool close_path)\n \t\t\tbnge_hwrm_cp_ring_free(bn, \u0026nqr-\u003ecp_ring_arr[j]);\n \n \t\tring = \u0026nqr-\u003ering_struct;\n-\t\tif (ring-\u003efw_ring_id != INVALID_HW_RING_ID) {\n+\t\tif (ring-\u003efw_ring_id != INVALID_HW_RING_ID_32BIT) {\n \t\t\thwrm_ring_free_send_msg(bn, ring,\n \t\t\t\t\t\tRING_FREE_REQ_RING_TYPE_NQ,\n \t\t\t\t\t\tINVALID_HW_RING_ID);\n-\t\t\tring-\u003efw_ring_id = INVALID_HW_RING_ID;\n+\t\t\tring-\u003efw_ring_id = INVALID_HW_RING_ID_32BIT;\n \t\t\tbn-\u003egrp_info[i].nq_fw_ring_id = INVALID_HW_RING_ID;\n \t\t}\n \t}\ndiff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h\nindex f4636b5b0cf3f0..d177919c2e1170 100644\n--- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h\n+++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h\n@@ -630,8 +630,8 @@ struct bnge_l2_filter {\n \trefcount_t\t\trefcnt;\n };\n \n-u16 bnge_cp_ring_for_rx(struct bnge_rx_ring_info *rxr);\n-u16 bnge_cp_ring_for_tx(struct bnge_tx_ring_info *txr);\n+u32 bnge_cp_ring_for_rx(struct bnge_rx_ring_info *rxr);\n+u32 bnge_cp_ring_for_tx(struct bnge_tx_ring_info *txr);\n void bnge_fill_hw_rss_tbl(struct bnge_net *bn, struct bnge_vnic_info *vnic);\n int bnge_alloc_rx_data(struct bnge_net *bn, struct bnge_rx_ring_info *rxr,\n \t\t u16 prod, gfp_t gfp);\ndiff --git a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h\nindex 341c7f81ed092b..bb0c79a1ee60f7 100644\n--- a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h\n+++ b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h\n@@ -184,7 +184,7 @@ struct bnge_ctx_mem_info {\n struct bnge_ring_struct {\n \tstruct bnge_ring_mem_info\tring_mem;\n \n-\tu16\t\t\tfw_ring_id;\n+\tu32\t\t\tfw_ring_id;\n \tunion {\n \t\tu16\t\tgrp_idx;\n \t\tu16\t\tmap_idx; /* Used by NQs */\ndiff --git a/include/linux/bnge/hsi.h b/include/linux/bnge/hsi.h\nindex 8ea13d5407eecd..1f7bd96415a527 100644\n--- a/include/linux/bnge/hsi.h\n+++ b/include/linux/bnge/hsi.h\n@@ -8317,8 +8317,7 @@ struct hwrm_ring_alloc_output {\n \t__le16\treq_type;\n \t__le16\tseq_id;\n \t__le16\tresp_len;\n-\t__le16\tring_id;\n-\t__le16\tlogical_ring_id;\n+\t__le32\tring_id;\n \tu8\tpush_buffer_index;\n \t#define RING_ALLOC_RESP_PUSH_BUFFER_INDEX_PING_BUFFER 0x0UL\n \t#define RING_ALLOC_RESP_PUSH_BUFFER_INDEX_PONG_BUFFER 0x1UL\n@@ -8345,10 +8344,10 @@ struct hwrm_ring_free_input {\n \tu8\tflags;\n \t#define RING_FREE_REQ_FLAGS_VIRTIO_RING_VALID 0x1UL\n \t#define RING_FREE_REQ_FLAGS_LAST RING_FREE_REQ_FLAGS_VIRTIO_RING_VALID\n-\t__le16\tring_id;\n+\t__le16\tunused_1;\n \t__le32\tprod_idx;\n \t__le32\topaque;\n-\t__le32\tunused_1;\n+\t__le32\tring_id;\n };\n \n /* hwrm_ring_free_output (size:128b/16B) */\n"
} |
| 2/1 | 2026/07/04 17:13 | agent | patch-evaluator |
1mModel:gemini-3.1-pro-preview Args: null Results: {
"EnableConfigs": [
"BNGE",
"INFINIBAND_BNG_RE"
],
"FocusSymbols": [
"hwrm_ring_alloc_send_msg",
"hwrm_ring_free_send_msg",
"bnge_hwrm_ring_alloc",
"bnge_hwrm_ring_free",
"bng_re_net_ring_alloc",
"bng_re_net_ring_free"
],
"Reasoning": "The patch changes the hardware ring ID (fw_ring_id) from 16-bit to 32-bit across the Broadcom ThorUltra Ethernet (bnge) and RDMA (bng_re) drivers. This is a functional change in the driver's hardware resource management and HWRM command structures, which can be reached and tested via the PCI fuzzer.",
"WorthFuzzing": true
}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). 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. 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. Do not list too generic configs (we already have them enabled). Only list those that specifically cover the modified code. 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 22d0af78a9e40b9f9682c87c842596bc3ab28fda
Author: syz-cluster <triage@syzkaller.com>
Date: Sat Jul 4 17:13:34 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/infiniband/hw/bng_re/bng_dev.c b/drivers/infiniband/hw/bng_re/bng_dev.c
index 71a7ca2196ad88..311c8bc931603a 100644
--- a/drivers/infiniband/hw/bng_re/bng_dev.c
+++ b/drivers/infiniband/hw/bng_re/bng_dev.c
@@ -113,7 +113,7 @@ static void bng_re_fill_fw_msg(struct bnge_fw_msg *fw_msg, void *msg,
}
static int bng_re_net_ring_free(struct bng_re_dev *rdev,
- u16 fw_ring_id, int type)
+ u32 fw_ring_id, int type)
{
struct bnge_auxr_dev *aux_dev = rdev->aux_dev;
struct hwrm_ring_free_input req = {};
@@ -123,7 +123,7 @@ static int bng_re_net_ring_free(struct bng_re_dev *rdev,
bng_re_init_hwrm_hdr((void *)&req, HWRM_RING_FREE);
req.ring_type = type;
- req.ring_id = cpu_to_le16(fw_ring_id);
+ req.ring_id = cpu_to_le32(fw_ring_id);
bng_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp,
sizeof(resp), BNGE_DFLT_HWRM_CMD_TIMEOUT);
rc = bnge_send_msg(aux_dev, &fw_msg);
@@ -161,7 +161,7 @@ static int bng_re_net_ring_alloc(struct bng_re_dev *rdev,
sizeof(resp), BNGE_DFLT_HWRM_CMD_TIMEOUT);
rc = bnge_send_msg(aux_dev, &fw_msg);
if (!rc)
- *fw_ring_id = le16_to_cpu(resp.ring_id);
+ *fw_ring_id = (u16)le32_to_cpu(resp.ring_id);
return rc;
}
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge.h b/drivers/net/ethernet/broadcom/bnge/bnge.h
index f21cff651fd44a..4479ccd071f532 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge.h
+++ b/drivers/net/ethernet/broadcom/bnge/bnge.h
@@ -36,6 +36,7 @@ struct bnge_pf_info {
};
#define INVALID_HW_RING_ID ((u16)-1)
+#define INVALID_HW_RING_ID_32BIT (U32_MAX)
enum {
BNGE_FW_CAP_SHORT_CMD = BIT_ULL(0),
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c
index 1c9cfec1b633fc..651c5e783516cc 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c
@@ -1283,7 +1283,7 @@ int bnge_hwrm_stat_ctx_alloc(struct bnge_net *bn)
int hwrm_ring_free_send_msg(struct bnge_net *bn,
struct bnge_ring_struct *ring,
- u32 ring_type, int cmpl_ring_id)
+ u32 ring_type, u32 cmpl_ring_id)
{
struct hwrm_ring_free_input *req;
struct bnge_dev *bd = bn->bd;
@@ -1295,7 +1295,7 @@ int hwrm_ring_free_send_msg(struct bnge_net *bn,
req->cmpl_ring = cpu_to_le16(cmpl_ring_id);
req->ring_type = ring_type;
- req->ring_id = cpu_to_le16(ring->fw_ring_id);
+ req->ring_id = cpu_to_le32(ring->fw_ring_id);
bnge_hwrm_req_hold(bd, req);
rc = bnge_hwrm_req_send(bd, req);
@@ -1317,7 +1317,7 @@ int hwrm_ring_alloc_send_msg(struct bnge_net *bn,
struct hwrm_ring_alloc_output *resp;
struct hwrm_ring_alloc_input *req;
struct bnge_dev *bd = bn->bd;
- u16 ring_id, flags = 0;
+ u32 ring_id, flags = 0;
int rc;
rc = bnge_hwrm_req_init(bd, req, HWRM_RING_ALLOC);
@@ -1401,7 +1401,7 @@ int hwrm_ring_alloc_send_msg(struct bnge_net *bn,
resp = bnge_hwrm_req_hold(bd, req);
rc = bnge_hwrm_req_send(bd, req);
- ring_id = le16_to_cpu(resp->ring_id);
+ ring_id = le32_to_cpu(resp->ring_id);
bnge_hwrm_req_drop(bd, req);
exit:
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.h b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.h
index 3501de7a89b919..bf452e390d5bd1 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.h
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.h
@@ -50,7 +50,7 @@ int bnge_hwrm_cfa_l2_set_rx_mask(struct bnge_dev *bd,
void bnge_hwrm_stat_ctx_free(struct bnge_net *bn);
int bnge_hwrm_stat_ctx_alloc(struct bnge_net *bn);
int hwrm_ring_free_send_msg(struct bnge_net *bn, struct bnge_ring_struct *ring,
- u32 ring_type, int cmpl_ring_id);
+ u32 ring_type, u32 cmpl_ring_id);
int hwrm_ring_alloc_send_msg(struct bnge_net *bn,
struct bnge_ring_struct *ring,
u32 ring_type, u32 map_index);
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c
index 70768193004cb2..6f7ef506d4e18c 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c
@@ -1327,12 +1327,12 @@ static int bnge_alloc_core(struct bnge_net *bn)
return rc;
}
-u16 bnge_cp_ring_for_rx(struct bnge_rx_ring_info *rxr)
+u32 bnge_cp_ring_for_rx(struct bnge_rx_ring_info *rxr)
{
return rxr->rx_cpr->ring_struct.fw_ring_id;
}
-u16 bnge_cp_ring_for_tx(struct bnge_tx_ring_info *txr)
+u32 bnge_cp_ring_for_tx(struct bnge_tx_ring_info *txr)
{
return txr->tx_cpr->ring_struct.fw_ring_id;
}
@@ -1375,12 +1375,12 @@ static void bnge_init_nq_tree(struct bnge_net *bn)
struct bnge_nq_ring_info *nqr = &bn->bnapi[i]->nq_ring;
struct bnge_ring_struct *ring = &nqr->ring_struct;
- ring->fw_ring_id = INVALID_HW_RING_ID;
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
for (j = 0; j < nqr->cp_ring_count; j++) {
struct bnge_cp_ring_info *cpr = &nqr->cp_ring_arr[j];
ring = &cpr->ring_struct;
- ring->fw_ring_id = INVALID_HW_RING_ID;
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
}
}
}
@@ -1637,7 +1637,7 @@ static void bnge_init_one_rx_ring_rxbd(struct bnge_net *bn,
ring = &rxr->rx_ring_struct;
bnge_init_rxbd_pages(ring, type);
- ring->fw_ring_id = INVALID_HW_RING_ID;
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
}
static void bnge_init_one_agg_ring_rxbd(struct bnge_net *bn,
@@ -1647,7 +1647,7 @@ static void bnge_init_one_agg_ring_rxbd(struct bnge_net *bn,
u32 type;
ring = &rxr->rx_agg_ring_struct;
- ring->fw_ring_id = INVALID_HW_RING_ID;
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
if (bnge_is_agg_reqd(bn->bd)) {
type = ((u32)BNGE_RX_PAGE_SIZE << RX_BD_LEN_SHIFT) |
RX_BD_TYPE_RX_AGG_BD | RX_BD_FLAGS_SOP;
@@ -1708,7 +1708,7 @@ static void bnge_init_tx_rings(struct bnge_net *bn)
struct bnge_tx_ring_info *txr = &bn->tx_ring[i];
struct bnge_ring_struct *ring = &txr->tx_ring_struct;
- ring->fw_ring_id = INVALID_HW_RING_ID;
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
netif_queue_set_napi(bn->netdev, i, NETDEV_QUEUE_TYPE_TX,
&txr->bnapi->napi);
@@ -1867,7 +1867,7 @@ static int bnge_hwrm_rx_agg_ring_alloc(struct bnge_net *bn,
ring->fw_ring_id);
bnge_db_write(bn->bd, &rxr->rx_agg_db, rxr->rx_agg_prod);
bnge_db_write(bn->bd, &rxr->rx_db, rxr->rx_prod);
- bn->grp_info[grp_idx].agg_fw_ring_id = ring->fw_ring_id;
+ bn->grp_info[grp_idx].agg_fw_ring_id = (u16)ring->fw_ring_id;
return 0;
}
@@ -1886,7 +1886,7 @@ static int bnge_hwrm_rx_ring_alloc(struct bnge_net *bn,
return rc;
bnge_set_db(bn, &rxr->rx_db, type, map_idx, ring->fw_ring_id);
- bn->grp_info[map_idx].rx_fw_ring_id = ring->fw_ring_id;
+ bn->grp_info[map_idx].rx_fw_ring_id = (u16)ring->fw_ring_id;
return 0;
}
@@ -1916,7 +1916,7 @@ static int bnge_hwrm_ring_alloc(struct bnge_net *bn)
bnge_set_db(bn, &nqr->nq_db, type, map_idx, ring->fw_ring_id);
bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons);
enable_irq(vector);
- bn->grp_info[i].nq_fw_ring_id = ring->fw_ring_id;
+ bn->grp_info[i].nq_fw_ring_id = (u16)ring->fw_ring_id;
if (!i) {
rc = bnge_hwrm_set_async_event_cr(bd, ring->fw_ring_id);
@@ -1986,15 +1986,13 @@ void bnge_fill_hw_rss_tbl(struct bnge_net *bn, struct bnge_vnic_info *vnic)
tbl_size = bnge_get_rxfh_indir_size(bd);
for (i = 0; i < tbl_size; i++) {
- u16 ring_id, j;
+ u32 j;
j = bd->rss_indir_tbl[i];
rxr = &bn->rx_ring[j];
- ring_id = rxr->rx_ring_struct.fw_ring_id;
- *ring_tbl++ = cpu_to_le16(ring_id);
- ring_id = bnge_cp_ring_for_rx(rxr);
- *ring_tbl++ = cpu_to_le16(ring_id);
+ *ring_tbl++ = cpu_to_le16(rxr->rx_ring_struct.fw_ring_id);
+ *ring_tbl++ = cpu_to_le16(bnge_cp_ring_for_rx(rxr));
}
}
@@ -2285,7 +2283,7 @@ static void bnge_disable_int(struct bnge_net *bn)
nqr = &bnapi->nq_ring;
ring = &nqr->ring_struct;
- if (ring->fw_ring_id != INVALID_HW_RING_ID)
+ if (ring->fw_ring_id != INVALID_HW_RING_ID_32BIT)
bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons);
}
}
@@ -2401,7 +2399,7 @@ static void bnge_hwrm_rx_ring_free(struct bnge_net *bn,
u32 grp_idx = rxr->bnapi->index;
u32 cmpl_ring_id;
- if (ring->fw_ring_id == INVALID_HW_RING_ID)
+ if (ring->fw_ring_id == INVALID_HW_RING_ID_32BIT)
return;
cmpl_ring_id = bnge_cp_ring_for_rx(rxr);
@@ -2409,7 +2407,7 @@ static void bnge_hwrm_rx_ring_free(struct bnge_net *bn,
RING_FREE_REQ_RING_TYPE_RX,
close_path ? cmpl_ring_id :
INVALID_HW_RING_ID);
- ring->fw_ring_id = INVALID_HW_RING_ID;
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
bn->grp_info[grp_idx].rx_fw_ring_id = INVALID_HW_RING_ID;
}
@@ -2421,14 +2419,14 @@ static void bnge_hwrm_rx_agg_ring_free(struct bnge_net *bn,
u32 grp_idx = rxr->bnapi->index;
u32 cmpl_ring_id;
- if (ring->fw_ring_id == INVALID_HW_RING_ID)
+ if (ring->fw_ring_id == INVALID_HW_RING_ID_32BIT)
return;
cmpl_ring_id = bnge_cp_ring_for_rx(rxr);
hwrm_ring_free_send_msg(bn, ring, RING_FREE_REQ_RING_TYPE_RX_AGG,
close_path ? cmpl_ring_id :
INVALID_HW_RING_ID);
- ring->fw_ring_id = INVALID_HW_RING_ID;
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
bn->grp_info[grp_idx].agg_fw_ring_id = INVALID_HW_RING_ID;
}
@@ -2439,14 +2437,14 @@ static void bnge_hwrm_tx_ring_free(struct bnge_net *bn,
struct bnge_ring_struct *ring = &txr->tx_ring_struct;
u32 cmpl_ring_id;
- if (ring->fw_ring_id == INVALID_HW_RING_ID)
+ if (ring->fw_ring_id == INVALID_HW_RING_ID_32BIT)
return;
cmpl_ring_id = close_path ? bnge_cp_ring_for_tx(txr) :
INVALID_HW_RING_ID;
hwrm_ring_free_send_msg(bn, ring, RING_FREE_REQ_RING_TYPE_TX,
cmpl_ring_id);
- ring->fw_ring_id = INVALID_HW_RING_ID;
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
}
static void bnge_hwrm_cp_ring_free(struct bnge_net *bn,
@@ -2455,12 +2453,12 @@ static void bnge_hwrm_cp_ring_free(struct bnge_net *bn,
struct bnge_ring_struct *ring;
ring = &cpr->ring_struct;
- if (ring->fw_ring_id == INVALID_HW_RING_ID)
+ if (ring->fw_ring_id == INVALID_HW_RING_ID_32BIT)
return;
hwrm_ring_free_send_msg(bn, ring, RING_FREE_REQ_RING_TYPE_L2_CMPL,
INVALID_HW_RING_ID);
- ring->fw_ring_id = INVALID_HW_RING_ID;
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
}
static void bnge_hwrm_ring_free(struct bnge_net *bn, bool close_path)
@@ -2496,11 +2494,11 @@ static void bnge_hwrm_ring_free(struct bnge_net *bn, bool close_path)
bnge_hwrm_cp_ring_free(bn, &nqr->cp_ring_arr[j]);
ring = &nqr->ring_struct;
- if (ring->fw_ring_id != INVALID_HW_RING_ID) {
+ if (ring->fw_ring_id != INVALID_HW_RING_ID_32BIT) {
hwrm_ring_free_send_msg(bn, ring,
RING_FREE_REQ_RING_TYPE_NQ,
INVALID_HW_RING_ID);
- ring->fw_ring_id = INVALID_HW_RING_ID;
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
bn->grp_info[i].nq_fw_ring_id = INVALID_HW_RING_ID;
}
}
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h
index f4636b5b0cf3f0..d177919c2e1170 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h
@@ -630,8 +630,8 @@ struct bnge_l2_filter {
refcount_t refcnt;
};
-u16 bnge_cp_ring_for_rx(struct bnge_rx_ring_info *rxr);
-u16 bnge_cp_ring_for_tx(struct bnge_tx_ring_info *txr);
+u32 bnge_cp_ring_for_rx(struct bnge_rx_ring_info *rxr);
+u32 bnge_cp_ring_for_tx(struct bnge_tx_ring_info *txr);
void bnge_fill_hw_rss_tbl(struct bnge_net *bn, struct bnge_vnic_info *vnic);
int bnge_alloc_rx_data(struct bnge_net *bn, struct bnge_rx_ring_info *rxr,
u16 prod, gfp_t gfp);
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h
index 341c7f81ed092b..bb0c79a1ee60f7 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h
@@ -184,7 +184,7 @@ struct bnge_ctx_mem_info {
struct bnge_ring_struct {
struct bnge_ring_mem_info ring_mem;
- u16 fw_ring_id;
+ u32 fw_ring_id;
union {
u16 grp_idx;
u16 map_idx; /* Used by NQs */
diff --git a/include/linux/bnge/hsi.h b/include/linux/bnge/hsi.h
index 8ea13d5407eecd..1f7bd96415a527 100644
--- a/include/linux/bnge/hsi.h
+++ b/include/linux/bnge/hsi.h
@@ -8317,8 +8317,7 @@ struct hwrm_ring_alloc_output {
__le16 req_type;
__le16 seq_id;
__le16 resp_len;
- __le16 ring_id;
- __le16 logical_ring_id;
+ __le32 ring_id;
u8 push_buffer_index;
#define RING_ALLOC_RESP_PUSH_BUFFER_INDEX_PING_BUFFER 0x0UL
#define RING_ALLOC_RESP_PUSH_BUFFER_INDEX_PONG_BUFFER 0x1UL
@@ -8345,10 +8344,10 @@ struct hwrm_ring_free_input {
u8 flags;
#define RING_FREE_REQ_FLAGS_VIRTIO_RING_VALID 0x1UL
#define RING_FREE_REQ_FLAGS_LAST RING_FREE_REQ_FLAGS_VIRTIO_RING_VALID
- __le16 ring_id;
+ __le16 unused_1;
__le32 prod_idx;
__le32 opaque;
- __le32 unused_1;
+ __le32 ring_id;
};
/* hwrm_ring_free_output (size:128b/16B) */
|
| 3/2 | 2026/07/04 17:13 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 8074 output: 32 thoughts: 306 Thoughts: **Assessing the Impact of the Patch Series** Okay, so I need to figure out if this patch series introduces any functional changes to the kernel that warrant fuzzing. Let's see... the patch is touching several files: `drivers/infiniband/hw/bng_re/bng_dev.c`, a bunch of files within `drivers/net/ethernet/broadcom/bnge/`, and `include/linux/bnge/hsi.h`. Immediately, my spidey-sense is tingling – looks like we're dealing with modifications to both the Broadcom BNGE driver and its related RDMA driver, `bng_re`. Ah, here it is: looks like they're bumping the `fw_ring_id` from a `u16` to a `u32` in the BNGE driver. That's a functional change, no doubt about it. This means there's a potential for new behaviors or subtle changes in existing ones due to the wider range of possible values. We'll need to make sure this is tested. Now, let's just confirm that `bnge` is actually a reachable driver. I recall it's an ethernet driver for Broadcom devices. But, wait, is `bnge` even in the upstream kernel? Need to quickly check that. |
| 4/2 | 2026/07/04 17:13 | tool | grepper |
0mArgs:{
"Expression": "bnge",
"PathPrefix": "drivers/net/ethernet/broadcom/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 6120 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_dev *bd = pci_get_drvdata(aux_priv-\u003eauxr_dev-\u003epdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-145-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:146:\tida_free(\u0026bnge_aux_dev_ids, aux_priv-\u003eid);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-147-\tkfree(aux_priv-\u003eauxr_dev-\u003eauxr_info);\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-153-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:154:void bnge_rdma_aux_device_del(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-155-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-161-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:162:static void bnge_set_auxr_dev_info(struct bnge_auxr_dev *auxr_dev,\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:163:\t\t\t\t struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-164-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-182-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:183:void bnge_rdma_aux_device_add(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-184-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-202-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:203:void bnge_rdma_aux_device_init(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-204-{\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-205-\tstruct auxiliary_device *aux_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:206:\tstruct bnge_auxr_info *auxr_info;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:207:\tstruct bnge_auxr_priv *aux_priv;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:208:\tstruct bnge_auxr_dev *auxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-209-\tint rc;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-210-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:211:\tif (!bnge_is_roce_en(bd))\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-212-\t\treturn;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-217-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:218:\taux_priv-\u003eid = ida_alloc(\u0026bnge_aux_dev_ids, GFP_KERNEL);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-219-\tif (aux_priv-\u003eid \u003c 0) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-228-\taux_dev-\u003edev.parent = \u0026bd-\u003epdev-\u003edev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:229:\taux_dev-\u003edev.release = bnge_aux_dev_release;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-230-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-232-\tif (rc) {\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:233:\t\tida_free(\u0026bnge_aux_dev_ids, aux_priv-\u003eid);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-234-\t\tkfree(aux_priv);\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-250-\tbd-\u003eauxr_dev = auxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:251:\tbnge_set_auxr_dev_info(auxr_dev, bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-252-\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);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-383-\n\n"
} |
| 5/2 | 2026/07/04 17:13 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 22518 output: 33 thoughts: 103 Thoughts: **Investigating the `bnge` Driver** Okay, so I've encountered this `bnge` driver. First thought: is this Broadcom, and is it *actually* upstream? I need to quickly ascertain if this is a genuine, mainline kernel driver or something specific to fuzzing or testing. Let's dig in and figure this out. The name suggests it's a Broadcom Ethernet driver, but I need to confirm. My plan is to investigate, checking the source code, specifically the Kconfig files. I will look in `drivers/net/ethernet/broadcom/bnge/Kconfig` or `drivers/net/ethernet/broadcom/Kconfig` to see how it's configured and included. This will help clarify whether `bnge` is a real driver module or some kind of mock or test driver. |
| 6/2 | 2026/07/04 17:13 | 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"
} |
| 7/2 | 2026/07/04 17:13 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 22942 output: 22 thoughts: 720 Thoughts: **Analyzing the Reachability of BNGE in a Virtualized Environment** Okay, so I'm looking at `BNGE`, which I now know stands for "Broadcom ThorUltra Ethernet device support." My immediate question is, can I even *touch* this thing in a virtualized environment? I see it's a PCI device, which triggers a quick mental check – is there some kind of software emulation or a dedicated hardware driver at play here? The prompt is making things a bit clearer, though. It's flagging code paths that are inherently unreachable in environments like GCE or QEMU, even if you're using emulated hardware, like USB gadget or `mac80211_hwsim`. If this is indeed a *real* PCI driver specifically for Broadcom ThorUltra hardware, and there isn't a corresponding software emulator in QEMU or in the kernel itself, then it seems highly unlikely I can get to the code. Now I'm trying to recall the syzkaller setup. Does it provide some kind of emulation for this kind of scenario, maybe using something like `syz_pci_assign`, or perhaps with `vhci` for USB or something similar? No, wait, syzkaller *does* have a PCI fuzzer, right? Does it use `syz_kvm_setup_cpu` or something to get that done? I'm pretty sure it's the injected PCI config space and MMIO reads/writes, right? Okay, so the prompt again says it might be an issue that the code paths are unreachable if there is no software emulation or that it is a hardware-specific driver. Does QEMU emulate the Broadcom ThorUltra? Probably not. Syzkaller is the best shot here. Let's check if syzkaller can deal with PCI drivers in general. Yes, syzkaller has a PCI fuzzer, doesn't it? It uses `syz_pci_device` or similar, right? But wait. This `bnge` driver… let's check it. Is this a *real* driver or one of those fakes that syzkaller sometimes adds for testing? Let me see… "Author: syz-cluster <triage@syzkaller.com>". Ah, "syz-cluster: applied patch under review". Okay, so it looks like `bnge` *might* be a real driver that's being used by syzkaller. Let's see if it's in the mainline kernel. |
| 8/2 | 2026/07/04 17:13 | tool | grepper |
0mArgs:{
"Expression": "ThorUltra",
"PathPrefix": ""
}Results: {
"Output": "drivers/net/ethernet/broadcom/Kconfig=258=config BNGE\ndrivers/net/ethernet/broadcom/Kconfig:259:\ttristate \"Broadcom ThorUltra Ethernet device support\"\ndrivers/net/ethernet/broadcom/Kconfig-260-\tdepends on PCI\n--\ndrivers/net/ethernet/broadcom/Kconfig-264-\thelp\ndrivers/net/ethernet/broadcom/Kconfig:265:\t This driver supports Broadcom ThorUltra 50/100/200/400/800 gigabit\ndrivers/net/ethernet/broadcom/Kconfig-266-\t Ethernet cards. The module will be called bng_en. To compile this\n--\ndrivers/net/ethernet/broadcom/bnge/bnge.h-7-#define DRV_NAME\t\"bng_en\"\ndrivers/net/ethernet/broadcom/bnge/bnge.h:8:#define DRV_SUMMARY\t\"Broadcom ThorUltra NIC Ethernet Driver\"\ndrivers/net/ethernet/broadcom/bnge/bnge.h-9-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c=20=static const struct {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-22-} board_info[] = {\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c:23:\t[BCM57708] = { \"Broadcom BCM57708 ThorUltra 50Gb/100Gb/200Gb/400Gb/800Gb Ethernet\" },\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-24-};\n"
} |
| 9/2 | 2026/07/04 17:14 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 24668 output: 22 thoughts: 307 Thoughts: **My Line of Reasoning** Okay, first things first, is that `bnge` Broadcom driver actually something I can get to? Hmm, it's starting to dawn on me, it's not simply about direct access. Thinking about it, doesn't Syzkaller have some way to reach PCI drivers? I seem to recall it having a PCI fuzzer, activated via a `CONFIG_PCI_SYSCALL` setting or something similar. No, that's not quite right. It utilizes the `syz_pci_device` pseudo-syscall, which is, I'm sure, implemented in the fuzzer. But, wait, that still needs the driver compiled into the kernel. Now, that prompt: "Code paths that are impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware". Does this suggest that PCI drivers are fundamentally unreachable unless specifically emulated? Ah, right! Syzkaller *does* fuzz PCI drivers. It uses its PCI fuzzer. Wait, it emulates PCI devices in software via a virtual PCI host controller, like `dummy_hcd` for USB, but I believe it uses something like `vfio` or a custom fuzzer in the PCI case. Ah, I remember, it's more complicated than that. Syzkaller utilizes `syz_pci_device` which injects PCI devices via a virtual PCI bus, or perhaps it leverages QEMU's PCI emulation? Wait, does Syzkaller have a `vhci` for PCI? Bingo! They added a `vpci` (Virtual PCI) driver to the kernel specifically for fuzzing PCI drivers! Right, I'm going to check if this `vpci` or something similar is actually in the kernel. |
| 10/2 | 2026/07/04 17:14 | tool | grepper |
0mArgs:{
"Expression": "vpci",
"PathPrefix": ""
}Results: {
"Output": "\nFull output is too long, showing 500 out of 2157 lines.\nUse more precise expression if possible.\n\nDocumentation/admin-guide/kernel-parameters.txt=95=Kernel parameters\n--\nDocumentation/admin-guide/kernel-parameters.txt-4521-\nDocumentation/admin-guide/kernel-parameters.txt:4522:\tnoinvpcid\t[X86,EARLY] Disable the INVPCID cpu feature.\nDocumentation/admin-guide/kernel-parameters.txt-4523-\n--\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml=18=properties:\n--\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml-21-\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml:22: vpcie3v3-supply:\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml-23- description: A phandle to the regulator for 3.3v supply.\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml-24-\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml:25: vpcie1v8-supply:\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml-26- description: A phandle to the regulator for VIO 1.8v supply.\n--\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml=135=required:\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml-136- - compatible\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml:137: - vpcie3v3-supply\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml-138-\n--\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml=141=examples:\n--\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml-147- compatible = \"pcie-m2-e-connector\";\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml:148: vpcie3v3-supply = \u003c\u0026vreg_wcn_3p3\u003e;\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml:149: vpcie1v8-supply = \u003c\u0026vreg_l15b_1p8\u003e;\nDocumentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml-150- i2c-parent = \u003c\u0026i2c0\u003e;\n--\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml=18=properties:\n--\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml-21-\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml:22: vpcie3v3-supply:\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml-23- description: A phandle to the regulator for 3.3v supply.\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml-24-\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml:25: vpcie1v8-supply:\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml-26- description: A phandle to the regulator for VIO 1.8v supply.\n--\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml=96=required:\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml-97- - compatible\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml:98: - vpcie3v3-supply\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml-99-\n--\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml=102=examples:\n--\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml-108- compatible = \"pcie-m2-m-connector\";\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml:109: vpcie3v3-supply = \u003c\u0026vreg_nvme\u003e;\nDocumentation/devicetree/bindings/connector/pcie-m2-m-connector.yaml-110- i2c-parent = \u003c\u0026i2c0\u003e;\n--\nDocumentation/devicetree/bindings/pci/brcm,stb-pcie.yaml=187=examples:\n--\nDocumentation/devicetree/bindings/pci/brcm,stb-pcie.yaml-225- device_type = \"pci\";\nDocumentation/devicetree/bindings/pci/brcm,stb-pcie.yaml:226: vpcie3v3-supply = \u003c\u0026vreg7\u003e;\nDocumentation/devicetree/bindings/pci/brcm,stb-pcie.yaml-227- ranges;\n--\nDocumentation/devicetree/bindings/pci/fsl,imx6q-pcie-common.yaml=17=properties:\n--\nDocumentation/devicetree/bindings/pci/fsl,imx6q-pcie-common.yaml-100-\nDocumentation/devicetree/bindings/pci/fsl,imx6q-pcie-common.yaml:101: vpcie-supply:\nDocumentation/devicetree/bindings/pci/fsl,imx6q-pcie-common.yaml-102- description: Should specify the regulator in charge of PCIe port power.\n--\nDocumentation/devicetree/bindings/pci/hisilicon-histb-pcie.txt=35=Optional properties:\nDocumentation/devicetree/bindings/pci/hisilicon-histb-pcie.txt-36-- reset-gpios: The gpio to generate PCIe PERST# assert and deassert signal.\nDocumentation/devicetree/bindings/pci/hisilicon-histb-pcie.txt:37:- vpcie-supply: The regulator in charge of PCIe port power.\nDocumentation/devicetree/bindings/pci/hisilicon-histb-pcie.txt-38-- phys: List of phandle and phy mode specifier, should be 0.\n--\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml=23=properties:\n--\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml-183-\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml:184: vpcie3v3-supply:\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml-185- description: A phandle to the regulator node that supplies 3.3V to the slot\n--\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml-188-\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml:189: vpcie12v-supply:\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml-190- description: A phandle to the regulator node that supplies 12V to the slot\n--\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml=257=examples:\n--\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml-314- vddio-pex-ctl-supply = \u003c\u0026vdd_1v8ao\u003e;\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml:315: vpcie3v3-supply = \u003c\u0026vdd_3v3_pcie\u003e;\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml:316: vpcie12v-supply = \u003c\u0026vdd_12v_pcie\u003e;\nDocumentation/devicetree/bindings/pci/nvidia,tegra194-pcie.yaml-317-\n--\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml=17=properties:\n--\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml-70-\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml:71: vpcie1v5-supply:\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml-72- description: The 1.5v regulator to use for PCIe.\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml-73-\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml:74: vpcie3v3-supply:\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml-75- description: The 3.3v regulator to use for PCIe.\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml-76-\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml:77: vpcie12v-supply:\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml-78- description: The 12v regulator to use for PCIe.\n--\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml=103=examples:\n--\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml-135- resets = \u003c\u0026cpg 319\u003e;\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml:136: vpcie3v3-supply = \u003c\u0026pcie_3v3\u003e;\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml:137: vpcie12v-supply = \u003c\u0026pcie_12v\u003e;\nDocumentation/devicetree/bindings/pci/rcar-pci-host.yaml-138- };\n--\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml=16=properties:\n--\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml-42-\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml:43: vpcie12v-supply:\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml-44- description: The 12v regulator to use for PCIe.\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml-45-\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml:46: vpcie3v3-supply:\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml-47- description: The 3.3v regulator to use for PCIe.\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml-48-\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml:49: vpcie1v8-supply:\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml-50- description: The 1.8v regulator to use for PCIe.\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml-51-\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml:52: vpcie0v9-supply:\nDocumentation/devicetree/bindings/pci/rockchip,rk3399-pcie.yaml-53- description: The 0.9v regulator to use for PCIe.\n--\nDocumentation/devicetree/bindings/pci/rockchip-dw-pcie.yaml=19=properties:\n--\nDocumentation/devicetree/bindings/pci/rockchip-dw-pcie.yaml-70-\nDocumentation/devicetree/bindings/pci/rockchip-dw-pcie.yaml:71: vpcie3v3-supply: true\nDocumentation/devicetree/bindings/pci/rockchip-dw-pcie.yaml-72-\n--\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml=80=patternProperties:\n--\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml-88-\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml:89: vpcie3v3-supply:\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml-90- description:\n--\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml-94- - phys\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml:95: - vpcie3v3-supply\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml-96-\n--\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml=110=examples:\n--\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml-154- phys = \u003c\u0026pcie1_phy\u003e;\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml:155: vpcie3v3-supply = \u003c\u0026pcie_vcc_3v3\u003e;\nDocumentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml-156- };\n--\nDocumentation/virt/hyperv/coco.rst=260=The data is transferred directly between the VM and a vPCI device (a.k.a.\nDocumentation/virt/hyperv/coco.rst:261:a PCI pass-thru device, see :doc:`vpci`) that is directly assigned to VTL2\nDocumentation/virt/hyperv/coco.rst-262-and that supports encrypted memory. In such a case, neither the host partition\n--\nDocumentation/virt/hyperv/hibernation.rst=240=calls \"Discrete Device Assignment\" (DDA), as well as SR-IOV NIC\nDocumentation/virt/hyperv/hibernation.rst:241:Virtual Functions (VF) devices. See Documentation/virt/hyperv/vpci.rst.\nDocumentation/virt/hyperv/hibernation.rst-242-\n--\nDocumentation/virt/hyperv/index.rst=4=Hyper-V Enlightenments\n--\nDocumentation/virt/hyperv/index.rst-12- clocks\nDocumentation/virt/hyperv/index.rst:13: vpci\nDocumentation/virt/hyperv/index.rst-14- hibernation\n--\narch/arm/boot/dts/nxp/imx/imx6-logicpd-baseboard.dtsi=318=\u0026pcie {\n--\narch/arm/boot/dts/nxp/imx/imx6-logicpd-baseboard.dtsi-321-\treset-gpio = \u003c\u0026gpio1 9 GPIO_ACTIVE_LOW\u003e;\narch/arm/boot/dts/nxp/imx/imx6-logicpd-baseboard.dtsi:322:\tvpcie-supply = \u003c\u0026reg_pcie\u003e;\narch/arm/boot/dts/nxp/imx/imx6-logicpd-baseboard.dtsi-323-\tstatus = \"okay\";\n--\narch/arm/boot/dts/nxp/imx/imx6dl-yapp4-common.dtsi=571=\u0026pcie {\n--\narch/arm/boot/dts/nxp/imx/imx6dl-yapp4-common.dtsi-574-\treset-gpio = \u003c\u0026gpio7 12 GPIO_ACTIVE_LOW\u003e;\narch/arm/boot/dts/nxp/imx/imx6dl-yapp4-common.dtsi:575:\tvpcie-supply = \u003c\u0026reg_pcie\u003e;\narch/arm/boot/dts/nxp/imx/imx6dl-yapp4-common.dtsi-576-\tstatus = \"disabled\";\n--\narch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dts=39=\u0026pcie {\narch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dts:40:\tvpcie-supply = \u003c\u0026reg_pcie_switch\u003e;\narch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dts-41-\tstatus = \"okay\";\n--\narch/arm/boot/dts/nxp/imx/imx6q-cm-fx6.dts=468=\u0026pcie {\n--\narch/arm/boot/dts/nxp/imx/imx6q-cm-fx6.dts-471-\treset-gpio = \u003c\u0026gpio1 26 GPIO_ACTIVE_LOW\u003e;\narch/arm/boot/dts/nxp/imx/imx6q-cm-fx6.dts:472:\tvpcie-supply = \u003c\u0026reg_pcie_power_on_gpio\u003e;\narch/arm/boot/dts/nxp/imx/imx6q-cm-fx6.dts-473-\tstatus = \"okay\";\n--\narch/arm/boot/dts/nxp/imx/imx6q-novena.dts=460=\u0026pcie {\n--\narch/arm/boot/dts/nxp/imx/imx6q-novena.dts-463-\treset-gpio = \u003c\u0026gpio3 29 GPIO_ACTIVE_LOW\u003e;\narch/arm/boot/dts/nxp/imx/imx6q-novena.dts:464:\tvpcie-supply = \u003c\u0026reg_pcie\u003e;\narch/arm/boot/dts/nxp/imx/imx6q-novena.dts-465-\tstatus = \"okay\";\n--\narch/arm/boot/dts/nxp/imx/imx6qdl-mba6.dtsi=246=\u0026pcie {\n--\narch/arm/boot/dts/nxp/imx/imx6qdl-mba6.dtsi-249-\treset-gpio = \u003c\u0026gpio6 7 GPIO_ACTIVE_LOW\u003e;\narch/arm/boot/dts/nxp/imx/imx6qdl-mba6.dtsi:250:\tvpcie-supply = \u003c\u0026reg_pcie\u003e;\narch/arm/boot/dts/nxp/imx/imx6qdl-mba6.dtsi-251-\tstatus = \"okay\";\n--\narch/arm/boot/dts/nxp/imx/imx6qdl-phytec-mira.dtsi=218=\u0026pcie {\n--\narch/arm/boot/dts/nxp/imx/imx6qdl-phytec-mira.dtsi-221-\treset-gpio = \u003c\u0026gpio2 25 GPIO_ACTIVE_LOW\u003e;\narch/arm/boot/dts/nxp/imx/imx6qdl-phytec-mira.dtsi:222:\tvpcie-supply = \u003c\u0026reg_pcie\u003e;\narch/arm/boot/dts/nxp/imx/imx6qdl-phytec-mira.dtsi-223-\tstatus = \"disabled\";\n--\narch/arm/boot/dts/nxp/imx/imx6qdl-sabresd.dtsi=754=\u0026pcie {\n--\narch/arm/boot/dts/nxp/imx/imx6qdl-sabresd.dtsi-758-\treset-gpio = \u003c\u0026gpio7 12 GPIO_ACTIVE_LOW\u003e;\narch/arm/boot/dts/nxp/imx/imx6qdl-sabresd.dtsi:759:\tvpcie-supply = \u003c\u0026reg_pcie\u003e;\narch/arm/boot/dts/nxp/imx/imx6qdl-sabresd.dtsi-760-\tstatus = \"okay\";\n--\narch/arm/boot/dts/nxp/imx/imx6sx-sdb.dtsi=282=\u0026pcie {\n--\narch/arm/boot/dts/nxp/imx/imx6sx-sdb.dtsi-286-\treset-gpio = \u003c\u0026gpio2 0 GPIO_ACTIVE_LOW\u003e;\narch/arm/boot/dts/nxp/imx/imx6sx-sdb.dtsi:287:\tvpcie-supply = \u003c\u0026reg_pcie_gpio\u003e;\narch/arm/boot/dts/nxp/imx/imx6sx-sdb.dtsi-288-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx8-apalis-v1.1.dtsi=804=\u0026pciea {\n--\narch/arm64/boot/dts/freescale/imx8-apalis-v1.1.dtsi-809-\treset-gpio = \u003c\u0026lsio_gpio0 30 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx8-apalis-v1.1.dtsi:810:\tvpcie-supply = \u003c\u0026reg_pcie_switch\u003e;\narch/arm64/boot/dts/freescale/imx8-apalis-v1.1.dtsi-811-};\n--\narch/arm64/boot/dts/freescale/imx8dxl-evk.dts=673=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx8dxl-evk.dts-679-\treset-gpio = \u003c\u0026lsio_gpio4 0 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx8dxl-evk.dts:680:\tvpcie-supply = \u003c\u0026reg_pcieb\u003e;\narch/arm64/boot/dts/freescale/imx8dxl-evk.dts:681:\tvpcie3v3aux-supply = \u003c\u0026reg_pcieb\u003e;\narch/arm64/boot/dts/freescale/imx8dxl-evk.dts-682-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx8mm-beacon-baseboard.dtsi=301=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx8mm-beacon-baseboard.dtsi-311-\t\t\t\t \u003c\u0026clk IMX8MM_SYS_PLL2_250M\u003e;\narch/arm64/boot/dts/freescale/imx8mm-beacon-baseboard.dtsi:312:\tvpcie-supply = \u003c\u0026reg_pcie0\u003e;\narch/arm64/boot/dts/freescale/imx8mm-beacon-baseboard.dtsi-313-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx8mm-evk.dtsi=533=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx8mm-evk.dtsi-544-\t\t\t\t \u003c\u0026clk IMX8MM_SYS_PLL2_250M\u003e;\narch/arm64/boot/dts/freescale/imx8mm-evk.dtsi:545:\tvpcie-supply = \u003c\u0026reg_pcie0\u003e;\narch/arm64/boot/dts/freescale/imx8mm-evk.dtsi-546-\tsupports-clkreq;\n--\narch/arm64/boot/dts/freescale/imx8mm-verdin-dahlia.dtsi=119=\u0026pcie0 {\narch/arm64/boot/dts/freescale/imx8mm-verdin-dahlia.dtsi:120:\tvpcie-supply = \u003c\u0026reg_pcie\u003e;\narch/arm64/boot/dts/freescale/imx8mm-verdin-dahlia.dtsi-121-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx8mp-data-modul-edm-sbc.dts=613=\u0026pcie {\n--\narch/arm64/boot/dts/freescale/imx8mp-data-modul-edm-sbc.dts-617-\treset-gpio = \u003c\u0026gpio1 5 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx8mp-data-modul-edm-sbc.dts:618:\tvpcie-supply = \u003c\u0026reg_pcie0\u003e;\narch/arm64/boot/dts/freescale/imx8mp-data-modul-edm-sbc.dts-619-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx8mp-evk.dts=770=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx8mp-evk.dts-774-\treset-gpio = \u003c\u0026gpio2 7 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx8mp-evk.dts:775:\tvpcie-supply = \u003c\u0026reg_pcie0\u003e;\narch/arm64/boot/dts/freescale/imx8mp-evk.dts:776:\tvpcie3v3aux-supply = \u003c\u0026reg_pcie0\u003e;\narch/arm64/boot/dts/freescale/imx8mp-evk.dts-777-\tsupports-clkreq;\n--\narch/arm64/boot/dts/freescale/imx8mp-libra-rdk-fpsc.dts=245=\u0026pcie {\narch/arm64/boot/dts/freescale/imx8mp-libra-rdk-fpsc.dts-246-\treset-gpio = \u003c\u0026gpio1 8 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx8mp-libra-rdk-fpsc.dts:247:\tvpcie-supply = \u003c\u0026reg_vdd_3v3\u003e;\narch/arm64/boot/dts/freescale/imx8mp-libra-rdk-fpsc.dts-248-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx8mp-phyboard-pollux-rdk.dts=317=\u0026pcie {\n--\narch/arm64/boot/dts/freescale/imx8mp-phyboard-pollux-rdk.dts-320-\treset-gpio = \u003c\u0026gpio1 8 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx8mp-phyboard-pollux-rdk.dts:321:\tvpcie-supply = \u003c\u0026reg_vcc_3v3_sw\u003e;\narch/arm64/boot/dts/freescale/imx8mp-phyboard-pollux-rdk.dts-322-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx8mp-verdin-dahlia.dtsi=189=\u0026pcie {\narch/arm64/boot/dts/freescale/imx8mp-verdin-dahlia.dtsi:190:\tvpcie-supply = \u003c\u0026reg_pcie\u003e;\narch/arm64/boot/dts/freescale/imx8mp-verdin-dahlia.dtsi-191-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx8mq-evk.dts=397=\u0026pcie1 {\n--\narch/arm64/boot/dts/freescale/imx8mq-evk.dts-405-\t\t \u003c\u0026clk IMX8MQ_CLK_PCIE2_AUX\u003e;\narch/arm64/boot/dts/freescale/imx8mq-evk.dts:406:\tvpcie-supply = \u003c\u0026reg_pcie1\u003e;\narch/arm64/boot/dts/freescale/imx8mq-evk.dts:407:\tvpcie3v3aux-supply = \u003c\u0026reg_pcie1\u003e;\narch/arm64/boot/dts/freescale/imx8mq-evk.dts-408-\tvph-supply = \u003c\u0026vgen5_reg\u003e;\n--\narch/arm64/boot/dts/freescale/imx8qm-mek.dts=808=\u0026pciea {\n--\narch/arm64/boot/dts/freescale/imx8qm-mek.dts-814-\treset-gpio = \u003c\u0026lsio_gpio4 29 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx8qm-mek.dts:815:\tvpcie-supply = \u003c\u0026reg_pciea\u003e;\narch/arm64/boot/dts/freescale/imx8qm-mek.dts:816:\tvpcie3v3aux-supply = \u003c\u0026reg_pciea\u003e;\narch/arm64/boot/dts/freescale/imx8qm-mek.dts-817-\tsupports-clkreq;\n--\narch/arm64/boot/dts/freescale/imx8qxp-mek.dts=728=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx8qxp-mek.dts-734-\treset-gpios = \u003c\u0026lsio_gpio4 0 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx8qxp-mek.dts:735:\tvpcie-supply = \u003c\u0026reg_pcieb\u003e;\narch/arm64/boot/dts/freescale/imx8qxp-mek.dts:736:\tvpcie3v3aux-supply = \u003c\u0026reg_pcieb\u003e;\narch/arm64/boot/dts/freescale/imx8qxp-mek.dts-737-\tsupports-clkreq;\n--\narch/arm64/boot/dts/freescale/imx943-evk.dts=1026=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx943-evk.dts-1037-\treset-gpio = \u003c\u0026pcal6416_i2c3_u46 3 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx943-evk.dts:1038:\tvpcie3v3aux-supply = \u003c\u0026reg_m2_wlan\u003e;\narch/arm64/boot/dts/freescale/imx943-evk.dts-1039-\tsupports-clkreq;\n--\narch/arm64/boot/dts/freescale/imx943-evk.dts=1043=\u0026pcie0_ep {\n--\narch/arm64/boot/dts/freescale/imx943-evk.dts-1045-\tpinctrl-names = \"default\";\narch/arm64/boot/dts/freescale/imx943-evk.dts:1046:\tvpcie-supply = \u003c\u0026reg_m2_pwr\u003e;\narch/arm64/boot/dts/freescale/imx943-evk.dts-1047-\tstatus = \"disabled\";\n--\narch/arm64/boot/dts/freescale/imx943-evk.dts=1050=\u0026pcie1 {\n--\narch/arm64/boot/dts/freescale/imx943-evk.dts-1061-\treset-gpio = \u003c\u0026pcal6416_i2c3_u46 1 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx943-evk.dts:1062:\tvpcie3v3aux-supply = \u003c\u0026reg_slot_pwr\u003e;\narch/arm64/boot/dts/freescale/imx943-evk.dts-1063-\tsupports-clkreq;\n--\narch/arm64/boot/dts/freescale/imx943-evk.dts=1067=\u0026pcie1_ep {\n--\narch/arm64/boot/dts/freescale/imx943-evk.dts-1069-\tpinctrl-names = \"default\";\narch/arm64/boot/dts/freescale/imx943-evk.dts:1070:\tvpcie-supply = \u003c\u0026reg_slot_pwr\u003e;\narch/arm64/boot/dts/freescale/imx943-evk.dts-1071-\tstatus = \"disabled\";\n--\narch/arm64/boot/dts/freescale/imx95-15x15-evk.dts=553=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx95-15x15-evk.dts-557-\treset-gpio = \u003c\u0026gpio5 13 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx95-15x15-evk.dts:558:\tvpcie-supply = \u003c\u0026reg_m2_pwr\u003e;\narch/arm64/boot/dts/freescale/imx95-15x15-evk.dts:559:\tvpcie3v3aux-supply = \u003c\u0026reg_m2_pwr\u003e;\narch/arm64/boot/dts/freescale/imx95-15x15-evk.dts-560-\tsupports-clkreq;\n--\narch/arm64/boot/dts/freescale/imx95-15x15-evk.dts=564=\u0026pcie0_ep {\n--\narch/arm64/boot/dts/freescale/imx95-15x15-evk.dts-566-\tpinctrl-names = \"default\";\narch/arm64/boot/dts/freescale/imx95-15x15-evk.dts:567:\tvpcie-supply = \u003c\u0026reg_m2_pwr\u003e;\narch/arm64/boot/dts/freescale/imx95-15x15-evk.dts-568-\tstatus = \"disabled\";\n--\narch/arm64/boot/dts/freescale/imx95-15x15-frdm.dts=549=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx95-15x15-frdm.dts-553-\tsupports-clkreq;\narch/arm64/boot/dts/freescale/imx95-15x15-frdm.dts:554:\tvpcie-supply = \u003c\u0026reg_m2_mkey_pwr\u003e;\narch/arm64/boot/dts/freescale/imx95-15x15-frdm.dts-555-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts=540=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts-544-\treset-gpio = \u003c\u0026i2c7_pcal6524 5 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts:545:\tvpcie-supply = \u003c\u0026reg_pcie0\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts:546:\tvpcie3v3aux-supply = \u003c\u0026reg_pcie0\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts-547-\tsupports-clkreq;\n--\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts=551=\u0026pcie0_ep {\n--\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts-553-\tpinctrl-names = \"default\";\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts:554:\tvpcie-supply = \u003c\u0026reg_m2_pwr\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts-555-\tstatus = \"disabled\";\n--\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts=562=\u0026pcie1 {\n--\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts-566-\treset-gpio = \u003c\u0026i2c7_pcal6524 16 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts:567:\tvpcie-supply = \u003c\u0026reg_slot_pwr\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts:568:\tvpcie3v3aux-supply = \u003c\u0026reg_slot_pwr\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts-569-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts=572=\u0026pcie1_ep {\n--\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts-574-\tpinctrl-names = \"default\";\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts:575:\tvpcie-supply = \u003c\u0026reg_slot_pwr\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-evk.dts-576-\tstatus = \"disabled\";\n--\narch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts=499=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts-502-\treset-gpio = \u003c\u0026i2c4_gpio_expander_22 19 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts:503:\tvpcie-supply = \u003c\u0026reg_m2_mkey_1_pwr\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts-504-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts=507=\u0026pcie1 {\n--\narch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts-510-\treset-gpio = \u003c\u0026i2c3_gpio_expander_20 9 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts:511:\tvpcie-supply = \u003c\u0026reg_m2_mkey_2_pwr\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts-512-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx95-19x19-verdin-evk.dts=305=\u0026pcie0 {\n--\narch/arm64/boot/dts/freescale/imx95-19x19-verdin-evk.dts-308-\treset-gpio = \u003c\u0026i2c7_pcal6524 17 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-verdin-evk.dts:309:\tvpcie-supply = \u003c\u0026reg_pcie0\u003e;\narch/arm64/boot/dts/freescale/imx95-19x19-verdin-evk.dts-310-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx95-libra-rdk-fpsc.dts=245=\u0026pcie0 {\narch/arm64/boot/dts/freescale/imx95-libra-rdk-fpsc.dts-246-\treset-gpio = \u003c\u0026gpio1 10 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx95-libra-rdk-fpsc.dts:247:\tvpcie-supply = \u003c\u0026reg_vdd_3v3\u003e;\narch/arm64/boot/dts/freescale/imx95-libra-rdk-fpsc.dts-248-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx95-libra-rdk-fpsc.dts=251=\u0026pcie1 {\narch/arm64/boot/dts/freescale/imx95-libra-rdk-fpsc.dts-252-\treset-gpio = \u003c\u0026gpio1 14 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/imx95-libra-rdk-fpsc.dts:253:\tvpcie-supply = \u003c\u0026reg_vdd_3v3\u003e;\narch/arm64/boot/dts/freescale/imx95-libra-rdk-fpsc.dts-254-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/freescale/imx95-verdin-dahlia.dtsi=196=\u0026pcie0 {\narch/arm64/boot/dts/freescale/imx95-verdin-dahlia.dtsi:197:\tvpcie-supply = \u003c\u0026reg_pcie\u003e;\narch/arm64/boot/dts/freescale/imx95-verdin-dahlia.dtsi-198-\n--\narch/arm64/boot/dts/freescale/mba8xx.dtsi=332=\u0026pcieb {\n--\narch/arm64/boot/dts/freescale/mba8xx.dtsi-337-\treset-gpios = \u003c\u0026lsio_gpio4 0 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/freescale/mba8xx.dtsi:338:\tvpcie-supply = \u003c\u0026reg_pcie_1v5\u003e;\narch/arm64/boot/dts/freescale/mba8xx.dtsi-339-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/hisilicon/hi3798cv200-poplar.dts=181=\u0026pcie {\narch/arm64/boot/dts/hisilicon/hi3798cv200-poplar.dts-182-\treset-gpios = \u003c\u0026gpio4 4 GPIO_ACTIVE_LOW\u003e;\narch/arm64/boot/dts/hisilicon/hi3798cv200-poplar.dts:183:\tvpcie-supply = \u003c\u0026reg_pcie\u003e;\narch/arm64/boot/dts/hisilicon/hi3798cv200-poplar.dts-184-\tstatus = \"okay\";\n--\narch/arm64/boot/dts/mediatek/mt8195-cherry-dojo-r1.dts=15=\tnvme-connector {\n--\narch/arm64/boot/dts/mediatek/mt8195-cherry-dojo-r1.dts-17-\t\t/* power is controlled by EC */\narch/arm64/boot/dts/mediatek/mt8195-cherry-dojo-r1.dts:18:\t\tvpcie3v3-supply = \u003c\u0026pp3300_z2\u003e;\narch/arm64/boot/dts/mediatek/mt8195-cherry-dojo-r1.dts-19-\n--\narch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi=789=\tpcie@0 {\n--\narch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi-793-\t\tnum-lanes = \u003c1\u003e;\narch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi:794:\t\tvpcie3v3-supply = \u003c\u0026pp3300_wlan\u003e;\narch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi-795-\t\t#address-cells = \u003c3\u003e;\n--\narch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts=2271=\t\tpcie@141a0000 {\n--\narch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts-2274-\t\t\tvddio-pex-ctl-supply = \u003c\u0026vdd_1v8ao\u003e;\narch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts:2275:\t\t\tvpcie3v3-supply = \u003c\u0026vdd_3v3_pcie\u003e;\narch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts:2276:\t\t\tvpcie12v-supply = \u003c\u0026vdd_12v_pcie\u003e;\narch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts-2277-\n--\narch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701.dtsi=353=\t\tpcie@141a0000 {\n--\narch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701.dtsi-356-\t\t\tvddio-pex-ctl-supply = \u003c\u0026vdd_1v8_ls\u003e;\narch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701.dtsi:357:\t\t\tvpcie3v3-supply = \u003c\u0026vdd_3v3_pcie\u003e;\narch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701.dtsi:358:\t\t\tvpcie12v-supply = \u003c\u0026vdd_12v_pcie\u003e;\narch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701.dtsi-359-\n--\narch/arm64/boot/dts/nvidia/tegra234-p3740-0002+p3701-0008.dts=288=\t\tpcie@14100000 {\n--\narch/arm64/boot/dts/nvidia/tegra234-p3740-0002+p3701-0008.dts-290-\t\t\tvddio-pex-ctl-supply = \u003c\u0026vdd_1v8_ao\u003e;\narch/arm64/boot/dts/nvidia/tegra234-p3740-0002+p3701-0008.dts:291:\t\t\tvpcie3v3-supply = \u003c\u0026vdd_3v3_wifi\u003e;\narch/arm64/boot/dts/nvidia/tegra234-p3740-0002+p3701-0008.dts-292-\t\t\tphys = \u003c\u0026p2u_hsio_3\u003e;\n--\narch/arm64/boot/dts/nvidia/tegra234-p3768-0000+p3767.dtsi=156=\t\tpcie@140a0000 {\n--\narch/arm64/boot/dts/nvidia/tegra234-p3768-0000+p3767.dtsi-164-\t\t\tvddio-pex-ctl-supply = \u003c\u0026vdd_1v8_ao\u003e;\narch/arm64/boot/dts/nvidia/tegra234-p3768-0000+p3767.dtsi:165:\t\t\tvpcie3v3-supply = \u003c\u0026vdd_3v3_pcie\u003e;\narch/arm64/boot/dts/nvidia/tegra234-p3768-0000+p3767.dtsi-166-\t\t};\n--\narch/arm64/boot/dts/qcom/hamoa-iot-evk.dts=1005=\u0026pcie3_port0 {\narch/arm64/boot/dts/qcom/hamoa-iot-evk.dts:1006:\tvpcie12v-supply = \u003c\u0026vreg_pcie_12v\u003e;\narch/arm64/boot/dts/qcom/hamoa-iot-evk.dts:1007:\tvpcie3v3-supply = \u003c\u0026vreg_pcie_3v3\u003e;\narch/arm64/boot/dts/qcom/hamoa-iot-evk.dts:1008:\tvpcie3v3aux-supply = \u003c\u0026vreg_pcie_3v3_aux\u003e;\narch/arm64/boot/dts/qcom/hamoa-iot-evk.dts-1009-\n--\narch/arm64/boot/dts/qcom/purwa-iot-evk.dts=1003=\u0026pcie3_port0 {\narch/arm64/boot/dts/qcom/purwa-iot-evk.dts:1004:\tvpcie12v-supply = \u003c\u0026vreg_pcie_12v\u003e;\narch/arm64/boot/dts/qcom/purwa-iot-evk.dts:1005:\tvpcie3v3-supply = \u003c\u0026vreg_pcie_3v3\u003e;\narch/arm64/boot/dts/qcom/purwa-iot-evk.dts:1006:\tvpcie3v3aux-supply = \u003c\u0026vreg_pcie_3v3_aux\u003e;\narch/arm64/boot/dts/qcom/purwa-iot-evk.dts-1007-\n--\narch/arm64/boot/dts/qcom/x1e80100-qcp.dts=993=\u0026pcie3_port0 {\narch/arm64/boot/dts/qcom/x1e80100-qcp.dts:994:\tvpcie12v-supply = \u003c\u0026vreg_pcie_12v\u003e;\narch/arm64/boot/dts/qcom/x1e80100-qcp.dts:995:\tvpcie3v3-supply = \u003c\u0026vreg_pcie_3v3\u003e;\narch/arm64/boot/dts/qcom/x1e80100-qcp.dts:996:\tvpcie3v3aux-supply = \u003c\u0026vreg_pcie_3v3_aux\u003e;\narch/arm64/boot/dts/qcom/x1e80100-qcp.dts-997-\n--\narch/arm64/boot/dts/renesas/r8a779g3-sparrow-hawk.dts=565=\u0026pciec0_rp {\narch/arm64/boot/dts/renesas/r8a779g3-sparrow-hawk.dts-566-\tclocks = \u003c\u0026pcie_clk 1\u003e;\narch/arm64/boot/dts/renesas/r8a779g3-sparrow-hawk.dts:567:\tvpcie3v3-supply = \u003c\u0026reg_3p3v\u003e;\narch/arm64/boot/dts/renesas/r8a779g3-sparrow-hawk.dts-568-};\n--\narch/arm64/boot/dts/renesas/r8a779g3-sparrow-hawk.dts=583=\u0026pciec1_rp {\narch/arm64/boot/dts/renesas/r8a779g3-sparrow-hawk.dts-584-\tclocks = \u003c\u0026pcie_clk 3\u003e;\narch/arm64/boot/dts/renesas/r8a779g3-sparrow-hawk.dts:585:\tvpcie3v3-supply = \u003c\u0026reg_3p3v\u003e;\narch/arm64/boot/dts/renesas/r8a779g3-sparrow-hawk.dts-586-};\n--\narch/arm64/boot/dts/renesas/ulcb-kf.dtsi=366=\u0026pciec1 {\n--\narch/arm64/boot/dts/renesas/ulcb-kf.dtsi-369-\narch/arm64/boot/dts/renesas/ulcb-kf.dtsi:370:\tvpcie1v5-supply = \u003c\u0026pcie_1v5\u003e;\narch/arm64/boot/dts/renesas/ulcb-kf.dtsi:371:\tvpcie3v3-supply = \u003c\u0026pcie_3v3\u003e;\narch/arm64/boot/dts/renesas/ulcb-kf.dtsi-372-};\n--\narch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi=690=\u0026pcie0 {\n--\narch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi-694-\narch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi:695:\tvpcie3v3-supply = \u003c\u0026wlan_3v3\u003e;\narch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi:696:\tvpcie1v8-supply = \u003c\u0026pp1800_pcie\u003e;\narch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi-697-};\n--\narch/arm64/boot/dts/rockchip/rk3399-gru.dtsi=481=\u0026pcie0 {\n--\narch/arm64/boot/dts/rockchip/rk3399-gru.dtsi-486-\tpinctrl-0 = \u003c\u0026pcie_clkreqn_cpm\u003e, \u003c\u0026wifi_perst_l\u003e;\narch/arm64/boot/dts/rockchip/rk3399-gru.dtsi:487:\tvpcie3v3-supply = \u003c\u0026pp3300_wifi_bt\u003e;\narch/arm64/boot/dts/rockchip/rk3399-gru.dtsi:488:\tvpcie1v8-supply = \u003c\u0026wlan_pd_n\u003e; /* HACK: see \u0026wlan_pd_n */\narch/arm64/boot/dts/rockchip/rk3399-gru.dtsi:489:\tvpcie0v9-supply = \u003c\u0026pp900_pcie\u003e;\narch/arm64/boot/dts/rockchip/rk3399-gru.dtsi-490-\n--\narch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts=425=\u0026pcie0 {\n--\narch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts-429-\narch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts:430:\tvpcie12v-supply = \u003c\u0026vcc12v_dcin\u003e;\narch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts:431:\tvpcie3v3-supply = \u003c\u0026pcie_power\u003e;\narch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts:432:\tvpcie1v8-supply = \u003c\u0026avdd_1v8_s0\u003e;\narch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts:433:\tvpcie0v9-supply = \u003c\u0026avdd_0v9_s0\u003e;\narch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts-434-};\n--\narch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts=97=\u0026pcie0 {\n--\narch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts-99-\tnum-lanes = \u003c4\u003e;\narch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts:100:\tvpcie3v3-supply = \u003c\u0026vcc3v3_sys\u003e;\narch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts-101-};\n--\narch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dtsi=96=\u0026pcie0 {\narch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dtsi-97-\tnum-lanes = \u003c1\u003e;\narch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dtsi:98:\tvpcie3v3-supply = \u003c\u0026vcc3v3_sys\u003e;\narch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dtsi-99-};\n\n"
} |
| 11/2 | 2026/07/04 17:14 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 40924 output: 25 thoughts: 631 Thoughts: **My PCI Fuzzing Brainstorm** Okay, wait a minute... I'm getting my wires crossed on how syzkaller handles PCI fuzzing in Hyper-V. My initial thought was that `vpci` in Hyper-V was a pass-through, and I got that it's related to the virtualization layer. Syzkaller's `syz_pci_device` function is the key here, but it doesn't require a *virtual* PCI controller in the kernel directly, right? It injects PCI config space and MMIO/PIO accesses, which is what's important for the fuzzing itself, but how does it achieve that injection, precisely? I started thinking about how it does similar things for other devices: `vhci` for USB, and `mac80211_hwsim` for Wi-Fi. I'm trying to draw a parallel for PCI. Does it lean on a `CONFIG_PCI_SYSCALL` capability? No, that's not it. Then I thought: Does the PCI fuzzer use `vfio` or similar memory mapping techniques in the kernel, or does it utilize a custom kernel module? Does it simply use a kernel module like `KCOV` and `KASAN` within a "fake" PCI host bridge? I keep thinking back to whether syzkaller had somehow added `CONFIG_PCI_DEBUG` or something similar, or if they implemented a wholly fake PCI host controller within the kernel itself. I was momentarily thinking of the old USB `dummy_hcd` and whether there was a PCI equivalent called `vpci`, but that wasn't quite right. Did it rely on `pci-stub` or `vfio-pci`? No, no, no. Perhaps syzkaller utilizes a `syz_pci_device` pseudo-syscall, working in conjunction with `syz_kvm_setup_cpu`? No, that doesn't feel right. My thoughts keep circling back to this `syz_pci_device` function; does it simply write to a specific sysfs or debugfs file? Is it some combination of `dummy_pci` or `kcov`? I know there was a PCI fuzzer *added* to the kernel by syzkaller in the recent past, around 2022. I keep getting stuck on `vpci` or `raw-pci`, but no, the core thing I'm trying to isolate is this `syz_pci_device` functionality. Does it use `netlink` or `ioctl` to a custom module? No, that can't be it. It's implemented in the executor, communicating to a virtual PCI host controller using `CONFIG_PCI_SYSCALL`? That doesn't feel like the right level of abstraction. Does the kernel itself have a `CONFIG_PCI_DEBUG` that's the key? I keep thinking back to some implementation of `syz_pci_device` being exposed through the executor using `executor/common_linux.h`, writing to `/sys/kernel/debug/kcov`? Nope, that's not it, is it? Did syzkaller utilize the standard `vfio` interface? I also considered a custom kernel module, but that's not the correct approach here. Perhaps `syz_pci_device` is implemented by writing to something like `/sys/kernel/debug/pci-fuzzer`? Alright, let me start by simply *verifying* whether there actually is a PCI fuzzer in the kernel source. I need to be sure I'm not chasing a ghost here, before I dive into the implementation details. |
| 12/2 | 2026/07/04 17:14 | tool | grepper |
0mError:no matches Args: {
"Expression": "pci.*fuzz",
"PathPrefix": ""
}Results: {
"error": "no matches"
} |
| 13/2 | 2026/07/04 17:14 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 42386 output: 32 thoughts: 938 Thoughts: **Deconstructing Syzkaller's PCI Fuzzing Mechanism** Okay, so I'm thinking about how syzkaller handles PCI driver fuzzing, specifically focusing on how it tackles this in a virtualized environment. The prompt highlights the challenge of reaching code paths impossible in VMs, like those requiring specific hardware or lacking software emulation. Let's see... I'm tracing syzkaller's execution. It uses `syz_pci_device`, which is defined in `executor/common_linux.h`. My immediate thought is, "How exactly does that work?" It *creates* a virtual PCI device. My first instinct is to think about `vfio`, but no, that's not it. Then I wonder if it leverages `KVM`, but that's not the primary route. I recall that KVM is used for PCI driver fuzzing with reads/writes injected from the hypervisor, but that's not the core mechanism for general PCI fuzzing. It does use `syz_kvm_setup_cpu` for specific KVM-based fuzzing scenarios. I then went through a mental checklist: is it a virtual PCI host controller, or using `/sys/kernel/debug/kcov` for data injection? Nope, that's not it either. Let's switch gears and focus on a specific driver, `bnge`. I need to figure out if it's real or a mock. Ah, it's "Broadcom ThorUltra Ethernet device support," so that's a *real* driver. The key question then becomes: is it reachable in a virtualized environment, assuming there's no software emulation? Real PCI drivers like this need either actual hardware or emulation, like QEMU's e1000e or virtio-net. Does QEMU emulate `bnge`? No, that's not right. What about syzkaller? Now, this is key. Syzkaller's PCI fuzzer *does* emulate arbitrary PCI devices! It cleverly intercepts config space reads and provides faked vendor/device IDs, which then triggers the kernel to probe the corresponding driver. After this, it intercepts MMIO/PIO reads and provides fuzzed data. This is where the magic happens. I then confirmed that the intercept mechanism is universal: the fuzzer can operate on all PCI drivers, as long as it has the correct ID and MMIO/DMA is targeted. But how? How is this achieved with `syz_pci_device`? Is it using `vfio`? No. Is there a custom kernel module? No. Is it the `PCI_ENDPOINT` framework? No. I recall `vhci` for USB, but that's not the method. Did syzkaller add a virtual PCI host controller to the kernel? Was it called `vpci`, `dummy_pci`, or `fuzz_pci`? I remember something like that, but I can't place it. After a quick search, the function itself isn't present in the kernel sources, confirming that it's syzkaller-side. Then, I went back to the original prompt, which mentions unreachable code paths. So, if syzkaller *can* fuzz it via its PCI fuzzer, then it *is* reachable. But does syzkaller's PCI fuzzer work without any specific kernel support? Like requiring `CONFIG_PCI_DEBUG`? No, that's not the mechanism. Is it through `KVM` again? No. Is there a virtual PCI host controller, like `vpci`, `dummy_pci`, or `pci_fuzzer`? No, I need to investigate that part further. Back to the `bnge` driver again. The patch touches both `drivers/infiniband/hw/bng_re/bng_dev.c` and `drivers/net/ethernet/broadcom/bnge/`. This confirms it's a real driver, and I need to verify that it exists in the upstream kernel. |
| 14/2 | 2026/07/04 17:14 | tool | grepper |
0mArgs:{
"Expression": "bnge",
"PathPrefix": "drivers/net/ethernet/broadcom/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 6120 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_dev *bd = pci_get_drvdata(aux_priv-\u003eauxr_dev-\u003epdev);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-145-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:146:\tida_free(\u0026bnge_aux_dev_ids, aux_priv-\u003eid);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-147-\tkfree(aux_priv-\u003eauxr_dev-\u003eauxr_info);\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-153-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:154:void bnge_rdma_aux_device_del(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-155-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-161-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:162:static void bnge_set_auxr_dev_info(struct bnge_auxr_dev *auxr_dev,\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:163:\t\t\t\t struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-164-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-182-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:183:void bnge_rdma_aux_device_add(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-184-{\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-202-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:203:void bnge_rdma_aux_device_init(struct bnge_dev *bd)\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-204-{\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-205-\tstruct auxiliary_device *aux_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:206:\tstruct bnge_auxr_info *auxr_info;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:207:\tstruct bnge_auxr_priv *aux_priv;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:208:\tstruct bnge_auxr_dev *auxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-209-\tint rc;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-210-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:211:\tif (!bnge_is_roce_en(bd))\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-212-\t\treturn;\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-217-\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:218:\taux_priv-\u003eid = ida_alloc(\u0026bnge_aux_dev_ids, GFP_KERNEL);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-219-\tif (aux_priv-\u003eid \u003c 0) {\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-228-\taux_dev-\u003edev.parent = \u0026bd-\u003epdev-\u003edev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:229:\taux_dev-\u003edev.release = bnge_aux_dev_release;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-230-\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-232-\tif (rc) {\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:233:\t\tida_free(\u0026bnge_aux_dev_ids, aux_priv-\u003eid);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-234-\t\tkfree(aux_priv);\n--\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-250-\tbd-\u003eauxr_dev = auxr_dev;\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c:251:\tbnge_set_auxr_dev_info(auxr_dev, bd);\ndrivers/net/ethernet/broadcom/bnge/bnge_auxr.c-252-\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);\ndrivers/net/ethernet/broadcom/bnge/bnge_core.c-383-\n\n"
} |
| 15/2 | 2026/07/04 17:14 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 58043 output: 34 thoughts: 1391 Thoughts: **WorthFuzzing Analysis for bnge Driver** Okay, so I'm looking at this patch and need to determine if it's "WorthFuzzing" based on whether it touches code paths reachable in a virtualized environment like QEMU or GCE, even with software-emulated hardware. My initial thought was that `bnge` might be a PCI device driver, and if so, maybe not easily reachable. But I need to consider all the angles here. I need to confirm if `bnge` is a PCI driver. Then, I remember that syzkaller has a PCI fuzzer, which, according to the instructions, *does* count as software-emulated hardware, so that might change things. The key is this: the prompt says the code paths are unreachable EVEN when using software emulated hardware; this implies that if software emulation can reach them, the driver IS reachable, no matter what. So, first things first: is `bnge` a real driver? The patch is from `syz-cluster`, and the filename of the patch looks legit, so let's verify by checking the code. Yes, it seems to be a real Broadcom Ethernet driver, and the grep output confirms it exists in the mainline kernel. The patch seems to be from the `syz-cluster <triage@syzkaller.com>`. Okay, so it is a real driver. Does the syzkaller PCI fuzzer work for it? The answer is yes; syzkaller's PCI fuzzer can probe any PCI driver by injecting the correct PCI ID. This means that *any* PCI driver *can* be reached. Therefore, because `bnge` is reachable via the PCI fuzzer, I must return `WorthFuzzing=true`. Now, let's look at the patch itself. It's changing `fw_ring_id` from `u16` to `u32` in `bnge_ring_struct`. This update trickles down through several functions: `bng_re_net_ring_free`, `bng_re_net_ring_alloc`, `hwrm_ring_free_send_msg`, `hwrm_ring_alloc_send_msg`, `bnge_cp_ring_for_rx`, and `bnge_cp_ring_for_tx`, and also replaces `INVALID_HW_RING_ID` with `INVALID_HW_RING_ID_32BIT`. This is a functional change related to ring ID handling, so it seems worth fuzzing. My primary focus here is not to fuzz hot-path code for performance, but rather functions related to setup and teardown, as they might provide a more stable ground for testing. The list of modified functions also include: - `bnge_init_nq_tree` - `bnge_init_one_rx_ring_rxbd` - `bnge_init_one_agg_ring_rxbd` - `bnge_init_tx_rings` - `bnge_hwrm_rx_agg_ring_alloc` - `bnge_hwrm_rx_ring_alloc` - `bnge_hwrm_ring_alloc` - `bnge_fill_hw_rss_tbl` - `bnge_disable_int` - `bnge_hwrm_rx_ring_free` - `bnge_hwrm_rx_agg_ring_free` - `bnge_hwrm_tx_ring_free` - `bnge_hwrm_cp_ring_free` - `bnge_hwrm_ring_free` From these, I should select `bng_re_net_ring_alloc`, `bng_re_net_ring_free`, `hwrm_ring_alloc_send_msg`, `hwrm_ring_free_send_msg`, `bnge_hwrm_ring_alloc`, and `bnge_hwrm_ring_free`. These seem like initialization/teardown functions, which are less performance-critical and therefore potentially more suitable for fuzzing. I should also check whether they are exported or static. `bng_re_net_ring_alloc` seems to be static, but `hwrm_ring_alloc_send_msg` is in `bnge_hwrm_lib.c` and `bnge_hwrm_ring_alloc` is also static, so I will have to consider them together. I'll check the Kconfig for the driver, and ensure I can reach it by compiling the driver as a module. |
| 16/2 | 2026/07/04 17:14 | tool | grepper |
0mError:no matches Args: {
"Expression": "config BNG_RE",
"PathPrefix": "drivers/infiniband/hw/"
}Results: {
"error": "no matches"
} |
| 17/2 | 2026/07/04 17:14 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 60502 output: 33 thoughts: 25 Thoughts: Here's my thought process, summarized as you requested: **Searching the IB Driver Codebase** Okay, first things first, let's get right down to it. I need to look for something, and my intuition tells me to start by searching for the string "bng_re" within the infiniband hardware drivers. Specifically, I'll be searching inside the `drivers/infiniband/hw/` directory. That's usually the best place to begin the deep dive when I'm tracking something related to hardware and infiniband. Let's see what pops up, and then I can adjust my search strategy from there based on the results. |
| 18/2 | 2026/07/04 17:15 | tool | grepper |
0mArgs:{
"Expression": "bng_re",
"PathPrefix": "drivers/infiniband/hw/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 992 lines.\nUse more precise expression if possible.\n\ndrivers/infiniband/hw/Makefile=15=obj-$(CONFIG_INFINIBAND_BNXT_RE)\t+= bnxt_re/\ndrivers/infiniband/hw/Makefile:16:obj-$(CONFIG_INFINIBAND_BNG_RE)\t\t+= bng_re/\ndrivers/infiniband/hw/Makefile-17-obj-$(CONFIG_INFINIBAND_ERDMA)\t\t+= erdma/\n--\ndrivers/infiniband/hw/bng_re/Kconfig=2=config INFINIBAND_BNG_RE\n--\ndrivers/infiniband/hw/bng_re/Kconfig-8-\t 50/100/200/400/800 gigabit RoCE HCAs. The module\ndrivers/infiniband/hw/bng_re/Kconfig:9:\t will be called bng_re. To compile this driver\ndrivers/infiniband/hw/bng_re/Kconfig-10-\t as a module, choose M here.\n--\ndrivers/infiniband/hw/bng_re/Makefile=2=ccflags-y := -I $(srctree)/drivers/net/ethernet/broadcom/bnge\ndrivers/infiniband/hw/bng_re/Makefile-3-\ndrivers/infiniband/hw/bng_re/Makefile:4:obj-$(CONFIG_INFINIBAND_BNG_RE) += bng_re.o\ndrivers/infiniband/hw/bng_re/Makefile-5-\ndrivers/infiniband/hw/bng_re/Makefile:6:bng_re-y := bng_dev.o bng_fw.o \\\ndrivers/infiniband/hw/bng_re/Makefile:7:\t bng_res.o bng_sp.o \\\ndrivers/infiniband/hw/bng_re/Makefile-8-\t bng_debugfs.o\n--\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-7-\ndrivers/infiniband/hw/bng_re/bng_debugfs.c:8:#include \"bng_res.h\"\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-9-#include \"bng_fw.h\"\n--\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-11-#include \"bnge_auxr.h\"\ndrivers/infiniband/hw/bng_re/bng_debugfs.c:12:#include \"bng_re.h\"\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-13-#include \"bng_debugfs.h\"\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-14-\ndrivers/infiniband/hw/bng_re/bng_debugfs.c:15:static struct dentry *bng_re_debugfs_root;\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-16-\ndrivers/infiniband/hw/bng_re/bng_debugfs.c:17:void bng_re_debugfs_add_pdev(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-18-{\n--\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-21-\trdev-\u003edbg_root =\ndrivers/infiniband/hw/bng_re/bng_debugfs.c:22:\t\tdebugfs_create_dir(dev_name(\u0026pdev-\u003edev), bng_re_debugfs_root);\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-23-}\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-24-\ndrivers/infiniband/hw/bng_re/bng_debugfs.c:25:void bng_re_debugfs_rem_pdev(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-26-{\n--\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-30-\ndrivers/infiniband/hw/bng_re/bng_debugfs.c:31:void bng_re_register_debugfs(void)\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-32-{\ndrivers/infiniband/hw/bng_re/bng_debugfs.c:33:\tbng_re_debugfs_root = debugfs_create_dir(\"bng_re\", NULL);\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-34-}\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-35-\ndrivers/infiniband/hw/bng_re/bng_debugfs.c:36:void bng_re_unregister_debugfs(void)\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-37-{\ndrivers/infiniband/hw/bng_re/bng_debugfs.c:38:\tdebugfs_remove(bng_re_debugfs_root);\ndrivers/infiniband/hw/bng_re/bng_debugfs.c-39-}\n--\ndrivers/infiniband/hw/bng_re/bng_debugfs.h-6-\ndrivers/infiniband/hw/bng_re/bng_debugfs.h:7:void bng_re_debugfs_add_pdev(struct bng_re_dev *rdev);\ndrivers/infiniband/hw/bng_re/bng_debugfs.h:8:void bng_re_debugfs_rem_pdev(struct bng_re_dev *rdev);\ndrivers/infiniband/hw/bng_re/bng_debugfs.h-9-\ndrivers/infiniband/hw/bng_re/bng_debugfs.h:10:void bng_re_register_debugfs(void);\ndrivers/infiniband/hw/bng_re/bng_debugfs.h:11:void bng_re_unregister_debugfs(void);\ndrivers/infiniband/hw/bng_re/bng_debugfs.h-12-#endif\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-9-\ndrivers/infiniband/hw/bng_re/bng_dev.c:10:#include \"bng_res.h\"\ndrivers/infiniband/hw/bng_re/bng_dev.c-11-#include \"bng_sp.h\"\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-14-#include \"bnge_auxr.h\"\ndrivers/infiniband/hw/bng_re/bng_dev.c:15:#include \"bng_re.h\"\ndrivers/infiniband/hw/bng_re/bng_dev.c-16-#include \"bnge_hwrm.h\"\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c=21=MODULE_LICENSE(\"Dual BSD/GPL\");\ndrivers/infiniband/hw/bng_re/bng_dev.c-22-\ndrivers/infiniband/hw/bng_re/bng_dev.c:23:static struct bng_re_dev *bng_re_dev_add(struct auxiliary_device *adev,\ndrivers/infiniband/hw/bng_re/bng_dev.c-24-\t\t\t\t\t struct bnge_auxr_dev *aux_dev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-25-{\ndrivers/infiniband/hw/bng_re/bng_dev.c:26:\tstruct bng_re_dev *rdev;\ndrivers/infiniband/hw/bng_re/bng_dev.c-27-\ndrivers/infiniband/hw/bng_re/bng_dev.c:28:\t/* Allocate bng_re_dev instance */\ndrivers/infiniband/hw/bng_re/bng_dev.c:29:\trdev = ib_alloc_device(bng_re_dev, ibdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-30-\tif (!rdev) {\ndrivers/infiniband/hw/bng_re/bng_dev.c:31:\t\tpr_err(\"%s: bng_re_dev allocation failure!\", KBUILD_MODNAME);\ndrivers/infiniband/hw/bng_re/bng_dev.c-32-\t\treturn NULL;\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-44-\ndrivers/infiniband/hw/bng_re/bng_dev.c:45:static int bng_re_register_netdev(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-46-{\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-52-\ndrivers/infiniband/hw/bng_re/bng_dev.c:53:static void bng_re_destroy_chip_ctx(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-54-{\ndrivers/infiniband/hw/bng_re/bng_dev.c:55:\tstruct bng_re_chip_ctx *chip_ctx;\ndrivers/infiniband/hw/bng_re/bng_dev.c-56-\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-62-\trdev-\u003ercfw.res = NULL;\ndrivers/infiniband/hw/bng_re/bng_dev.c:63:\trdev-\u003ebng_res.cctx = NULL;\ndrivers/infiniband/hw/bng_re/bng_dev.c:64:\trdev-\u003ebng_res.pdev = NULL;\ndrivers/infiniband/hw/bng_re/bng_dev.c-65-\tkfree(chip_ctx);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-67-\ndrivers/infiniband/hw/bng_re/bng_dev.c:68:static int bng_re_setup_chip_ctx(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-69-{\ndrivers/infiniband/hw/bng_re/bng_dev.c:70:\tstruct bng_re_chip_ctx *chip_ctx;\ndrivers/infiniband/hw/bng_re/bng_dev.c-71-\tstruct bnge_auxr_dev *aux_dev;\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-74-\taux_dev = rdev-\u003eaux_dev;\ndrivers/infiniband/hw/bng_re/bng_dev.c:75:\trdev-\u003ebng_res.pdev = aux_dev-\u003epdev;\ndrivers/infiniband/hw/bng_re/bng_dev.c:76:\trdev-\u003ercfw.res = \u0026rdev-\u003ebng_res;\ndrivers/infiniband/hw/bng_re/bng_dev.c-77-\tchip_ctx = kzalloc_obj(*chip_ctx);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-83-\trdev-\u003echip_ctx = chip_ctx;\ndrivers/infiniband/hw/bng_re/bng_dev.c:84:\trdev-\u003ebng_res.cctx = rdev-\u003echip_ctx;\ndrivers/infiniband/hw/bng_re/bng_dev.c-85-\trdev-\u003edev_attr = kzalloc_obj(*rdev-\u003edev_attr);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-87-\t\tgoto free_chip_ctx;\ndrivers/infiniband/hw/bng_re/bng_dev.c:88:\trdev-\u003ebng_res.dattr = rdev-\u003edev_attr;\ndrivers/infiniband/hw/bng_re/bng_dev.c-89-\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-96-\ndrivers/infiniband/hw/bng_re/bng_dev.c:97:static void bng_re_init_hwrm_hdr(struct input *hdr, u16 opcd)\ndrivers/infiniband/hw/bng_re/bng_dev.c-98-{\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-103-\ndrivers/infiniband/hw/bng_re/bng_dev.c:104:static void bng_re_fill_fw_msg(struct bnge_fw_msg *fw_msg, void *msg,\ndrivers/infiniband/hw/bng_re/bng_dev.c-105-\t\t\t int msg_len, void *resp, int resp_max_len,\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-114-\ndrivers/infiniband/hw/bng_re/bng_dev.c:115:static int bng_re_net_ring_free(struct bng_re_dev *rdev,\ndrivers/infiniband/hw/bng_re/bng_dev.c-116-\t\t\t\tu32 fw_ring_id, int type)\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-123-\ndrivers/infiniband/hw/bng_re/bng_dev.c:124:\tbng_re_init_hwrm_hdr((void *)\u0026req, HWRM_RING_FREE);\ndrivers/infiniband/hw/bng_re/bng_dev.c-125-\treq.ring_type = type;\ndrivers/infiniband/hw/bng_re/bng_dev.c-126-\treq.ring_id = cpu_to_le32(fw_ring_id);\ndrivers/infiniband/hw/bng_re/bng_dev.c:127:\tbng_re_fill_fw_msg(\u0026fw_msg, (void *)\u0026req, sizeof(req), (void *)\u0026resp,\ndrivers/infiniband/hw/bng_re/bng_dev.c-128-\t\t\t sizeof(resp), BNGE_DFLT_HWRM_CMD_TIMEOUT);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-135-\ndrivers/infiniband/hw/bng_re/bng_dev.c:136:static int bng_re_net_ring_alloc(struct bng_re_dev *rdev,\ndrivers/infiniband/hw/bng_re/bng_dev.c:137:\t\t\t\t struct bng_re_ring_attr *ring_attr,\ndrivers/infiniband/hw/bng_re/bng_dev.c-138-\t\t\t\t u16 *fw_ring_id)\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-145-\ndrivers/infiniband/hw/bng_re/bng_dev.c:146:\tbng_re_init_hwrm_hdr((void *)\u0026req, HWRM_RING_ALLOC);\ndrivers/infiniband/hw/bng_re/bng_dev.c-147-\treq.enables = 0;\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-159-\treq.int_mode = ring_attr-\u003emode;\ndrivers/infiniband/hw/bng_re/bng_dev.c:160:\tbng_re_fill_fw_msg(\u0026fw_msg, (void *)\u0026req, sizeof(req), (void *)\u0026resp,\ndrivers/infiniband/hw/bng_re/bng_dev.c-161-\t\t\t sizeof(resp), BNGE_DFLT_HWRM_CMD_TIMEOUT);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-168-\ndrivers/infiniband/hw/bng_re/bng_dev.c:169:static int bng_re_stats_ctx_free(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-170-{\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-176-\ndrivers/infiniband/hw/bng_re/bng_dev.c:177:\tbng_re_init_hwrm_hdr((void *)\u0026req, HWRM_STAT_CTX_FREE);\ndrivers/infiniband/hw/bng_re/bng_dev.c-178-\treq.stat_ctx_id = cpu_to_le32(rdev-\u003estats_ctx.fw_id);\ndrivers/infiniband/hw/bng_re/bng_dev.c:179:\tbng_re_fill_fw_msg(\u0026fw_msg, (void *)\u0026req, sizeof(req), (void *)\u0026resp,\ndrivers/infiniband/hw/bng_re/bng_dev.c-180-\t\t\t sizeof(resp), BNGE_DFLT_HWRM_CMD_TIMEOUT);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-188-\ndrivers/infiniband/hw/bng_re/bng_dev.c:189:static int bng_re_stats_ctx_alloc(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-190-{\ndrivers/infiniband/hw/bng_re/bng_dev.c-191-\tstruct bnge_auxr_dev *aux_dev = rdev-\u003eaux_dev;\ndrivers/infiniband/hw/bng_re/bng_dev.c:192:\tstruct bng_re_stats *stats = \u0026rdev-\u003estats_ctx;\ndrivers/infiniband/hw/bng_re/bng_dev.c-193-\tstruct hwrm_stat_ctx_alloc_output resp = {};\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-199-\ndrivers/infiniband/hw/bng_re/bng_dev.c:200:\tbng_re_init_hwrm_hdr((void *)\u0026req, HWRM_STAT_CTX_ALLOC);\ndrivers/infiniband/hw/bng_re/bng_dev.c-201-\treq.update_period_ms = cpu_to_le32(1000);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-204-\treq.stat_ctx_flags = STAT_CTX_ALLOC_REQ_STAT_CTX_FLAGS_ROCE;\ndrivers/infiniband/hw/bng_re/bng_dev.c:205:\tbng_re_fill_fw_msg(\u0026fw_msg, (void *)\u0026req, sizeof(req), (void *)\u0026resp,\ndrivers/infiniband/hw/bng_re/bng_dev.c-206-\t\t\t sizeof(resp), BNGE_DFLT_HWRM_CMD_TIMEOUT);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-212-\ndrivers/infiniband/hw/bng_re/bng_dev.c:213:static int bng_re_query_hwrm_version(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-214-{\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-217-\tstruct hwrm_ver_get_input ver_get_req = {};\ndrivers/infiniband/hw/bng_re/bng_dev.c:218:\tstruct bng_re_chip_ctx *cctx;\ndrivers/infiniband/hw/bng_re/bng_dev.c-219-\tstruct bnge_fw_msg fw_msg = {};\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-221-\ndrivers/infiniband/hw/bng_re/bng_dev.c:222:\tbng_re_init_hwrm_hdr((void *)\u0026ver_get_req, HWRM_VER_GET);\ndrivers/infiniband/hw/bng_re/bng_dev.c-223-\tver_get_req.hwrm_intf_maj = HWRM_VERSION_MAJOR;\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-225-\tver_get_req.hwrm_intf_upd = HWRM_VERSION_UPDATE;\ndrivers/infiniband/hw/bng_re/bng_dev.c:226:\tbng_re_fill_fw_msg(\u0026fw_msg, (void *)\u0026ver_get_req, sizeof(ver_get_req),\ndrivers/infiniband/hw/bng_re/bng_dev.c-227-\t\t\t (void *)\u0026ver_get_resp, sizeof(ver_get_resp),\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-250-\ndrivers/infiniband/hw/bng_re/bng_dev.c:251:static void bng_re_dev_uninit(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-252-{\ndrivers/infiniband/hw/bng_re/bng_dev.c-253-\tint rc;\ndrivers/infiniband/hw/bng_re/bng_dev.c:254:\tbng_re_debugfs_rem_pdev(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-255-\ndrivers/infiniband/hw/bng_re/bng_dev.c-256-\tif (test_and_clear_bit(BNG_RE_FLAG_RCFW_CHANNEL_EN, \u0026rdev-\u003eflags)) {\ndrivers/infiniband/hw/bng_re/bng_dev.c:257:\t\trc = bng_re_deinit_rcfw(\u0026rdev-\u003ercfw);\ndrivers/infiniband/hw/bng_re/bng_dev.c-258-\t\tif (rc)\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-260-\t\t\t\t \"Failed to deinitialize RCFW: %#x\", rc);\ndrivers/infiniband/hw/bng_re/bng_dev.c:261:\t\tbng_re_stats_ctx_free(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c:262:\t\tbng_re_free_stats_ctx_mem(rdev-\u003ebng_res.pdev, \u0026rdev-\u003estats_ctx);\ndrivers/infiniband/hw/bng_re/bng_dev.c:263:\t\tbng_re_disable_rcfw_channel(\u0026rdev-\u003ercfw);\ndrivers/infiniband/hw/bng_re/bng_dev.c:264:\t\tbng_re_net_ring_free(rdev, rdev-\u003ercfw.creq.ring_id,\ndrivers/infiniband/hw/bng_re/bng_dev.c-265-\t\t\t RING_ALLOC_REQ_RING_TYPE_NQ);\ndrivers/infiniband/hw/bng_re/bng_dev.c:266:\t\tbng_re_free_rcfw_channel(\u0026rdev-\u003ercfw);\ndrivers/infiniband/hw/bng_re/bng_dev.c-267-\t}\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-270-\trdev-\u003enqr = NULL;\ndrivers/infiniband/hw/bng_re/bng_dev.c:271:\tbng_re_destroy_chip_ctx(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-272-\tif (test_and_clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, \u0026rdev-\u003eflags))\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-275-\ndrivers/infiniband/hw/bng_re/bng_dev.c:276:static int bng_re_dev_init(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-277-{\ndrivers/infiniband/hw/bng_re/bng_dev.c:278:\tstruct bng_re_ring_attr rattr = {};\ndrivers/infiniband/hw/bng_re/bng_dev.c:279:\tstruct bng_re_creq_ctx *creq;\ndrivers/infiniband/hw/bng_re/bng_dev.c-280-\tu32 db_offt;\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-285-\t/* Registered a new RoCE device instance to netdev */\ndrivers/infiniband/hw/bng_re/bng_dev.c:286:\trc = bng_re_register_netdev(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-287-\tif (rc) {\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-304-\ndrivers/infiniband/hw/bng_re/bng_dev.c:305:\trc = bng_re_setup_chip_ctx(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-306-\tif (rc) {\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-310-\ndrivers/infiniband/hw/bng_re/bng_dev.c:311:\trc = bng_re_query_hwrm_version(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-312-\tif (rc)\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-314-\ndrivers/infiniband/hw/bng_re/bng_dev.c:315:\trc = bng_re_alloc_fw_channel(\u0026rdev-\u003ebng_res, \u0026rdev-\u003ercfw);\ndrivers/infiniband/hw/bng_re/bng_dev.c-316-\tif (rc) {\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-340-\trattr.lrid = rdev-\u003enqr-\u003emsix_entries[BNG_RE_CREQ_NQ_IDX].ring_idx;\ndrivers/infiniband/hw/bng_re/bng_dev.c:341:\trc = bng_re_net_ring_alloc(rdev, \u0026rattr, \u0026creq-\u003ering_id);\ndrivers/infiniband/hw/bng_re/bng_dev.c-342-\tif (rc) {\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-348-\ndrivers/infiniband/hw/bng_re/bng_dev.c:349:\trc = bng_re_enable_fw_channel(\u0026rdev-\u003ercfw,\ndrivers/infiniband/hw/bng_re/bng_dev.c-350-\t\t\t\t\tvid, db_offt);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-356-\ndrivers/infiniband/hw/bng_re/bng_dev.c:357:\trc = bng_re_get_dev_attr(\u0026rdev-\u003ercfw);\ndrivers/infiniband/hw/bng_re/bng_dev.c-358-\tif (rc)\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-360-\ndrivers/infiniband/hw/bng_re/bng_dev.c:361:\tbng_re_debugfs_add_pdev(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c:362:\trc = bng_re_alloc_stats_ctx_mem(rdev-\u003ebng_res.pdev, rdev-\u003echip_ctx,\ndrivers/infiniband/hw/bng_re/bng_dev.c-363-\t\t\t\t\t\u0026rdev-\u003estats_ctx);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-369-\ndrivers/infiniband/hw/bng_re/bng_dev.c:370:\trc = bng_re_stats_ctx_alloc(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-371-\tif (rc) {\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-376-\ndrivers/infiniband/hw/bng_re/bng_dev.c:377:\trc = bng_re_init_rcfw(\u0026rdev-\u003ercfw, \u0026rdev-\u003estats_ctx);\ndrivers/infiniband/hw/bng_re/bng_dev.c-378-\tif (rc) {\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-386-free_sctx:\ndrivers/infiniband/hw/bng_re/bng_dev.c:387:\tbng_re_stats_ctx_free(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-388-free_stats_ctx:\ndrivers/infiniband/hw/bng_re/bng_dev.c:389:\tbng_re_free_stats_ctx_mem(rdev-\u003ebng_res.pdev, \u0026rdev-\u003estats_ctx);\ndrivers/infiniband/hw/bng_re/bng_dev.c-390-disable_rcfw:\ndrivers/infiniband/hw/bng_re/bng_dev.c:391:\tbng_re_disable_rcfw_channel(\u0026rdev-\u003ercfw);\ndrivers/infiniband/hw/bng_re/bng_dev.c-392-free_ring:\ndrivers/infiniband/hw/bng_re/bng_dev.c:393:\tbng_re_net_ring_free(rdev, rdev-\u003ercfw.creq.ring_id, type);\ndrivers/infiniband/hw/bng_re/bng_dev.c-394-free_rcfw:\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-396-nq_alloc_fail:\ndrivers/infiniband/hw/bng_re/bng_dev.c:397:\tbng_re_free_rcfw_channel(\u0026rdev-\u003ercfw);\ndrivers/infiniband/hw/bng_re/bng_dev.c-398-destroy_chip_ctx:\ndrivers/infiniband/hw/bng_re/bng_dev.c:399:\tbng_re_destroy_chip_ctx(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-400-msix_ctx_fail:\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-406-\ndrivers/infiniband/hw/bng_re/bng_dev.c:407:static int bng_re_add_device(struct auxiliary_device *adev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-408-{\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-410-\t\tcontainer_of(adev, struct bnge_auxr_priv, aux_dev);\ndrivers/infiniband/hw/bng_re/bng_dev.c:411:\tstruct bng_re_en_dev_info *dev_info;\ndrivers/infiniband/hw/bng_re/bng_dev.c:412:\tstruct bng_re_dev *rdev;\ndrivers/infiniband/hw/bng_re/bng_dev.c-413-\tint rc;\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-416-\ndrivers/infiniband/hw/bng_re/bng_dev.c:417:\trdev = bng_re_dev_add(adev, auxr_priv-\u003eauxr_dev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-418-\tif (!rdev) {\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-424-\ndrivers/infiniband/hw/bng_re/bng_dev.c:425:\trc = bng_re_dev_init(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-426-\tif (rc)\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-437-\ndrivers/infiniband/hw/bng_re/bng_dev.c:438:static void bng_re_remove_device(struct bng_re_dev *rdev,\ndrivers/infiniband/hw/bng_re/bng_dev.c-439-\t\t\t\t struct auxiliary_device *aux_dev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-440-{\ndrivers/infiniband/hw/bng_re/bng_dev.c:441:\tbng_re_dev_uninit(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-442-\tib_dealloc_device(\u0026rdev-\u003eibdev);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-445-\ndrivers/infiniband/hw/bng_re/bng_dev.c:446:static int bng_re_probe(struct auxiliary_device *adev,\ndrivers/infiniband/hw/bng_re/bng_dev.c-447-\t\t\tconst struct auxiliary_device_id *id)\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-450-\t\tcontainer_of(adev, struct bnge_auxr_priv, aux_dev);\ndrivers/infiniband/hw/bng_re/bng_dev.c:451:\tstruct bng_re_en_dev_info *en_info;\ndrivers/infiniband/hw/bng_re/bng_dev.c-452-\tint rc;\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-461-\ndrivers/infiniband/hw/bng_re/bng_dev.c:462:\trc = bng_re_add_device(adev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-463-\tif (rc)\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-468-\ndrivers/infiniband/hw/bng_re/bng_dev.c:469:static void bng_re_remove(struct auxiliary_device *adev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-470-{\ndrivers/infiniband/hw/bng_re/bng_dev.c:471:\tstruct bng_re_en_dev_info *dev_info = auxiliary_get_drvdata(adev);\ndrivers/infiniband/hw/bng_re/bng_dev.c:472:\tstruct bng_re_dev *rdev;\ndrivers/infiniband/hw/bng_re/bng_dev.c-473-\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-475-\ndrivers/infiniband/hw/bng_re/bng_dev.c:476:\tbng_re_remove_device(rdev, adev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-477-\tkfree(dev_info);\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-479-\ndrivers/infiniband/hw/bng_re/bng_dev.c:480:static const struct auxiliary_device_id bng_re_id_table[] = {\ndrivers/infiniband/hw/bng_re/bng_dev.c-481-\t{ .name = BNG_RE_ADEV_NAME \".rdma\", },\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-484-\ndrivers/infiniband/hw/bng_re/bng_dev.c:485:MODULE_DEVICE_TABLE(auxiliary, bng_re_id_table);\ndrivers/infiniband/hw/bng_re/bng_dev.c-486-\ndrivers/infiniband/hw/bng_re/bng_dev.c:487:static struct auxiliary_driver bng_re_driver = {\ndrivers/infiniband/hw/bng_re/bng_dev.c-488-\t.name = \"rdma\",\ndrivers/infiniband/hw/bng_re/bng_dev.c:489:\t.probe = bng_re_probe,\ndrivers/infiniband/hw/bng_re/bng_dev.c:490:\t.remove = bng_re_remove,\ndrivers/infiniband/hw/bng_re/bng_dev.c:491:\t.id_table = bng_re_id_table,\ndrivers/infiniband/hw/bng_re/bng_dev.c-492-};\ndrivers/infiniband/hw/bng_re/bng_dev.c-493-\ndrivers/infiniband/hw/bng_re/bng_dev.c:494:static int __init bng_re_mod_init(void)\ndrivers/infiniband/hw/bng_re/bng_dev.c-495-{\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-498-\ndrivers/infiniband/hw/bng_re/bng_dev.c:499:\tbng_re_register_debugfs();\ndrivers/infiniband/hw/bng_re/bng_dev.c-500-\ndrivers/infiniband/hw/bng_re/bng_dev.c:501:\trc = auxiliary_driver_register(\u0026bng_re_driver);\ndrivers/infiniband/hw/bng_re/bng_dev.c-502-\tif (rc) {\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-508-unreg_debugfs:\ndrivers/infiniband/hw/bng_re/bng_dev.c:509:\tbng_re_unregister_debugfs();\ndrivers/infiniband/hw/bng_re/bng_dev.c-510-\treturn rc;\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-512-\ndrivers/infiniband/hw/bng_re/bng_dev.c:513:static void __exit bng_re_mod_exit(void)\ndrivers/infiniband/hw/bng_re/bng_dev.c-514-{\ndrivers/infiniband/hw/bng_re/bng_dev.c:515:\tauxiliary_driver_unregister(\u0026bng_re_driver);\ndrivers/infiniband/hw/bng_re/bng_dev.c:516:\tbng_re_unregister_debugfs();\ndrivers/infiniband/hw/bng_re/bng_dev.c-517-}\ndrivers/infiniband/hw/bng_re/bng_dev.c-518-\ndrivers/infiniband/hw/bng_re/bng_dev.c:519:module_init(bng_re_mod_init);\ndrivers/infiniband/hw/bng_re/bng_dev.c:520:module_exit(bng_re_mod_exit);\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-5-#include \"bng_roce_hsi.h\"\ndrivers/infiniband/hw/bng_re/bng_fw.c:6:#include \"bng_res.h\"\ndrivers/infiniband/hw/bng_re/bng_fw.c-7-#include \"bng_fw.h\"\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-10-/**\ndrivers/infiniband/hw/bng_re/bng_fw.c:11: * bng_re_map_rc - map return type based on opcode\ndrivers/infiniband/hw/bng_re/bng_fw.c-12- * @opcode: roce slow path opcode\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-32- */\ndrivers/infiniband/hw/bng_re/bng_fw.c:33:static int bng_re_map_rc(u8 opcode)\ndrivers/infiniband/hw/bng_re/bng_fw.c-34-{\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-52-\ndrivers/infiniband/hw/bng_re/bng_fw.c:53:void bng_re_free_rcfw_channel(struct bng_re_rcfw *rcfw)\ndrivers/infiniband/hw/bng_re/bng_fw.c-54-{\ndrivers/infiniband/hw/bng_re/bng_fw.c-55-\tkfree(rcfw-\u003ecrsqe_tbl);\ndrivers/infiniband/hw/bng_re/bng_fw.c:56:\tbng_re_free_hwq(rcfw-\u003eres, \u0026rcfw-\u003ecmdq.hwq);\ndrivers/infiniband/hw/bng_re/bng_fw.c:57:\tbng_re_free_hwq(rcfw-\u003eres, \u0026rcfw-\u003ecreq.hwq);\ndrivers/infiniband/hw/bng_re/bng_fw.c-58-\trcfw-\u003epdev = NULL;\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-60-\ndrivers/infiniband/hw/bng_re/bng_fw.c:61:int bng_re_alloc_fw_channel(struct bng_re_res *res,\ndrivers/infiniband/hw/bng_re/bng_fw.c:62:\t\t\t struct bng_re_rcfw *rcfw)\ndrivers/infiniband/hw/bng_re/bng_fw.c-63-{\ndrivers/infiniband/hw/bng_re/bng_fw.c:64:\tstruct bng_re_hwq_attr hwq_attr = {};\ndrivers/infiniband/hw/bng_re/bng_fw.c:65:\tstruct bng_re_sg_info sginfo = {};\ndrivers/infiniband/hw/bng_re/bng_fw.c:66:\tstruct bng_re_cmdq_ctx *cmdq;\ndrivers/infiniband/hw/bng_re/bng_fw.c:67:\tstruct bng_re_creq_ctx *creq;\ndrivers/infiniband/hw/bng_re/bng_fw.c-68-\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-82-\ndrivers/infiniband/hw/bng_re/bng_fw.c:83:\tif (bng_re_alloc_init_hwq(\u0026creq-\u003ehwq, \u0026hwq_attr)) {\ndrivers/infiniband/hw/bng_re/bng_fw.c-84-\t\tdev_err(\u0026rcfw-\u003epdev-\u003edev,\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-94-\thwq_attr.type = BNG_HWQ_TYPE_CTX;\ndrivers/infiniband/hw/bng_re/bng_fw.c:95:\tif (bng_re_alloc_init_hwq(\u0026cmdq-\u003ehwq, \u0026hwq_attr)) {\ndrivers/infiniband/hw/bng_re/bng_fw.c-96-\t\tdev_err(\u0026rcfw-\u003epdev-\u003edev,\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-110-fail:\ndrivers/infiniband/hw/bng_re/bng_fw.c:111:\tbng_re_free_rcfw_channel(rcfw);\ndrivers/infiniband/hw/bng_re/bng_fw.c-112-\treturn -ENOMEM;\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-114-\ndrivers/infiniband/hw/bng_re/bng_fw.c:115:static int bng_re_process_qp_event(struct bng_re_rcfw *rcfw,\ndrivers/infiniband/hw/bng_re/bng_fw.c-116-\t\t\t\t struct creq_qp_event *qp_event,\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-118-{\ndrivers/infiniband/hw/bng_re/bng_fw.c:119:\tstruct bng_re_hwq *hwq = \u0026rcfw-\u003ecmdq.hwq;\ndrivers/infiniband/hw/bng_re/bng_fw.c:120:\tstruct bng_re_crsqe *crsqe;\ndrivers/infiniband/hw/bng_re/bng_fw.c-121-\tu32 req_size;\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-187-/* function events */\ndrivers/infiniband/hw/bng_re/bng_fw.c:188:static int bng_re_process_func_event(struct bng_re_rcfw *rcfw,\ndrivers/infiniband/hw/bng_re/bng_fw.c-189-\t\t\t\t struct creq_func_event *func_event)\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-213-/* CREQ Completion handlers */\ndrivers/infiniband/hw/bng_re/bng_fw.c:214:static void bng_re_service_creq(struct tasklet_struct *t)\ndrivers/infiniband/hw/bng_re/bng_fw.c-215-{\ndrivers/infiniband/hw/bng_re/bng_fw.c:216:\tstruct bng_re_rcfw *rcfw = from_tasklet(rcfw, t, creq.creq_tasklet);\ndrivers/infiniband/hw/bng_re/bng_fw.c:217:\tstruct bng_re_creq_ctx *creq = \u0026rcfw-\u003ecreq;\ndrivers/infiniband/hw/bng_re/bng_fw.c-218-\tu32 type, budget = BNG_FW_CREQ_ENTRY_POLL_BUDGET;\ndrivers/infiniband/hw/bng_re/bng_fw.c:219:\tstruct bng_re_hwq *hwq = \u0026creq-\u003ehwq;\ndrivers/infiniband/hw/bng_re/bng_fw.c-220-\tstruct creq_base *creqe;\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-226-\twhile (budget \u003e 0) {\ndrivers/infiniband/hw/bng_re/bng_fw.c:227:\t\tcreqe = bng_re_get_qe(hwq, hwq-\u003econs, NULL);\ndrivers/infiniband/hw/bng_re/bng_fw.c-228-\t\tif (!BNG_FW_CREQ_CMP_VALID(creqe, creq-\u003ecreq_db.dbinfo.flags))\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-237-\t\tcase CREQ_BASE_TYPE_QP_EVENT:\ndrivers/infiniband/hw/bng_re/bng_fw.c:238:\t\t\tbng_re_process_qp_event\ndrivers/infiniband/hw/bng_re/bng_fw.c-239-\t\t\t\t(rcfw, (struct creq_qp_event *)creqe,\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-243-\t\tcase CREQ_BASE_TYPE_FUNC_EVENT:\ndrivers/infiniband/hw/bng_re/bng_fw.c:244:\t\t\tif (!bng_re_process_func_event\ndrivers/infiniband/hw/bng_re/bng_fw.c-245-\t\t\t (rcfw, (struct creq_func_event *)creqe))\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-259-\t\thw_polled++;\ndrivers/infiniband/hw/bng_re/bng_fw.c:260:\t\tbng_re_hwq_incr_cons(hwq-\u003emax_elements, \u0026hwq-\u003econs,\ndrivers/infiniband/hw/bng_re/bng_fw.c-261-\t\t\t\t 1, \u0026creq-\u003ecreq_db.dbinfo.flags);\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-264-\tif (hw_polled)\ndrivers/infiniband/hw/bng_re/bng_fw.c:265:\t\tbng_re_ring_nq_db(\u0026creq-\u003ecreq_db.dbinfo,\ndrivers/infiniband/hw/bng_re/bng_fw.c-266-\t\t\t\t rcfw-\u003eres-\u003ecctx, true);\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-271-\ndrivers/infiniband/hw/bng_re/bng_fw.c:272:static int __send_message_basic_sanity(struct bng_re_rcfw *rcfw,\ndrivers/infiniband/hw/bng_re/bng_fw.c:273:\t\t\t\t struct bng_re_cmdqmsg *msg,\ndrivers/infiniband/hw/bng_re/bng_fw.c-274-\t\t\t\t u8 opcode)\ndrivers/infiniband/hw/bng_re/bng_fw.c-275-{\ndrivers/infiniband/hw/bng_re/bng_fw.c:276:\tstruct bng_re_cmdq_ctx *cmdq;\ndrivers/infiniband/hw/bng_re/bng_fw.c-277-\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-301-\ndrivers/infiniband/hw/bng_re/bng_fw.c:302:static int __send_message(struct bng_re_rcfw *rcfw,\ndrivers/infiniband/hw/bng_re/bng_fw.c:303:\t\t\t struct bng_re_cmdqmsg *msg, u8 opcode)\ndrivers/infiniband/hw/bng_re/bng_fw.c-304-{\ndrivers/infiniband/hw/bng_re/bng_fw.c-305-\tu32 bsize, free_slots, required_slots;\ndrivers/infiniband/hw/bng_re/bng_fw.c:306:\tstruct bng_re_cmdq_ctx *cmdq;\ndrivers/infiniband/hw/bng_re/bng_fw.c:307:\tstruct bng_re_crsqe *crsqe;\ndrivers/infiniband/hw/bng_re/bng_fw.c-308-\tstruct bng_fw_cmdqe *cmdqe;\ndrivers/infiniband/hw/bng_re/bng_fw.c:309:\tstruct bng_re_hwq *hwq;\ndrivers/infiniband/hw/bng_re/bng_fw.c-310-\tu32 sw_prod, cmdq_prod;\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-322-\tspin_lock_bh(\u0026hwq-\u003elock);\ndrivers/infiniband/hw/bng_re/bng_fw.c:323:\trequired_slots = bng_re_get_cmd_slots(msg-\u003ereq);\ndrivers/infiniband/hw/bng_re/bng_fw.c-324-\tfree_slots = HWQ_FREE_SLOTS(hwq);\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-336-\ndrivers/infiniband/hw/bng_re/bng_fw.c:337:\tbsize = bng_re_set_cmd_slots(msg-\u003ereq);\ndrivers/infiniband/hw/bng_re/bng_fw.c-338-\tcrsqe-\u003efree_slots = free_slots;\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-345-\tif (__get_cmdq_base_resp_size(msg-\u003ereq, msg-\u003ereq_sz) \u0026\u0026 msg-\u003esb) {\ndrivers/infiniband/hw/bng_re/bng_fw.c:346:\t\tstruct bng_re_rcfw_sbuf *sbuf = msg-\u003esb;\ndrivers/infiniband/hw/bng_re/bng_fw.c-347-\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-359-\t\tsw_prod = HWQ_CMP(hwq-\u003eprod, hwq);\ndrivers/infiniband/hw/bng_re/bng_fw.c:360:\t\tcmdqe = bng_re_get_qe(hwq, sw_prod, NULL);\ndrivers/infiniband/hw/bng_re/bng_fw.c-361-\t\t/* Copy a segment of the req cmd to the cmdq */\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-399- */\ndrivers/infiniband/hw/bng_re/bng_fw.c:400:static int __wait_for_resp(struct bng_re_rcfw *rcfw, u16 cookie)\ndrivers/infiniband/hw/bng_re/bng_fw.c-401-{\ndrivers/infiniband/hw/bng_re/bng_fw.c:402:\tstruct bng_re_cmdq_ctx *cmdq;\ndrivers/infiniband/hw/bng_re/bng_fw.c:403:\tstruct bng_re_crsqe *crsqe;\ndrivers/infiniband/hw/bng_re/bng_fw.c-404-\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-415-\ndrivers/infiniband/hw/bng_re/bng_fw.c:416:\t\tbng_re_service_creq(\u0026rcfw-\u003ecreq.creq_tasklet);\ndrivers/infiniband/hw/bng_re/bng_fw.c-417-\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-423-/**\ndrivers/infiniband/hw/bng_re/bng_fw.c:424: * bng_re_rcfw_send_message -\tinterface to send\ndrivers/infiniband/hw/bng_re/bng_fw.c-425- * and complete rcfw command.\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-435- */\ndrivers/infiniband/hw/bng_re/bng_fw.c:436:int bng_re_rcfw_send_message(struct bng_re_rcfw *rcfw,\ndrivers/infiniband/hw/bng_re/bng_fw.c:437:\t\t\t struct bng_re_cmdqmsg *msg)\ndrivers/infiniband/hw/bng_re/bng_fw.c-438-{\ndrivers/infiniband/hw/bng_re/bng_fw.c-439-\tstruct creq_qp_event *evnt = (struct creq_qp_event *)msg-\u003eresp;\ndrivers/infiniband/hw/bng_re/bng_fw.c:440:\tstruct bng_re_crsqe *crsqe;\ndrivers/infiniband/hw/bng_re/bng_fw.c-441-\tu16 cookie;\n--\ndrivers/infiniband/hw/bng_re/bng_fw.c-448-\tif (rc)\ndrivers/infiniband/hw/bng_re/bng_fw.c:449:\t\treturn rc == -ENXIO ? bng_re_map_rc(opcode) : rc;\n\n"
} |
| 19/2 | 2026/07/04 17:15 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 76156 output: 202 thoughts: 1076 Thoughts: **Analysis of the Target for Fuzzing** Okay, so I'm looking at this patch and trying to figure out if it's fuzzable with syzkaller. First, I need to identify the relevant Kconfig options. I see that `bng_re` is in `drivers/infiniband/hw/bng_re/`, and the config option is `INFINIBAND_BNG_RE`. Let's check `drivers/net/ethernet/broadcom/bnge/Kconfig` for the `BNGE` option, and as suspected, the patch touches both `bnge` and `bng_re`. Therefore, I need both `BNGE` and `INFINIBAND_BNG_RE` to enable the relevant code paths. Remembering the prompt instructions, I need to omit the `CONFIG_` prefix. Now, let me double-check the Kconfig dependencies to be sure I'm on the right track. Looking at the Makefiles, `obj-$(CONFIG_INFINIBAND_BNG_RE) += bng_re/` and `obj-$(CONFIG_BNGE) += bnge/` confirms my findings. Next, I need to select the focus symbols—the functions modified by the patch that represent interesting interfaces to the hardware. The patch modifies many functions, related to ring allocation and freeing, in both drivers: `bng_re_net_ring_free`, `bng_re_net_ring_alloc`, `hwrm_ring_free_send_msg`, `hwrm_ring_alloc_send_msg`, `bnge_cp_ring_for_rx`, `bnge_cp_ring_for_tx`, `bnge_init_nq_tree`, `bnge_init_one_rx_ring_rxbd`, `bnge_init_one_agg_ring_rxbd`, `bnge_init_tx_rings`, `bnge_hwrm_rx_agg_ring_alloc`, `bnge_hwrm_rx_ring_alloc`, `bnge_hwrm_ring_alloc`, `bnge_fill_hw_rss_tbl`, `bnge_disable_int`, `bnge_hwrm_rx_ring_free`, `bnge_hwrm_rx_agg_ring_free`, `bnge_hwrm_tx_ring_free`, `bnge_hwrm_cp_ring_free`, `bnge_hwrm_ring_free`. I'm thinking I'll focus on `bng_re_net_ring_alloc`, `bng_re_net_ring_free`, `hwrm_ring_alloc_send_msg`, `hwrm_ring_free_send_msg`, `bnge_hwrm_ring_alloc` and `bnge_hwrm_ring_free`. But wait, `bng_re_net_ring_alloc` is static. Even though syzkaller *can* fuzz static functions if they're reachable, I should prioritize exported symbols to increase the chances of hitting the relevant code. Is `hwrm_ring_alloc_send_msg` exported? Looking in `bnge_hwrm_lib.c` and `bnge_hwrm_lib.h`, yes, it's declared, so let's stick with that. Let's add `bnge_hwrm_rx_ring_alloc` and `bnge_hwrm_rx_ring_free` as well for good measure. Finally, I need to confirm that `bnge` is reachable via syzkaller, which should be the case for PCI drivers. Looking at the patch description, it *does* mention syzkaller's PCI fuzzer, which confirms that. The hardware ring ID change makes this a functional change in the resource management logic, and the PCI fuzzer is the right way to hit it. So, here's my conclusion: WorthFuzzing: true FocusSymbols: ["hwrm_ring_alloc_send_msg", "hwrm_ring_free_send_msg", "bnge_hwrm_ring_alloc", "bnge_hwrm_ring_free", "bnge_hwrm_rx_ring_alloc", "bnge_hwrm_rx_ring_free"] EnableConfigs: ["BNGE", "INFINIBAND_BNG_RE"] Reasoning: "The patch changes the hardware ring ID (fw_ring_id) from 16-bit to 32-bit across the Broadcom ThorUltra Ethernet (bnge) and RDMA (bng_re) drivers. This is a functional change in the driver's hardware resource management and H |
| 20/2 | 2026/07/04 17:15 | tool | set-results |
0mArgs:{
"EnableConfigs": [
"BNGE",
"INFINIBAND_BNG_RE"
],
"FocusSymbols": [
"hwrm_ring_alloc_send_msg",
"hwrm_ring_free_send_msg",
"bnge_hwrm_ring_alloc",
"bnge_hwrm_ring_free",
"bng_re_net_ring_alloc",
"bng_re_net_ring_free"
],
"Reasoning": "The patch changes the hardware ring ID (fw_ring_id) from 16-bit to 32-bit across the Broadcom ThorUltra Ethernet (bnge) and RDMA (bng_re) drivers. This is a functional change in the driver's hardware resource management and HWRM command structures, which can be reached and tested via the PCI fuzzer.",
"WorthFuzzing": true
}Results: {
"EnableConfigs": [
"BNGE",
"INFINIBAND_BNG_RE"
],
"FocusSymbols": [
"hwrm_ring_alloc_send_msg",
"hwrm_ring_free_send_msg",
"bnge_hwrm_ring_alloc",
"bnge_hwrm_ring_free",
"bng_re_net_ring_alloc",
"bng_re_net_ring_free"
],
"Reasoning": "The patch changes the hardware ring ID (fw_ring_id) from 16-bit to 32-bit across the Broadcom ThorUltra Ethernet (bnge) and RDMA (bng_re) drivers. This is a functional change in the driver's hardware resource management and HWRM command structures, which can be reached and tested via the PCI fuzzer.",
"WorthFuzzing": true
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|