projects/linux·commit 747c19eb

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

747c19eb · Linus Torvalds <[email protected]> · 2022-01-13 11:09:11 -08:00

Pull rdma updates from Jason Gunthorpe:
 "Another small cycle. Mostly cleanups and bug fixes, quite a bit
  assisted from bots. There are a few new syzkaller splats that haven't
  been solved yet but they should get into the rcs in a few weeks, I
  think.

  Summary:

   - Update drivers to use common helpers for GUIDs, pkeys, bitmaps,
     memset_startat, and others

   - General code cleanups from bots

   - Simplify some of the rxe pool code in preparation for a larger
     rework

   - Clean out old stuff from hns, including all support for hip06
     devices

   - Fix a bug where GID table entries could be missed if the table had
     holes in it

   - Rename paths and sessions in rtrs for better understandability

   - Consolidate the roce source port selection code

   - NDR speed support in mlx5"

* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (83 commits)
  RDMA/irdma: Remove the redundant return
  RDMA/rxe: Use the standard method to produce udp source port
  RDMA/irdma: Make the source udp port vary
  RDMA/hns: Replace get_udp_sport with rdma_get_udp_sport
  RDMA/core: Calculate UDP source port based on flow label or lqpn/rqpn
  IB/qib: Fix typos
  RDMA/rtrs-clt: Rename rtrs_clt to rtrs_clt_sess
  RDMA/rtrs-srv: Rename rtrs_srv to rtrs_srv_sess
  RDMA/rtrs-clt: Rename rtrs_clt_sess to rtrs_clt_path
  RDMA/rtrs-srv: Rename rtrs_srv_sess to rtrs_srv_path
  RDMA/rtrs: Rename rtrs_sess to rtrs_path
  RDMA/hns: Modify the hop num of HIP09 EQ to 1
  IB/iser: Align coding style across driver
  IB/iser: Remove un-needed casting to/from void pointer
  IB/iser: Don't suppress send completions
  IB/iser: Rename ib_ret local variable
  IB/iser: Fix RNR errors
  IB/iser: Remove deprecated pi_guard module param
  IB/mlx5: Expose NDR speed through MAD
  RDMA/cxgb4: Set queue pair state when being queried
  ...
Commit
747c19eb7539b5e6bb15ed57a0a14ebf9f3adb8e
Parents
feb7a43d · c0fe82ba

Merge commit. Changes below are compared with the first parent: feb7a43d.

Changes

105 files changed · +2232 −8797

FileStatusAddDelContent
drivers/block/rnbd/rnbd-clt.cmodified+2−2View file
drivers/block/rnbd/rnbd-clt.hmodified+1−1View file
drivers/block/rnbd/rnbd-srv.cmodified+8−8View file
drivers/block/rnbd/rnbd-srv.hmodified+1−1View file
drivers/infiniband/core/cache.cmodified+9−3View file
drivers/infiniband/core/cma.cmodified+11−7View file
drivers/infiniband/core/device.cmodified+2−1View file
drivers/infiniband/core/sysfs.cmodified+2−1View file
drivers/infiniband/core/umem_odp.cmodified+1−2View file
drivers/infiniband/core/uverbs_cmd.cmodified+0−1View file
drivers/infiniband/hw/bnxt_re/ib_verbs.cmodified+4−5View file
drivers/infiniband/hw/bnxt_re/main.cmodified+1−2View file
drivers/infiniband/hw/bnxt_re/qplib_fp.cmodified+5−6View file
drivers/infiniband/hw/bnxt_re/qplib_rcfw.cmodified+4−8View file
drivers/infiniband/hw/bnxt_re/qplib_rcfw.hmodified+0−1View file
drivers/infiniband/hw/bnxt_re/qplib_res.cmodified+0−50View file
drivers/infiniband/hw/bnxt_re/qplib_res.hmodified+0−7View file
drivers/infiniband/hw/bnxt_re/qplib_sp.cmodified+1−98View file
drivers/infiniband/hw/bnxt_re/qplib_sp.hmodified+0−9View file
drivers/infiniband/hw/cxgb4/cm.cmodified+3−2View file
drivers/infiniband/hw/cxgb4/id_table.cmodified+6−11View file
drivers/infiniband/hw/cxgb4/provider.cmodified+5−3View file
drivers/infiniband/hw/cxgb4/qp.cmodified+1−0View file
drivers/infiniband/hw/hfi1/user_sdma.cmodified+3−5View file
drivers/infiniband/hw/hns/Kconfigmodified+2−15View file
drivers/infiniband/hw/hns/Makefilemodified+0−5View file
drivers/infiniband/hw/hns/hns_roce_ah.cmodified+2−3View file
drivers/infiniband/hw/hns/hns_roce_alloc.cmodified+1−2View file
drivers/infiniband/hw/hns/hns_roce_cmd.cmodified+5−6View file
drivers/infiniband/hw/hns/hns_roce_common.hmodified+0−202View file
drivers/infiniband/hw/hns/hns_roce_cq.cmodified+0−13View file
drivers/infiniband/hw/hns/hns_roce_db.cmodified+0−1View file
drivers/infiniband/hw/hns/hns_roce_device.hmodified+24−84View file
drivers/infiniband/hw/hns/hns_roce_hem.cmodified+0−1View file
drivers/infiniband/hw/hns/hns_roce_hw_v1.cdeleted+0−4675View before deletion
drivers/infiniband/hw/hns/hns_roce_hw_v1.hdeleted+0−1147View before deletion
drivers/infiniband/hw/hns/hns_roce_hw_v2.cmodified+23−26View file
drivers/infiniband/hw/hns/hns_roce_hw_v2.hmodified+4−18View file
drivers/infiniband/hw/hns/hns_roce_main.cmodified+30−55View file
drivers/infiniband/hw/hns/hns_roce_mr.cmodified+10−22View file
drivers/infiniband/hw/hns/hns_roce_pd.cmodified+3−14View file
drivers/infiniband/hw/hns/hns_roce_qp.cmodified+61−32View file
drivers/infiniband/hw/irdma/i40iw_if.cmodified+1−1View file
drivers/infiniband/hw/irdma/pble.hmodified+1−1View file
drivers/infiniband/hw/irdma/verbs.cmodified+10−21View file
drivers/infiniband/hw/mlx4/main.cmodified+12−22View file
drivers/infiniband/hw/mlx5/cq.cmodified+4−1View file
drivers/infiniband/hw/mlx5/mad.cmodified+14−9View file
drivers/infiniband/hw/mlx5/mlx5_ib.hmodified+2−10View file
drivers/infiniband/hw/mthca/mthca_allocator.cmodified+5−10View file
drivers/infiniband/hw/mthca/mthca_mr.cmodified+11−14View file
drivers/infiniband/hw/mthca/mthca_provider.cmodified+6−14View file
drivers/infiniband/hw/ocrdma/ocrdma_hw.cmodified+6−10View file
drivers/infiniband/hw/ocrdma/ocrdma_main.cmodified+2−15View file
drivers/infiniband/hw/ocrdma/ocrdma_verbs.cmodified+8−10View file
drivers/infiniband/hw/ocrdma/ocrdma_verbs.hmodified+0−1View file
drivers/infiniband/hw/qedr/verbs.cmodified+2−0View file
drivers/infiniband/hw/qib/qib_iba6120.cmodified+1−1View file
drivers/infiniband/hw/qib/qib_iba7220.cmodified+1−1View file
drivers/infiniband/hw/qib/qib_iba7322.cmodified+1−1View file
drivers/infiniband/hw/usnic/usnic_ib_sysfs.cmodified+2−1View file
drivers/infiniband/hw/usnic/usnic_ib_verbs.cmodified+3−5View file
drivers/infiniband/hw/vmw_pvrdma/pvrdma_doorbell.cmodified+5−5View file
drivers/infiniband/sw/rxe/Makefilemodified+0−1View file
drivers/infiniband/sw/rxe/rxe.cmodified+0−4View file
drivers/infiniband/sw/rxe/rxe.hmodified+0−2View file
drivers/infiniband/sw/rxe/rxe_comp.cmodified+3−5View file
drivers/infiniband/sw/rxe/rxe_cq.cmodified+10−14View file
drivers/infiniband/sw/rxe/rxe_loc.hmodified+5−5View file
drivers/infiniband/sw/rxe/rxe_mcast.cmodified+5−6View file
drivers/infiniband/sw/rxe/rxe_mr.cmodified+3−3View file
drivers/infiniband/sw/rxe/rxe_mw.cmodified+9−12View file
drivers/infiniband/sw/rxe/rxe_net.cmodified+2−7View file
drivers/infiniband/sw/rxe/rxe_opcode.cmodified+370−369View file
drivers/infiniband/sw/rxe/rxe_pool.cmodified+84−93View file
drivers/infiniband/sw/rxe/rxe_pool.hmodified+26−28View file
drivers/infiniband/sw/rxe/rxe_qp.cmodified+3−3View file
drivers/infiniband/sw/rxe/rxe_queue.cmodified+4−5View file
drivers/infiniband/sw/rxe/rxe_req.cmodified+5−11View file
drivers/infiniband/sw/rxe/rxe_srq.cmodified+1−1View file
drivers/infiniband/sw/rxe/rxe_sysfs.cdeleted+0−119View before deletion
drivers/infiniband/sw/rxe/rxe_task.cmodified+8−10View file
drivers/infiniband/sw/rxe/rxe_verbs.cmodified+17−17View file
drivers/infiniband/sw/rxe/rxe_verbs.hmodified+11−13View file
drivers/infiniband/sw/siw/siw_verbs.cmodified+4−2View file
drivers/infiniband/ulp/iser/iscsi_iser.cmodified+28−48View file
drivers/infiniband/ulp/iser/iscsi_iser.hmodified+3−20View file
drivers/infiniband/ulp/iser/iser_initiator.cmodified+41−65View file
drivers/infiniband/ulp/iser/iser_memory.cmodified+24−34View file
drivers/infiniband/ulp/iser/iser_verbs.cmodified+57−81View file
drivers/infiniband/ulp/rtrs/rtrs-clt-stats.cmodified+4−4View file
drivers/infiniband/ulp/rtrs/rtrs-clt-sysfs.cmodified+74−71View file
drivers/infiniband/ulp/rtrs/rtrs-clt.cmodified+554−535View file
drivers/infiniband/ulp/rtrs/rtrs-clt.hmodified+21−20View file
drivers/infiniband/ulp/rtrs/rtrs-pri.hmodified+9−9View file
drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.cmodified+61−60View file
drivers/infiniband/ulp/rtrs/rtrs-srv.cmodified+347−337View file
drivers/infiniband/ulp/rtrs/rtrs-srv.hmodified+8−8View file
drivers/infiniband/ulp/rtrs/rtrs.cmodified+49−49View file
drivers/infiniband/ulp/rtrs/rtrs.hmodified+18−16View file
drivers/net/ethernet/chelsio/cxgb4/t4_msg.hmodified+1−1View file
include/rdma/ib_mad.hmodified+1−0View file
include/rdma/ib_smi.hmodified+11−1View file
include/rdma/ib_verbs.hmodified+17−0View file
include/uapi/rdma/hns-abi.hmodified+2−0View file

Only the first 600 diff lines are shown. Download the complete patch.

drivers/block/rnbd/rnbd-clt.c

View file
diff --git a/drivers/block/rnbd/rnbd-clt.c b/drivers/block/rnbd/rnbd-clt.c
index 67a8edb..8f8443e 100644
--- a/drivers/block/rnbd/rnbd-clt.c
+++ b/drivers/block/rnbd/rnbd-clt.c
@@ -433,7 +433,7 @@ static void msg_conf(void *priv, int errno)
schedule_work(&iu->work);
}
-static int send_usr_msg(struct rtrs_clt *rtrs, int dir,
+static int send_usr_msg(struct rtrs_clt_sess *rtrs, int dir,
struct rnbd_iu *iu, struct kvec *vec,
size_t len, struct scatterlist *sg, unsigned int sg_len,
void (*conf)(struct work_struct *work),
@@ -1010,7 +1010,7 @@ static int rnbd_client_xfer_request(struct rnbd_clt_dev *dev,
struct request *rq,
struct rnbd_iu *iu)
{
- struct rtrs_clt *rtrs = dev->sess->rtrs;
+ struct rtrs_clt_sess *rtrs = dev->sess->rtrs;
struct rtrs_permit *permit = iu->permit;
struct rnbd_msg_io msg;
struct rtrs_clt_req_ops req_ops;

drivers/block/rnbd/rnbd-clt.h

View file
diff --git a/drivers/block/rnbd/rnbd-clt.h b/drivers/block/rnbd/rnbd-clt.h
index 9ef8c4f..0c2cae7 100644
--- a/drivers/block/rnbd/rnbd-clt.h
+++ b/drivers/block/rnbd/rnbd-clt.h
@@ -75,7 +75,7 @@ struct rnbd_cpu_qlist {
struct rnbd_clt_session {
struct list_head list;
- struct rtrs_clt *rtrs;
+ struct rtrs_clt_sess *rtrs;
wait_queue_head_t rtrs_waitq;
bool rtrs_ready;
struct rnbd_cpu_qlist __percpu

drivers/block/rnbd/rnbd-srv.c

View file
diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c
index aafecfe..1ee808f 100644
--- a/drivers/block/rnbd/rnbd-srv.c
+++ b/drivers/block/rnbd/rnbd-srv.c
@@ -263,15 +263,15 @@ out:
kfree(srv_sess);
}
-static int create_sess(struct rtrs_srv *rtrs)
+static int create_sess(struct rtrs_srv_sess *rtrs)
{
struct rnbd_srv_session *srv_sess;
- char sessname[NAME_MAX];
+ char pathname[NAME_MAX];
int err;
- err = rtrs_srv_get_sess_name(rtrs, sessname, sizeof(sessname));
+ err = rtrs_srv_get_path_name(rtrs, pathname, sizeof(pathname));
if (err) {
- pr_err("rtrs_srv_get_sess_name(%s): %d\n", sessname, err);
+ pr_err("rtrs_srv_get_path_name(%s): %d\n", pathname, err);
return err;
}
@@ -284,8 +284,8 @@ static int create_sess(struct rtrs_srv *rtrs)
offsetof(struct rnbd_dev_blk_io, bio),
BIOSET_NEED_BVECS);
if (err) {
- pr_err("Allocating srv_session for session %s failed\n",
- sessname);
+ pr_err("Allocating srv_session for path %s failed\n",
+ pathname);
kfree(srv_sess);
return err;
}
@@ -298,14 +298,14 @@ static int create_sess(struct rtrs_srv *rtrs)
mutex_unlock(&sess_lock);
srv_sess->rtrs = rtrs;
- strscpy(srv_sess->sessname, sessname, sizeof(srv_sess->sessname));
+ strscpy(srv_sess->sessname, pathname, sizeof(srv_sess->sessname));
rtrs_srv_set_sess_priv(rtrs, srv_sess);
return 0;
}
-static int rnbd_srv_link_ev(struct rtrs_srv *rtrs,
+static int rnbd_srv_link_ev(struct rtrs_srv_sess *rtrs,
enum rtrs_srv_link_ev ev, void *priv)
{
struct rnbd_srv_session *srv_sess = priv;

drivers/block/rnbd/rnbd-srv.h

View file
diff --git a/drivers/block/rnbd/rnbd-srv.h b/drivers/block/rnbd/rnbd-srv.h
index 98ddc31..e5604bc 100644
--- a/drivers/block/rnbd/rnbd-srv.h
+++ b/drivers/block/rnbd/rnbd-srv.h
@@ -20,7 +20,7 @@
struct rnbd_srv_session {
/* Entry inside global sess_list */
struct list_head list;
- struct rtrs_srv *rtrs;
+ struct rtrs_srv_sess *rtrs;
char sessname[NAME_MAX];
int queue_depth;
struct bio_set sess_bio_set;

drivers/infiniband/core/cache.c

View file
diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index b79f816..f6aa1a9 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -956,7 +956,7 @@ int rdma_query_gid(struct ib_device *device, u32 port_num,
{
struct ib_gid_table *table;
unsigned long flags;
- int res = -EINVAL;
+ int res;
if (!rdma_is_port_valid(device, port_num))
return -EINVAL;
@@ -964,9 +964,15 @@ int rdma_query_gid(struct ib_device *device, u32 port_num,
table = rdma_gid_table(device, port_num);
read_lock_irqsave(&table->rwlock, flags);
- if (index < 0 || index >= table->sz ||
- !is_gid_entry_valid(table->data_vec[index]))
+ if (index < 0 || index >= table->sz) {
+ res = -EINVAL;
goto done;
+ }
+
+ if (!is_gid_entry_valid(table->data_vec[index])) {
+ res = -ENOENT;
+ goto done;
+ }
memcpy(gid, &table->data_vec[index]->attr.gid, sizeof(*gid));
res = 0;

drivers/infiniband/core/cma.c

View file
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 835ac54..27a00ce 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -766,6 +766,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
unsigned int p;
u16 pkey, index;
enum ib_port_state port_state;
+ int ret;
int i;
cma_dev = NULL;
@@ -784,9 +785,14 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
if (ib_get_cached_port_state(cur_dev->device, p, &port_state))
continue;
- for (i = 0; !rdma_query_gid(cur_dev->device,
- p, i, &gid);
- i++) {
+
+ for (i = 0; i < cur_dev->device->port_data[p].immutable.gid_tbl_len;
+ ++i) {
+ ret = rdma_query_gid(cur_dev->device, p, i,
+ &gid);
+ if (ret)
+ continue;
+
if (!memcmp(&gid, dgid, sizeof(gid))) {
cma_dev = cur_dev;
sgid = gid;
@@ -4033,8 +4039,7 @@ static int cma_resolve_ib_udp(struct rdma_id_private *id_priv,
memset(&req, 0, sizeof req);
offset = cma_user_data_offset(id_priv);
- req.private_data_len = offset + conn_param->private_data_len;
- if (req.private_data_len < conn_param->private_data_len)
+ if (check_add_overflow(offset, conn_param->private_data_len, &req.private_data_len))
return -EINVAL;
if (req.private_data_len) {
@@ -4093,8 +4098,7 @@ static int cma_connect_ib(struct rdma_id_private *id_priv,
memset(&req, 0, sizeof req);
offset = cma_user_data_offset(id_priv);
- req.private_data_len = offset + conn_param->private_data_len;
- if (req.private_data_len < conn_param->private_data_len)
+ if (check_add_overflow(offset, conn_param->private_data_len, &req.private_data_len))
return -EINVAL;
if (req.private_data_len) {

drivers/infiniband/core/device.c

View file
diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index 22a4add..a311df0 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -2461,7 +2461,8 @@ int ib_find_gid(struct ib_device *device, union ib_gid *gid,
++i) {
ret = rdma_query_gid(device, port, i, &tmp_gid);
if (ret)
- return ret;
+ continue;
+
if (!memcmp(&tmp_gid, gid, sizeof *gid)) {
*port_num = port;
if (index)

drivers/infiniband/core/sysfs.c

View file
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
index a3f84b5..84c53bd 100644
--- a/drivers/infiniband/core/sysfs.c
+++ b/drivers/infiniband/core/sysfs.c
@@ -433,6 +433,7 @@ static struct attribute *port_default_attrs[] = {
&ib_port_attr_link_layer.attr,
NULL
};
+ATTRIBUTE_GROUPS(port_default);
static ssize_t print_ndev(const struct ib_gid_attr *gid_attr, char *buf)
{
@@ -774,7 +775,7 @@ static void ib_port_gid_attr_release(struct kobject *kobj)
static struct kobj_type port_type = {
.release = ib_port_release,
.sysfs_ops = &port_sysfs_ops,
- .default_attrs = port_default_attrs
+ .default_groups = port_default_groups,
};
static struct kobj_type gid_attr_type = {

drivers/infiniband/core/umem_odp.c

View file
diff --git a/drivers/infiniband/core/umem_odp.c b/drivers/infiniband/core/umem_odp.c
index 7a47343..aead24c 100644
--- a/drivers/infiniband/core/umem_odp.c
+++ b/drivers/infiniband/core/umem_odp.c
@@ -227,7 +227,6 @@ struct ib_umem_odp *ib_umem_odp_get(struct ib_device *device,
const struct mmu_interval_notifier_ops *ops)
{
struct ib_umem_odp *umem_odp;
- struct mm_struct *mm;
int ret;
if (WARN_ON_ONCE(!(access & IB_ACCESS_ON_DEMAND)))
@@ -241,7 +240,7 @@ struct ib_umem_odp *ib_umem_odp_get(struct ib_device *device,
umem_odp->umem.length = size;
umem_odp->umem.address = addr;
umem_odp->umem.writable = ib_access_writable(access);
- umem_odp->umem.owning_mm = mm = current->mm;
+ umem_odp->umem.owning_mm = current->mm;
umem_odp->notifier.ops = ops;
umem_odp->page_shift = PAGE_SHIFT;

drivers/infiniband/core/uverbs_cmd.c

View file
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index d1345d7..6b63931 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -1399,7 +1399,6 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
attr.sq_sig_type = cmd->sq_sig_all ? IB_SIGNAL_ALL_WR :
IB_SIGNAL_REQ_WR;
attr.qp_type = cmd->qp_type;
- attr.create_flags = 0;
attr.cap.max_send_wr = cmd->max_send_wr;
attr.cap.max_recv_wr = cmd->max_recv_wr;

drivers/infiniband/hw/bnxt_re/ib_verbs.c

View file
diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
index 29cc0d1..3224f18 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
@@ -262,13 +262,12 @@ void bnxt_re_query_fw_str(struct ib_device *ibdev, char *str)
int bnxt_re_query_pkey(struct ib_device *ibdev, u32 port_num,
u16 index, u16 *pkey)
{
- struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev);
+ if (index > 0)
+ return -EINVAL;
- /* Ignore port_num */
+ *pkey = IB_DEFAULT_PKEY_FULL;
- memset(pkey, 0, sizeof(*pkey));
- return bnxt_qplib_get_pkey(&rdev->qplib_res,
- &rdev->qplib_res.pkey_tbl, index, pkey);
+ return 0;
}
int bnxt_re_query_gid(struct ib_device *ibdev, u32 port_num,

drivers/infiniband/hw/bnxt_re/main.c

View file
diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c
index b44944f..3d6834d 100644
--- a/drivers/infiniband/hw/bnxt_re/main.c
+++ b/drivers/infiniband/hw/bnxt_re/main.c
@@ -893,7 +893,6 @@ static int bnxt_re_srqn_handler(struct bnxt_qplib_nq *nq,
struct bnxt_re_srq *srq = container_of(handle, struct bnxt_re_srq,
qplib_srq);
struct ib_event ib_event;
- int rc = 0;
ib_event.device = &srq->rdev->ibdev;
ib_event.element.srq = &srq->ib_srq;
@@ -907,7 +906,7 @@ static int bnxt_re_srqn_handler(struct bnxt_qplib_nq *nq,
(*srq->ib_srq.event_handler)(&ib_event,
srq->ib_srq.srq_context);
}
- return rc;
+ return 0;
}
static int bnxt_re_cqn_handler(struct bnxt_qplib_nq *nq,

drivers/infiniband/hw/bnxt_re/qplib_fp.c

View file
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
index ca88849..96e581c 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
@@ -46,6 +46,7 @@
#include <linux/delay.h>
#include <linux/prefetch.h>
#include <linux/if_ether.h>
+#include <rdma/ib_mad.h>
#include "roce_hsi.h"
@@ -1232,7 +1233,7 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
struct bnxt_qplib_rcfw *rcfw = res->rcfw;
struct cmdq_modify_qp req;
struct creq_modify_qp_resp resp;
- u16 cmd_flags = 0, pkey;
+ u16 cmd_flags = 0;
u32 temp32[4];
u32 bmask;
int rc;
@@ -1255,11 +1256,9 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_ACCESS)
req.access = qp->access;
- if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_PKEY) {
- if (!bnxt_qplib_get_pkey(res, &res->pkey_tbl,
- qp->pkey_index, &pkey))
- req.pkey = cpu_to_le16(pkey);
- }
+ if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_PKEY)
+ req.pkey = cpu_to_le16(IB_DEFAULT_PKEY_FULL);
+
if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_QKEY)
req.qkey = cpu_to_le32(qp->qkey);

drivers/infiniband/hw/bnxt_re/qplib_rcfw.c

View file
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
index 3de8547..061b289 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
@@ -555,7 +555,7 @@ skip_ctx_setup:
void bnxt_qplib_free_rcfw_channel(struct bnxt_qplib_rcfw *rcfw)
{
- kfree(rcfw->cmdq.cmdq_bitmap);
+ bitmap_free(rcfw->cmdq.cmdq_bitmap);
kfree(rcfw->qp_tbl);
kfree(rcfw->crsqe_tbl);
bnxt_qplib_free_hwq(rcfw->res, &rcfw->cmdq.hwq);
@@ -572,7 +572,6 @@ int bnxt_qplib_alloc_rcfw_channel(struct bnxt_qplib_res *res,
struct bnxt_qplib_sg_info sginfo = {};
struct bnxt_qplib_cmdq_ctx *cmdq;
struct bnxt_qplib_creq_ctx *creq;
- u32 bmap_size = 0;
rcfw->pdev = res->pdev;
cmdq = &rcfw->cmdq;
@@ -613,13 +612,10 @@ int bnxt_qplib_alloc_rcfw_channel(struct bnxt_qplib_res *res,
if (!rcfw->crsqe_tbl)
goto fail;
- bmap_size = BITS_TO_LONGS(rcfw->cmdq_depth) * sizeof(unsigned long);
- cmdq->cmdq_bitmap = kzalloc(bmap_size, GFP_KERNEL);
+ cmdq->cmdq_bitmap = bitmap_zalloc(rcfw->cmdq_depth, GFP_KERNEL);
if (!cmdq->cmdq_bitmap)
goto fail;
- cmdq->bmap_size = bmap_size;
-
/* Allocate one extra to hold the QP1 entries */
rcfw->qp_tbl_size = qp_tbl_sz + 1;
rcfw->qp_tbl = kcalloc(rcfw->qp_tbl_size, sizeof(struct bnxt_qplib_qp_node),
@@ -667,8 +663,8 @@ void bnxt_qplib_disable_rcfw_channel(struct bnxt_qplib_rcfw *rcfw)
iounmap(cmdq->cmdq_mbox.reg.bar_reg);
iounmap(creq->creq_db.reg.bar_reg);
- indx = find_first_bit(cmdq->cmdq_bitmap, cmdq->bmap_size);
- if (indx != cmdq->bmap_size)
+ indx = find_first_bit(cmdq->cmdq_bitmap, rcfw->cmdq_depth);
+ if (indx != rcfw->cmdq_depth)
dev_err(&rcfw->pdev->dev,
"disabling RCFW with pending cmd-bit %lx\n", indx);

drivers/infiniband/hw/bnxt_re/qplib_rcfw.h

View file
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h
index 82faa4e..0a3d8e7 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h
+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h
@@ -152,7 +152,6 @@ struct bnxt_qplib_cmdq_ctx {
wait_queue_head_t waitq;
unsigned long flags;
unsigned long *cmdq_bitmap;
- u32 bmap_size;
u32 seq_num;
};

drivers/infiniband/hw/bnxt_re/qplib_res.c

View file
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.c b/drivers/infiniband/hw/bnxt_re/qplib_res.c
index bc1ba4b..126d4f2 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_res.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_res.c
@@ -649,31 +649,6 @@ static void bnxt_qplib_init_sgid_tbl(struct bnxt_qplib_sgid_tbl *sgid_tbl,
memset(sgid_tbl->hw_id, -1, sizeof(u16) * sgid_tbl->max);
}
-static void bnxt_qplib_free_pkey_tbl(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl)
-{
- if (!pkey_tbl->tbl)
- dev_dbg(&res->pdev->dev, "PKEY tbl not present\n");
- else
- kfree(pkey_tbl->tbl);
-
- pkey_tbl->tbl = NULL;
- pkey_tbl->max = 0;
- pkey_tbl->active = 0;
-}
-
-static int bnxt_qplib_alloc_pkey_tbl(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl,
- u16 max)
-{
- pkey_tbl->tbl = kcalloc(max, sizeof(u16), GFP_KERNEL);
- if (!pkey_tbl->tbl)
- return -ENOMEM;
-
- pkey_tbl->max = max;
- return 0;
-};
-
/* PDs */
int bnxt_qplib_alloc_pd(struct bnxt_qplib_pd_tbl *pdt, struct bnxt_qplib_pd *pd)
{
@@ -843,24 +818,6 @@ unmap_io:
return -ENOMEM;
}
-/* PKEYs */
-static void bnxt_qplib_cleanup_pkey_tbl(struct bnxt_qplib_pkey_tbl *pkey_tbl)
-{
- memset(pkey_tbl->tbl, 0, sizeof(u16) * pkey_tbl->max);
- pkey_tbl->active = 0;
-}
-
-static void bnxt_qplib_init_pkey_tbl(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl)
-{
- u16 pkey = 0xFFFF;
-
- memset(pkey_tbl->tbl, 0, sizeof(u16) * pkey_tbl->max);
-
- /* pkey default = 0xFFFF */
- bnxt_qplib_add_pkey(res, pkey_tbl, &pkey, false);
-}
-
/* Stats */
static void bnxt_qplib_free_stats_ctx(struct pci_dev *pdev,
struct bnxt_qplib_stats *stats)
@@ -891,21 +848,18 @@ static int bnxt_qplib_alloc_stats_ctx(struct pci_dev *pdev,
void bnxt_qplib_cleanup_res(struct bnxt_qplib_res *res)
{
- bnxt_qplib_cleanup_pkey_tbl(&res->pkey_tbl);
bnxt_qplib_cleanup_sgid_tbl(res, &res->sgid_tbl);
}
int bnxt_qplib_init_res(struct bnxt_qplib_res *res)
{
bnxt_qplib_init_sgid_tbl(&res->sgid_tbl, res->netdev);
- bnxt_qplib_init_pkey_tbl(res, &res->pkey_tbl);
return 0;
}
void bnxt_qplib_free_res(struct bnxt_qplib_res *res)
{
- bnxt_qplib_free_pkey_tbl(res, &res->pkey_tbl);
bnxt_qplib_free_sgid_tbl(res, &res->sgid_tbl);
bnxt_qplib_free_pd_tbl(&res->pd_tbl);
bnxt_qplib_free_dpi_tbl(res, &res->dpi_tbl);
@@ -924,10 +878,6 @@ int bnxt_qplib_alloc_res(struct bnxt_qplib_res *res, struct pci_dev *pdev,
if (rc)
goto fail;
- rc = bnxt_qplib_alloc_pkey_tbl(res, &res->pkey_tbl, dev_attr->max_pkey);
- if (rc)
- goto fail;
-
rc = bnxt_qplib_alloc_pd_tbl(res, &res->pd_tbl, dev_attr->max_pd);
if (rc)
goto fail;

drivers/infiniband/hw/bnxt_re/qplib_res.h

View file
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.h b/drivers/infiniband/hw/bnxt_re/qplib_res.h
index e1411a2..982e2c9 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_res.h
+++ b/drivers/infiniband/hw/bnxt_re/qplib_res.h
@@ -185,12 +185,6 @@ struct bnxt_qplib_sgid_tbl {
u8 *vlan;
};
-struct bnxt_qplib_pkey_tbl {
- u16 *tbl;
- u16 max;
- u16 active;
-};
-
struct bnxt_qplib_dpi {
u32 dpi;
void __iomem *dbr;
@@ -258,7 +252,6 @@ struct bnxt_qplib_res {
struct bnxt_qplib_rcfw *rcfw;
struct bnxt_qplib_pd_tbl pd_tbl;
struct bnxt_qplib_sgid_tbl sgid_tbl;
- struct bnxt_qplib_pkey_tbl pkey_tbl;
struct bnxt_qplib_dpi_tbl dpi_tbl;
bool prio;
bool is_vf;

drivers/infiniband/hw/bnxt_re/qplib_sp.c

View file
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.c b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
index 379e715..b802981 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_sp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
@@ -146,17 +146,7 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
attr->max_srq = le16_to_cpu(sb->max_srq);
attr->max_srq_wqes = le32_to_cpu(sb->max_srq_wr) - 1;
attr->max_srq_sges = sb->max_srq_sge;
- attr->max_pkey = le32_to_cpu(sb->max_pkeys);
- /*
- * Some versions of FW reports more than 0xFFFF.
- * Restrict it for now to 0xFFFF to avoid
- * reporting trucated value
- */
- if (attr->max_pkey > 0xFFFF) {
- /* ib_port_attr::pkey_tbl_len is u16 */
- attr->max_pkey = 0xFFFF;
- }
-
+ attr->max_pkey = 1;
attr->max_inline_data = le32_to_cpu(sb->max_inline_data);
attr->l2_db_size = (sb->l2_db_space_size + 1) *
(0x01 << RCFW_DBR_BASE_PAGE_SHIFT);
@@ -414,93 +404,6 @@ int bnxt_qplib_update_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
return rc;
}
-/* pkeys */
-int bnxt_qplib_get_pkey(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 index,
- u16 *pkey)
-{
- if (index == 0xFFFF) {
- *pkey = 0xFFFF;
- return 0;
- }
- if (index >= pkey_tbl->max) {
- dev_err(&res->pdev->dev,
- "Index %d exceeded PKEY table max (%d)\n",
- index, pkey_tbl->max);
- return -EINVAL;
- }
- memcpy(pkey, &pkey_tbl->tbl[index], sizeof(*pkey));
- return 0;
-}
-
-int bnxt_qplib_del_pkey(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
- bool update)
-{
- int i, rc = 0;
-
- if (!pkey_tbl) {
- dev_err(&res->pdev->dev, "PKEY table not allocated\n");
- return -EINVAL;
- }
-
- /* Do we need a pkey_lock here? */
- if (!pkey_tbl->active) {
- dev_err(&res->pdev->dev, "PKEY table has no active entries\n");
- return -ENOMEM;
- }
- for (i = 0; i < pkey_tbl->max; i++) {
- if (!memcmp(&pkey_tbl->tbl[i], pkey, sizeof(*pkey)))
- break;
- }
- if (i == pkey_tbl->max) {
- dev_err(&res->pdev->dev,
- "PKEY 0x%04x not found in the pkey table\n", *pkey);
- return -ENOMEM;
- }
- memset(&pkey_tbl->tbl[i], 0, sizeof(*pkey));
- pkey_tbl->active--;
-
- /* unlock */
- return rc;
-}
-
-int bnxt_qplib_add_pkey(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
- bool update)
-{
- int i, free_idx, rc = 0;
-
- if (!pkey_tbl) {
- dev_err(&res->pdev->dev, "PKEY table not allocated\n");
- return -EINVAL;
- }
-
- /* Do we need a pkey_lock here? */
- if (pkey_tbl->active == pkey_tbl->max) {
- dev_err(&res->pdev->dev, "PKEY table is full\n");
- return -ENOMEM;
- }

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/bnxt_re/qplib_sp.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/cxgb4/cm.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/cxgb4/id_table.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/cxgb4/provider.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/cxgb4/qp.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hfi1/user_sdma.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/Kconfig

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/Makefile

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_ah.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_alloc.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_cmd.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_common.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_cq.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_db.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_device.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_hem.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_hw_v1.c

View before deletion

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_hw_v1.h

View before deletion

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_hw_v2.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_hw_v2.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_main.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_mr.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_pd.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/hns/hns_roce_qp.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/irdma/i40iw_if.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/irdma/pble.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/irdma/verbs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/mlx4/main.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/mlx5/cq.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/mlx5/mad.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/mlx5/mlx5_ib.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/mthca/mthca_allocator.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/mthca/mthca_mr.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/mthca/mthca_provider.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/ocrdma/ocrdma_hw.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/ocrdma/ocrdma_main.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/ocrdma/ocrdma_verbs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/ocrdma/ocrdma_verbs.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/qedr/verbs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/qib/qib_iba6120.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/qib/qib_iba7220.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/qib/qib_iba7322.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/usnic/usnic_ib_sysfs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/usnic/usnic_ib_verbs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/hw/vmw_pvrdma/pvrdma_doorbell.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/Makefile

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_comp.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_cq.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_loc.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_mcast.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_mr.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_mw.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_net.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_opcode.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_pool.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_pool.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_qp.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_queue.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_req.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_srq.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_sysfs.c

View before deletion

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_task.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_verbs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/rxe/rxe_verbs.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/sw/siw/siw_verbs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/iser/iscsi_iser.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/iser/iscsi_iser.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/iser/iser_initiator.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/iser/iser_memory.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/iser/iser_verbs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/rtrs/rtrs-clt-stats.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/rtrs/rtrs-clt-sysfs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/rtrs/rtrs-clt.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/rtrs/rtrs-clt.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/rtrs/rtrs-pri.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/rtrs/rtrs-srv.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/rtrs/rtrs-srv.h

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/rtrs/rtrs.c

View file

This diff is incomplete. Download the complete patch.

drivers/infiniband/ulp/rtrs/rtrs.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/chelsio/cxgb4/t4_msg.h

View file

This diff is incomplete. Download the complete patch.

include/rdma/ib_mad.h

View file

This diff is incomplete. Download the complete patch.

include/rdma/ib_smi.h

View file

This diff is incomplete. Download the complete patch.

include/rdma/ib_verbs.h

View file

This diff is incomplete. Download the complete patch.

include/uapi/rdma/hns-abi.h

View file

This diff is incomplete. Download the complete patch.