2019-05-19 20:07:45 +08:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
2007-05-24 05:21:22 +08:00
|
|
|
menuconfig INFINIBAND
|
2005-04-17 06:20:36 +08:00
|
|
|
tristate "InfiniBand support"
|
2017-11-20 02:58:30 +08:00
|
|
|
depends on HAS_IOMEM && HAS_DMA
|
2011-05-21 02:46:11 +08:00
|
|
|
depends on NET
|
2014-01-16 23:16:47 +08:00
|
|
|
depends on INET
|
|
|
|
depends on m || IPV6 != m
|
2017-11-28 01:04:22 +08:00
|
|
|
depends on !ALPHA
|
2015-12-12 03:53:03 +08:00
|
|
|
select IRQ_POLL
|
2019-07-08 18:59:04 +08:00
|
|
|
select DIMLIB
|
2020-06-14 00:50:22 +08:00
|
|
|
help
|
2005-04-17 06:20:36 +08:00
|
|
|
Core support for InfiniBand (IB). Make sure to also select
|
|
|
|
any protocols you wish to use as well as drivers for your
|
|
|
|
InfiniBand hardware.
|
|
|
|
|
2007-05-24 05:21:22 +08:00
|
|
|
if INFINIBAND
|
|
|
|
|
2005-09-08 03:43:08 +08:00
|
|
|
config INFINIBAND_USER_MAD
|
|
|
|
tristate "InfiniBand userspace MAD support"
|
2005-07-08 08:57:14 +08:00
|
|
|
depends on INFINIBAND
|
2020-06-14 00:50:22 +08:00
|
|
|
help
|
2005-09-08 03:43:08 +08:00
|
|
|
Userspace InfiniBand Management Datagram (MAD) support. This
|
|
|
|
is the kernel side of the userspace MAD support, which allows
|
2006-09-23 06:22:46 +08:00
|
|
|
userspace processes to send and receive MADs. You will also
|
2018-02-03 05:35:29 +08:00
|
|
|
need libibumad from rdma-core
|
|
|
|
<https://github.com/linux-rdma/rdma-core>.
|
2005-09-08 03:43:08 +08:00
|
|
|
|
|
|
|
config INFINIBAND_USER_ACCESS
|
|
|
|
tristate "InfiniBand userspace access (verbs and CM)"
|
2018-09-29 05:20:23 +08:00
|
|
|
depends on MMU
|
2020-06-14 00:50:22 +08:00
|
|
|
help
|
2005-09-08 03:43:08 +08:00
|
|
|
Userspace InfiniBand access support. This enables the
|
|
|
|
kernel side of userspace verbs and the userspace
|
|
|
|
communication manager (CM). This allows userspace processes
|
|
|
|
to set up connections and directly access InfiniBand
|
|
|
|
hardware for fast-path operations. You will also need
|
|
|
|
libibverbs, libibcm and a hardware driver library from
|
2018-02-03 05:35:29 +08:00
|
|
|
rdma-core <https://github.com/linux-rdma/rdma-core>.
|
2005-07-08 08:57:14 +08:00
|
|
|
|
2007-03-05 08:15:11 +08:00
|
|
|
config INFINIBAND_USER_MEM
|
|
|
|
bool
|
|
|
|
depends on INFINIBAND_USER_ACCESS != n
|
2017-10-06 15:13:46 +08:00
|
|
|
depends on MMU
|
2007-03-05 08:15:11 +08:00
|
|
|
default y
|
|
|
|
|
2014-12-11 23:04:16 +08:00
|
|
|
config INFINIBAND_ON_DEMAND_PAGING
|
|
|
|
bool "InfiniBand on-demand paging support"
|
|
|
|
depends on INFINIBAND_USER_MEM
|
2014-12-11 23:04:18 +08:00
|
|
|
select MMU_NOTIFIER
|
2019-08-19 19:16:59 +08:00
|
|
|
select INTERVAL_TREE
|
2020-10-01 00:38:25 +08:00
|
|
|
select HMM_MIRROR
|
2014-12-11 23:04:16 +08:00
|
|
|
default y
|
2020-06-14 00:50:22 +08:00
|
|
|
help
|
2014-12-11 23:04:16 +08:00
|
|
|
On demand paging support for the InfiniBand subsystem.
|
|
|
|
Together with driver support this allows registration of
|
|
|
|
memory regions without pinning their pages, fetching the
|
|
|
|
pages on demand instead.
|
|
|
|
|
2006-06-18 11:37:28 +08:00
|
|
|
config INFINIBAND_ADDR_TRANS
|
2018-04-27 02:19:35 +08:00
|
|
|
bool "RDMA/CM"
|
2014-01-16 23:16:47 +08:00
|
|
|
depends on INFINIBAND
|
2006-06-18 11:37:28 +08:00
|
|
|
default y
|
2020-06-14 00:50:22 +08:00
|
|
|
help
|
2018-04-27 02:19:35 +08:00
|
|
|
Support for RDMA communication manager (CM).
|
|
|
|
This allows for a generic connection abstraction over RDMA.
|
2006-06-18 11:37:28 +08:00
|
|
|
|
2015-12-23 20:56:55 +08:00
|
|
|
config INFINIBAND_ADDR_TRANS_CONFIGFS
|
|
|
|
bool
|
|
|
|
depends on INFINIBAND_ADDR_TRANS && CONFIGFS_FS && !(INFINIBAND=y && CONFIGFS_FS=m)
|
|
|
|
default y
|
2020-06-14 00:50:22 +08:00
|
|
|
help
|
2015-12-23 20:56:55 +08:00
|
|
|
ConfigFS support for RDMA communication manager (CM).
|
|
|
|
This allows the user to config the default GID type that the CM
|
|
|
|
uses for each device, when initiaing new connections.
|
|
|
|
|
2020-11-07 02:19:32 +08:00
|
|
|
config INFINIBAND_VIRT_DMA
|
|
|
|
def_bool !HIGHMEM
|
|
|
|
|
2019-01-09 17:15:15 +08:00
|
|
|
if INFINIBAND_USER_ACCESS || !INFINIBAND_USER_ACCESS
|
2005-04-17 06:20:36 +08:00
|
|
|
source "drivers/infiniband/hw/mthca/Kconfig"
|
2010-05-24 12:44:54 +08:00
|
|
|
source "drivers/infiniband/hw/qib/Kconfig"
|
2010-04-22 06:30:06 +08:00
|
|
|
source "drivers/infiniband/hw/cxgb4/Kconfig"
|
2019-05-06 01:59:31 +08:00
|
|
|
source "drivers/infiniband/hw/efa/Kconfig"
|
2016-01-21 03:40:16 +08:00
|
|
|
source "drivers/infiniband/hw/i40iw/Kconfig"
|
2007-05-09 09:00:38 +08:00
|
|
|
source "drivers/infiniband/hw/mlx4/Kconfig"
|
2013-07-07 22:25:49 +08:00
|
|
|
source "drivers/infiniband/hw/mlx5/Kconfig"
|
2012-03-21 06:39:06 +08:00
|
|
|
source "drivers/infiniband/hw/ocrdma/Kconfig"
|
IB: Add vmw_pvrdma driver
This patch series adds a driver for a paravirtual RDMA device. The
device is developed for VMware's Virtual Machines and allows existing RDMA
applications to continue to use existing Verbs API when deployed in VMs
on ESXi. We recently did a presentation in the OFA Workshop [1] regarding
this device.
Description and RDMA Support
============================
The virtual device is exposed as a dual function PCIe device. One part
is a virtual network device (VMXNet3) which provides networking properties
like MAC, IP addresses to the RDMA part of the device. The networking
properties are used to register GIDs required by RDMA applications to
communicate.
These patches add support and the all required infrastructure for
letting applications use such a device. We support the mandatory Verbs API as
well as the base memory management extensions (Local Inv, Send with Inv and
Fast Register Work Requests). We currently support both Reliable Connected
and Unreliable Datagram QPs but do not support Shared Receive Queues
(SRQs).
Also, we support the following types of Work Requests:
o Send/Receive (with or without Immediate Data)
o RDMA Write (with or without Immediate Data)
o RDMA Read
o Local Invalidate
o Send with Invalidate
o Fast Register Work Requests
This version only adds support for version 1 of RoCE. We will add RoCEv2
support in a future patch. We do support registration of both MAC-based
and IP-based GIDs. I have also created a git tree for our user-level driver
[2].
Testing
=======
We have tested this internally for various types of Guest OS - Red Hat,
Centos, Ubuntu 12.04/14.04/16.04, Oracle Enterprise Linux, SLES 12
using backported versions of this driver. The tests included several
runs of the performance tests (included with OFED), Intel MPI PingPong
benchmark on OpenMPI, krping for FRWRs. Mellanox has been kind enough
to test the backported version of the driver internally on their hardware
using a VMware provided ESX build. I have also applied and tested this
with Doug's k.o/for-4.9 branch (commit 5603910b). Note, that this patch
series should be applied all together. I split out the commits so that
it may be easier to review.
PVRDMA Resources
================
[1] OFA Workshop Presentation -
https://openfabrics.org/images/eventpresos/2016presentations/102parardma.pdf
[2] Libpvrdma User-level library -
http://git.openfabrics.org/?p=~aditr/libpvrdma.git;a=summary
Reviewed-by: Jorgen Hansen <jhansen@vmware.com>
Reviewed-by: George Zhang <georgezhang@vmware.com>
Reviewed-by: Aditya Sarwade <asarwade@vmware.com>
Reviewed-by: Bryan Tan <bryantan@vmware.com>
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Adit Ranadive <aditr@vmware.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
2016-10-03 10:10:22 +08:00
|
|
|
source "drivers/infiniband/hw/vmw_pvrdma/Kconfig"
|
2013-09-10 11:38:16 +08:00
|
|
|
source "drivers/infiniband/hw/usnic/Kconfig"
|
2016-07-21 19:06:56 +08:00
|
|
|
source "drivers/infiniband/hw/hns/Kconfig"
|
2019-01-09 17:15:15 +08:00
|
|
|
source "drivers/infiniband/hw/bnxt_re/Kconfig"
|
|
|
|
source "drivers/infiniband/hw/hfi1/Kconfig"
|
|
|
|
source "drivers/infiniband/hw/qedr/Kconfig"
|
|
|
|
source "drivers/infiniband/sw/rdmavt/Kconfig"
|
|
|
|
source "drivers/infiniband/sw/rxe/Kconfig"
|
2019-06-21 00:21:33 +08:00
|
|
|
source "drivers/infiniband/sw/siw/Kconfig"
|
2019-01-09 17:15:15 +08:00
|
|
|
endif
|
2007-05-09 09:00:38 +08:00
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
source "drivers/infiniband/ulp/ipoib/Kconfig"
|
|
|
|
|
2005-11-03 06:07:13 +08:00
|
|
|
source "drivers/infiniband/ulp/srp/Kconfig"
|
2011-10-14 09:30:46 +08:00
|
|
|
source "drivers/infiniband/ulp/srpt/Kconfig"
|
2005-11-03 06:07:13 +08:00
|
|
|
|
2006-05-11 15:03:30 +08:00
|
|
|
source "drivers/infiniband/ulp/iser/Kconfig"
|
iser-target: Add iSCSI Extensions for RDMA (iSER) target driver
This patch adds support for iSCSI Extensions for RDMA target mode,
and includes CQ pooling per isert_device context distributed across
multiple active iser target sessions.
It also uses cmwq process context for RX / TX ib_post_cq() polling
via isert_cq_desc->cq_[rx,tx]_work invoked by isert_cq_[rx,tx]_callback()
hardIRQ context callbacks.
v5 changes:
- Use ISER_RECV_DATA_SEG_LEN instead of hardcoded value in ISER_RX_PAD_SIZE (Or)
- Fix make W=1 warnings (Or)
- Add missing depends on NET && INFINIBAND_ADDR_TRANS in Kconfig (Randy + Or)
- Make isert_device_find_by_ib_dev() return proper ERR_PTR (Wei Yongjun)
- Properly setup iscsi_np->np_sockaddr in isert_setup_np() (Shlomi + nab)
- Add special case for early ISCSI_OP_SCSI_CMD exception handling (nab)
v4 changes:
- Mark isert_cq_rx_work as static (Or)
- Drop unnecessary ib_dma_sync_single_for_cpu + ib_dma_sync_single_for_device
calls for isert_cmd->sense_buf_dma from isert_put_response (Or)
- Use 12288 for ISER_RX_PAD_SIZE base to save extra page per
struct iser_rx_desc (Or + nab)
- Drop now unnecessary isert_rx_desc usage, and convert RX users to
iser_rx_desc (Or + nab)
- Move isert_[alloc,free]_rx_descriptors() ahead of
isert_create_device_ib_res() usage (nab)
- Mark isert_cq_[rx,tx]_callback() + prototypes as static
- Fix 'warning: 'ret' may be used uninitialized' warning for
isert_create_device_ib_res on powerpc allmodconfig (fengguang + nab)
- Fix 'warning: 'ret' may be used uninitialized' warning for
isert_connect_request on i386 allyesconfig (fengguang + nab)
- Fix pr_debug conversion specification in isert_rx_completion()
(fengguang + nab)
- Drop unnecessary isert_conn->conn_cm_id != NULL check in
isert_connect_release causing the build warning:
"variable dereferenced before check 'isert_conn->conn_cm_id'"
- Fix isert_lid + isert_np leak in isert_setup_np failure path
- Add isert_conn->conn_wait_comp_err usage in isert_free_conn()
for isert_cq_comp_err completion path
- Add isert_conn->logout_posted bit to determine decrement of
isert_conn->post_send_buf_count from logout response completion
- Always set ISER_CONN_DOWN from isert_disconnect_work() callback
v3 changes:
- Convert to use per isert_cq_desc->cq_[rx,tx]_work + drop tasklets (Or + nab)
- Move IB_EVENT_QP_LAST_WQE_REACHED warn into correct
isert_qp_event_callback (Or)
- Drop unnecessary IB_ACCESS_REMOTE_* access flag usage in
isert_create_device_ib_res (Or)
- Add common isert_init_send_wr(), and convert isert_put_* calls (Or)
- Move to verbs+core logic to single ib_isert.[c,h] (Or + nab)
- Add kmem_cache isert_cmd_cache usage for descriptor allocation (nab)
- Move common ib_post_send() logic used by isert_put_*() to
isert_post_response() (nab)
- Add isert_put_reject call in isert_response_queue() for posting
ISCSI_REJECT response. (nab)
- Add ISTATE_SEND_REJECT checking in isert_do_control_comp. (nab)
v2 changes:
- Drop unused ISERT_ADDR_ROUTE_TIMEOUT define
- Add rdma_notify() call for IB_EVENT_COMM_EST in isert_qp_event_callback()
- Make isert_query_device() less verbose
- Drop unused RDMA_CM_EVENT_ADDR_ERROR and RDMA_CM_EVENT_ROUTE_ERROR
cases from isert_cma_handler()
- Drop unused rdma/ib_fmr_pool.h include
- Update isert_conn_setup_qp() to assign cq based upon least used
- Add isert_create_device_ib_res() to setup PD, CQs and MRs for each
underlying struct ib_device, instead of using per isert_conn resources.
- Add isert_free_device_ib_res() to release PD, CQs and MRs for each
underlying struct ib_device.
- Add isert_device_find_by_ib_dev()
- Change isert_connect_request() to drop PD, CQs and MRs allocation,
and use isert_device_find_by_ib_dev() instead.
- Add isert_device_try_release()
- Change isert_connect_release() to decrement cq_active_qps, and drop
PD, CQs and MRs resource release.
- Update isert_connect_release() to call isert_device_try_release()
- Make isert_create_device_ib_res() determine device->cqs_used based
upon num_online_cpus()
- Drop misleading isert_dump_ib_wc() usage
- Drop unused rdma/ib_fmr_pool.h include
- Use proper xfer_len for login PDUs in isert_rx_completion()
- Add isert_release_cmd() usage
- Change isert_alloc_cmd() to setup iscsi_cmd.release_cmd() pointer
- Change isert_put_cmd() to perform per iscsi_opcode specific release
logic
- Add isert_unmap_cmd() call for ISCSI_OP_SCSI_CMD from isert_put_cmd()
- Change isert_send_completion() to call
atomic_dec(&isert_conn->post_send_buf_count)
based upon per iscsi_opcode logic
- Drop ISTATE_REMOVE processing from isert_immediate_queue()
- Drop ISTATE_SEND_DATAIN processing from isert_response_queue()
- Drop ISTATE_SEND_STATUS processing from isert_response_queue()
- Drop iscsit_transport->iscsit_unmap_cmd() and ->iscsit_free_cmd()
- Convert iser_cq_tx_tasklet() to use struct isert_cq_desc pooling logic
- Convert isert_cq_tx_callback() to use struct isert_cq_desc pooling
logic
- Convert iser_cq_rx_tasklet() to use struct isert_cq_desc pooling logic
- Convert isert_cq_rx_callback() to use struct isert_cq_desc pooling
logic
- Add explict iscsit_stop_dataout_timer() call to
isert_do_rdma_read_comp()
- Use isert_get_dataout() for iscsit_transport->iscsit_get_dataout()
caller
- Drop ISTATE_SEND_R2T processing from isert_immediate_queue()
- Drop unused rdma/ib_fmr_pool.h include
- Drop isert_cmd->cmd_kref in favor of se_cmd->cmd_kref usage
- Add struct isert_device in order to support multiple EQs + CQ pooling
- Add struct isert_cq_desc
- Drop tasklets and cqs from isert_conn
- Bump ISERT_MAX_CQ to 64
- Various minor checkpatch fixes
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
2013-03-07 16:56:19 +08:00
|
|
|
source "drivers/infiniband/ulp/isert/Kconfig"
|
2020-05-11 21:51:19 +08:00
|
|
|
source "drivers/infiniband/ulp/rtrs/Kconfig"
|
2006-05-11 15:03:30 +08:00
|
|
|
|
2017-04-13 11:29:22 +08:00
|
|
|
source "drivers/infiniband/ulp/opa_vnic/Kconfig"
|
2017-02-10 19:19:53 +08:00
|
|
|
|
2007-05-24 05:21:22 +08:00
|
|
|
endif # INFINIBAND
|