OSDN Git Service

nvme: fix async event trace event
authorKeith Busch <kbusch@kernel.org>
Wed, 5 Apr 2023 21:57:20 +0000 (14:57 -0700)
committerChristoph Hellwig <hch@lst.de>
Thu, 13 Apr 2023 06:59:04 +0000 (08:59 +0200)
Mixing AER Event Type and Event Info has masking clashes. Just print the
event type, but also include the event info of the AER result in the
trace.

Fixes: 09bd1ff4b15143b ("nvme-core: add async event trace helper")
Reported-by: Nate Thornton <nate.thornton@samsung.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Minwoo Im <minwoo.im@samsung.com>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/core.c
drivers/nvme/host/trace.h

index c2730b1..0699365 100644 (file)
@@ -4808,8 +4808,6 @@ static bool nvme_handle_aen_notice(struct nvme_ctrl *ctrl, u32 result)
        u32 aer_notice_type = nvme_aer_subtype(result);
        bool requeue = true;
 
-       trace_nvme_async_event(ctrl, aer_notice_type);
-
        switch (aer_notice_type) {
        case NVME_AER_NOTICE_NS_CHANGED:
                set_bit(NVME_AER_NOTICE_NS_CHANGED, &ctrl->events);
@@ -4845,7 +4843,6 @@ static bool nvme_handle_aen_notice(struct nvme_ctrl *ctrl, u32 result)
 
 static void nvme_handle_aer_persistent_error(struct nvme_ctrl *ctrl)
 {
-       trace_nvme_async_event(ctrl, NVME_AER_ERROR);
        dev_warn(ctrl->device, "resetting controller due to AER\n");
        nvme_reset_ctrl(ctrl);
 }
@@ -4861,6 +4858,7 @@ void nvme_complete_async_event(struct nvme_ctrl *ctrl, __le16 status,
        if (le16_to_cpu(status) >> 1 != NVME_SC_SUCCESS)
                return;
 
+       trace_nvme_async_event(ctrl, result);
        switch (aer_type) {
        case NVME_AER_NOTICE:
                requeue = nvme_handle_aen_notice(ctrl, result);
@@ -4878,7 +4876,6 @@ void nvme_complete_async_event(struct nvme_ctrl *ctrl, __le16 status,
        case NVME_AER_SMART:
        case NVME_AER_CSS:
        case NVME_AER_VS:
-               trace_nvme_async_event(ctrl, aer_type);
                ctrl->aen_result = result;
                break;
        default:
index 6f0eaf6..4fb5922 100644 (file)
@@ -127,15 +127,12 @@ TRACE_EVENT(nvme_async_event,
        ),
        TP_printk("nvme%d: NVME_AEN=%#08x [%s]",
                __entry->ctrl_id, __entry->result,
-               __print_symbolic(__entry->result,
-               aer_name(NVME_AER_NOTICE_NS_CHANGED),
-               aer_name(NVME_AER_NOTICE_ANA),
-               aer_name(NVME_AER_NOTICE_FW_ACT_STARTING),
-               aer_name(NVME_AER_NOTICE_DISC_CHANGED),
-               aer_name(NVME_AER_ERROR),
-               aer_name(NVME_AER_SMART),
-               aer_name(NVME_AER_CSS),
-               aer_name(NVME_AER_VS))
+               __print_symbolic(__entry->result & 0x7,
+                       aer_name(NVME_AER_ERROR),
+                       aer_name(NVME_AER_SMART),
+                       aer_name(NVME_AER_NOTICE),
+                       aer_name(NVME_AER_CSS),
+                       aer_name(NVME_AER_VS))
        )
 );