static void nvme_handle_aen_notice(struct nvme_ctrl *ctrl, u32 result)
 {
-       switch ((result & 0xff00) >> 8) {
+       u32 aer_notice_type = (result & 0xff00) >> 8;
+
+       switch (aer_notice_type) {
        case NVME_AER_NOTICE_NS_CHANGED:
+               trace_nvme_async_event(ctrl, aer_notice_type);
                set_bit(NVME_AER_NOTICE_NS_CHANGED, &ctrl->events);
                nvme_queue_scan(ctrl);
                break;
        case NVME_AER_NOTICE_FW_ACT_STARTING:
+               trace_nvme_async_event(ctrl, aer_notice_type);
                queue_work(nvme_wq, &ctrl->fw_act_work);
                break;
 #ifdef CONFIG_NVME_MULTIPATH
        case NVME_AER_NOTICE_ANA:
+               trace_nvme_async_event(ctrl, aer_notice_type);
                if (!ctrl->ana_log_buf)
                        break;
                queue_work(nvme_wq, &ctrl->ana_work);
                volatile union nvme_result *res)
 {
        u32 result = le32_to_cpu(res->u32);
+       u32 aer_type = result & 0x07;
 
        if (le16_to_cpu(status) >> 1 != NVME_SC_SUCCESS)
                return;
 
-       switch (result & 0x7) {
+       switch (aer_type) {
        case NVME_AER_NOTICE:
                nvme_handle_aen_notice(ctrl, result);
                break;
        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:
 
 
 );
 
+#define aer_name(aer) { aer, #aer }
+
+TRACE_EVENT(nvme_async_event,
+       TP_PROTO(struct nvme_ctrl *ctrl, u32 result),
+       TP_ARGS(ctrl, result),
+       TP_STRUCT__entry(
+               __field(int, ctrl_id)
+               __field(u32, result)
+       ),
+       TP_fast_assign(
+               __entry->ctrl_id = ctrl->instance;
+               __entry->result = result;
+       ),
+       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_ERROR),
+               aer_name(NVME_AER_SMART),
+               aer_name(NVME_AER_CSS),
+               aer_name(NVME_AER_VS))
+       )
+);
+
+#undef aer_name
+
 #endif /* _TRACE_NVME_H */
 
 #undef TRACE_INCLUDE_PATH