hw/nvme: clear masked events from the aer queue
authorArun Kumar <arun.kka@samsung.com>
Thu, 5 Sep 2024 23:58:59 +0000 (05:28 +0530)
committerKlaus Jensen <k.jensen@samsung.com>
Mon, 30 Sep 2024 10:45:17 +0000 (12:45 +0200)
Clear masked events from the aer queue when get log page is issued with
RAE 0 without checking for the presence of outstanding aer requests.

Signed-off-by: Arun Kumar <arun.kka@samsung.com>
[k.jensen: remove unnecessary QTAILQ_EMPTY check]
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
hw/nvme/ctrl.c

index d5ea9ad653f2f2bc9584069a54b507f2da00667f..a720dbc354a27a6ba8b9dd726a4bcf8959657e6d 100644 (file)
@@ -1649,9 +1649,16 @@ static void nvme_smart_event(NvmeCtrl *n, uint8_t event)
 
 static void nvme_clear_events(NvmeCtrl *n, uint8_t event_type)
 {
+    NvmeAsyncEvent *event, *next;
+
     n->aer_mask &= ~(1 << event_type);
-    if (!QTAILQ_EMPTY(&n->aer_queue)) {
-        nvme_process_aers(n);
+
+    QTAILQ_FOREACH_SAFE(event, &n->aer_queue, entry, next) {
+        if (event->result.event_type == event_type) {
+            QTAILQ_REMOVE(&n->aer_queue, event, entry);
+            n->aer_queued--;
+            g_free(event);
+        }
     }
 }