From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
To: Eric Auger <eric.auger@redhat.com>
Cc: <eric.auger.pro@gmail.com>, <qemu-devel@nongnu.org>,
<qemu-arm@nongnu.org>, <peter.maydell@linaro.org>,
<imammedo@redhat.com>, <gustavo.romero@linaro.org>,
<anisinha@redhat.com>, <mst@redhat.com>,
<shannon.zhaosl@gmail.com>, <pbonzini@redhat.com>,
<philmd@linaro.org>, <alex.bennee@linaro.org>
Subject: Re: [PATCH v3 26/29] hw/arm/virt: Plug pcihp hotplug/hotunplug callbacks
Date: Fri, 20 Jun 2025 11:28:41 +0100 [thread overview]
Message-ID: <20250620112841.00007cb2@huawei.com> (raw)
In-Reply-To: <20250616094903.885753-27-eric.auger@redhat.com>
On Mon, 16 Jun 2025 11:46:55 +0200
Eric Auger <eric.auger@redhat.com> wrote:
Maybe needs a little bit of description.
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
A few trivial things inline.
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
>
> ---
> v2 -> v3:
> - fix cohabitation with virtio-mem-pci device and tested
> hotplug/unplug of this latter (Igor)
> ---
> hw/arm/virt.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 69 insertions(+), 3 deletions(-)
>
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 8c882e0794..06b87e1050 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1747,6 +1747,22 @@ static void virt_build_smbios(VirtMachineState *vms)
> }
> }
>
> +static AcpiPciHpState *get_acpi_pcihp_state(VirtMachineState *vms)
> +{
> + AcpiGedState *acpi_ged_state;
> + AcpiPciHpState *pcihp_state;
> +
> + if (!vms->acpi_dev) {
> + return NULL;
> + }
> + acpi_ged_state = ACPI_GED(vms->acpi_dev);
> + pcihp_state = &acpi_ged_state->pcihp_state;
> + if (pcihp_state->use_acpi_hotplug_bridge) {
> + return pcihp_state;
> + }
> + return NULL;
Really trivial but if this isn't going to gain extra stuff I'd consider
the NULL return the 'error' path and prefer that out of line for consistency.
That is.
if(!pcihp_state->use_acpi_hotplug_bridge) {
return NULL;
}
return pcihp_state;
That just ends up a tiny bit more consistent with the !vms->acpi_dev test
earlier in the function.
> +}
> +
> static
> void virt_machine_done(Notifier *notifier, void *data)
> {
> @@ -2907,6 +2923,13 @@ static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
> {
> VirtMachineState *vms = VIRT_MACHINE(hotplug_dev);
>
Maybe add a comment on why this is not in the if/else stack. I assume
because a few of those are also TYPE_PCI_DEVICE.
Something in the patch description would also work for me.
> + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
> + if (get_acpi_pcihp_state(vms)) {
> + acpi_pcihp_device_pre_plug_cb(HOTPLUG_HANDLER(vms->acpi_dev),
> + dev, errp);
> + }
> + }
> +
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_memory_pre_plug(hotplug_dev, dev, errp);
> } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> @@ -2961,6 +2984,15 @@ static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev,
> }
> }
>
> + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
> + AcpiPciHpState *pcihp_state = get_acpi_pcihp_state(vms);
> +
> + if (pcihp_state) {
> + acpi_pcihp_device_plug_cb(HOTPLUG_HANDLER(vms->acpi_dev),
> + pcihp_state, dev, errp);
> + }
> + }
> +
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_memory_plug(hotplug_dev, dev, errp);
> } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> @@ -3017,12 +3049,27 @@ out:
> static void virt_machine_device_unplug_request_cb(HotplugHandler *hotplug_dev,
> DeviceState *dev, Error **errp)
> {
> + bool supported = false;
> +
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_dimm_unplug_request(hotplug_dev, dev, errp);
> + supported = true;
> } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> virtio_md_pci_unplug_request(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev),
> errp);
> - } else {
> + supported = true;
> + }
> + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
> + VirtMachineState *vms = VIRT_MACHINE(hotplug_dev);
> + AcpiPciHpState *pcihp_state = get_acpi_pcihp_state(vms);
> +
> + if (pcihp_state) {
> + acpi_pcihp_device_unplug_request_cb(HOTPLUG_HANDLER(vms->acpi_dev),
> + pcihp_state, dev, errp);
> + supported = true;
> + }
> + }
> + if (!supported) {
> error_setg(errp, "device unplug request for unsupported device"
> " type: %s", object_get_typename(OBJECT(dev)));
> }
> @@ -3031,11 +3078,27 @@ static void virt_machine_device_unplug_request_cb(HotplugHandler *hotplug_dev,
> static void virt_machine_device_unplug_cb(HotplugHandler *hotplug_dev,
> DeviceState *dev, Error **errp)
> {
> + bool supported = false;
> +
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_dimm_unplug(hotplug_dev, dev, errp);
> + supported = true;
> } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> virtio_md_pci_unplug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
> - } else {
> + supported = true;
> + }
> + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
> + VirtMachineState *vms = VIRT_MACHINE(hotplug_dev);
> +
> + AcpiPciHpState *pcihp_state = get_acpi_pcihp_state(vms);
> +
> + if (pcihp_state) {
> + acpi_pcihp_device_unplug_cb(HOTPLUG_HANDLER(vms->acpi_dev),
> + pcihp_state, dev, errp);
> + supported = true;
> + }
> + }
> + if (!supported) {
> error_setg(errp, "virt: device unplug for unsupported device"
> " type: %s", object_get_typename(OBJECT(dev)));
> }
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron via <qemu-devel@nongnu.org>
To: Eric Auger <eric.auger@redhat.com>
Cc: <eric.auger.pro@gmail.com>, <qemu-devel@nongnu.org>,
<qemu-arm@nongnu.org>, <peter.maydell@linaro.org>,
<imammedo@redhat.com>, <gustavo.romero@linaro.org>,
<anisinha@redhat.com>, <mst@redhat.com>,
<shannon.zhaosl@gmail.com>, <pbonzini@redhat.com>,
<philmd@linaro.org>, <alex.bennee@linaro.org>
Subject: Re: [PATCH v3 26/29] hw/arm/virt: Plug pcihp hotplug/hotunplug callbacks
Date: Fri, 20 Jun 2025 11:28:41 +0100 [thread overview]
Message-ID: <20250620112841.00007cb2@huawei.com> (raw)
In-Reply-To: <20250616094903.885753-27-eric.auger@redhat.com>
On Mon, 16 Jun 2025 11:46:55 +0200
Eric Auger <eric.auger@redhat.com> wrote:
Maybe needs a little bit of description.
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
A few trivial things inline.
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
>
> ---
> v2 -> v3:
> - fix cohabitation with virtio-mem-pci device and tested
> hotplug/unplug of this latter (Igor)
> ---
> hw/arm/virt.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 69 insertions(+), 3 deletions(-)
>
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 8c882e0794..06b87e1050 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1747,6 +1747,22 @@ static void virt_build_smbios(VirtMachineState *vms)
> }
> }
>
> +static AcpiPciHpState *get_acpi_pcihp_state(VirtMachineState *vms)
> +{
> + AcpiGedState *acpi_ged_state;
> + AcpiPciHpState *pcihp_state;
> +
> + if (!vms->acpi_dev) {
> + return NULL;
> + }
> + acpi_ged_state = ACPI_GED(vms->acpi_dev);
> + pcihp_state = &acpi_ged_state->pcihp_state;
> + if (pcihp_state->use_acpi_hotplug_bridge) {
> + return pcihp_state;
> + }
> + return NULL;
Really trivial but if this isn't going to gain extra stuff I'd consider
the NULL return the 'error' path and prefer that out of line for consistency.
That is.
if(!pcihp_state->use_acpi_hotplug_bridge) {
return NULL;
}
return pcihp_state;
That just ends up a tiny bit more consistent with the !vms->acpi_dev test
earlier in the function.
> +}
> +
> static
> void virt_machine_done(Notifier *notifier, void *data)
> {
> @@ -2907,6 +2923,13 @@ static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
> {
> VirtMachineState *vms = VIRT_MACHINE(hotplug_dev);
>
Maybe add a comment on why this is not in the if/else stack. I assume
because a few of those are also TYPE_PCI_DEVICE.
Something in the patch description would also work for me.
> + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
> + if (get_acpi_pcihp_state(vms)) {
> + acpi_pcihp_device_pre_plug_cb(HOTPLUG_HANDLER(vms->acpi_dev),
> + dev, errp);
> + }
> + }
> +
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_memory_pre_plug(hotplug_dev, dev, errp);
> } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> @@ -2961,6 +2984,15 @@ static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev,
> }
> }
>
> + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
> + AcpiPciHpState *pcihp_state = get_acpi_pcihp_state(vms);
> +
> + if (pcihp_state) {
> + acpi_pcihp_device_plug_cb(HOTPLUG_HANDLER(vms->acpi_dev),
> + pcihp_state, dev, errp);
> + }
> + }
> +
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_memory_plug(hotplug_dev, dev, errp);
> } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> @@ -3017,12 +3049,27 @@ out:
> static void virt_machine_device_unplug_request_cb(HotplugHandler *hotplug_dev,
> DeviceState *dev, Error **errp)
> {
> + bool supported = false;
> +
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_dimm_unplug_request(hotplug_dev, dev, errp);
> + supported = true;
> } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> virtio_md_pci_unplug_request(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev),
> errp);
> - } else {
> + supported = true;
> + }
> + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
> + VirtMachineState *vms = VIRT_MACHINE(hotplug_dev);
> + AcpiPciHpState *pcihp_state = get_acpi_pcihp_state(vms);
> +
> + if (pcihp_state) {
> + acpi_pcihp_device_unplug_request_cb(HOTPLUG_HANDLER(vms->acpi_dev),
> + pcihp_state, dev, errp);
> + supported = true;
> + }
> + }
> + if (!supported) {
> error_setg(errp, "device unplug request for unsupported device"
> " type: %s", object_get_typename(OBJECT(dev)));
> }
> @@ -3031,11 +3078,27 @@ static void virt_machine_device_unplug_request_cb(HotplugHandler *hotplug_dev,
> static void virt_machine_device_unplug_cb(HotplugHandler *hotplug_dev,
> DeviceState *dev, Error **errp)
> {
> + bool supported = false;
> +
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_dimm_unplug(hotplug_dev, dev, errp);
> + supported = true;
> } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> virtio_md_pci_unplug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
> - } else {
> + supported = true;
> + }
> + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
> + VirtMachineState *vms = VIRT_MACHINE(hotplug_dev);
> +
> + AcpiPciHpState *pcihp_state = get_acpi_pcihp_state(vms);
> +
> + if (pcihp_state) {
> + acpi_pcihp_device_unplug_cb(HOTPLUG_HANDLER(vms->acpi_dev),
> + pcihp_state, dev, errp);
> + supported = true;
> + }
> + }
> + if (!supported) {
> error_setg(errp, "virt: device unplug for unsupported device"
> " type: %s", object_get_typename(OBJECT(dev)));
> }
next prev parent reply other threads:[~2025-06-20 10:28 UTC|newest]
Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-16 9:46 [PATCH v3 00/29] ACPI PCI Hotplug support on ARM Eric Auger
2025-06-16 9:46 ` [PATCH v3 01/29] hw/i386/acpi-build: Make aml_pci_device_dsm() static Eric Auger
2025-06-16 9:46 ` [PATCH v3 02/29] hw/acpi/ged: Add a acpi-pci-hotplug-with-bridge-support property Eric Auger
2025-06-20 8:53 ` Jonathan Cameron
2025-06-20 8:53 ` Jonathan Cameron via
2025-06-20 11:09 ` Igor Mammedov
2025-06-20 11:27 ` Eric Auger
2025-06-16 9:46 ` [PATCH v3 03/29] hw/acpi: Rename and move build_x86_acpi_pci_hotplug to pcihp Eric Auger
2025-06-16 9:46 ` [PATCH v3 04/29] hw/pci-host/gpex-acpi: Add native_pci_hotplug arg to acpi_dsdt_add_pci_osc Eric Auger
2025-06-20 8:45 ` Jonathan Cameron
2025-06-20 8:45 ` Jonathan Cameron via
2025-06-16 9:46 ` [PATCH v3 05/29] tests/qtest/bios-tables-test: Prepare for changes in the DSDT table Eric Auger
2025-06-20 8:49 ` Jonathan Cameron
2025-06-20 8:49 ` Jonathan Cameron via
2025-06-20 11:29 ` Eric Auger
2025-06-20 11:11 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 06/29] hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation Eric Auger
2025-06-20 8:50 ` Jonathan Cameron
2025-06-20 8:50 ` Jonathan Cameron via
2025-06-20 11:48 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 07/29] hw/pci-host/gpex-acpi: retrieve and use GED acpi_pcihp setting Eric Auger
2025-06-20 8:52 ` Jonathan Cameron
2025-06-20 8:52 ` Jonathan Cameron via
2025-06-20 12:07 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 08/29] hw/i386/acpi-build: Turn build_q35_osc_method into a generic method Eric Auger
2025-06-20 8:54 ` Jonathan Cameron
2025-06-20 8:54 ` Jonathan Cameron via
2025-06-20 12:11 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 09/29] hw/pci-host/gpex-acpi: Use build_pci_host_bridge_osc_method Eric Auger
2025-06-20 8:57 ` Jonathan Cameron
2025-06-20 8:57 ` Jonathan Cameron via
2025-06-20 12:16 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 10/29] tests/qtest/bios-tables-test: Update DSDT blobs after GPEX _OSC change Eric Auger
2025-06-20 8:59 ` Jonathan Cameron
2025-06-20 8:59 ` Jonathan Cameron via
2025-06-20 11:33 ` Eric Auger
2025-06-16 9:46 ` [PATCH v3 11/29] hw/i386/acpi-build: Introduce build_append_pcihp_resources() helper Eric Auger
2025-06-16 9:46 ` [PATCH v3 12/29] hw/acpi/pcihp: Add an AmlRegionSpace arg to build_acpi_pci_hotplug Eric Auger
2025-06-16 9:46 ` [PATCH v3 13/29] hw/i386/acpi-build: Move build_append_notification_callback to pcihp Eric Auger
2025-06-16 9:46 ` [PATCH v3 14/29] hw/i386/acpi-build: Move build_append_pci_bus_devices/pcihp_slots " Eric Auger
2025-06-16 9:46 ` [PATCH v3 15/29] hw/i386/acpi-build: Use AcpiPciHpState::root in acpi_set_pci_info Eric Auger
2025-06-20 9:05 ` Jonathan Cameron
2025-06-20 9:05 ` Jonathan Cameron via
2025-06-20 12:20 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 16/29] hw/i386/acpi-build: Move aml_pci_edsm to a generic place Eric Auger
2025-06-20 9:19 ` Jonathan Cameron
2025-06-20 9:19 ` Jonathan Cameron via
2025-06-20 9:28 ` Jonathan Cameron
2025-06-20 9:28 ` Jonathan Cameron via
2025-06-20 12:27 ` Igor Mammedov
2025-06-24 16:05 ` Eric Auger
2025-06-16 9:46 ` [PATCH v3 17/29] hw/arm/virt-acpi-build: Modify the DSDT ACPI table to enable ACPI PCI hotplug Eric Auger
2025-06-20 9:35 ` Jonathan Cameron
2025-06-20 9:35 ` Jonathan Cameron via
2025-06-20 12:38 ` Igor Mammedov
2025-06-20 16:13 ` Jonathan Cameron
2025-06-20 16:13 ` Jonathan Cameron via
2025-06-25 15:23 ` Eric Auger
2025-06-26 8:44 ` Eric Auger
2025-06-24 15:51 ` Eric Auger
2025-06-20 12:33 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 18/29] hw/acpi/ged: Add a bus link property Eric Auger
2025-06-20 9:37 ` Jonathan Cameron
2025-06-20 9:37 ` Jonathan Cameron via
2025-06-20 12:45 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 19/29] hw/arm/virt: Pass the bus on the ged creation Eric Auger
2025-06-20 9:38 ` Jonathan Cameron
2025-06-20 9:38 ` Jonathan Cameron via
2025-06-24 15:56 ` Eric Auger
2025-06-16 9:46 ` [PATCH v3 20/29] hw/acpi/ged: Prepare the device to react to PCI hotplug events Eric Auger
2025-06-20 9:44 ` Jonathan Cameron
2025-06-20 9:44 ` Jonathan Cameron via
2025-06-25 14:31 ` Eric Auger
2025-06-20 12:57 ` Igor Mammedov
2025-06-25 14:21 ` Eric Auger
2025-06-20 13:01 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 21/29] hw/acpi/ged: Call pcihp plug callbacks in hotplug handler implementation Eric Auger
2025-06-20 10:09 ` Jonathan Cameron
2025-06-20 10:09 ` Jonathan Cameron via
2025-06-20 12:53 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 22/29] hw/acpi/ged: Support migration of AcpiPciHpState Eric Auger
2025-06-16 9:46 ` [PATCH v3 23/29] hw/core/sysbus: Introduce sysbus_mmio_map_name() helper Eric Auger
2025-06-20 10:13 ` Jonathan Cameron
2025-06-20 10:13 ` Jonathan Cameron via
2025-06-16 9:46 ` [PATCH v3 24/29] hw/arm/virt: Use a SysBusDevice variable in create_acpi_ged() Eric Auger
2025-06-20 10:18 ` Jonathan Cameron
2025-06-20 10:18 ` Jonathan Cameron via
2025-06-16 9:46 ` [PATCH v3 25/29] hw/arm/virt: Let virt support pci hotplug/unplug GED event Eric Auger
2025-06-20 10:17 ` Jonathan Cameron
2025-06-20 10:17 ` Jonathan Cameron via
2025-06-25 13:36 ` Eric Auger
2025-06-20 13:06 ` Igor Mammedov
2025-06-25 13:37 ` Eric Auger
2025-06-16 9:46 ` [PATCH v3 26/29] hw/arm/virt: Plug pcihp hotplug/hotunplug callbacks Eric Auger
2025-06-20 10:28 ` Jonathan Cameron [this message]
2025-06-20 10:28 ` Jonathan Cameron via
2025-06-20 13:10 ` Igor Mammedov
2025-06-26 8:16 ` Eric Auger
2025-06-16 9:46 ` [PATCH v3 27/29] tests/qtest/bios-tables-test: Prepare for addition of acpi pci hp tests Eric Auger
2025-06-20 10:31 ` Jonathan Cameron
2025-06-20 10:31 ` Jonathan Cameron via
2025-06-20 13:11 ` Igor Mammedov
2025-06-23 15:07 ` Eric Auger
2025-06-16 9:46 ` [PATCH v3 28/29] tests/qtest/bios-tables-test: Add aarch64 ACPI PCI hotplug test Eric Auger
2025-06-20 10:40 ` Jonathan Cameron
2025-06-20 10:40 ` Jonathan Cameron via
2025-06-20 13:22 ` Igor Mammedov
2025-06-26 10:04 ` Eric Auger
2025-06-20 13:18 ` Igor Mammedov
2025-06-16 9:46 ` [PATCH v3 29/29] qtest/bios-tables-test: Create DSDT 'acpipcihp" variant blob Eric Auger
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=20250620112841.00007cb2@huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=alex.bennee@linaro.org \
--cc=anisinha@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=eric.auger@redhat.com \
--cc=gustavo.romero@linaro.org \
--cc=imammedo@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=shannon.zhaosl@gmail.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.