Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma

Pull rdma updates from Jason Gunthorpe:
 "A new Pensando ionic driver, a new Gen 3 HW support for Intel irdma,
  and lots of small bnxt_re improvements.

   - Small bug fixes and improves to hfi1, efa, mlx5, erdma, rdmarvt,
     siw

   - Allow userspace access to IB service records through the rdmacm

   - Optimize dma mapping for erdma

   - Fix shutdown of the GSI QP in mana

   - Support relaxed ordering MR and fix a corruption bug with mlx5 DMA
     Data Direct

   - Many improvement to bnxt_re:
       - Debugging features and counters
       - Improve performance of some commands
       - Change flow_label reporting in completions
       - Mirror vnic
       - RDMA flow support

   - New RDMA driver for Pensando Ethernet devices: ionic

   - Gen 3 hardware support for the Intel irdma driver

   - Fix rdma routing resolution with VRFs"

* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (85 commits)
  RDMA/ionic: Fix memory leak of admin q_wr
  RDMA/siw: Always report immediate post SQ errors
  RDMA/bnxt_re: improve clarity in ALLOC_PAGE handler
  RDMA/irdma: Remove unused struct irdma_cq fields
  RDMA/irdma: Fix positive vs negative error codes in irdma_post_send()
  RDMA/bnxt_re: Remove non-statistics counters from hw_counters
  RDMA/bnxt_re: Add debugfs info entry for device and resource information
  RDMA/bnxt_re: Fix incorrect errno used in function comments
  RDMA: Use %pe format specifier for error pointers
  RDMA/ionic: Use ether_addr_copy instead of memcpy
  RDMA/ionic: Fix build failure on SPARC due to xchg() operand size
  RDMA/rxe: Fix race in do_task() when draining
  IB/sa: Fix sa_local_svc_timeout_ms read race
  IB/ipoib: Ignore L3 master device
  RDMA/core: Use route entry flag to decide on loopback traffic
  RDMA/core: Resolve MAC of next-hop device without ARP support
  RDMA/core: Squash a single user static function
  RDMA/irdma: Update Kconfig
  RDMA/irdma: Extend CQE Error and Flush Handling for GEN3 Devices
  RDMA/irdma: Add Atomic Operations support
  ...
This commit is contained in:
Linus Torvalds
2025-10-03 18:35:22 -07:00
128 changed files with 16181 additions and 1481 deletions

View File

@@ -255,6 +255,7 @@ enum rdma_driver_id {
RDMA_DRIVER_SIW,
RDMA_DRIVER_ERDMA,
RDMA_DRIVER_MANA,
RDMA_DRIVER_IONIC,
};
enum ib_uverbs_gid_type {

View File

@@ -74,4 +74,18 @@ struct ib_user_path_rec {
__u8 preference;
};
struct ib_user_service_rec {
__be64 id;
__u8 gid[16];
__be16 pkey;
__u8 reserved[2];
__be32 lease;
__u8 key[16];
__u8 name[64];
__u8 data_8[16];
__be16 data_16[8];
__be32 data_32[4];
__be64 data_64[2];
};
#endif /* IB_USER_SA_H */

View File

@@ -0,0 +1,115 @@
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/* Copyright (C) 2018-2025, Advanced Micro Devices, Inc */
#ifndef IONIC_ABI_H
#define IONIC_ABI_H
#include <linux/types.h>
#define IONIC_ABI_VERSION 1
#define IONIC_EXPDB_64 1
#define IONIC_EXPDB_128 2
#define IONIC_EXPDB_256 4
#define IONIC_EXPDB_512 8
#define IONIC_EXPDB_SQ 1
#define IONIC_EXPDB_RQ 2
#define IONIC_CMB_ENABLE 1
#define IONIC_CMB_REQUIRE 2
#define IONIC_CMB_EXPDB 4
#define IONIC_CMB_WC 8
#define IONIC_CMB_UC 16
struct ionic_ctx_req {
__u32 rsvd[2];
};
struct ionic_ctx_resp {
__u32 rsvd;
__u32 page_shift;
__aligned_u64 dbell_offset;
__u16 version;
__u8 qp_opcodes;
__u8 admin_opcodes;
__u8 sq_qtype;
__u8 rq_qtype;
__u8 cq_qtype;
__u8 admin_qtype;
__u8 max_stride;
__u8 max_spec;
__u8 udma_count;
__u8 expdb_mask;
__u8 expdb_qtypes;
__u8 rsvd2[3];
};
struct ionic_qdesc {
__aligned_u64 addr;
__u32 size;
__u16 mask;
__u8 depth_log2;
__u8 stride_log2;
};
struct ionic_ah_resp {
__u32 ahid;
__u32 pad;
};
struct ionic_cq_req {
struct ionic_qdesc cq[2];
__u8 udma_mask;
__u8 rsvd[7];
};
struct ionic_cq_resp {
__u32 cqid[2];
__u8 udma_mask;
__u8 rsvd[7];
};
struct ionic_qp_req {
struct ionic_qdesc sq;
struct ionic_qdesc rq;
__u8 sq_spec;
__u8 rq_spec;
__u8 sq_cmb;
__u8 rq_cmb;
__u8 udma_mask;
__u8 rsvd[3];
};
struct ionic_qp_resp {
__u32 qpid;
__u8 sq_cmb;
__u8 rq_cmb;
__u8 udma_idx;
__u8 rsvd[1];
__aligned_u64 sq_cmb_offset;
__aligned_u64 rq_cmb_offset;
};
struct ionic_srq_req {
struct ionic_qdesc rq;
__u8 rq_spec;
__u8 rq_cmb;
__u8 udma_mask;
__u8 rsvd[5];
};
struct ionic_srq_resp {
__u32 qpid;
__u8 rq_cmb;
__u8 udma_idx;
__u8 rsvd[2];
__aligned_u64 rq_cmb_offset;
};
#endif /* IONIC_ABI_H */

View File

@@ -20,11 +20,14 @@ enum irdma_memreg_type {
IRDMA_MEMREG_TYPE_MEM = 0,
IRDMA_MEMREG_TYPE_QP = 1,
IRDMA_MEMREG_TYPE_CQ = 2,
IRDMA_MEMREG_TYPE_SRQ = 3,
};
enum {
IRDMA_ALLOC_UCTX_USE_RAW_ATTR = 1 << 0,
IRDMA_ALLOC_UCTX_MIN_HW_WQ_SIZE = 1 << 1,
IRDMA_ALLOC_UCTX_MAX_HW_SRQ_QUANTA = 1 << 2,
IRDMA_SUPPORT_WQE_FORMAT_V2 = 1 << 3,
};
struct irdma_alloc_ucontext_req {
@@ -54,7 +57,8 @@ struct irdma_alloc_ucontext_resp {
__u8 rsvd2;
__aligned_u64 comp_mask;
__u16 min_hw_wq_size;
__u8 rsvd3[6];
__u32 max_hw_srq_quanta;
__u8 rsvd3[2];
};
struct irdma_alloc_pd_resp {
@@ -71,6 +75,16 @@ struct irdma_create_cq_req {
__aligned_u64 user_shadow_area;
};
struct irdma_create_srq_req {
__aligned_u64 user_srq_buf;
__aligned_u64 user_shadow_area;
};
struct irdma_create_srq_resp {
__u32 srq_id;
__u32 srq_size;
};
struct irdma_create_qp_req {
__aligned_u64 user_wqe_bufs;
__aligned_u64 user_compl_ctx;

View File

@@ -67,7 +67,9 @@ enum {
RDMA_USER_CM_CMD_QUERY,
RDMA_USER_CM_CMD_BIND,
RDMA_USER_CM_CMD_RESOLVE_ADDR,
RDMA_USER_CM_CMD_JOIN_MCAST
RDMA_USER_CM_CMD_JOIN_MCAST,
RDMA_USER_CM_CMD_RESOLVE_IB_SERVICE,
RDMA_USER_CM_CMD_WRITE_CM_EVENT,
};
/* See IBTA Annex A11, servies ID bytes 4 & 5 */
@@ -147,7 +149,8 @@ struct rdma_ucm_resolve_route {
enum {
RDMA_USER_CM_QUERY_ADDR,
RDMA_USER_CM_QUERY_PATH,
RDMA_USER_CM_QUERY_GID
RDMA_USER_CM_QUERY_GID,
RDMA_USER_CM_QUERY_IB_SERVICE
};
struct rdma_ucm_query {
@@ -187,6 +190,11 @@ struct rdma_ucm_query_path_resp {
struct ib_path_rec_data path_data[];
};
struct rdma_ucm_query_ib_service_resp {
__u32 num_service_recs;
struct ib_user_service_rec recs[];
};
struct rdma_ucm_conn_param {
__u32 qp_num;
__u32 qkey;
@@ -297,6 +305,7 @@ struct rdma_ucm_event_resp {
union {
struct rdma_ucm_conn_param conn;
struct rdma_ucm_ud_param ud;
__u32 arg32[2];
} param;
__u32 reserved;
struct rdma_ucm_ece ece;
@@ -338,4 +347,33 @@ struct rdma_ucm_migrate_resp {
__u32 events_reported;
};
enum {
RDMA_USER_CM_IB_SERVICE_FLAG_ID = 1 << 0,
RDMA_USER_CM_IB_SERVICE_FLAG_NAME = 1 << 1,
};
#define RDMA_USER_CM_IB_SERVICE_NAME_SIZE 64
struct rdma_ucm_ib_service {
__u64 service_id;
__u8 service_name[RDMA_USER_CM_IB_SERVICE_NAME_SIZE];
__u32 flags;
__u32 reserved;
};
struct rdma_ucm_resolve_ib_service {
__u32 id;
struct rdma_ucm_ib_service ibs;
};
struct rdma_ucm_write_cm_event {
__u32 id;
__u32 reserved;
__u32 event;
__u32 status;
union {
struct rdma_ucm_conn_param conn;
struct rdma_ucm_ud_param ud;
__u64 arg;
} param;
};
#endif /* RDMA_USER_CM_H */