Skip to content

Commit 2fa5086

Browse files
committed
pyverbs/efa: Add processing hints support
Expose work request processing hints setter through pyverbs EFA direct verbs API. Reviewed-by: Yonatan Nachum <ynachum@amazon.com> Signed-off-by: Michael Margolin <mrgolin@amazon.com>
1 parent e89166b commit 2fa5086

4 files changed

Lines changed: 28 additions & 4 deletions

File tree

pyverbs/providers/efa/efa_enums.pxd

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ cdef extern from 'infiniband/efadv.h':
1919
EFADV_QP_FLAGS_UNSOLICITED_WRITE_RECV
2020
EFADV_QP_FLAGS_INLINE_WRITE
2121

22+
cpdef enum:
23+
EFADV_WR_EX_WITH_PROCESSING_HINTS
24+
25+
cpdef enum:
26+
EFADV_WR_PROCESSING_HINT_BURST_PPS_SENSITIVE
27+
2228
cpdef enum:
2329
EFADV_WC_EX_WITH_SGID
2430
EFADV_WC_EX_WITH_IS_UNSOLICITED

pyverbs/providers/efa/efadv.pxd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ cdef class SRDQP(QP):
3333

3434

3535
cdef class SRDQPEx(QPEx):
36-
pass
36+
cdef dv.efadv_qp *dv_qp
3737

3838

3939
cdef class EfaQPInitAttr(PyverbsObject):

pyverbs/providers/efa/efadv.pyx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,13 +195,21 @@ cdef class EfaQPInitAttr(PyverbsObject):
195195
def sl(self,val):
196196
self.qp_init_attr.sl = val
197197

198+
@property
199+
def wr_flags(self):
200+
return self.qp_init_attr.wr_flags
201+
202+
@wr_flags.setter
203+
def wr_flags(self, val):
204+
self.qp_init_attr.wr_flags = val
205+
198206

199207
cdef class SRDQPEx(QPEx):
200208
"""
201209
Initializes an SRD QPEx according to the user-provided data.
202210
:param ctx: Context object
203-
:param init_attr: QPInitAttrEx object
204-
:param dv_init_attr: EFAQPInitAttr object
211+
:param attr_ex: QPInitAttrEx object
212+
:param efa_init_attr: EFAQPInitAttr object
205213
:return: An initialized SRDQPEx
206214
"""
207215
def __init__(self, Context ctx not None, QPInitAttrEx attr_ex not None, EfaQPInitAttr efa_init_attr not None):
@@ -215,13 +223,17 @@ cdef class SRDQPEx(QPEx):
215223
pd=<PD>attr_ex.pd
216224
pd.add_ref(self)
217225
super().__init__(ctx, attr_ex)
226+
self.dv_qp = dv.efadv_qp_from_ibv_qp_ex(self.qp_ex)
218227

219228
def _get_comp_mask(self, dst):
220229
srd_mask = {'INIT': ibv_qp_attr_mask.IBV_QP_PKEY_INDEX | ibv_qp_attr_mask.IBV_QP_PORT | ibv_qp_attr_mask.IBV_QP_QKEY,
221230
'RTR': 0,
222231
'RTS': ibv_qp_attr_mask.IBV_QP_SQ_PSN}
223232
return srd_mask [dst] | ibv_qp_attr_mask.IBV_QP_STATE
224233

234+
def wr_set_processing_hints(self, hints):
235+
dv.efadv_wr_set_processing_hints(self.dv_qp, hints)
236+
225237

226238
cdef class EfaDVCQInitAttr(PyverbsObject):
227239
"""

pyverbs/providers/efa/libefa.pxd

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ cdef extern from 'infiniband/efadv.h':
3131
uint32_t driver_qp_type;
3232
uint16_t flags;
3333
uint8_t sl;
34-
uint8_t reserved[1];
34+
uint8_t reserved;
35+
uint64_t wr_flags;
36+
37+
cdef struct efadv_qp:
38+
uint64_t comp_mask;
3539

3640
cdef struct efadv_cq_init_attr:
3741
uint64_t comp_mask;
@@ -68,6 +72,8 @@ cdef extern from 'infiniband/efadv.h':
6872
v.ibv_qp_init_attr_ex *attr_ex,
6973
efadv_qp_init_attr *efa_attr,
7074
uint32_t inlen)
75+
efadv_qp *efadv_qp_from_ibv_qp_ex(v.ibv_qp_ex *ibvqpx)
76+
void efadv_wr_set_processing_hints(efadv_qp *efadv_qp, uint32_t hints)
7177
v.ibv_cq_ex *efadv_create_cq(v.ibv_context *ibvctx,
7278
v.ibv_cq_init_attr_ex *attr_ex,
7379
efadv_cq_init_attr *efa_attr,

0 commit comments

Comments
 (0)