The branch main has been updated by imp:

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

commit 85656a9a015339f3d412e5b1888e798bb3e7d4ba
Author:     Warner Losh <[email protected]>
AuthorDate: 2024-04-16 22:35:46 +0000
Commit:     Warner Losh <[email protected]>
CommitDate: 2024-04-17 03:30:17 +0000

    nvmecontrol: Make the error log page work on native format
    
    As the number of page types proliferates, it becomes untennable to
    convert them in read_logpage (especailly since new UUID page types will
    need to be supported). Convert the error page printing code to operate
    on little endian data.
    
    Sponsored by:           Netflix
    Reviewed by:            chuck
    Differential Revision:  https://reviews.freebsd.org/D44680
---
 sbin/nvmecontrol/logpage.c | 37 +++++++++++++++----------------------
 1 file changed, 15 insertions(+), 22 deletions(-)

diff --git a/sbin/nvmecontrol/logpage.c b/sbin/nvmecontrol/logpage.c
index 0df342fa51e8..276932d363e5 100644
--- a/sbin/nvmecontrol/logpage.c
+++ b/sbin/nvmecontrol/logpage.c
@@ -193,8 +193,7 @@ read_logpage(int fd, uint8_t log_page, uint32_t nsid, 
uint8_t lsp,
     uint16_t lsi, uint8_t rae, void *payload, uint32_t payload_size)
 {
        struct nvme_pt_command  pt;
-       struct nvme_error_information_entry     *err_entry;
-       u_int i, err_pages, numd;
+       u_int numd;
 
        numd = payload_size / sizeof(uint32_t) - 1;
        memset(&pt, 0, sizeof(pt));
@@ -220,12 +219,6 @@ read_logpage(int fd, uint8_t log_page, uint32_t nsid, 
uint8_t lsp,
 
        /* Convert data to host endian */
        switch (log_page) {
-       case NVME_LOG_ERROR:
-               err_entry = (struct nvme_error_information_entry *)payload;
-               err_pages = payload_size / sizeof(struct 
nvme_error_information_entry);
-               for (i = 0; i < err_pages; i++)
-                       nvme_error_information_entry_swapbytes(err_entry++);
-               break;
        case NVME_LOG_HEALTH_INFORMATION:
                nvme_health_information_page_swapbytes(
                    (struct nvme_health_information_page *)payload);
@@ -272,17 +265,17 @@ print_log_error(const struct nvme_controller_data *cdata 
__unused, void *buf, ui
        printf("Error Information Log\n");
        printf("=====================\n");
 
-       if (entry->error_count == 0) {
+       if (LE2H(entry->error_count) == 0) {
                printf("No error entries found\n");
                return;
        }
 
-       nentries = size/sizeof(struct nvme_error_information_entry);
+       nentries = size / sizeof(struct nvme_error_information_entry);
        for (i = 0; i < nentries; i++, entry++) {
-               if (entry->error_count == 0)
+               if (LE2H(entry->error_count) == 0)
                        break;
 
-               status = entry->status;
+               status = LE2H(entry->status);
 
                p = NVME_STATUS_GET_P(status);
                sc = NVME_STATUS_GET_SC(status);
@@ -292,9 +285,9 @@ print_log_error(const struct nvme_controller_data *cdata 
__unused, void *buf, ui
 
                printf("Entry %02d\n", i + 1);
                printf("=========\n");
-               printf(" Error count:          %ju\n", entry->error_count);
-               printf(" Submission queue ID:  %u\n", entry->sqid);
-               printf(" Command ID:           %u\n", entry->cid);
+               printf(" Error count:          %ju\n", 
LE2H(entry->error_count));
+               printf(" Submission queue ID:  %u\n", LE2H(entry->sqid));
+               printf(" Command ID:           %u\n", LE2H(entry->cid));
                /* TODO: Export nvme_status_string structures from kernel? */
                printf(" Status:\n");
                printf("  Phase tag:           %d\n", p);
@@ -302,13 +295,13 @@ print_log_error(const struct nvme_controller_data *cdata 
__unused, void *buf, ui
                printf("  Status code type:    %d\n", sct);
                printf("  More:                %d\n", m);
                printf("  DNR:                 %d\n", dnr);
-               printf(" Error location:       %u\n", entry->error_location);
-               printf(" LBA:                  %ju\n", entry->lba);
-               printf(" Namespace ID:         %u\n", entry->nsid);
-               printf(" Vendor specific info: %u\n", entry->vendor_specific);
-               printf(" Transport type:       %u\n", entry->trtype);
-               printf(" Command specific info:%ju\n", entry->csi);
-               printf(" Transport specific:   %u\n", entry->ttsi);
+               printf(" Error location:       %u\n", 
LE2H(entry->error_location));
+               printf(" LBA:                  %ju\n", LE2H(entry->lba));
+               printf(" Namespace ID:         %u\n", LE2H(entry->nsid));
+               printf(" Vendor specific info: %u\n", 
LE2H(entry->vendor_specific));
+               printf(" Transport type:       %u\n", LE2H(entry->trtype));
+               printf(" Command specific info:%ju\n", LE2H(entry->csi));
+               printf(" Transport specific:   %u\n", LE2H(entry->ttsi));
        }
 }
 

Reply via email to