[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [FIX PATCH] spapr: Fix QEMU abort during memory unplug
From: |
Bharata B Rao |
Subject: |
[Qemu-ppc] [FIX PATCH] spapr: Fix QEMU abort during memory unplug |
Date: |
Wed, 19 Jul 2017 14:24:09 +0530 |
Commit 0cffce56 (hw/ppc/spapr.c: adding pending_dimm_unplugs to
sPAPRMachineState) introduced a new way to track pending LMBs of DIMM
device that is marked for removal. Since this commit we can hit the
assert in spapr_pending_dimm_unplugs_add() in the following situation:
- DIMM device removal fails as the guest doesn't allow the removal.
- Subsequent attempt to remove the same DIMM would hit the assert
as the corresponding sPAPRDIMMState is still part of the
pending_dimm_unplugs list.
Fix this by removing the assert and conditionally adding the
sPAPRDIMMState to pending_dimm_unplugs list only when it is not
already present.
Fixes: 0cffce56ae3501c5783d779f97993ce478acf856
Signed-off-by: Bharata B Rao <address@hidden>
---
hw/ppc/spapr.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 1cb09e7..990bb2d 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -2853,8 +2853,9 @@ static sPAPRDIMMState
*spapr_pending_dimm_unplugs_find(sPAPRMachineState *s,
static void spapr_pending_dimm_unplugs_add(sPAPRMachineState *spapr,
sPAPRDIMMState *dimm_state)
{
- g_assert(!spapr_pending_dimm_unplugs_find(spapr, dimm_state->dimm));
- QTAILQ_INSERT_HEAD(&spapr->pending_dimm_unplugs, dimm_state, next);
+ if (!spapr_pending_dimm_unplugs_find(spapr, dimm_state->dimm)) {
+ QTAILQ_INSERT_HEAD(&spapr->pending_dimm_unplugs, dimm_state, next);
+ }
}
static void spapr_pending_dimm_unplugs_remove(sPAPRMachineState *spapr,
--
2.7.4
- [Qemu-ppc] [FIX PATCH] spapr: Fix QEMU abort during memory unplug,
Bharata B Rao <=