Skip to content

Commit 2af50a2

Browse files
committed
prov/efa: Remove inline write logic for rma inject
We previously set the inject size to 0 to prevent using inline write, but fabtests can use inject rma for 0 size message. Make rma inject temporarily return FI_ENOSYS before firmware supports inline write. Signed-off-by: Jessie Yang <[email protected]>
1 parent 9171a4e commit 2af50a2

File tree

2 files changed

+10
-74
lines changed

2 files changed

+10
-74
lines changed

prov/efa/src/efa_rma.c

+8-66
Original file line numberDiff line numberDiff line change
@@ -200,15 +200,13 @@ 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

214212
efa_tracepoint(write_begin_msg_context, (size_t) msg->context, (size_t) msg->addr);
@@ -230,24 +228,13 @@ static inline ssize_t efa_rma_post_write(struct efa_base_ep *base_ep,
230228
ibv_wr_rdma_write(qp->ibv_qp_ex, msg->rma_iov[0].key, msg->rma_iov[0].addr);
231229
}
232230

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);
231+
for (i = 0; i < msg->iov_count; ++i) {
232+
sge_list[i].addr = (uint64_t)msg->msg_iov[i].iov_base;
233+
sge_list[i].length = msg->msg_iov[i].iov_len;
234+
assert(msg->desc && msg->desc[i]);
235+
sge_list[i].lkey = ((struct efa_mr *)msg->desc[i])->ibv_mr->lkey;
250236
}
237+
ibv_wr_set_sge_list(qp->ibv_qp_ex, msg->iov_count, sge_list);
251238

252239
conn = efa_av_addr_to_conn(base_ep->av, msg->addr);
253240
assert(conn && conn->ep_addr);
@@ -348,51 +335,6 @@ ssize_t efa_rma_writedata(struct fid_ep *ep_fid, const void *buf, size_t len,
348335
return efa_rma_post_write(base_ep, &msg, FI_REMOTE_CQ_DATA | efa_tx_flags(base_ep));
349336
}
350337

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-
396338
struct fi_ops_rma efa_dgram_ep_rma_ops = {
397339
.size = sizeof(struct fi_ops_rma),
398340
.read = fi_no_rma_read,
@@ -414,7 +356,7 @@ struct fi_ops_rma efa_rma_ops = {
414356
.write = efa_rma_write,
415357
.writev = efa_rma_writev,
416358
.writemsg = efa_rma_writemsg,
417-
.inject = efa_rma_inject_write,
359+
.inject = fi_no_rma_inject,
418360
.writedata = efa_rma_writedata,
419-
.injectdata = efa_rma_inject_writedata,
361+
.injectdata = fi_no_rma_injectdata,
420362
};

prov/efa/test/efa_unit_test_rma.c

+2-8
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ static void test_efa_rma_prep(struct efa_resource *resource, fi_addr_t *addr)
2525
ibv_qpx->wr_rdma_read = &efa_mock_ibv_wr_rdma_read_save_wr;
2626
ibv_qpx->wr_rdma_write = &efa_mock_ibv_wr_rdma_write_save_wr;
2727
ibv_qpx->wr_rdma_write_imm = &efa_mock_ibv_wr_rdma_write_imm_save_wr;
28-
ibv_qpx->wr_set_inline_data_list =
29-
&efa_mock_ibv_wr_set_inline_data_list_no_op;
3028
ibv_qpx->wr_set_sge_list = &efa_mock_ibv_wr_set_sge_list_no_op;
3129
ibv_qpx->wr_set_ud_addr = &efa_mock_ibv_wr_set_ud_addr_no_op;
3230
ibv_qpx->wr_complete = &efa_mock_ibv_wr_complete_no_op;
@@ -241,11 +239,9 @@ void test_efa_rma_inject_write(struct efa_resource **state)
241239
test_efa_rma_prep(resource, &dest_addr);
242240
efa_unit_test_buff_construct(&local_buff, resource, 32 /* buff_size */);
243241

244-
assert_int_equal(g_ibv_submitted_wr_id_cnt, 0);
245242
ret = fi_inject_write(resource->ep, local_buff.buff, local_buff.size,
246243
dest_addr, remote_addr, remote_key);
247-
assert_int_equal(ret, 0);
248-
assert_int_equal(g_ibv_submitted_wr_id_cnt, 1);
244+
assert_int_equal(ret, -FI_ENOSYS);
249245

250246
efa_unit_test_buff_destruct(&local_buff);
251247
}
@@ -262,12 +258,10 @@ void test_efa_rma_inject_writedata(struct efa_resource **state)
262258
test_efa_rma_prep(resource, &dest_addr);
263259
efa_unit_test_buff_construct(&local_buff, resource, 32 /* buff_size */);
264260

265-
assert_int_equal(g_ibv_submitted_wr_id_cnt, 0);
266261
ret = fi_inject_writedata(resource->ep, local_buff.buff,
267262
local_buff.size, 0, dest_addr, remote_addr,
268263
remote_key);
269-
assert_int_equal(ret, 0);
270-
assert_int_equal(g_ibv_submitted_wr_id_cnt, 1);
264+
assert_int_equal(ret, -FI_ENOSYS);
271265

272266
efa_unit_test_buff_destruct(&local_buff);
273267
}

0 commit comments

Comments
 (0)