linux/drivers/infiniband/hw/ipath
Steve Wise 00f7ec36c9 RDMA/core: Add memory management extensions support
This patch adds support for the IB "base memory management extension"
(BMME) and the equivalent iWARP operations (which the iWARP verbs
mandates all devices must implement).  The new operations are:

 - Allocate an ib_mr for use in fast register work requests.

 - Allocate/free a physical buffer lists for use in fast register work
   requests.  This allows device drivers to allocate this memory as
   needed for use in posting send requests (eg via dma_alloc_coherent).

 - New send queue work requests:
   * send with remote invalidate
   * fast register memory region
   * local invalidate memory region
   * RDMA read with invalidate local memory region (iWARP only)

Consumer interface details:

 - A new device capability flag IB_DEVICE_MEM_MGT_EXTENSIONS is added
   to indicate device support for these features.

 - New send work request opcodes IB_WR_FAST_REG_MR, IB_WR_LOCAL_INV,
   IB_WR_RDMA_READ_WITH_INV are added.

 - A new consumer API function, ib_alloc_mr() is added to allocate
   fast register memory regions.

 - New consumer API functions, ib_alloc_fast_reg_page_list() and
   ib_free_fast_reg_page_list() are added to allocate and free
   device-specific memory for fast registration page lists.

 - A new consumer API function, ib_update_fast_reg_key(), is added to
   allow the key portion of the R_Key and L_Key of a fast registration
   MR to be updated.  Consumers call this if desired before posting
   a IB_WR_FAST_REG_MR work request.

Consumers can use this as follows:

 - MR is allocated with ib_alloc_mr().

 - Page list memory is allocated with ib_alloc_fast_reg_page_list().

 - MR R_Key/L_Key "key" field is updated with ib_update_fast_reg_key().

 - MR made VALID and bound to a specific page list via
   ib_post_send(IB_WR_FAST_REG_MR)

 - MR made INVALID via ib_post_send(IB_WR_LOCAL_INV),
   ib_post_send(IB_WR_RDMA_READ_WITH_INV) or an incoming send with
   invalidate operation.

 - MR is deallocated with ib_dereg_mr()

 - page lists dealloced via ib_free_fast_reg_page_list().

Applications can allocate a fast register MR once, and then can
repeatedly bind the MR to different physical block lists (PBLs) via
posting work requests to a send queue (SQ).  For each outstanding
MR-to-PBL binding in the SQ pipe, a fast_reg_page_list needs to be
allocated (the fast_reg_page_list is owned by the low-level driver
from the consumer posting a work request until the request completes).
Thus pipelining can be achieved while still allowing device-specific
page_list processing.

The 32-bit fast register memory key/STag is composed of a 24-bit index
and an 8-bit key.  The application can change the key each time it
fast registers thus allowing more control over the peer's use of the
key/STag (ie it can effectively be changed each time the rkey is
rebound to a page list).

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
2008-07-14 23:48:45 -07:00
..
ipath_7220.h IB/ipath: Isolate 7220-specific content 2008-04-16 21:09:30 -07:00
ipath_common.h IB/ipath: Update copyright dates for files changed in 2008 2008-04-16 21:09:32 -07:00
ipath_cq.c RDMA/core: Add memory management extensions support 2008-07-14 23:48:45 -07:00
ipath_debug.h IB/ipath: Prevent link-recovery code from negating admin disable 2008-04-16 21:09:26 -07:00
ipath_diag.c IB: convert struct class_device to struct device 2008-04-19 19:10:30 -07:00
ipath_dma.c [SG] Update drivers to use sg helpers 2007-10-22 21:19:53 +02:00
ipath_driver.c IB/ipath: Change ipath_devdata.ipath_sdma_status to be unsigned long 2008-05-13 11:51:23 -07:00
ipath_eeprom.c IB/ipath: Update copyright dates for files changed in 2008 2008-04-16 21:09:32 -07:00
ipath_file_ops.c Add a bunch of cycle_kernel_lock() calls 2008-06-20 14:05:53 -06:00
ipath_fs.c IB/ipath: Remove unnecessary cast 2008-01-25 14:17:46 -08:00
ipath_iba6110.c IB/ipath: Add support for 7220 receive queue changes 2008-04-16 21:09:29 -07:00
ipath_iba6120.c IB/ipath: Update copyright dates for files changed in 2008 2008-04-16 21:09:32 -07:00
ipath_iba7220.c IB/ipath: Simplify code using ARRAY_SIZE() macro 2008-07-14 23:48:44 -07:00
ipath_init_chip.c IB/ipath: Need to always request and handle PIO avail interrupts 2008-05-07 11:00:15 -07:00
ipath_intr.c IB/ipath: Need to always request and handle PIO avail interrupts 2008-05-07 11:00:15 -07:00
ipath_kernel.h IB/ipath: Avoid test_bit() on u64 SDMA status value 2008-05-26 15:20:34 -07:00
ipath_keys.c IB/ipath: Clean up some comments 2008-01-25 14:15:38 -08:00
ipath_mad.c IB/ipath: Fix SM trap forwarding 2008-06-06 11:23:29 -07:00
ipath_mmap.c IB/ipath: Update copyright dates 2007-07-09 20:12:26 -07:00
ipath_mr.c IB: expand ib_umem_get() prototype 2008-04-29 08:06:12 -07:00
ipath_qp.c IB/ipath: Fix many locking issues when switching to error state 2008-05-13 11:41:29 -07:00
ipath_rc.c RDMA/core: Add memory management extensions support 2008-07-14 23:48:45 -07:00
ipath_registers.h IB/ipath: Header file changes to support IBA7220 2008-04-16 21:09:30 -07:00
ipath_ruc.c RDMA/core: Add memory management extensions support 2008-07-14 23:48:45 -07:00
ipath_sd7220_img.c IB/ipath: Add IBA7220-specific SERDES initialization data 2008-04-16 21:09:31 -07:00
ipath_sd7220.c IB/ipath: Support for SerDes portion of IBA7220 2008-04-16 21:09:31 -07:00
ipath_sdma.c IB/ipath: Avoid test_bit() on u64 SDMA status value 2008-05-26 15:20:34 -07:00
ipath_srq.c IB/ipath: Update copyright dates for files changed in 2008 2008-04-16 21:09:32 -07:00
ipath_stats.c IB/ipath: Update copyright dates for files changed in 2008 2008-04-16 21:09:32 -07:00
ipath_sysfs.c IB/ipath: Update copyright dates for files changed in 2008 2008-04-16 21:09:32 -07:00
ipath_uc.c RDMA/core: Add memory management extensions support 2008-07-14 23:48:45 -07:00
ipath_ud.c RDMA/core: Add memory management extensions support 2008-07-14 23:48:45 -07:00
ipath_user_pages.c IB/ipath: Remove ipath_get_user_pages_nocopy() 2007-07-17 18:37:43 -07:00
ipath_user_sdma.c IB/ipath: User mode send DMA 2008-04-16 21:09:31 -07:00
ipath_user_sdma.h IB/ipath: Fix many locking issues when switching to error state 2008-05-13 11:41:29 -07:00
ipath_verbs_mcast.c IB/ipath: Update copyright dates 2007-07-09 20:12:26 -07:00
ipath_verbs.c IB/ipath: Fix device capability flags 2008-05-26 15:22:17 -07:00
ipath_verbs.h IB/ipath: Fix RDMA read response sequence checking 2008-05-13 11:42:20 -07:00
ipath_wc_ppc64.c IB/ipath: Update copyright dates 2007-07-09 20:12:26 -07:00
ipath_wc_x86_64.c IB/ipath: Update copyright dates 2007-07-09 20:12:26 -07:00
Kconfig IB/ipath: Remove dependency on PCI_MSI || HT_IRQ 2008-04-21 18:19:14 -07:00
Makefile IB/ipath: Build IBA7220 code unconditionally 2008-04-21 18:19:14 -07:00