The branch main has been updated by chuck:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=e83fdf8bb391579fa422d34663cd8c1f82a00dc0

commit e83fdf8bb391579fa422d34663cd8c1f82a00dc0
Author:     Chuck Tuffli <ch...@freebsd.org>
AuthorDate: 2021-01-08 22:36:37 +0000
Commit:     Chuck Tuffli <ch...@freebsd.org>
CommitDate: 2021-01-08 22:41:45 +0000

    fix big-endian platforms after 6733401935f8
    
    The NVMe byte-swap routines for big-endian platforms used memcpy() to
    move the unaligned 64-bit value into a temp register to byte swap it.
    Instead of introducing a dependency, manually byte-swap the values in
    place.
    
    Point hat:      me
---
 sys/dev/nvme/nvme.h | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
index 67d02ba73fd8..b28a8d4348db 100644
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -2042,16 +2042,20 @@ static inline void
 nvme_device_self_test_swapbytes(struct nvme_device_self_test_page *s __unused)
 {
 #if _BYTE_ORDER != _LITTLE_ENDIAN
-       uint64_t failing_lba;
-       uint32_t r;
+       uint8_t *tmp;
+       uint32_t r, i;
+       uint8_t b;
 
        for (r = 0; r < 20; r++) {
                s->result[r].poh = le64toh(s->result[r].poh);
                s->result[r].nsid = le32toh(s->result[r].nsid);
                /* Unaligned 64-bit loads fail on some architectures */
-               memcpy(&failing_lba, s->result[r].failing_lba, 
sizeof(failing_lba));
-               failing_lba = le64toh(failing_lba);
-               memcpy(s->result[r].failing_lba, &failing_lba, 
sizeof(failing_lba));
+               tmp = s->result[r].failing_lba;
+               for (i = 0; i < 4; i++) {
+                       b = tmp[i];
+                       tmp[i] = tmp[7-i];
+                       tmp[7-i] = b;
+               }
        }
 #endif
 }
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to