From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Cc: mprivozn@redhat.com, pbonzini@redhat.com, berrange@redhat.com,
qemu-devel@nongnu.org, quintela@redhat.com
Subject: Re: [Qemu-devel] [PATCH v3 3/6] vmstate: replace DeviceState with VMStateIf
Date: Mon, 16 Sep 2019 10:06:06 +0100 [thread overview]
Message-ID: <20190916090606.GA2887@work-vm> (raw)
In-Reply-To: <20190912122514.22504-4-marcandre.lureau@redhat.com>
* Marc-André Lureau (marcandre.lureau@redhat.com) wrote:
> Replace DeviceState dependency with VMStateIf on vmstate API.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> docs/devel/migration.rst | 2 +-
> hw/block/onenand.c | 2 +-
> hw/core/qdev.c | 7 ++++---
> hw/ide/cmd646.c | 2 +-
> hw/ide/isa.c | 2 +-
> hw/ide/piix.c | 2 +-
> hw/ide/via.c | 2 +-
> hw/misc/max111x.c | 2 +-
> hw/net/eepro100.c | 4 ++--
> hw/net/vmxnet3.c | 2 +-
> hw/nvram/eeprom93xx.c | 4 ++--
> hw/ppc/spapr_drc.c | 9 +++++----
> hw/ppc/spapr_iommu.c | 4 ++--
> hw/s390x/s390-skeys.c | 2 +-
> include/migration/register.h | 4 ++--
> include/migration/vmstate.h | 8 ++++----
> migration/savevm.c | 26 +++++++++++++-------------
> stubs/vmstate.c | 4 ++--
> 18 files changed, 45 insertions(+), 43 deletions(-)
>
> diff --git a/docs/devel/migration.rst b/docs/devel/migration.rst
> index f7668ae389..c9932194d9 100644
> --- a/docs/devel/migration.rst
> +++ b/docs/devel/migration.rst
> @@ -183,7 +183,7 @@ another to load the state back.
>
> .. code:: c
>
> - int register_savevm_live(DeviceState *dev,
> + int register_savevm_live(VMStateIf *obj,
> const char *idstr,
> int instance_id,
> int version_id,
> diff --git a/hw/block/onenand.c b/hw/block/onenand.c
> index fcc5a69b90..9c233c12e4 100644
> --- a/hw/block/onenand.c
> +++ b/hw/block/onenand.c
> @@ -822,7 +822,7 @@ static void onenand_realize(DeviceState *dev, Error **errp)
> onenand_mem_setup(s);
> sysbus_init_irq(sbd, &s->intr);
> sysbus_init_mmio(sbd, &s->container);
> - vmstate_register(dev,
> + vmstate_register(VMSTATE_IF(dev),
> ((s->shift & 0x7f) << 24)
> | ((s->id.man & 0xff) << 16)
> | ((s->id.dev & 0xff) << 8)
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index 7e083dfcae..ad18c0383d 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -849,7 +849,8 @@ static void device_set_realized(Object *obj, bool value, Error **errp)
> dev->canonical_path = object_get_canonical_path(OBJECT(dev));
>
> if (qdev_get_vmsd(dev)) {
> - if (vmstate_register_with_alias_id(dev, -1, qdev_get_vmsd(dev), dev,
> + if (vmstate_register_with_alias_id(VMSTATE_IF(dev),
> + -1, qdev_get_vmsd(dev), dev,
> dev->instance_id_alias,
> dev->alias_required_for_version,
> &local_err) < 0) {
> @@ -884,7 +885,7 @@ static void device_set_realized(Object *obj, bool value, Error **errp)
> local_errp);
> }
> if (qdev_get_vmsd(dev)) {
> - vmstate_unregister(dev, qdev_get_vmsd(dev), dev);
> + vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev);
> }
> if (dc->unrealize) {
> local_errp = local_err ? NULL : &local_err;
> @@ -908,7 +909,7 @@ child_realize_fail:
> }
>
> if (qdev_get_vmsd(dev)) {
> - vmstate_unregister(dev, qdev_get_vmsd(dev), dev);
> + vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev);
> }
>
> post_realize_fail:
> diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c
> index f3ccd11c79..01a982acbc 100644
> --- a/hw/ide/cmd646.c
> +++ b/hw/ide/cmd646.c
> @@ -301,7 +301,7 @@ static void pci_cmd646_ide_realize(PCIDevice *dev, Error **errp)
> ide_register_restart_cb(&d->bus[i]);
> }
>
> - vmstate_register(DEVICE(dev), 0, &vmstate_ide_pci, d);
> + vmstate_register(VMSTATE_IF(dev), 0, &vmstate_ide_pci, d);
> qemu_register_reset(cmd646_reset, d);
> }
>
> diff --git a/hw/ide/isa.c b/hw/ide/isa.c
> index 7b6e283679..9c7f88b2d5 100644
> --- a/hw/ide/isa.c
> +++ b/hw/ide/isa.c
> @@ -75,7 +75,7 @@ static void isa_ide_realizefn(DeviceState *dev, Error **errp)
> ide_init_ioport(&s->bus, isadev, s->iobase, s->iobase2);
> isa_init_irq(isadev, &s->irq, s->isairq);
> ide_init2(&s->bus, s->irq);
> - vmstate_register(dev, 0, &vmstate_ide_isa, s);
> + vmstate_register(VMSTATE_IF(dev), 0, &vmstate_ide_isa, s);
> ide_register_restart_cb(&s->bus);
> }
>
> diff --git a/hw/ide/piix.c b/hw/ide/piix.c
> index fba6bc8bff..cbaee9e2cc 100644
> --- a/hw/ide/piix.c
> +++ b/hw/ide/piix.c
> @@ -159,7 +159,7 @@ static void pci_piix_ide_realize(PCIDevice *dev, Error **errp)
> bmdma_setup_bar(d);
> pci_register_bar(dev, 4, PCI_BASE_ADDRESS_SPACE_IO, &d->bmdma_bar);
>
> - vmstate_register(DEVICE(dev), 0, &vmstate_ide_pci, d);
> + vmstate_register(VMSTATE_IF(dev), 0, &vmstate_ide_pci, d);
>
> pci_piix_init_ports(d);
> }
> diff --git a/hw/ide/via.c b/hw/ide/via.c
> index 7087dc676e..6b9d4c6d78 100644
> --- a/hw/ide/via.c
> +++ b/hw/ide/via.c
> @@ -193,7 +193,7 @@ static void via_ide_realize(PCIDevice *dev, Error **errp)
> bmdma_setup_bar(d);
> pci_register_bar(dev, 4, PCI_BASE_ADDRESS_SPACE_IO, &d->bmdma_bar);
>
> - vmstate_register(DEVICE(dev), 0, &vmstate_ide_pci, d);
> + vmstate_register(VMSTATE_IF(dev), 0, &vmstate_ide_pci, d);
>
> for (i = 0; i < 2; i++) {
> ide_bus_new(&d->bus[i], sizeof(d->bus[i]), DEVICE(d), i, 2);
> diff --git a/hw/misc/max111x.c b/hw/misc/max111x.c
> index a713149f16..211008ce02 100644
> --- a/hw/misc/max111x.c
> +++ b/hw/misc/max111x.c
> @@ -146,7 +146,7 @@ static int max111x_init(SSISlave *d, int inputs)
> s->input[7] = 0x80;
> s->com = 0;
>
> - vmstate_register(dev, -1, &vmstate_max111x, s);
> + vmstate_register(VMSTATE_IF(dev), -1, &vmstate_max111x, s);
> return 0;
> }
>
> diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c
> index cc2dd8b1c9..cc71a7a036 100644
> --- a/hw/net/eepro100.c
> +++ b/hw/net/eepro100.c
> @@ -1815,7 +1815,7 @@ static void pci_nic_uninit(PCIDevice *pci_dev)
> {
> EEPRO100State *s = DO_UPCAST(EEPRO100State, dev, pci_dev);
>
> - vmstate_unregister(&pci_dev->qdev, s->vmstate, s);
> + vmstate_unregister(VMSTATE_IF(&pci_dev->qdev), s->vmstate, s);
> g_free(s->vmstate);
> eeprom93xx_free(&pci_dev->qdev, s->eeprom);
> qemu_del_nic(s->nic);
> @@ -1874,7 +1874,7 @@ static void e100_nic_realize(PCIDevice *pci_dev, Error **errp)
>
> s->vmstate = g_memdup(&vmstate_eepro100, sizeof(vmstate_eepro100));
> s->vmstate->name = qemu_get_queue(s->nic)->model;
> - vmstate_register(&pci_dev->qdev, -1, s->vmstate, s);
> + vmstate_register(VMSTATE_IF(&pci_dev->qdev), -1, s->vmstate, s);
> }
>
> static void eepro100_instance_init(Object *obj)
> diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
> index b07adeed9c..8625e93dc9 100644
> --- a/hw/net/vmxnet3.c
> +++ b/hw/net/vmxnet3.c
> @@ -2247,7 +2247,7 @@ static void vmxnet3_pci_uninit(PCIDevice *pci_dev)
>
> VMW_CBPRN("Starting uninit...");
>
> - unregister_savevm(dev, "vmxnet3-msix", s);
> + unregister_savevm(VMSTATE_IF(dev), "vmxnet3-msix", s);
>
> vmxnet3_net_uninit(s);
>
> diff --git a/hw/nvram/eeprom93xx.c b/hw/nvram/eeprom93xx.c
> index 5b01b9b03f..07f09549ed 100644
> --- a/hw/nvram/eeprom93xx.c
> +++ b/hw/nvram/eeprom93xx.c
> @@ -321,7 +321,7 @@ eeprom_t *eeprom93xx_new(DeviceState *dev, uint16_t nwords)
> /* Output DO is tristate, read results in 1. */
> eeprom->eedo = 1;
> logout("eeprom = 0x%p, nwords = %u\n", eeprom, nwords);
> - vmstate_register(dev, 0, &vmstate_eeprom, eeprom);
> + vmstate_register(VMSTATE_IF(dev), 0, &vmstate_eeprom, eeprom);
> return eeprom;
> }
>
> @@ -329,7 +329,7 @@ void eeprom93xx_free(DeviceState *dev, eeprom_t *eeprom)
> {
> /* Destroy EEPROM. */
> logout("eeprom = 0x%p\n", eeprom);
> - vmstate_unregister(dev, &vmstate_eeprom, eeprom);
> + vmstate_unregister(VMSTATE_IF(dev), &vmstate_eeprom, eeprom);
> g_free(eeprom);
> }
>
> diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
> index 62f1a42592..17aeac3801 100644
> --- a/hw/ppc/spapr_drc.c
> +++ b/hw/ppc/spapr_drc.c
> @@ -511,7 +511,7 @@ static void realize(DeviceState *d, Error **errp)
> error_propagate(errp, err);
> return;
> }
> - vmstate_register(DEVICE(drc), spapr_drc_index(drc), &vmstate_spapr_drc,
> + vmstate_register(VMSTATE_IF(drc), spapr_drc_index(drc), &vmstate_spapr_drc,
> drc);
> trace_spapr_drc_realize_complete(spapr_drc_index(drc));
> }
> @@ -523,7 +523,7 @@ static void unrealize(DeviceState *d, Error **errp)
> gchar *name;
>
> trace_spapr_drc_unrealize(spapr_drc_index(drc));
> - vmstate_unregister(DEVICE(drc), &vmstate_spapr_drc, drc);
> + vmstate_unregister(VMSTATE_IF(drc), &vmstate_spapr_drc, drc);
> root_container = container_get(object_get_root(), DRC_CONTAINER_PATH);
> name = g_strdup_printf("%x", spapr_drc_index(drc));
> object_property_del(root_container, name, errp);
> @@ -619,7 +619,8 @@ static void realize_physical(DeviceState *d, Error **errp)
> return;
> }
>
> - vmstate_register(DEVICE(drcp), spapr_drc_index(SPAPR_DR_CONNECTOR(drcp)),
> + vmstate_register(VMSTATE_IF(drcp),
> + spapr_drc_index(SPAPR_DR_CONNECTOR(drcp)),
> &vmstate_spapr_drc_physical, drcp);
> qemu_register_reset(drc_physical_reset, drcp);
> }
> @@ -635,7 +636,7 @@ static void unrealize_physical(DeviceState *d, Error **errp)
> return;
> }
>
> - vmstate_unregister(DEVICE(drcp), &vmstate_spapr_drc_physical, drcp);
> + vmstate_unregister(VMSTATE_IF(drcp), &vmstate_spapr_drc_physical, drcp);
> qemu_unregister_reset(drc_physical_reset, drcp);
> }
>
> diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c
> index e87b3d50f7..b9e7854da9 100644
> --- a/hw/ppc/spapr_iommu.c
> +++ b/hw/ppc/spapr_iommu.c
> @@ -315,7 +315,7 @@ static void spapr_tce_table_realize(DeviceState *dev, Error **errp)
>
> QLIST_INSERT_HEAD(&spapr_tce_tables, tcet, list);
>
> - vmstate_register(DEVICE(tcet), tcet->liobn, &vmstate_spapr_tce_table,
> + vmstate_register(VMSTATE_IF(tcet), tcet->liobn, &vmstate_spapr_tce_table,
> tcet);
> }
>
> @@ -418,7 +418,7 @@ static void spapr_tce_table_unrealize(DeviceState *dev, Error **errp)
> {
> SpaprTceTable *tcet = SPAPR_TCE_TABLE(dev);
>
> - vmstate_unregister(DEVICE(tcet), &vmstate_spapr_tce_table, tcet);
> + vmstate_unregister(VMSTATE_IF(tcet), &vmstate_spapr_tce_table, tcet);
>
> QLIST_REMOVE(tcet, list);
>
> diff --git a/hw/s390x/s390-skeys.c b/hw/s390x/s390-skeys.c
> index d4807f7777..16b9bbf04d 100644
> --- a/hw/s390x/s390-skeys.c
> +++ b/hw/s390x/s390-skeys.c
> @@ -392,7 +392,7 @@ static inline void s390_skeys_set_migration_enabled(Object *obj, bool value,
> register_savevm_live(NULL, TYPE_S390_SKEYS, 0, 1,
> &savevm_s390_storage_keys, ss);
> } else {
> - unregister_savevm(DEVICE(ss), TYPE_S390_SKEYS, ss);
> + unregister_savevm(VMSTATE_IF(ss), TYPE_S390_SKEYS, ss);
> }
> }
>
> diff --git a/include/migration/register.h b/include/migration/register.h
> index 74f1578b29..f22f180286 100644
> --- a/include/migration/register.h
> +++ b/include/migration/register.h
> @@ -70,13 +70,13 @@ typedef struct SaveVMHandlers {
> int (*resume_prepare)(MigrationState *s, void *opaque);
> } SaveVMHandlers;
>
> -int register_savevm_live(DeviceState *dev,
> +int register_savevm_live(VMStateIf *obj,
> const char *idstr,
> int instance_id,
> int version_id,
> const SaveVMHandlers *ops,
> void *opaque);
>
> -void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque);
> +void unregister_savevm(VMStateIf *obj, const char *idstr, void *opaque);
>
> #endif
> diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
> index bdcf8a1652..1911e37d72 100644
> --- a/include/migration/vmstate.h
> +++ b/include/migration/vmstate.h
> @@ -1116,22 +1116,22 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,
> bool vmstate_save_needed(const VMStateDescription *vmsd, void *opaque);
>
> /* Returns: 0 on success, -1 on failure */
> -int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
> +int vmstate_register_with_alias_id(VMStateIf *obj, int instance_id,
> const VMStateDescription *vmsd,
> void *base, int alias_id,
> int required_for_version,
> Error **errp);
>
> /* Returns: 0 on success, -1 on failure */
> -static inline int vmstate_register(DeviceState *dev, int instance_id,
> +static inline int vmstate_register(VMStateIf *obj, int instance_id,
> const VMStateDescription *vmsd,
> void *opaque)
> {
> - return vmstate_register_with_alias_id(dev, instance_id, vmsd,
> + return vmstate_register_with_alias_id(obj, instance_id, vmsd,
> opaque, -1, 0, NULL);
> }
>
> -void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd,
> +void vmstate_unregister(VMStateIf *obj, const VMStateDescription *vmsd,
> void *opaque);
>
> struct MemoryRegion;
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 6caa35a679..7902da16e6 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -684,7 +684,7 @@ static void savevm_state_handler_insert(SaveStateEntry *nse)
> of the system, so instance_id should be removed/replaced.
> Meanwhile pass -1 as instance_id if you do not already have a clearly
> distinguishing id for all instances of your device class. */
> -int register_savevm_live(DeviceState *dev,
> +int register_savevm_live(VMStateIf *obj,
> const char *idstr,
> int instance_id,
> int version_id,
> @@ -704,8 +704,8 @@ int register_savevm_live(DeviceState *dev,
> se->is_ram = 1;
> }
>
> - if (dev) {
> - char *id = qdev_get_dev_path(dev);
> + if (obj) {
> + char *id = vmstate_if_get_id(obj);
> if (id) {
> if (snprintf(se->idstr, sizeof(se->idstr), "%s/", id) >=
> sizeof(se->idstr)) {
> @@ -736,17 +736,17 @@ int register_savevm_live(DeviceState *dev,
> return 0;
> }
>
> -void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque)
> +void unregister_savevm(VMStateIf *obj, const char *idstr, void *opaque)
> {
> SaveStateEntry *se, *new_se;
> char id[256] = "";
>
> - if (dev) {
> - char *path = qdev_get_dev_path(dev);
> - if (path) {
> - pstrcpy(id, sizeof(id), path);
> + if (obj) {
> + char *oid = vmstate_if_get_id(obj);
> + if (oid) {
> + pstrcpy(id, sizeof(id), oid);
> pstrcat(id, sizeof(id), "/");
> - g_free(path);
> + g_free(oid);
> }
And since your previous patch defaults vmstate_if_get_id to return
qdev_get_dev_path that should mean there's no change.
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> }
> pstrcat(id, sizeof(id), idstr);
> @@ -760,7 +760,7 @@ void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque)
> }
> }
>
> -int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
> +int vmstate_register_with_alias_id(VMStateIf *obj, int instance_id,
> const VMStateDescription *vmsd,
> void *opaque, int alias_id,
> int required_for_version,
> @@ -778,8 +778,8 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
> se->vmsd = vmsd;
> se->alias_id = alias_id;
>
> - if (dev) {
> - char *id = qdev_get_dev_path(dev);
> + if (obj) {
> + char *id = vmstate_if_get_id(obj);
> if (id) {
> if (snprintf(se->idstr, sizeof(se->idstr), "%s/", id) >=
> sizeof(se->idstr)) {
> @@ -810,7 +810,7 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
> return 0;
> }
>
> -void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd,
> +void vmstate_unregister(VMStateIf *obj, const VMStateDescription *vmsd,
> void *opaque)
> {
> SaveStateEntry *se, *new_se;
> diff --git a/stubs/vmstate.c b/stubs/vmstate.c
> index e1e89b87f0..6951d9fdc5 100644
> --- a/stubs/vmstate.c
> +++ b/stubs/vmstate.c
> @@ -3,7 +3,7 @@
>
> const VMStateDescription vmstate_dummy = {};
>
> -int vmstate_register_with_alias_id(DeviceState *dev,
> +int vmstate_register_with_alias_id(VMStateIf *obj,
> int instance_id,
> const VMStateDescription *vmsd,
> void *base, int alias_id,
> @@ -13,7 +13,7 @@ int vmstate_register_with_alias_id(DeviceState *dev,
> return 0;
> }
>
> -void vmstate_unregister(DeviceState *dev,
> +void vmstate_unregister(VMStateIf *obj,
> const VMStateDescription *vmsd,
> void *opaque)
> {
> --
> 2.23.0
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2019-09-16 9:07 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-12 12:25 [Qemu-devel] [PATCH v3 0/6] Add dbus-vmstate Marc-André Lureau
2019-09-12 12:25 ` [Qemu-devel] [PATCH v3 1/6] migration: fix vmdesc leak on vmstate_save() error Marc-André Lureau
2019-09-13 13:29 ` Dr. David Alan Gilbert
2019-09-17 12:31 ` Daniel P. Berrangé
2019-09-25 9:49 ` Dr. David Alan Gilbert
2019-09-12 12:25 ` [Qemu-devel] [PATCH v3 2/6] vmstate: add qom interface to get id Marc-André Lureau
2019-09-16 9:54 ` Dr. David Alan Gilbert
2019-09-17 12:33 ` Daniel P. Berrangé
2019-09-12 12:25 ` [Qemu-devel] [PATCH v3 3/6] vmstate: replace DeviceState with VMStateIf Marc-André Lureau
2019-09-12 16:18 ` Halil Pasic
2019-09-13 7:12 ` Marc-André Lureau
2019-09-16 9:06 ` Dr. David Alan Gilbert [this message]
2019-09-17 12:35 ` Daniel P. Berrangé
2019-09-12 12:25 ` [Qemu-devel] [PATCH v3 4/6] tests: add qtest_expect_exit_status() Marc-André Lureau
2019-09-13 13:33 ` Dr. David Alan Gilbert
2019-09-17 12:36 ` Daniel P. Berrangé
2019-09-12 12:25 ` [Qemu-devel] [PATCH v3 5/6] docs: start a document to describe D-Bus usage Marc-André Lureau
2019-09-16 10:00 ` Dr. David Alan Gilbert
2019-09-16 10:57 ` Marc-André Lureau
2019-09-16 13:15 ` Dr. David Alan Gilbert
2019-09-16 19:13 ` Marc-André Lureau
2019-09-17 8:12 ` Dr. David Alan Gilbert
2019-09-17 8:23 ` Marc-André Lureau
2019-09-17 12:47 ` Daniel P. Berrangé
2019-09-17 13:03 ` Dr. David Alan Gilbert
2019-09-19 9:23 ` Stefan Hajnoczi
2019-09-17 13:07 ` Daniel P. Berrangé
2019-09-12 12:25 ` [Qemu-devel] [PATCH v3 6/6] Add dbus-vmstate object Marc-André Lureau
2019-09-12 14:29 ` Eric Blake
2019-09-16 10:43 ` Dr. David Alan Gilbert
2019-09-17 13:21 ` Daniel P. Berrangé
2019-09-12 13:50 ` [Qemu-devel] [PATCH v3 0/6] Add dbus-vmstate no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190916090606.GA2887@work-vm \
--to=dgilbert@redhat.com \
--cc=berrange@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mprivozn@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.