Commit 14bcf735 authored by Boshi Yu's avatar Boshi Yu Committed by Leon Romanovsky
Browse files

RDMA/erdma: Add the erdma_query_pkey() interface



The erdma_query_pkey() interface queries the PKey at the specified
index. Currently, erdma supports only one partition and returns the
default PKey for each query. Besides, the correct length of the PKey
table can be obtained by calling the erdma_query_port() and
erdma_get_port_immutable() interfaces.

Signed-off-by: default avatarBoshi Yu <boshiyu@linux.alibaba.com>
Link: https://patch.msgid.link/20241211020930.68833-4-boshiyu@linux.alibaba.com


Reviewed-by: default avatarCheng Xu <chengyou@linux.alibaba.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent 6edc15ab
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@

/* RoCEv2 related */
#define ERDMA_ROCEV2_GID_SIZE 16
#define ERDMA_MAX_PKEYS 1
#define ERDMA_DEFAULT_PKEY 0xFFFF

/* erdma device protocol type */
enum erdma_proto_type {
+1 −0
Original line number Diff line number Diff line
@@ -481,6 +481,7 @@ static const struct ib_device_ops erdma_device_ops_rocev2 = {
	.get_link_layer = erdma_get_link_layer,
	.add_gid = erdma_add_gid,
	.del_gid = erdma_del_gid,
	.query_pkey = erdma_query_pkey,
};

static const struct ib_device_ops erdma_device_ops_iwarp = {
+14 −0
Original line number Diff line number Diff line
@@ -336,6 +336,9 @@ int erdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr,
	attr->max_fast_reg_page_list_len = ERDMA_MAX_FRMR_PA;
	attr->page_size_cap = ERDMA_PAGE_SIZE_SUPPORT;

	if (erdma_device_rocev2(dev))
		attr->max_pkeys = ERDMA_MAX_PKEYS;

	if (dev->attrs.cap_flags & ERDMA_DEV_CAP_FLAGS_ATOMIC)
		attr->atomic_cap = IB_ATOMIC_GLOB;

@@ -372,6 +375,7 @@ int erdma_query_port(struct ib_device *ibdev, u32 port,
	} else {
		attr->gid_tbl_len = dev->attrs.max_gid;
		attr->ip_gids = true;
		attr->pkey_tbl_len = ERDMA_MAX_PKEYS;
	}

	attr->port_cap_flags = IB_PORT_CM_SUP | IB_PORT_DEVICE_MGMT_SUP;
@@ -411,6 +415,7 @@ int erdma_get_port_immutable(struct ib_device *ibdev, u32 port,
			RDMA_CORE_PORT_IBA_ROCE_UDP_ENCAP;
		port_immutable->max_mad_size = IB_MGMT_MAD_SIZE;
		port_immutable->gid_tbl_len = dev->attrs.max_gid;
		port_immutable->pkey_tbl_len = ERDMA_MAX_PKEYS;
	}

	return 0;
@@ -1903,3 +1908,12 @@ int erdma_del_gid(const struct ib_gid_attr *attr, void **context)
	return erdma_set_gid(to_edev(attr->device), ERDMA_SET_GID_OP_DEL,
			     attr->index, NULL);
}

int erdma_query_pkey(struct ib_device *ibdev, u32 port, u16 index, u16 *pkey)
{
	if (index >= ERDMA_MAX_PKEYS)
		return -EINVAL;

	*pkey = ERDMA_DEFAULT_PKEY;
	return 0;
}
+1 −0
Original line number Diff line number Diff line
@@ -394,5 +394,6 @@ enum rdma_link_layer erdma_get_link_layer(struct ib_device *ibdev,
					  u32 port_num);
int erdma_add_gid(const struct ib_gid_attr *attr, void **context);
int erdma_del_gid(const struct ib_gid_attr *attr, void **context);
int erdma_query_pkey(struct ib_device *ibdev, u32 port, u16 index, u16 *pkey);

#endif