@@ -200,17 +200,21 @@ static inline ssize_t efa_rma_post_write(struct efa_base_ep *base_ep,
200200 struct efa_conn * conn ;
201201#ifndef _WIN32
202202 struct ibv_sge sge_list [msg -> iov_count ];
203- struct ibv_data_buf inline_data_list [msg -> iov_count ];
204203#else
205204 /* MSVC compiler does not support array declarations with runtime size, so hardcode
206205 * the expected iov_limit/max_sq_sge from the lower-level efa provider.
207206 */
208207 struct ibv_sge sge_list [EFA_DEV_ATTR_MAX_WR_SGE ];
209208 struct ibv_data_buf inline_data_list [EFA_DEV_ATTR_MAX_WR_SGE ];
210209#endif
211- size_t len ;
212210 int i , err = 0 ;
213211
212+ if (flags & FI_INJECT ) {
213+ EFA_WARN (FI_LOG_EP_DATA ,
214+ "FI_INJECT is not supported by efa rma yet.\n" );
215+ return - FI_ENOSYS ;
216+ }
217+
214218 efa_tracepoint (write_begin_msg_context , (size_t ) msg -> context , (size_t ) msg -> addr );
215219
216220 qp = base_ep -> qp ;
@@ -230,24 +234,13 @@ static inline ssize_t efa_rma_post_write(struct efa_base_ep *base_ep,
230234 ibv_wr_rdma_write (qp -> ibv_qp_ex , msg -> rma_iov [0 ].key , msg -> rma_iov [0 ].addr );
231235 }
232236
233- len = ofi_total_iov_len (msg -> msg_iov , msg -> iov_count );
234- if (len <= base_ep -> domain -> device -> efa_attr .inline_buf_size &&
235- len <= base_ep -> inject_rma_size &&
236- (!msg -> desc || !efa_mr_is_hmem (msg -> desc [0 ]))) {
237- for (i = 0 ; i < msg -> iov_count ; i ++ ) {
238- inline_data_list [i ].addr = msg -> msg_iov [i ].iov_base ;
239- inline_data_list [i ].length = msg -> msg_iov [i ].iov_len ;
240- }
241- ibv_wr_set_inline_data_list (qp -> ibv_qp_ex , msg -> iov_count , inline_data_list );
242- } else {
243- for (i = 0 ; i < msg -> iov_count ; ++ i ) {
244- sge_list [i ].addr = (uint64_t )msg -> msg_iov [i ].iov_base ;
245- sge_list [i ].length = msg -> msg_iov [i ].iov_len ;
246- assert (msg -> desc && msg -> desc [i ]);
247- sge_list [i ].lkey = ((struct efa_mr * )msg -> desc [i ])-> ibv_mr -> lkey ;
248- }
249- ibv_wr_set_sge_list (qp -> ibv_qp_ex , msg -> iov_count , sge_list );
237+ for (i = 0 ; i < msg -> iov_count ; ++ i ) {
238+ sge_list [i ].addr = (uint64_t )msg -> msg_iov [i ].iov_base ;
239+ sge_list [i ].length = msg -> msg_iov [i ].iov_len ;
240+ assert (msg -> desc && msg -> desc [i ]);
241+ sge_list [i ].lkey = ((struct efa_mr * )msg -> desc [i ])-> ibv_mr -> lkey ;
250242 }
243+ ibv_wr_set_sge_list (qp -> ibv_qp_ex , msg -> iov_count , sge_list );
251244
252245 conn = efa_av_addr_to_conn (base_ep -> av , msg -> addr );
253246 assert (conn && conn -> ep_addr );
@@ -348,51 +341,6 @@ ssize_t efa_rma_writedata(struct fid_ep *ep_fid, const void *buf, size_t len,
348341 return efa_rma_post_write (base_ep , & msg , FI_REMOTE_CQ_DATA | efa_tx_flags (base_ep ));
349342}
350343
351- ssize_t efa_rma_inject_write (struct fid_ep * ep_fid , const void * buf , size_t len ,
352- fi_addr_t dest_addr , uint64_t addr , uint64_t key )
353- {
354- struct fi_msg_rma msg ;
355- struct iovec iov ;
356- struct fi_rma_iov rma_iov ;
357- struct efa_base_ep * base_ep ;
358- int err ;
359-
360- base_ep = container_of (ep_fid , struct efa_base_ep , util_ep .ep_fid );
361- assert (len <= base_ep -> inject_rma_size );
362- err = efa_rma_check_cap (base_ep );
363- if (err )
364- return err ;
365-
366- EFA_SETUP_IOV (iov , buf , len );
367- EFA_SETUP_RMA_IOV (rma_iov , addr , len , key );
368- EFA_SETUP_MSG_RMA (msg , & iov , NULL , 1 , dest_addr , & rma_iov , 1 , NULL , 0 );
369-
370- return efa_rma_post_write (base_ep , & msg , FI_INJECT );
371- }
372-
373- ssize_t efa_rma_inject_writedata (struct fid_ep * ep_fid , const void * buf ,
374- size_t len , uint64_t data , fi_addr_t dest_addr ,
375- uint64_t addr , uint64_t key )
376- {
377- struct fi_msg_rma msg ;
378- struct iovec iov ;
379- struct fi_rma_iov rma_iov ;
380- struct efa_base_ep * base_ep ;
381- int err ;
382-
383- base_ep = container_of (ep_fid , struct efa_base_ep , util_ep .ep_fid );
384- assert (len <= base_ep -> inject_rma_size );
385- err = efa_rma_check_cap (base_ep );
386- if (err )
387- return err ;
388-
389- EFA_SETUP_IOV (iov , buf , len );
390- EFA_SETUP_RMA_IOV (rma_iov , addr , len , key );
391- EFA_SETUP_MSG_RMA (msg , & iov , NULL , 1 , dest_addr , & rma_iov , 1 , NULL , data );
392-
393- return efa_rma_post_write (base_ep , & msg , FI_INJECT | FI_REMOTE_CQ_DATA );
394- }
395-
396344struct fi_ops_rma efa_dgram_ep_rma_ops = {
397345 .size = sizeof (struct fi_ops_rma ),
398346 .read = fi_no_rma_read ,
@@ -414,7 +362,7 @@ struct fi_ops_rma efa_rma_ops = {
414362 .write = efa_rma_write ,
415363 .writev = efa_rma_writev ,
416364 .writemsg = efa_rma_writemsg ,
417- .inject = efa_rma_inject_write ,
365+ .inject = fi_no_rma_inject ,
418366 .writedata = efa_rma_writedata ,
419- .injectdata = efa_rma_inject_writedata ,
367+ .injectdata = fi_no_rma_injectdata ,
420368};
0 commit comments