Add support for 0xefa1 device
Subsystems (2)
cover Add support for 0xefa1 device
Hi all,
The following submission adds the needed functionality in order to support 0xefa1 devices, and adds it to the driver pci table.
PR was sent:
https://github.com/linux-rdma/rdma-core/pull/789
Regards,
Gal
Gal Pressman (3):
RDMA/efa: Expose maximum TX doorbell batch
RDMA/efa: Expose minimum SQ size
RDMA/efa: Add EFA 0xefa1 PCI ID
drivers/infiniband/hw/efa/efa_admin_cmds_defs.h | 15 +++++++++++++-- drivers/infiniband/hw/efa/efa_com_cmd.c | 2 ++ drivers/infiniband/hw/efa/efa_com_cmd.h | 2 ++ drivers/infiniband/hw/efa/efa_main.c | 6 ++++-- drivers/infiniband/hw/efa/efa_verbs.c | 2 ++ include/uapi/rdma/efa-abi.h | 5 ++++- 6 files changed, 27 insertions(+), 5 deletions(-)
base-commit: d473f4dc2f95c8c856b1659ced3502802b7d2fbe
Signature · 1 line
2.27.0
PATCH 1/3 RDMA/efa: Expose maximum TX doorbell batch
The device reports the maximum number of bytes to be written before ringing the doorbell (zero means unlimited).
This patch queries the max batch size and reports it back to the userspace library.
--- drivers/infiniband/hw/efa/efa_admin_cmds_defs.h | 11 +++++++++++ drivers/infiniband/hw/efa/efa_com_cmd.c | 1 + drivers/infiniband/hw/efa/efa_com_cmd.h | 1 + drivers/infiniband/hw/efa/efa_verbs.c | 1 + include/uapi/rdma/efa-abi.h | 4 +++- 5 files changed, 17 insertions(+), 1 deletion(-)
drivers/infiniband/hw/efa/efa_admin_cmds_defs.h +11 -0
@@ -632,6 +632,17 @@ struct efa_admin_feature_queue_attr_desc {/* Maximum number of SGEs for a single RDMA read WQE */ u16 max_wr_rdma_sges; + +/* +* Maximum number of bytes that can be written to SQ between two +* consecutive doorbells (in units of 64B). Driver must ensure that only +* complete WQEs are written to queue before issuing a doorbell. +* Examples: max_tx_batch=16 and WQE size = 64B, means up to 16 WQEs can +* be written to SQ between two consecutive doorbells. max_tx_batch=11 +* and WQE size = 128B, means up to 5 WQEs can be written to SQ between +* two consecutive doorbells. Zero means unlimited. +*/ +u16 max_tx_batch; };struct efa_admin_feature_aenq_desc {
drivers/infiniband/hw/efa/efa_com_cmd.c +1 -0
@@ -480,6 +480,7 @@ int efa_com_get_device_attr(struct efa_com_dev *edev, result->max_llq_size = resp.u.queue_attr.max_llq_size; result->sub_cqs_per_cq = resp.u.queue_attr.sub_cqs_per_cq; result->max_wr_rdma_sge = resp.u.queue_attr.max_wr_rdma_sges; + result->max_tx_batch = resp.u.queue_attr.max_tx_batch; err =efa_com_get_feature (edev, &resp,EFA_ADMIN_NETWORK_ATTR );if (err) {
drivers/infiniband/hw/efa/efa_com_cmd.h +1 -0
@@ -127,6 +127,7 @@ struct efa_com_get_device_attr_result {u16 max_sq_sge;u16 max_rq_sge;u16 max_wr_rdma_sge; +u16 max_tx_batch;u8 db_bar; };
drivers/infiniband/hw/efa/efa_verbs.c +1 -0
@@ -1525,6 +1525,7 @@ int efa_alloc_ucontext(struct ib_ucontext *ibucontext, struct ib_udata *udata) resp.sub_cqs_per_cq = dev->dev_attr.sub_cqs_per_cq; resp.inline_buf_size = dev->dev_attr.inline_buf_size; resp.max_llq_size = dev->dev_attr.max_llq_size; + resp.max_tx_batch = dev->dev_attr.max_tx_batch;if (udata && udata->outlen) { err = ib_copy_to_udata(udata, &resp,
include/uapi/rdma/efa-abi.h +3 -1
@@ -1,6 +1,6 @@/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */ /* -* Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All rights reserved. +* Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All rights reserved. */ #ifndef EFA_ABI_USER_H
@@ -31,6 +31,8 @@ struct efa_ibv_alloc_ucontext_resp {__u16 sub_cqs_per_cq;__u16 inline_buf_size;__u32 max_llq_size;/* bytes */ +__u16 max_tx_batch;/* units of 64 bytes */ +__u8 reserved_90[6 ]; };struct efa_ibv_alloc_pd_resp {
Signature · 1 line
2.27.0
PATCH 2/3 RDMA/efa: Expose minimum SQ size
In reply to Gal PressmanThe device reports the minimum SQ size required for creation.
This patch queries the min SQ size and reports it back to the userspace library.
--- drivers/infiniband/hw/efa/efa_admin_cmds_defs.h | 4 ++-- drivers/infiniband/hw/efa/efa_com_cmd.c | 1 + drivers/infiniband/hw/efa/efa_com_cmd.h | 1 + drivers/infiniband/hw/efa/efa_verbs.c | 1 + include/uapi/rdma/efa-abi.h | 3 ++- 5 files changed, 7 insertions(+), 3 deletions(-)
drivers/infiniband/hw/efa/efa_admin_cmds_defs.h +2 -2
@@ -606,8 +606,8 @@ struct efa_admin_feature_queue_attr_desc {/* Number of sub-CQs to be created for each CQ */ u16 sub_cqs_per_cq; -/* MBZ */ -u16 reserved; +/* Minimum number of WQEs per SQ */ +u16 min_sq_depth;/* Maximum number of SGEs (buffers) allowed for a single send WQE */ u16 max_wr_send_sges;
drivers/infiniband/hw/efa/efa_com_cmd.c +1 -0
@@ -481,6 +481,7 @@ int efa_com_get_device_attr(struct efa_com_dev *edev, result->sub_cqs_per_cq = resp.u.queue_attr.sub_cqs_per_cq; result->max_wr_rdma_sge = resp.u.queue_attr.max_wr_rdma_sges; result->max_tx_batch = resp.u.queue_attr.max_tx_batch; + result->min_sq_depth = resp.u.queue_attr.min_sq_depth; err =efa_com_get_feature (edev, &resp,EFA_ADMIN_NETWORK_ATTR );if (err) {
drivers/infiniband/hw/efa/efa_com_cmd.h +1 -0
@@ -128,6 +128,7 @@ struct efa_com_get_device_attr_result {u16 max_rq_sge;u16 max_wr_rdma_sge;u16 max_tx_batch; +u16 min_sq_depth;u8 db_bar; };
drivers/infiniband/hw/efa/efa_verbs.c +1 -0
@@ -1526,6 +1526,7 @@ int efa_alloc_ucontext(struct ib_ucontext *ibucontext, struct ib_udata *udata) resp.inline_buf_size = dev->dev_attr.inline_buf_size; resp.max_llq_size = dev->dev_attr.max_llq_size; resp.max_tx_batch = dev->dev_attr.max_tx_batch; + resp.min_sq_wr = dev->dev_attr.min_sq_depth;if (udata && udata->outlen) { err = ib_copy_to_udata(udata, &resp,
include/uapi/rdma/efa-abi.h +2 -1
@@ -32,7 +32,8 @@ struct efa_ibv_alloc_ucontext_resp {__u16 inline_buf_size;__u32 max_llq_size;/* bytes */ __u16 max_tx_batch;/* units of 64 bytes */ -__u8 reserved_90[6 ]; +__u16 min_sq_wr; +__u8 reserved_a0[4 ]; };struct efa_ibv_alloc_pd_resp {
Signature · 1 line
2.27.0
PATCH 3/3 RDMA/efa: Add EFA 0xefa1 PCI ID
In reply to Gal PressmanAdd support for 0xefa1 devices.
--- drivers/infiniband/hw/efa/efa_main.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/infiniband/hw/efa/efa_main.c +4 -2
@@ -12,10 +12,12 @@#include "efa.h" -#define PCI_DEV_ID_EFA_VF 0xefa0 +#define PCI_DEV_ID_EFA0_VF 0xefa0 +#define PCI_DEV_ID_EFA1_VF 0xefa1static const struct pci_device_id efa_pci_tbl[] = { - {PCI_VDEVICE (AMAZON ,PCI_DEV_ID_EFA_VF ) }, + {PCI_VDEVICE (AMAZON ,PCI_DEV_ID_EFA0_VF ) }, + {PCI_VDEVICE (AMAZON ,PCI_DEV_ID_EFA1_VF ) }, { } };
Signature · 1 line
2.27.0