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 7485926e09)
This commit is contained in:
John Baldwin 2024-03-01 14:18:43 -08:00
parent b7419f5b5e
commit 4329e6ccfa
3 changed files with 4 additions and 27 deletions

View File

@ -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;
@ -424,15 +420,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]);
}
}

View File

@ -1420,7 +1420,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);
@ -1962,17 +1963,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)
{

View File

@ -704,10 +704,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);