44 lines
1.4 KiB
Diff
44 lines
1.4 KiB
Diff
Author: Jeremy Kerr <jk@codeconstruct.com.au>
|
|
Description: mi: endian fixes
|
|
We have a couple of endian issues in the mi code: one where we're not
|
|
converting cdw0 for MI commands, and one where we're using the wrong
|
|
byte length for an existing conversion. There is also an error in the
|
|
test suite, where we should be converting the nsze field of a
|
|
nvme_id_ns.
|
|
.
|
|
This change fixes those, so that the test suite passes on a BE platform
|
|
(ppc64 in my case).
|
|
|
|
diff -Naurp libnvme.orig/src/nvme/mi.c libnvme/src/nvme/mi.c
|
|
--- libnvme.orig/src/nvme/mi.c
|
|
+++ libnvme/src/nvme/mi.c
|
|
@@ -139,7 +139,7 @@ int nvme_mi_scan_ep(nvme_mi_ep_t ep, boo
|
|
struct nvme_mi_ctrl *ctrl;
|
|
__u16 id;
|
|
|
|
- id = le32_to_cpu(list.identifier[i]);
|
|
+ id = le16_to_cpu(list.identifier[i]);
|
|
if (!id)
|
|
continue;
|
|
|
|
@@ -985,7 +985,7 @@ static int nvme_mi_read_data(nvme_mi_ep_
|
|
req_hdr.hdr.nmp = (NVME_MI_ROR_REQ << 7) |
|
|
(NVME_MI_MT_MI << 3); /* we always use command slot 0 */
|
|
req_hdr.opcode = nvme_mi_mi_opcode_mi_data_read;
|
|
- req_hdr.cdw0 = cdw0;
|
|
+ req_hdr.cdw0 = cpu_to_le32(cdw0);
|
|
|
|
memset(&req, 0, sizeof(req));
|
|
req.hdr = &req_hdr.hdr;
|
|
diff -Naurp libnvme.orig/test/mi.c libnvme/test/mi.c
|
|
--- libnvme.orig/test/mi.c
|
|
+++ libnvme/test/mi.c
|
|
@@ -1287,7 +1287,7 @@ static void test_admin_ns_mgmt_create(st
|
|
assert(!rc);
|
|
assert(ns == 0x01020304);
|
|
|
|
- nsid.nsze = 42;
|
|
+ nsid.nsze = cpu_to_le64(42);
|
|
rc = nvme_mi_admin_ns_mgmt_create(ctrl, &nsid, 0, &ns);
|
|
assert(rc);
|
|
}
|