Skip to content

Commit f5aa915

Browse files
Sagi Grimbergdledford
authored andcommitted
IB/core: Add arbitrary sg_list support
Devices that are capable in registering SG lists with gaps can now expose it in the core to ULPs using a new device capability IB_DEVICE_SG_GAPS_REG (in a new field device_cap_flags_ex in the device attributes as we ran out of bits), and a new mr_type IB_MR_TYPE_SG_GAPS_REG which allocates a memory region which is capable of handling SG lists with gaps. Signed-off-by: Sagi Grimberg <[email protected]> Signed-off-by: Doug Ledford <[email protected]>
1 parent 911f433 commit f5aa915

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

drivers/infiniband/core/verbs.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1567,6 +1567,8 @@ EXPORT_SYMBOL(ib_check_mr_status);
15671567
* - The last sg element is allowed to have length less than page_size.
15681568
* - If sg_nents total byte length exceeds the mr max_num_sge * page_size
15691569
* then only max_num_sg entries will be mapped.
1570+
* - If the MR was allocated with type IB_MR_TYPE_SG_GAPS_REG, non of these
1571+
* constraints holds and the page_size argument is ignored.
15701572
*
15711573
* Returns the number of sg elements that were mapped to the memory region.
15721574
*

include/rdma/ib_verbs.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ enum ib_device_cap_flags {
212212
IB_DEVICE_MANAGED_FLOW_STEERING = (1 << 29),
213213
IB_DEVICE_SIGNATURE_HANDOVER = (1 << 30),
214214
IB_DEVICE_ON_DEMAND_PAGING = (1 << 31),
215+
IB_DEVICE_SG_GAPS_REG = (1ULL << 32),
215216
};
216217

217218
enum ib_signature_prot_cap {
@@ -662,10 +663,15 @@ __attribute_const__ int ib_rate_to_mbps(enum ib_rate rate);
662663
* @IB_MR_TYPE_SIGNATURE: memory region that is used for
663664
* signature operations (data-integrity
664665
* capable regions)
666+
* @IB_MR_TYPE_SG_GAPS: memory region that is capable to
667+
* register any arbitrary sg lists (without
668+
* the normal mr constraints - see
669+
* ib_map_mr_sg)
665670
*/
666671
enum ib_mr_type {
667672
IB_MR_TYPE_MEM_REG,
668673
IB_MR_TYPE_SIGNATURE,
674+
IB_MR_TYPE_SG_GAPS,
669675
};
670676

671677
/**

0 commit comments

Comments
 (0)