mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-21 18:27:22 +00:00
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
This commit is contained in:
parent
638b5ae1c7
commit
7485926e09
|
@ -229,10 +229,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;
|
||||
|
@ -425,15 +421,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]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1465,7 +1465,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);
|
||||
|
||||
|
@ -2006,17 +2007,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)
|
||||
{
|
||||
|
|
|
@ -682,10 +682,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);
|
||||
|
|
Loading…
Reference in a new issue