From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54033) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b7etY-0003eb-S9 for qemu-devel@nongnu.org; Tue, 31 May 2016 04:19:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b7etU-0002gK-Ka for qemu-devel@nongnu.org; Tue, 31 May 2016 04:19:23 -0400 Received: from mail-pf0-x244.google.com ([2607:f8b0:400e:c00::244]:34635) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b7etU-0002gE-AA for qemu-devel@nongnu.org; Tue, 31 May 2016 04:19:20 -0400 Received: by mail-pf0-x244.google.com with SMTP id c84so17525869pfc.1 for ; Tue, 31 May 2016 01:19:20 -0700 (PDT) References: <1462344751-28281-1-git-send-email-aik@ozlabs.ru> <1462344751-28281-11-git-send-email-aik@ozlabs.ru> <20160526040105.GB17226@voom.fritz.box> From: Alexey Kardashevskiy Message-ID: <20f99d06-59a8-dc55-03ed-6e68cd28b741@ozlabs.ru> Date: Tue, 31 May 2016 18:19:12 +1000 MIME-Version: 1.0 In-Reply-To: <20160526040105.GB17226@voom.fritz.box> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="l1oPbDQSQ9awkI81FEWlJOgkdalGgoGfi" Subject: Re: [Qemu-devel] [PATCH qemu v16 10/19] spapr_iommu: Migrate full state List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, Alexander Graf , Alex Williamson , Paolo Bonzini This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --l1oPbDQSQ9awkI81FEWlJOgkdalGgoGfi From: Alexey Kardashevskiy To: David Gibson Cc: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, Alexander Graf , Alex Williamson , Paolo Bonzini Message-ID: <20f99d06-59a8-dc55-03ed-6e68cd28b741@ozlabs.ru> Subject: Re: [PATCH qemu v16 10/19] spapr_iommu: Migrate full state References: <1462344751-28281-1-git-send-email-aik@ozlabs.ru> <1462344751-28281-11-git-send-email-aik@ozlabs.ru> <20160526040105.GB17226@voom.fritz.box> In-Reply-To: <20160526040105.GB17226@voom.fritz.box> Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: quoted-printable On 26/05/16 14:01, David Gibson wrote: > On Wed, May 04, 2016 at 04:52:22PM +1000, Alexey Kardashevskiy wrote: >> The source guest could have reallocated the default TCE table and >> migrate bigger/smaller table. This adds reallocation in post_load() >> if the default table size is different on source and destination. >> >> This adds @bus_offset, @page_shift, @enabled to the migration stream. >> These cannot change without dynamic DMA windows so no change in >> behavior is expected now. >> >> Signed-off-by: Alexey Kardashevskiy >> David Gibson >> --- >> Changes: >> v15: >> * squashed "migrate full state" into this >> * added missing tcet->mig_nb_table initialization in spapr_tce_table_p= re_save() >> * instead of bumping the version, moved extra parameters to subsection= >> >> v14: >> * new to the series >> --- >> hw/ppc/spapr_iommu.c | 67 +++++++++++++++++++++++++++++++++++++++++= +++++++-- >> include/hw/ppc/spapr.h | 2 ++ >> trace-events | 2 ++ >> 3 files changed, 69 insertions(+), 2 deletions(-) >> >> diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c >> index 9bcd3f6..52b1e0d 100644 >> --- a/hw/ppc/spapr_iommu.c >> +++ b/hw/ppc/spapr_iommu.c >> @@ -137,33 +137,96 @@ static IOMMUTLBEntry spapr_tce_translate_iommu(M= emoryRegion *iommu, hwaddr addr, >> return ret; >> } >> =20 >> +static void spapr_tce_table_pre_save(void *opaque) >> +{ >> + sPAPRTCETable *tcet =3D SPAPR_TCE_TABLE(opaque); >> + >> + tcet->mig_table =3D tcet->table; >> + tcet->mig_nb_table =3D tcet->nb_table; >> + >> + trace_spapr_iommu_pre_save(tcet->liobn, tcet->mig_nb_table, >> + tcet->bus_offset, tcet->page_shift); >> +} >> + >> +static void spapr_tce_table_do_enable(sPAPRTCETable *tcet); >> +static void spapr_tce_table_do_disable(sPAPRTCETable *tcet); >> + >> static int spapr_tce_table_post_load(void *opaque, int version_id) >> { >> sPAPRTCETable *tcet =3D SPAPR_TCE_TABLE(opaque); >> + uint32_t old_nb_table =3D tcet->nb_table; >> =20 >> if (tcet->vdev) { >> spapr_vio_set_bypass(tcet->vdev, tcet->bypass); >> } >> =20 >> + if (tcet->enabled) { >> + if (tcet->nb_table !=3D tcet->mig_nb_table) { >> + if (tcet->nb_table) { >> + spapr_tce_table_do_disable(tcet); >> + } >> + tcet->nb_table =3D tcet->mig_nb_table; >> + spapr_tce_table_do_enable(tcet); >> + } >> + >> + memcpy(tcet->table, tcet->mig_table, >> + tcet->nb_table * sizeof(tcet->table[0])); >> + >> + free(tcet->mig_table); >> + tcet->mig_table =3D NULL; >> + } else if (tcet->table) { >> + /* Destination guest has a default table but source does not = -> free */ >> + spapr_tce_table_do_disable(tcet); >> + } >> + >> + trace_spapr_iommu_post_load(tcet->liobn, old_nb_table, tcet->nb_t= able, >> + tcet->bus_offset, tcet->page_shift); >> + >> return 0; >> } >> =20 >> +static bool spapr_tce_table_ex_needed(void *opaque) >> +{ >> + sPAPRTCETable *tcet =3D opaque; >> + >> + return tcet->bus_offset || tcet->page_shift !=3D 0xC; >=20 > || !tcet->enabled ?? >=20 > AFAICT you're assuming that the existing tcet on the destination will > be enabled prior to an incoming migration. >=20 >> +} >> + >> +static const VMStateDescription vmstate_spapr_tce_table_ex =3D { >> + .name =3D "spapr_iommu_ex", >> + .version_id =3D 1, >> + .minimum_version_id =3D 1, >> + .needed =3D spapr_tce_table_ex_needed, >> + .fields =3D (VMStateField[]) { >> + VMSTATE_BOOL(enabled, sPAPRTCETable), >=20 > ..or could you encode enabled as !!mig_nb_table? Sure. After a closer look, I can get rid of "enabled" field at all and use nb_table instead. --=20 Alexey --l1oPbDQSQ9awkI81FEWlJOgkdalGgoGfi Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJXTUkAAAoJEIYTPdgrwSC5O04QAJhr/gICWKvUdfoFDG43QkGO FjMuyLEjHSwXOrWKoky3KI1b3Lv53kkXoWZ9mUd6/FxY3bP904ZXR9KPAvakNYbc oHb+NhQTMdwIabs6B7AzMgNuIsTn4kNSI6Hi63MimrA6INEWuDUALFNEPuRGryzH g9pv3g+Kel2Dz6/RtVI91ElEV8OX/gdHZxtidVAJiAS2lAR2KcQtfrXCJu9ldOc3 4N21RwidCGbycyBPTo3izsp/KSSLjAEJRMwVV0cVjmvvVFFxwiVuWcCe5SHJCTTH 7WBWTNW+FaSNZ+Q8HPyqu3aZtSo/rbRc4ciyKYvPjV6KGawDIrB8x7uj4Q6IPCek AtN10npJJJ+Y3elxkgCjXSNDPn+ErIJ+M7ZFoNairZsIlxB3UuDMnwl8vMAX+/ra nKN0zXlkb50KYW6GYITge4uLeZFjsQc13vEsf5g8quF0O6HHoM9cWfQX3mjjSl+/ YJmDaIpHCXseuAjD3jOpjkTSDK7c4pvH5UknI6Yo9dFTvni7qZyOVuznpMWVdmEe mM8LvuLc6tQtspQnoVAiV0djkZbwbxGbDFfDcsnMw5LjW/TzAcgtxbLRRMp8ux+j 4ynQsi4LJjzG/M9WDrFKsLJ4aLKtiVePgUgJkqXlGC2YzEvnfiX8guw2TkA64qs/ LRg14U1gzKOKcUZvaK4C =9W8j -----END PGP SIGNATURE----- --l1oPbDQSQ9awkI81FEWlJOgkdalGgoGfi--