From: George Dunlap <George.Dunlap@eu.citrix.com>
To: Tiejun Chen <tiejun.chen@intel.com>
Cc: Kevin Tian <kevin.tian@intel.com>, Keir Fraser <keir@xen.org>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Tim Deegan <tim@xen.org>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
Aravind Gopalakrishnan <Aravind.Gopalakrishnan@amd.com>,
Jan Beulich <jbeulich@suse.com>,
Yang Zhang <yang.z.zhang@intel.com>,
Stefano Stabellini <stefano.stabellini@citrix.com>,
Ian Campbell <ian.campbell@citrix.com>
Subject: Re: [v8][PATCH 03/16] xen/passthrough: extend hypercall to support rdm reservation policy
Date: Thu, 16 Jul 2015 12:09:58 +0100 [thread overview]
Message-ID: <CAFLBxZaHUJyUkhqMU+hW1CbBwMoTK30Hw3Gr5T-ZHhcg=mMpUQ@mail.gmail.com> (raw)
In-Reply-To: <1437029582-19564-4-git-send-email-tiejun.chen@intel.com>
On Thu, Jul 16, 2015 at 7:52 AM, Tiejun Chen <tiejun.chen@intel.com> wrote:
> This patch extends the existing hypercall to support rdm reservation policy.
> We return error or just throw out a warning message depending on whether
> the policy is "strict" or "relaxed" when reserving RDM regions in pfn space.
> Note in some special cases, e.g. add a device to hwdomain, and remove a
> device from user domain, 'relaxed' is fine enough since this is always safe
> to hwdomain.
>
> CC: Tim Deegan <tim@xen.org>
> CC: Keir Fraser <keir@xen.org>
> CC: Jan Beulich <jbeulich@suse.com>
> CC: Andrew Cooper <andrew.cooper3@citrix.com>
> CC: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
> CC: Aravind Gopalakrishnan <Aravind.Gopalakrishnan@amd.com>
> CC: Ian Campbell <ian.campbell@citrix.com>
> CC: Stefano Stabellini <stefano.stabellini@citrix.com>
> CC: Yang Zhang <yang.z.zhang@intel.com>
> CC: Kevin Tian <kevin.tian@intel.com>
> Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
With or without the "flags &" change:
Reviewed-by: George Dunlap <george.dunlap@eu.citrix.com>
> ---
> v8:
>
> * Force to pass "0"(strict) when add or move a device in hardware domain,
> and improve some associated code comments.
>
> v6 ~ v7:
>
> * Nothing is changed.
>
> v5:
>
> * Just leave one bit XEN_DOMCTL_DEV_RDM_RELAXED as our flag, so
> "0" means "strict" and "1" means "relaxed".
>
> * So make DT device ignore the flag field
>
> * Improve the code comments
>
> v4:
>
> * Add code comments to describer why we fix to set a policy flag in some
> cases like adding a device to hwdomain, and removing a device from user domain.
>
> * Avoid using fixed width types for the parameter of set_identity_p2m_entry()
>
> * Fix one judging condition
> domctl->u.assign_device.flag == XEN_DOMCTL_DEV_NO_RDM
> -> domctl->u.assign_device.flag != XEN_DOMCTL_DEV_NO_RDM
>
> * Add to range check the flag passed to make future extensions possible
> (and to avoid ambiguity on what out of range values would mean).
>
> xen/arch/x86/mm/p2m.c | 7 ++++--
> xen/drivers/passthrough/amd/pci_amd_iommu.c | 3 ++-
> xen/drivers/passthrough/arm/smmu.c | 2 +-
> xen/drivers/passthrough/device_tree.c | 3 ++-
> xen/drivers/passthrough/pci.c | 15 ++++++++----
> xen/drivers/passthrough/vtd/iommu.c | 37 ++++++++++++++++++++++-------
> xen/include/asm-x86/p2m.h | 2 +-
> xen/include/public/domctl.h | 3 +++
> xen/include/xen/iommu.h | 2 +-
> 9 files changed, 55 insertions(+), 19 deletions(-)
>
> diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
> index 99a26ca..47785dc 100644
> --- a/xen/arch/x86/mm/p2m.c
> +++ b/xen/arch/x86/mm/p2m.c
> @@ -901,7 +901,7 @@ int set_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
> }
>
> int set_identity_p2m_entry(struct domain *d, unsigned long gfn,
> - p2m_access_t p2ma)
> + p2m_access_t p2ma, unsigned int flag)
> {
> p2m_type_t p2mt;
> p2m_access_t a;
> @@ -923,7 +923,10 @@ int set_identity_p2m_entry(struct domain *d, unsigned long gfn,
> ret = 0;
> else
> {
> - ret = -EBUSY;
> + if ( flag & XEN_DOMCTL_DEV_RDM_RELAXED )
> + ret = 0;
> + else
> + ret = -EBUSY;
> printk(XENLOG_G_WARNING
> "Cannot setup identity map d%d:%lx,"
> " gfn already mapped to %lx.\n",
> diff --git a/xen/drivers/passthrough/amd/pci_amd_iommu.c b/xen/drivers/passthrough/amd/pci_amd_iommu.c
> index e83bb35..920b35a 100644
> --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c
> +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c
> @@ -394,7 +394,8 @@ static int reassign_device(struct domain *source, struct domain *target,
> }
>
> static int amd_iommu_assign_device(struct domain *d, u8 devfn,
> - struct pci_dev *pdev)
> + struct pci_dev *pdev,
> + u32 flag)
> {
> struct ivrs_mappings *ivrs_mappings = get_ivrs_mappings(pdev->seg);
> int bdf = PCI_BDF2(pdev->bus, devfn);
> diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
> index 6cc4394..9a667e9 100644
> --- a/xen/drivers/passthrough/arm/smmu.c
> +++ b/xen/drivers/passthrough/arm/smmu.c
> @@ -2605,7 +2605,7 @@ static void arm_smmu_destroy_iommu_domain(struct iommu_domain *domain)
> }
>
> static int arm_smmu_assign_dev(struct domain *d, u8 devfn,
> - struct device *dev)
> + struct device *dev, u32 flag)
> {
> struct iommu_domain *domain;
> struct arm_smmu_xen_domain *xen_domain;
> diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c
> index 5d3842a..7ff79f8 100644
> --- a/xen/drivers/passthrough/device_tree.c
> +++ b/xen/drivers/passthrough/device_tree.c
> @@ -52,7 +52,8 @@ int iommu_assign_dt_device(struct domain *d, struct dt_device_node *dev)
> goto fail;
> }
>
> - rc = hd->platform_ops->assign_device(d, 0, dt_to_dev(dev));
> + /* The flag field doesn't matter to DT device. */
> + rc = hd->platform_ops->assign_device(d, 0, dt_to_dev(dev), 0);
>
> if ( rc )
> goto fail;
> diff --git a/xen/drivers/passthrough/pci.c b/xen/drivers/passthrough/pci.c
> index e30be43..6e23fc6 100644
> --- a/xen/drivers/passthrough/pci.c
> +++ b/xen/drivers/passthrough/pci.c
> @@ -1335,7 +1335,7 @@ static int device_assigned(u16 seg, u8 bus, u8 devfn)
> return pdev ? 0 : -EBUSY;
> }
>
> -static int assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn)
> +static int assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn, u32 flag)
> {
> struct hvm_iommu *hd = domain_hvm_iommu(d);
> struct pci_dev *pdev;
> @@ -1371,7 +1371,7 @@ static int assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn)
>
> pdev->fault.count = 0;
>
> - if ( (rc = hd->platform_ops->assign_device(d, devfn, pci_to_dev(pdev))) )
> + if ( (rc = hd->platform_ops->assign_device(d, devfn, pci_to_dev(pdev), flag)) )
> goto done;
>
> for ( ; pdev->phantom_stride; rc = 0 )
> @@ -1379,7 +1379,7 @@ static int assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn)
> devfn += pdev->phantom_stride;
> if ( PCI_SLOT(devfn) != PCI_SLOT(pdev->devfn) )
> break;
> - rc = hd->platform_ops->assign_device(d, devfn, pci_to_dev(pdev));
> + rc = hd->platform_ops->assign_device(d, devfn, pci_to_dev(pdev), flag);
> if ( rc )
> printk(XENLOG_G_WARNING "d%d: assign %04x:%02x:%02x.%u failed (%d)\n",
> d->domain_id, seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn),
> @@ -1496,6 +1496,7 @@ int iommu_do_pci_domctl(
> {
> u16 seg;
> u8 bus, devfn;
> + u32 flag;
> int ret = 0;
> uint32_t machine_sbdf;
>
> @@ -1577,9 +1578,15 @@ int iommu_do_pci_domctl(
> seg = machine_sbdf >> 16;
> bus = PCI_BUS(machine_sbdf);
> devfn = PCI_DEVFN2(machine_sbdf);
> + flag = domctl->u.assign_device.flag;
> + if ( flag > XEN_DOMCTL_DEV_RDM_RELAXED )
> + {
> + ret = -EINVAL;
> + break;
> + }
>
> ret = device_assigned(seg, bus, devfn) ?:
> - assign_device(d, seg, bus, devfn);
> + assign_device(d, seg, bus, devfn, flag);
> if ( ret == -ERESTART )
> ret = hypercall_create_continuation(__HYPERVISOR_domctl,
> "h", u_domctl);
> diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c
> index 8415958..b5d658e 100644
> --- a/xen/drivers/passthrough/vtd/iommu.c
> +++ b/xen/drivers/passthrough/vtd/iommu.c
> @@ -1807,7 +1807,8 @@ static void iommu_set_pgd(struct domain *d)
> }
>
> static int rmrr_identity_mapping(struct domain *d, bool_t map,
> - const struct acpi_rmrr_unit *rmrr)
> + const struct acpi_rmrr_unit *rmrr,
> + u32 flag)
> {
> unsigned long base_pfn = rmrr->base_address >> PAGE_SHIFT_4K;
> unsigned long end_pfn = PAGE_ALIGN_4K(rmrr->end_address) >> PAGE_SHIFT_4K;
> @@ -1855,7 +1856,7 @@ static int rmrr_identity_mapping(struct domain *d, bool_t map,
>
> while ( base_pfn < end_pfn )
> {
> - int err = set_identity_p2m_entry(d, base_pfn, p2m_access_rw);
> + int err = set_identity_p2m_entry(d, base_pfn, p2m_access_rw, flag);
>
> if ( err )
> return err;
> @@ -1898,7 +1899,13 @@ static int intel_iommu_add_device(u8 devfn, struct pci_dev *pdev)
> PCI_BUS(bdf) == pdev->bus &&
> PCI_DEVFN2(bdf) == devfn )
> {
> - ret = rmrr_identity_mapping(pdev->domain, 1, rmrr);
> + /*
> + * iommu_add_device() is only called for the hardware
> + * domain (see xen/drivers/passthrough/pci.c:pci_add_device()).
> + * Since RMRRs are always reserved in the e820 map for the hardware
> + * domain, there shouldn't be a conflict.
> + */
> + ret = rmrr_identity_mapping(pdev->domain, 1, rmrr, 0);
> if ( ret )
> dprintk(XENLOG_ERR VTDPREFIX, "d%d: RMRR mapping failed\n",
> pdev->domain->domain_id);
> @@ -1939,7 +1946,11 @@ static int intel_iommu_remove_device(u8 devfn, struct pci_dev *pdev)
> PCI_DEVFN2(bdf) != devfn )
> continue;
>
> - rmrr_identity_mapping(pdev->domain, 0, rmrr);
> + /*
> + * Any flag is nothing to clear these mappings but here
> + * its always safe and strict to set 0.
> + */
> + rmrr_identity_mapping(pdev->domain, 0, rmrr, 0);
> }
>
> return domain_context_unmap(pdev->domain, devfn, pdev);
> @@ -2098,7 +2109,13 @@ static void __hwdom_init setup_hwdom_rmrr(struct domain *d)
> spin_lock(&pcidevs_lock);
> for_each_rmrr_device ( rmrr, bdf, i )
> {
> - ret = rmrr_identity_mapping(d, 1, rmrr);
> + /*
> + * Here means we're add a device to the hardware domain.
> + * Since RMRRs are always reserved in the e820 map for the hardware
> + * domain, there shouldn't be a conflict. So its always safe and
> + * strict to set 0.
> + */
> + ret = rmrr_identity_mapping(d, 1, rmrr, 0);
> if ( ret )
> dprintk(XENLOG_ERR VTDPREFIX,
> "IOMMU: mapping reserved region failed\n");
> @@ -2241,7 +2258,11 @@ static int reassign_device_ownership(
> PCI_BUS(bdf) == pdev->bus &&
> PCI_DEVFN2(bdf) == devfn )
> {
> - ret = rmrr_identity_mapping(source, 0, rmrr);
> + /*
> + * Any RMRR flag is always ignored when remove a device,
> + * but its always safe and strict to set 0.
> + */
> + ret = rmrr_identity_mapping(source, 0, rmrr, 0);
> if ( ret != -ENOENT )
> return ret;
> }
> @@ -2265,7 +2286,7 @@ static int reassign_device_ownership(
> }
>
> static int intel_iommu_assign_device(
> - struct domain *d, u8 devfn, struct pci_dev *pdev)
> + struct domain *d, u8 devfn, struct pci_dev *pdev, u32 flag)
> {
> struct acpi_rmrr_unit *rmrr;
> int ret = 0, i;
> @@ -2294,7 +2315,7 @@ static int intel_iommu_assign_device(
> PCI_BUS(bdf) == bus &&
> PCI_DEVFN2(bdf) == devfn )
> {
> - ret = rmrr_identity_mapping(d, 1, rmrr);
> + ret = rmrr_identity_mapping(d, 1, rmrr, flag);
> if ( ret )
> {
> reassign_device_ownership(d, hardware_domain, devfn, pdev);
> diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h
> index 190a286..68da0a9 100644
> --- a/xen/include/asm-x86/p2m.h
> +++ b/xen/include/asm-x86/p2m.h
> @@ -545,7 +545,7 @@ int clear_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn);
>
> /* Set identity addresses in the p2m table (for pass-through) */
> int set_identity_p2m_entry(struct domain *d, unsigned long gfn,
> - p2m_access_t p2ma);
> + p2m_access_t p2ma, unsigned int flag);
>
> #define clear_identity_p2m_entry(d, gfn, page_order) \
> guest_physmap_remove_page(d, gfn, gfn, page_order)
> diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
> index bc45ea5..bca25c9 100644
> --- a/xen/include/public/domctl.h
> +++ b/xen/include/public/domctl.h
> @@ -478,6 +478,9 @@ struct xen_domctl_assign_device {
> XEN_GUEST_HANDLE_64(char) path; /* path to the device tree node */
> } dt;
> } u;
> + /* IN */
> +#define XEN_DOMCTL_DEV_RDM_RELAXED 1
> + uint32_t flag; /* flag of assigned device */
> };
> typedef struct xen_domctl_assign_device xen_domctl_assign_device_t;
> DEFINE_XEN_GUEST_HANDLE(xen_domctl_assign_device_t);
> diff --git a/xen/include/xen/iommu.h b/xen/include/xen/iommu.h
> index e2f584d..02b2b02 100644
> --- a/xen/include/xen/iommu.h
> +++ b/xen/include/xen/iommu.h
> @@ -140,7 +140,7 @@ struct iommu_ops {
> int (*add_device)(u8 devfn, device_t *dev);
> int (*enable_device)(device_t *dev);
> int (*remove_device)(u8 devfn, device_t *dev);
> - int (*assign_device)(struct domain *, u8 devfn, device_t *dev);
> + int (*assign_device)(struct domain *, u8 devfn, device_t *dev, u32 flag);
> int (*reassign_device)(struct domain *s, struct domain *t,
> u8 devfn, device_t *dev);
> #ifdef HAS_PCI
> --
> 1.9.1
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2015-07-16 11:09 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-17 0:45 [v9][PATCH 00/16] Fix RMRR Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 01/16] xen: introduce XENMEM_reserved_device_memory_map Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 02/16] xen/vtd: create RMRR mapping Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 03/16] xen/passthrough: extend hypercall to support rdm reservation policy Tiejun Chen
2015-07-17 6:48 ` Jan Beulich
2015-07-20 1:12 ` Tian, Kevin
2015-07-17 0:45 ` [v9][PATCH 04/16] xen: enable XENMEM_memory_map in hvm Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 05/16] hvmloader: get guest memory map into memory_map[] Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 06/16] hvmloader/pci: disable all pci devices conflicting with rdm Tiejun Chen
2015-07-17 13:59 ` Jan Beulich
2015-07-17 14:24 ` Chen, Tiejun
2015-07-17 0:45 ` [v9][PATCH 07/16] hvmloader/e820: construct guest e820 table Tiejun Chen
2015-07-17 7:40 ` Jan Beulich
2015-07-17 9:09 ` Chen, Tiejun
2015-07-17 10:50 ` Jan Beulich
2015-07-17 15:22 ` Chen, Tiejun
2015-07-17 15:31 ` Jan Beulich
2015-07-17 15:54 ` Chen, Tiejun
2015-07-17 16:06 ` Jan Beulich
2015-07-17 16:10 ` Chen, Tiejun
2015-07-18 12:35 ` George Dunlap
2015-07-20 6:19 ` Chen, Tiejun
2015-07-17 9:27 ` Chen, Tiejun
2015-07-17 10:53 ` Jan Beulich
2015-07-17 0:45 ` [v9][PATCH 08/16] tools/libxc: Expose new hypercall xc_reserved_device_memory_map Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 09/16] tools: extend xc_assign_device() to support rdm reservation policy Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 10/16] tools: introduce some new parameters to set rdm policy Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 11/16] tools/libxl: detect and avoid conflicts with RDM Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 12/16] tools: introduce a new parameter to set a predefined rdm boundary Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 13/16] libxl: construct e820 map with RDM information for HVM guest Tiejun Chen
2015-07-16 6:52 ` [v8][PATCH 00/16] Fix RMRR Tiejun Chen
2015-07-16 6:52 ` [v8][PATCH 01/16] xen: introduce XENMEM_reserved_device_memory_map Tiejun Chen
2015-07-16 6:52 ` [v8][PATCH 02/16] xen/vtd: create RMRR mapping Tiejun Chen
2015-07-16 6:52 ` [v8][PATCH 03/16] xen/passthrough: extend hypercall to support rdm reservation policy Tiejun Chen
2015-07-16 7:40 ` Jan Beulich
2015-07-16 7:48 ` Chen, Tiejun
2015-07-16 7:58 ` Jan Beulich
2015-07-16 11:09 ` George Dunlap [this message]
2015-07-16 6:52 ` [v8][PATCH 04/16] xen: enable XENMEM_memory_map in hvm Tiejun Chen
2015-07-16 6:52 ` [v8][PATCH 05/16] hvmloader: get guest memory map into memory_map[] Tiejun Chen
2015-07-16 9:18 ` Jan Beulich
2015-07-16 11:15 ` George Dunlap
2015-07-16 6:52 ` [v8][PATCH 06/16] hvmloader/pci: disable all pci devices conflicting with rdm Tiejun Chen
2015-07-16 11:32 ` George Dunlap
2015-07-16 11:52 ` Chen, Tiejun
2015-07-16 13:02 ` George Dunlap
2015-07-16 13:21 ` Chen, Tiejun
2015-07-16 13:32 ` Jan Beulich
2015-07-16 13:48 ` Chen, Tiejun
2015-07-16 14:54 ` Jan Beulich
2015-07-16 15:20 ` Chen, Tiejun
2015-07-16 15:39 ` George Dunlap
2015-07-16 16:08 ` Chen, Tiejun
2015-07-16 16:40 ` George Dunlap
2015-07-16 21:24 ` Chen, Tiejun
2015-07-16 16:18 ` George Dunlap
2015-07-16 16:31 ` George Dunlap
2015-07-16 21:15 ` Chen, Tiejun
2015-07-17 9:26 ` George Dunlap
2015-07-17 10:55 ` Jan Beulich
2015-07-16 6:52 ` [v8][PATCH 07/16] hvmloader/e820: construct guest e820 table Tiejun Chen
2015-07-16 11:47 ` George Dunlap
2015-07-16 13:12 ` Chen, Tiejun
2015-07-16 14:29 ` George Dunlap
2015-07-16 15:04 ` Chen, Tiejun
2015-07-16 15:16 ` George Dunlap
2015-07-16 15:29 ` Chen, Tiejun
2015-07-16 15:33 ` George Dunlap
2015-07-16 15:42 ` Chen, Tiejun
2015-07-16 6:52 ` [v8][PATCH 08/16] tools/libxc: Expose new hypercall xc_reserved_device_memory_map Tiejun Chen
2015-07-16 6:52 ` [v8][PATCH 09/16] tools: extend xc_assign_device() to support rdm reservation policy Tiejun Chen
2015-07-16 6:52 ` [v8][PATCH 10/16] tools: introduce some new parameters to set rdm policy Tiejun Chen
2015-07-16 6:52 ` [v8][PATCH 11/16] tools/libxl: detect and avoid conflicts with RDM Tiejun Chen
2015-07-16 6:52 ` [v8][PATCH 12/16] tools: introduce a new parameter to set a predefined rdm boundary Tiejun Chen
2015-07-16 6:52 ` [v8][PATCH 13/16] libxl: construct e820 map with RDM information for HVM guest Tiejun Chen
2015-07-22 13:55 ` [v8][PATCH 13/16] libxl: construct e820 map with RDM information for HVM guest [and 1 more messages] Ian Jackson
2015-07-16 6:53 ` [v8][PATCH 14/16] xen/vtd: enable USB device assignment Tiejun Chen
2015-07-16 6:53 ` [v8][PATCH 15/16] xen/vtd: prevent from assign the device with shared rmrr Tiejun Chen
2015-07-16 7:42 ` Jan Beulich
2015-07-16 6:53 ` [v8][PATCH 16/16] tools: parse to enable new rdm policy parameters Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 14/16] xen/vtd: enable USB device assignment Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 15/16] xen/vtd: prevent from assign the device with shared rmrr Tiejun Chen
2015-07-17 0:45 ` [v9][PATCH 16/16] tools: parse to enable new rdm policy parameters Tiejun Chen
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='CAFLBxZaHUJyUkhqMU+hW1CbBwMoTK30Hw3Gr5T-ZHhcg=mMpUQ@mail.gmail.com' \
--to=george.dunlap@eu.citrix.com \
--cc=Aravind.Gopalakrishnan@amd.com \
--cc=andrew.cooper3@citrix.com \
--cc=ian.campbell@citrix.com \
--cc=jbeulich@suse.com \
--cc=keir@xen.org \
--cc=kevin.tian@intel.com \
--cc=stefano.stabellini@citrix.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=tiejun.chen@intel.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.org \
--cc=yang.z.zhang@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).