libhns: Write all 64 bytes of a direct WQE explicitly
hns_roce_write512() passes sizeof(struct hns_roce_rc_sq_wqe), which is
32, to mmio_memcpy_x64(). It writes a 64-byte direct WQE only because
the aarch64 macro takes its 64-byte path for any constant length. On
the generic implementation a length of 32 makes the size_t counter
wrap, and the copy does not stop.
Pass the size of a direct WQE, 1 << HNS_ROCE_SQWQE_SHIFT. On aarch64
the generated code does not change.
Fixes: 159933c37450 ("libhns: Add support for direct wqe")
Reviewed-by: Junxian Huang <huangjunxian6@hisilicon.com>
Tested-by: Junxian Huang <huangjunxian6@hisilicon.com>
Assisted-by: Claude:claude-opus-5-5 <noreply@anthropic.com>
Signed-off-by: Dezhen Lu <dezhen.lu@student.uni-tuebingen.de>
diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c
index 20b95b8..acda771 100644
--- a/providers/hns/hns_roce_u_hw_v2.c
+++ b/providers/hns/hns_roce_u_hw_v2.c
@@ -305,7 +305,7 @@
static void hns_roce_write512(uint64_t *dest, uint64_t *val)
{
- mmio_memcpy_x64(dest, val, sizeof(struct hns_roce_rc_sq_wqe));
+ mmio_memcpy_x64(dest, val, 1 << HNS_ROCE_SQWQE_SHIFT);
}
static void hns_roce_write_dwqe(struct hns_roce_qp *qp, void *wqe)