struct {
uint8_t buffer[0x14];
struct ibv_mr *mr;
- struct ibv_sge sge;
+/* uint8_t buffer2[0x14];
+ struct ibv_mr *mr2;
+ struct ibv_sge sge[2];
+*/ struct ibv_sge sge[1];
struct ibv_send_wr wr;
} req;
struct {
uint8_t buffer[0x1C];
struct ibv_mr *mr;
- struct ibv_sge sge;
+ struct ibv_sge sge[1];
struct ibv_recv_wr wr;
} rep;
};
return tevent_req_post(req, ev);
}
- state->req.sge.addr = (uint64_t) (uintptr_t) state->req.buffer;
- state->req.sge.length = sizeof(state->req.buffer);;
- state->req.sge.lkey = state->req.mr->lkey;
- state->req.wr.opcode = IBV_WR_SEND;
+/* state->req.mr2 = ibv_reg_mr(transport->ibv.pd,
+ state->req.buffer2,
+ sizeof(state->req.buffer2),
+ IBV_ACCESS_LOCAL_WRITE);
+ if (tevent_req_nomem(state->req.mr2, req)) {
+ return tevent_req_post(req, ev);
+ }
+*/ state->req.sge[0].addr = (uint64_t) (uintptr_t) state->req.buffer;
+ state->req.sge[0].length = sizeof(state->req.buffer);
+ state->req.sge[0].lkey = state->req.mr->lkey;
+/* state->req.sge[1].addr = (uint64_t) (uintptr_t) state->req.buffer2;
+ state->req.sge[1].length = sizeof(state->req.buffer2);
+ state->req.sge[1].lkey = state->req.mr2->lkey;
+*/ state->req.wr.opcode = IBV_WR_SEND;
state->req.wr.send_flags = IBV_SEND_SIGNALED;
- state->req.wr.sg_list = &state->req.sge;
- state->req.wr.num_sge = 1;
+ state->req.wr.sg_list = state->req.sge;
+ state->req.wr.num_sge = ARRAY_SIZE(state->req.sge);
state->rep.mr = ibv_reg_mr(transport->ibv.pd,
state->rep.buffer,
return tevent_req_post(req, ev);
}
- state->rep.sge.addr = (uint64_t) (uintptr_t) state->rep.buffer;
- state->rep.sge.length = sizeof(state->rep.buffer);;
- state->rep.sge.lkey = state->rep.mr->lkey;
- state->rep.wr.sg_list = &state->rep.sge;
- state->rep.wr.num_sge = 1;
+ state->rep.sge[0].addr = (uint64_t) (uintptr_t) state->rep.buffer;
+ state->rep.sge[0].length = sizeof(state->rep.buffer);;
+ state->rep.sge[0].lkey = state->rep.mr->lkey;
+ state->rep.wr.sg_list = state->rep.sge;
+ state->rep.wr.num_sge = ARRAY_SIZE(state->rep.sge);
errno = 0;
ret = ibv_post_recv(transport->ibv.qp, &state->rep.wr, &bad_recv_wr);