nvme: fix async event trace event
authorKeith Busch <kbusch@kernel.org>
Wed, 5 Apr 2023 21:57:20 +0000 (14:57 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 May 2023 14:03:22 +0000 (23:03 +0900)
[ Upstream commit 6622b76fe922b94189499a90ccdb714a4a8d0773 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/nvme/host/core.c
drivers/nvme/host/trace.h

index c54c6ff..f502e03 100644 (file)
@@ -4769,8 +4769,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);
@@ -4806,7 +4804,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);
 }
@@ -4822,6 +4819,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);
@@ -4839,7 +4837,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))
        )
 );