The branch stable/14 has been updated by jhb:

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

commit 16089905240f848ba0070fa8ae6622a0e198e9d7
Author:     John Baldwin <[email protected]>
AuthorDate: 2024-03-01 22:18:43 +0000
Commit:     John Baldwin <[email protected]>
CommitDate: 2024-04-08 18:01:02 +0000

    nvme: Firmware revisions in the firmware slot info logpage are ASCII strings
    
    In particular, don't try to byteswap the values as 64-bit integers and
    always print a non-empty version as a string.
    
    Reviewed by:    chuck, imp
    Sponsored by:   Chelsio Communications
    Differential Revision:  https://reviews.freebsd.org/D44121
    
    (cherry picked from commit 7485926e09a08fbfe83a9bc908e7d43aaca4c172)
---
 sbin/nvmecontrol/logpage.c | 13 ++-----------
 sys/dev/nvme/nvme.h        | 14 ++------------
 sys/dev/nvme/nvme_ctrlr.c  |  4 ----
 3 files changed, 4 insertions(+), 27 deletions(-)

diff --git a/sbin/nvmecontrol/logpage.c b/sbin/nvmecontrol/logpage.c
index 725815edc475..31ec3a443716 100644
--- a/sbin/nvmecontrol/logpage.c
+++ b/sbin/nvmecontrol/logpage.c
@@ -230,10 +230,6 @@ read_logpage(int fd, uint8_t log_page, uint32_t nsid, 
uint8_t lsp,
                nvme_health_information_page_swapbytes(
                    (struct nvme_health_information_page *)payload);
                break;
-       case NVME_LOG_FIRMWARE_SLOT:
-               nvme_firmware_page_swapbytes(
-                   (struct nvme_firmware_page *)payload);
-               break;
        case NVME_LOG_CHANGED_NAMESPACE:
                nvme_ns_list_swapbytes((struct nvme_ns_list *)payload);
                break;
@@ -429,15 +425,10 @@ print_log_firmware(const struct nvme_controller_data 
*cdata, void *buf, uint32_t
                else
                        status = "Inactive";
 
-               if (fw->revision[i] == 0LLU)
+               if (fw->revision[i][0] == '\0')
                        printf("Empty\n");
                else
-                       if (isprint(*(char *)&fw->revision[i]))
-                               printf("[%s] %.8s\n", status,
-                                   (char *)&fw->revision[i]);
-                       else
-                               printf("[%s] %016jx\n", status,
-                                   fw->revision[i]);
+                       printf("[%s] %.8s\n", status, fw->revision[i]);
        }
 }
 
diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
index 3e39803f68ab..315dbdd5a3c8 100644
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -1455,7 +1455,8 @@ _Static_assert(sizeof(struct 
nvme_health_information_page) == 512, "bad size for
 struct nvme_firmware_page {
        uint8_t                 afi;
        uint8_t                 reserved[7];
-       uint64_t                revision[7]; /* revisions for 7 slots */
+       /* revisions for 7 slots */
+       uint8_t                 revision[7][NVME_FIRMWARE_REVISION_LENGTH];
        uint8_t                 reserved2[448];
 } __packed __aligned(4);
 
@@ -1997,17 +1998,6 @@ void     nvme_health_information_page_swapbytes(
 #endif
 }
 
-static inline
-void   nvme_firmware_page_swapbytes(struct nvme_firmware_page *s __unused)
-{
-#if _BYTE_ORDER != _LITTLE_ENDIAN
-       int i;
-
-       for (i = 0; i < 7; i++)
-               s->revision[i] = le64toh(s->revision[i]);
-#endif
-}
-
 static inline
 void   nvme_ns_list_swapbytes(struct nvme_ns_list *s __unused)
 {
diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c
index 55573669562c..e659a3776957 100644
--- a/sys/dev/nvme/nvme_ctrlr.c
+++ b/sys/dev/nvme/nvme_ctrlr.c
@@ -714,10 +714,6 @@ nvme_ctrlr_async_event_log_page_cb(void *arg, const struct 
nvme_completion *cpl)
                        nvme_health_information_page_swapbytes(
                            (struct nvme_health_information_page 
*)aer->log_page_buffer);
                        break;
-               case NVME_LOG_FIRMWARE_SLOT:
-                       nvme_firmware_page_swapbytes(
-                           (struct nvme_firmware_page *)aer->log_page_buffer);
-                       break;
                case NVME_LOG_CHANGED_NAMESPACE:
                        nvme_ns_list_swapbytes(
                            (struct nvme_ns_list *)aer->log_page_buffer);

Reply via email to