-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
The write function I wrote is as follows:
int xwrite(uint8_t *sq, uint32_t *sqi, uint32_t *qp_dbr,
uint32_t lkey, void *src, uint32_t rkey, void *dst, size_t size,
void *uar_ptr, uint32_t qp) {
struct mlx5_wqe_ctrl_seg *ctrl = (struct mlx5_wqe_ctrl_seg *)(sq + *sqi % SQ_SIZE * MLX5_SEND_WQE_BB);
mlx5dv_set_ctrl_seg(ctrl, *sqi, MLX5_OPCODE_RDMA_WRITE, 0,
qp, MLX5_WQE_CTRL_CQ_UPDATE,
3, 0, 0);// 控制段(1) + 远程地址段(1) + 数据段(1) = 3个段
struct mlx5_wqe_raddr_seg *rseg = (struct mlx5_wqe_raddr_seg *)(ctrl + 1);
rseg->raddr = htobe64((uintptr_t)dst);
rseg->rkey = htobe32(rkey);
struct mlx5_wqe_data_seg *dseg = (struct mlx5_wqe_data_seg *)(rseg + 1);
mlx5dv_set_data_seg(dseg, size, lkey, (intptr_t)src);
(*sqi)++;
asm volatile("" ::: "memory");
qp_dbr[MLX5_SND_DBR] = htobe32(*sqi & 0xffff);
asm volatile("" ::: "memory");
*(uint64_t *)((uint8_t *)uar_ptr + 0x800) = *(uint64_t *)ctrl;
asm volatile("" ::: "memory");
return 0;
}
Metadata
Metadata
Assignees
Labels
No labels