|
|
619821 |
From 4fbb16d71e7e9a893c665926642122b165c63425 Mon Sep 17 00:00:00 2001
|
|
|
40b356 |
From: John Snow <jsnow@redhat.com>
|
|
|
619821 |
Date: Wed, 26 Apr 2017 23:49:07 +0200
|
|
|
619821 |
Subject: [PATCH] ide: fix halted IO segfault at reset
|
|
|
40b356 |
|
|
|
40b356 |
RH-Author: John Snow <jsnow@redhat.com>
|
|
|
619821 |
Message-id: <20170426234907.21151-2-jsnow@redhat.com>
|
|
|
619821 |
Patchwork-id: 74905
|
|
|
619821 |
O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 1/1] ide: fix halted IO segfault at reset
|
|
|
619821 |
Bugzilla: 1299875
|
|
|
40b356 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
619821 |
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
40b356 |
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
|
|
|
40b356 |
|
|
|
40b356 |
If one attempts to perform a system_reset after a failed IO request
|
|
|
40b356 |
that causes the VM to enter a paused state, QEMU will segfault trying
|
|
|
40b356 |
to free up the pending IO requests.
|
|
|
40b356 |
|
|
|
40b356 |
These requests have already been completed and freed, though, so all
|
|
|
40b356 |
we need to do is NULL them before we enter the paused state.
|
|
|
40b356 |
|
|
|
40b356 |
Existing AHCI tests verify that halted requests are still resumed
|
|
|
40b356 |
successfully after a STOP event.
|
|
|
40b356 |
|
|
|
40b356 |
Analyzed-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
40b356 |
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
40b356 |
Signed-off-by: John Snow <jsnow@redhat.com>
|
|
|
40b356 |
Message-id: 1469635201-11918-2-git-send-email-jsnow@redhat.com
|
|
|
40b356 |
Signed-off-by: John Snow <jsnow@redhat.com>
|
|
|
40b356 |
(cherry picked from commit 87ac25fd1fed05a30a93d27dbeb2a4c4b83ec95f)
|
|
|
40b356 |
Signed-off-by: John Snow <jsnow@redhat.com>
|
|
|
40b356 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
40b356 |
|
|
|
40b356 |
Conflicts:
|
|
|
40b356 |
hw/ide/core.c: Context and formatting of handle_rw_error
|
|
|
40b356 |
---
|
|
|
40b356 |
hw/ide/core.c | 1 +
|
|
|
40b356 |
1 file changed, 1 insertion(+)
|
|
|
40b356 |
|
|
|
40b356 |
diff --git a/hw/ide/core.c b/hw/ide/core.c
|
|
|
40b356 |
index 5d40093..5c33735 100644
|
|
|
40b356 |
--- a/hw/ide/core.c
|
|
|
40b356 |
+++ b/hw/ide/core.c
|
|
|
40b356 |
@@ -658,6 +658,7 @@ void ide_dma_cb(void *opaque, int ret)
|
|
|
40b356 |
op |= BM_STATUS_RETRY_TRIM;
|
|
|
40b356 |
|
|
|
40b356 |
if (ide_handle_rw_error(s, -ret, op)) {
|
|
|
40b356 |
+ s->bus->dma->aiocb = NULL;
|
|
|
40b356 |
return;
|
|
|
40b356 |
}
|
|
|
40b356 |
}
|
|
|
40b356 |
--
|
|
|
40b356 |
1.8.3.1
|
|
|
40b356 |
|