From 7359d21ae1897496da62b0e55a35b4b231d5d4eb Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Fri, 7 Sep 2012 14:28:39 -0700 Subject: [PATCH] Using extensions to define XRC support Define a common libibverbs extension to support XRC. XRC introduces several new concepts and structures: XRC domains: xrcd's are a type of protection domain used to associate shared receive queues with xrc queue pairs. Since xrcd are meant to be shared among multiple processes, we introduce new APIs to open/close xrcd's. XRC shared receive queues: xrc srq's are similar to normal srq's, except that they are bound to an xrcd, rather than to a protection domain. Based on the current spec and implementation, they are only usable with xrc qps. To support xrc srq's, we extend the existing srq_init_attr structure to include an srq type and other needed information. The extended fields are ignored unless extensions are being used to support existing applications. XRC queue pairs: xrc defines two new types of QPs. The initiator, or send-side, xrc qp behaves similar to a send- only RC qp. xrc send qp's are managed through the existing QP functions. The send_wr structure is extended in a back- wards compatible way to support posting sends on a send xrc qp, which require specifying the remote xrc srq. The target, or receive-side, xrc qp behaves differently than other implemented qp's. A recv xrc qp can be created, modified, and destroyed like other qp's through the existing calls. The qp_init_attr structure is extended for xrc qp's, with extension support dependent upon the qp_type being defined correctly. Because xrc recv qp's are bound to an xrcd, rather than a pd, it is intended to be used among multiple processes. Any process with access to an xrcd may allocate and connect an xrc recv qp. The actual xrc recv qp is allocated and managed by the kernel. If the owning process explicit destroys the xrc recv qp, it is destroyed. However, if the xrc recv qp is left open when the user process exits or closes its device, then the lifetime of the xrc recv qp is bound with the lifetime of the xrcd. The user to kernel ABI is extended to account for opening/ closing the xrcd and the creation of the extended srq type. Signed-off-by: Sean Hefty -- 2.46.0