|
|
76daa3 |
From 34e2297e813de18018e4b50e29f8491c78cafe39 Mon Sep 17 00:00:00 2001
|
|
|
76daa3 |
From: Laurent Vivier <lvivier@redhat.com>
|
|
|
76daa3 |
Date: Tue, 4 Jul 2017 16:32:57 +0200
|
|
|
76daa3 |
Subject: [PATCH 2/4] spapr: Add a "no HPT" encoding to HTAB migration stream
|
|
|
76daa3 |
|
|
|
76daa3 |
RH-Author: Laurent Vivier <lvivier@redhat.com>
|
|
|
76daa3 |
Message-id: <20170704163258.9846-3-lvivier@redhat.com>
|
|
|
76daa3 |
Patchwork-id: 75705
|
|
|
76daa3 |
O-Subject: [Pegas-1.0 qemu-kvm PATCH 2/3] spapr: Add a "no HPT" encoding to HTAB migration stream
|
|
|
76daa3 |
Bugzilla: 1456287
|
|
|
76daa3 |
RH-Acked-by: David Gibson <dgibson@redhat.com>
|
|
|
76daa3 |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
76daa3 |
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
76daa3 |
|
|
|
76daa3 |
From: Bharata B Rao <bharata@linux.vnet.ibm.com>
|
|
|
76daa3 |
|
|
|
76daa3 |
Add a "no HPT" encoding (using value -1) to the HTAB migration
|
|
|
76daa3 |
stream (in the place of HPT size) when the guest doesn't allocate HPT.
|
|
|
76daa3 |
This will help the target side to match target HPT with the source HPT
|
|
|
76daa3 |
and thus enable successful migration.
|
|
|
76daa3 |
|
|
|
76daa3 |
Suggested-by: David Gibson <david@gibson.dropbear.id.au>
|
|
|
76daa3 |
Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
|
|
|
76daa3 |
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
|
|
|
76daa3 |
(cherry picked from commit 3a38429748aa4f74abaecf16c4c087e8a325e12a)
|
|
|
76daa3 |
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
|
|
|
76daa3 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
76daa3 |
---
|
|
|
76daa3 |
hw/ppc/spapr.c | 29 +++++++++++++++++++++++++----
|
|
|
76daa3 |
1 file changed, 25 insertions(+), 4 deletions(-)
|
|
|
76daa3 |
|
|
|
76daa3 |
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
|
|
|
76daa3 |
index 2bee3d9..c322666 100644
|
|
|
76daa3 |
--- a/hw/ppc/spapr.c
|
|
|
76daa3 |
+++ b/hw/ppc/spapr.c
|
|
|
76daa3 |
@@ -1576,13 +1576,19 @@ static int htab_save_setup(QEMUFile *f, void *opaque)
|
|
|
76daa3 |
sPAPRMachineState *spapr = opaque;
|
|
|
76daa3 |
|
|
|
76daa3 |
/* "Iteration" header */
|
|
|
76daa3 |
- qemu_put_be32(f, spapr->htab_shift);
|
|
|
76daa3 |
+ if (!spapr->htab_shift) {
|
|
|
76daa3 |
+ qemu_put_be32(f, -1);
|
|
|
76daa3 |
+ } else {
|
|
|
76daa3 |
+ qemu_put_be32(f, spapr->htab_shift);
|
|
|
76daa3 |
+ }
|
|
|
76daa3 |
|
|
|
76daa3 |
if (spapr->htab) {
|
|
|
76daa3 |
spapr->htab_save_index = 0;
|
|
|
76daa3 |
spapr->htab_first_pass = true;
|
|
|
76daa3 |
} else {
|
|
|
76daa3 |
- assert(kvm_enabled());
|
|
|
76daa3 |
+ if (spapr->htab_shift) {
|
|
|
76daa3 |
+ assert(kvm_enabled());
|
|
|
76daa3 |
+ }
|
|
|
76daa3 |
}
|
|
|
76daa3 |
|
|
|
76daa3 |
|
|
|
76daa3 |
@@ -1728,7 +1734,12 @@ static int htab_save_iterate(QEMUFile *f, void *opaque)
|
|
|
76daa3 |
int rc = 0;
|
|
|
76daa3 |
|
|
|
76daa3 |
/* Iteration header */
|
|
|
76daa3 |
- qemu_put_be32(f, 0);
|
|
|
76daa3 |
+ if (!spapr->htab_shift) {
|
|
|
76daa3 |
+ qemu_put_be32(f, -1);
|
|
|
76daa3 |
+ return 0;
|
|
|
76daa3 |
+ } else {
|
|
|
76daa3 |
+ qemu_put_be32(f, 0);
|
|
|
76daa3 |
+ }
|
|
|
76daa3 |
|
|
|
76daa3 |
if (!spapr->htab) {
|
|
|
76daa3 |
assert(kvm_enabled());
|
|
|
76daa3 |
@@ -1762,7 +1773,12 @@ static int htab_save_complete(QEMUFile *f, void *opaque)
|
|
|
76daa3 |
int fd;
|
|
|
76daa3 |
|
|
|
76daa3 |
/* Iteration header */
|
|
|
76daa3 |
- qemu_put_be32(f, 0);
|
|
|
76daa3 |
+ if (!spapr->htab_shift) {
|
|
|
76daa3 |
+ qemu_put_be32(f, -1);
|
|
|
76daa3 |
+ return 0;
|
|
|
76daa3 |
+ } else {
|
|
|
76daa3 |
+ qemu_put_be32(f, 0);
|
|
|
76daa3 |
+ }
|
|
|
76daa3 |
|
|
|
76daa3 |
if (!spapr->htab) {
|
|
|
76daa3 |
int rc;
|
|
|
76daa3 |
@@ -1806,6 +1822,11 @@ static int htab_load(QEMUFile *f, void *opaque, int version_id)
|
|
|
76daa3 |
|
|
|
76daa3 |
section_hdr = qemu_get_be32(f);
|
|
|
76daa3 |
|
|
|
76daa3 |
+ if (section_hdr == -1) {
|
|
|
76daa3 |
+ spapr_free_hpt(spapr);
|
|
|
76daa3 |
+ return 0;
|
|
|
76daa3 |
+ }
|
|
|
76daa3 |
+
|
|
|
76daa3 |
if (section_hdr) {
|
|
|
76daa3 |
Error *local_err = NULL;
|
|
|
76daa3 |
|
|
|
76daa3 |
--
|
|
|
76daa3 |
1.8.3.1
|
|
|
76daa3 |
|