From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59083) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YVG6X-0000rZ-Lh for qemu-devel@nongnu.org; Tue, 10 Mar 2015 05:05:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YVG6R-0006AF-AI for qemu-devel@nongnu.org; Tue, 10 Mar 2015 05:05:33 -0400 Received: from ozlabs.org ([103.22.144.67]:59710) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YVG6Q-00069w-PJ for qemu-devel@nongnu.org; Tue, 10 Mar 2015 05:05:27 -0400 Date: Tue, 10 Mar 2015 17:19:12 +1100 From: David Gibson Message-ID: <20150310061912.GG11973@voom.redhat.com> References: <1424883128-9841-1-git-send-email-dgilbert@redhat.com> <1424883128-9841-15-git-send-email-dgilbert@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="54ZiyWcDhi/7bWb8" Content-Disposition: inline In-Reply-To: <1424883128-9841-15-git-send-email-dgilbert@redhat.com> Subject: Re: [Qemu-devel] [PATCH v5 14/45] Move loadvm_handlers into MigrationIncomingState List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Dr. David Alan Gilbert (git)" Cc: aarcange@redhat.com, yamahata@private.email.ne.jp, quintela@redhat.com, qemu-devel@nongnu.org, amit.shah@redhat.com, pbonzini@redhat.com, yanghy@cn.fujitsu.com --54ZiyWcDhi/7bWb8 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Feb 25, 2015 at 04:51:37PM +0000, Dr. David Alan Gilbert (git) wrot= e: > From: "Dr. David Alan Gilbert" >=20 > In postcopy we need the loadvm_handlers to be used in a couple > of different instances of the loadvm loop/routine, and thus > it can't be local any more. >=20 > Signed-off-by: Dr. David Alan Gilbert > --- > include/migration/migration.h | 5 +++++ > include/migration/vmstate.h | 2 ++ > include/qemu/typedefs.h | 1 + > migration/migration.c | 2 ++ > savevm.c | 28 ++++++++++++++++------------ > 5 files changed, 26 insertions(+), 12 deletions(-) >=20 > diff --git a/include/migration/migration.h b/include/migration/migration.h > index 3776e86..751caa0 100644 > --- a/include/migration/migration.h > +++ b/include/migration/migration.h > @@ -50,10 +50,15 @@ enum mig_rpcomm_cmd { > =20 > typedef struct MigrationState MigrationState; > =20 > +typedef QLIST_HEAD(, LoadStateEntry) LoadStateEntry_Head; > + > /* State for the incoming migration */ > struct MigrationIncomingState { > QEMUFile *file; > =20 > + /* See savevm.c */ > + LoadStateEntry_Head loadvm_handlers; > + > QEMUFile *return_path; > QemuMutex rp_mutex; /* We send replies from multiple threads= */ > }; > diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h > index c20f2d1..18da207 100644 > --- a/include/migration/vmstate.h > +++ b/include/migration/vmstate.h > @@ -797,6 +797,8 @@ extern const VMStateInfo vmstate_info_bitmap; > =20 > #define SELF_ANNOUNCE_ROUNDS 5 > =20 > +void loadvm_free_handlers(MigrationIncomingState *mis); > + > int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, > void *opaque, int version_id); > void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, > diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h > index 74dfad3..6fdcbcd 100644 > --- a/include/qemu/typedefs.h > +++ b/include/qemu/typedefs.h > @@ -31,6 +31,7 @@ typedef struct I2CBus I2CBus; > typedef struct I2SCodec I2SCodec; > typedef struct ISABus ISABus; > typedef struct ISADevice ISADevice; > +typedef struct LoadStateEntry LoadStateEntry; > typedef struct MACAddr MACAddr; > typedef struct MachineClass MachineClass; > typedef struct MachineState MachineState; > diff --git a/migration/migration.c b/migration/migration.c > index 34cd4fe..4592060 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -78,6 +78,7 @@ MigrationIncomingState *migration_incoming_state_new(QE= MUFile* f) > { > mis_current =3D g_malloc0(sizeof(MigrationIncomingState)); > mis_current->file =3D f; > + QLIST_INIT(&mis_current->loadvm_handlers); > qemu_mutex_init(&mis_current->rp_mutex); > =20 > return mis_current; > @@ -85,6 +86,7 @@ MigrationIncomingState *migration_incoming_state_new(QE= MUFile* f) > =20 > void migration_incoming_state_destroy(void) > { > + loadvm_free_handlers(mis_current); AFAICT this is the only caler of loadvm_free_handlers(), so why not just open-code it here? > g_free(mis_current); > mis_current =3D NULL; > } > diff --git a/savevm.c b/savevm.c > index 7084d07..f42713d 100644 > --- a/savevm.c > +++ b/savevm.c > @@ -1019,18 +1019,26 @@ static int loadvm_process_command(QEMUFile *f) > return 0; > } > =20 > -typedef struct LoadStateEntry { > +struct LoadStateEntry { Why remove the typedef? > QLIST_ENTRY(LoadStateEntry) entry; > SaveStateEntry *se; > int section_id; > int version_id; > -} LoadStateEntry; > +}; > =20 > -int qemu_loadvm_state(QEMUFile *f) > +void loadvm_free_handlers(MigrationIncomingState *mis) > { > - QLIST_HEAD(, LoadStateEntry) loadvm_handlers =3D > - QLIST_HEAD_INITIALIZER(loadvm_handlers); > LoadStateEntry *le, *new_le; > + > + QLIST_FOREACH_SAFE(le, &mis->loadvm_handlers, entry, new_le) { > + QLIST_REMOVE(le, entry); > + g_free(le); > + } > +} > + > +int qemu_loadvm_state(QEMUFile *f) > +{ > + MigrationIncomingState *mis =3D migration_incoming_get_current(); > Error *local_err =3D NULL; > uint8_t section_type; > unsigned int v; > @@ -1061,6 +1069,7 @@ int qemu_loadvm_state(QEMUFile *f) > while ((section_type =3D qemu_get_byte(f)) !=3D QEMU_VM_EOF) { > uint32_t instance_id, version_id, section_id; > SaveStateEntry *se; > + LoadStateEntry *le; > char idstr[256]; > =20 > trace_qemu_loadvm_state_section(section_type); > @@ -1102,7 +1111,7 @@ int qemu_loadvm_state(QEMUFile *f) > le->se =3D se; > le->section_id =3D section_id; > le->version_id =3D version_id; > - QLIST_INSERT_HEAD(&loadvm_handlers, le, entry); > + QLIST_INSERT_HEAD(&mis->loadvm_handlers, le, entry); > =20 > ret =3D vmstate_load(f, le->se, le->version_id); > if (ret < 0) { > @@ -1116,7 +1125,7 @@ int qemu_loadvm_state(QEMUFile *f) > section_id =3D qemu_get_be32(f); > =20 > trace_qemu_loadvm_state_section_partend(section_id); > - QLIST_FOREACH(le, &loadvm_handlers, entry) { > + QLIST_FOREACH(le, &mis->loadvm_handlers, entry) { > if (le->section_id =3D=3D section_id) { > break; > } > @@ -1152,11 +1161,6 @@ int qemu_loadvm_state(QEMUFile *f) > ret =3D 0; > =20 > out: > - QLIST_FOREACH_SAFE(le, &loadvm_handlers, entry, new_le) { > - QLIST_REMOVE(le, entry); > - g_free(le); > - } > - > if (ret =3D=3D 0) { > ret =3D qemu_file_get_error(f); > } --=20 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 --54ZiyWcDhi/7bWb8 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJU/ozgAAoJEGw4ysog2bOS5QQQALcquCCPYgGyKIE8zxDgfoSJ Uu1/BvQ+Wt1gR1gxit1aXewHZ7IlsQ/s8nOKvLeCn4t8auq0h3S8pLXNpGyVzKGS fMKZsqsxI40MnNdpNDkAczFOXVKzakGL4HTqqxatmorzz9jZd1VmDbQPA/FxBgWV F+g/KAduhgrZcgVnV2L2e8NebvV96kzWH2MDRYfMedVsh3XsBnAyfsduf5HNQT3R p5z+qm88/8qG0yGXKFKRyhCS7STuXLdpBfBCdXSbI6L9IwkqoAREJJ9tjxWTsAKj SLupd3rxbaoEU8DQhymKtGZyj3zKWejoeHxUXmvCOKkOGjX6gOZ4Z797ga2l1LGc zMbTYWBKmqMxAOUxMQImMIAdrtagYckdzeMOK3X72klAiTbnIeXH3IhF0103+Rfu 7YxVs1rIwGHaHT88v55XbNSGH8Tni+2u7EcASJVkNJRgbWn9GaZtLFzfaNUcUw5g UHF1lmH+68bDrD9B+fPNdINOT+xPMH4C34LBEA8opt4VgTvv1IpHIAqAmGBHXT9j Fqe43Ht7TNztDaNm9ULYCIEeO2gxOVdeR/+PEEFEwrcHJ5xue5M/fSY7fCgvI4gW t6MENSEUTeIb/eVYbEiqCvwC/7+ewYN6XCG5b25C1sNAla1IzyRRnhK2nKoB+Gyp PY9/GN+6xOtDgpJXYBWi =TO3O -----END PGP SIGNATURE----- --54ZiyWcDhi/7bWb8--