mirror of
https://github.com/torvalds/linux.git
synced 2024-12-24 03:42:52 +00:00
14d3a3b249
This adds an abstraction that allows ULPs to simply pass a completion object and completion callback with each submitted WR and let the RDMA core handle the nitty gritty details of how to handle completion interrupts and poll the CQ. In detail there is a new ib_cqe structure which just contains the completion callback, and which can be used to get at the containing object using container_of. It is pointed to by the WR and WC as an alternative to the wr_id field, similar to how many ULPs already use the field to store a pointer using casts. A driver using the new completion callbacks allocates it's CQs using the new ib_create_cq API, which in addition to the number of CQEs and the completion vectors also takes a mode on how we poll for CQEs. Three modes are available: direct for drivers that never take CQ interrupts and just poll for them, softirq to poll from softirq context using the to be renamed blk-iopoll infrastructure which takes care of rearming and budgeting, or a workqueue for consumer who want to be called from user context. Thanks a lot to Sagi Grimberg who helped reviewing the API, wrote the current version of the workqueue code because my two previous attempts sucked too much and converted the iSER initiator to the new API. Signed-off-by: Christoph Hellwig <hch@lst.de>
77 lines
2.3 KiB
Plaintext
77 lines
2.3 KiB
Plaintext
menuconfig INFINIBAND
|
|
tristate "InfiniBand support"
|
|
depends on PCI || BROKEN
|
|
depends on HAS_IOMEM
|
|
depends on NET
|
|
depends on INET
|
|
depends on m || IPV6 != m
|
|
select IRQ_POLL
|
|
---help---
|
|
Core support for InfiniBand (IB). Make sure to also select
|
|
any protocols you wish to use as well as drivers for your
|
|
InfiniBand hardware.
|
|
|
|
if INFINIBAND
|
|
|
|
config INFINIBAND_USER_MAD
|
|
tristate "InfiniBand userspace MAD support"
|
|
depends on INFINIBAND
|
|
---help---
|
|
Userspace InfiniBand Management Datagram (MAD) support. This
|
|
is the kernel side of the userspace MAD support, which allows
|
|
userspace processes to send and receive MADs. You will also
|
|
need libibumad from <http://www.openfabrics.org/downloads/management/>.
|
|
|
|
config INFINIBAND_USER_ACCESS
|
|
tristate "InfiniBand userspace access (verbs and CM)"
|
|
select ANON_INODES
|
|
---help---
|
|
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
|
|
<http://www.openfabrics.org/git/>.
|
|
|
|
config INFINIBAND_USER_MEM
|
|
bool
|
|
depends on INFINIBAND_USER_ACCESS != n
|
|
default y
|
|
|
|
config INFINIBAND_ON_DEMAND_PAGING
|
|
bool "InfiniBand on-demand paging support"
|
|
depends on INFINIBAND_USER_MEM
|
|
select MMU_NOTIFIER
|
|
default y
|
|
---help---
|
|
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.
|
|
|
|
config INFINIBAND_ADDR_TRANS
|
|
bool
|
|
depends on INFINIBAND
|
|
default y
|
|
|
|
source "drivers/infiniband/hw/mthca/Kconfig"
|
|
source "drivers/infiniband/hw/qib/Kconfig"
|
|
source "drivers/infiniband/hw/cxgb3/Kconfig"
|
|
source "drivers/infiniband/hw/cxgb4/Kconfig"
|
|
source "drivers/infiniband/hw/mlx4/Kconfig"
|
|
source "drivers/infiniband/hw/mlx5/Kconfig"
|
|
source "drivers/infiniband/hw/nes/Kconfig"
|
|
source "drivers/infiniband/hw/ocrdma/Kconfig"
|
|
source "drivers/infiniband/hw/usnic/Kconfig"
|
|
|
|
source "drivers/infiniband/ulp/ipoib/Kconfig"
|
|
|
|
source "drivers/infiniband/ulp/srp/Kconfig"
|
|
source "drivers/infiniband/ulp/srpt/Kconfig"
|
|
|
|
source "drivers/infiniband/ulp/iser/Kconfig"
|
|
source "drivers/infiniband/ulp/isert/Kconfig"
|
|
|
|
endif # INFINIBAND
|