On Wed, Jun 07, 2017 at 01:24:52PM +0530, Bharata B Rao wrote: > Add a "no HPT" encoding (using value -1) to the HTAB migration > stream (in the place of HPT size) when the guest doesn't allocate HPT. > This will help the target side to match target HPT with the source HPT > and thus enable successful migration. > > Suggested-by: David Gibson <da...@gibson.dropbear.id.au> > Signed-off-by: Bharata B Rao <bhar...@linux.vnet.ibm.com>
As dicussed in the thread on the previous version, I still think you can use section_hdr == 0 as the no-HPT encoding (matching htab_shift == 0. > --- > hw/ppc/spapr.c | 28 ++++++++++++++++++++++++---- > 1 file changed, 24 insertions(+), 4 deletions(-) > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 86e6228..df27c5c 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -1557,13 +1557,19 @@ static int htab_save_setup(QEMUFile *f, void *opaque) > sPAPRMachineState *spapr = opaque; > > /* "Iteration" header */ > - qemu_put_be32(f, spapr->htab_shift); > + if (!spapr->htab_shift) { > + qemu_put_be32(f, -1); > + } else { > + qemu_put_be32(f, spapr->htab_shift); > + } > > if (spapr->htab) { > spapr->htab_save_index = 0; > spapr->htab_first_pass = true; > } else { > - assert(kvm_enabled()); > + if (spapr->htab_shift) { > + assert(kvm_enabled()); > + } > } > > > @@ -1709,7 +1715,12 @@ static int htab_save_iterate(QEMUFile *f, void *opaque) > int rc = 0; > > /* Iteration header */ > - qemu_put_be32(f, 0); > + if (!spapr->htab_shift) { > + qemu_put_be32(f, -1); > + return 0; > + } else { > + qemu_put_be32(f, 0); > + } > > if (!spapr->htab) { > assert(kvm_enabled()); > @@ -1743,7 +1754,12 @@ static int htab_save_complete(QEMUFile *f, void > *opaque) > int fd; > > /* Iteration header */ > - qemu_put_be32(f, 0); > + if (!spapr->htab_shift) { > + qemu_put_be32(f, -1); > + return 0; > + } else { > + qemu_put_be32(f, 0); > + } > > if (!spapr->htab) { > int rc; > @@ -1787,6 +1803,10 @@ static int htab_load(QEMUFile *f, void *opaque, int > version_id) > > section_hdr = qemu_get_be32(f); > > + if (section_hdr == -1) { You should free the existing HPT (if any) here. > + return 0; > + } > + > if (section_hdr) { > Error *local_err = NULL; > -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature