xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@citrix.com>
To: Parth Dixit <parth.dixit@linaro.org>, xen-devel@lists.xen.org
Cc: keir@xen.org, ian.campbell@citrix.com, andrew.cooper3@citrix.com,
	tim@xen.org, julien.grall@citrix.com,
	stefano.stabellini@citrix.com, jbeulich@suse.com,
	christoffer.dall@linaro.org
Subject: Re: [PATCH v2 19/41] arm : acpi Add GIC specific ACPI boot support
Date: Thu, 21 May 2015 13:29:22 +0100	[thread overview]
Message-ID: <555DCFA2.1050103@citrix.com> (raw)
In-Reply-To: <1431893048-5214-20-git-send-email-parth.dixit@linaro.org>

Hi Parth,

On 17/05/15 21:03, Parth Dixit wrote:
> ACPI on Xen hypervisor uses MADT table for proper GIC initialization.
> It needs to parse GIC related subtables, collect CPU interface and distributor
> addresses and call driver initialization function (which is hardware
> abstraction agnostic). In a similar way, FDT initialize GICv2.
> 
> Modify MADT table to clear GICH and GICV which are not needed
> in Dom0.
> 
> NOTE: This commit allow to initialize GICv2 only.
> 
> Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
> Signed-off-by: Naresh Bhat <naresh.bhat@linaro.org>
> Signed-off-by: Parth Dixit <parth.dixit@linaro.org>
> ---
>  xen/arch/arm/gic-v2.c       | 132 +++++++++++++++++++++++++++++++++++++++++-
>  xen/arch/arm/gic.c          |  18 +++++-
>  xen/drivers/char/arm-uart.c | 136 ++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 284 insertions(+), 2 deletions(-)
>  create mode 100644 xen/drivers/char/arm-uart.c
> 
> diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c
> index 7276951..fcdcd19 100644
> --- a/xen/arch/arm/gic-v2.c
> +++ b/xen/arch/arm/gic-v2.c
> @@ -28,6 +28,8 @@
>  #include <xen/list.h>
>  #include <xen/device_tree.h>
>  #include <xen/libfdt/libfdt.h>
> +#include <xen/acpi.h>
> +#include <acpi/actables.h>
>  #include <asm/p2m.h>
>  #include <asm/domain.h>
>  #include <asm/platform.h>
> @@ -35,6 +37,7 @@
>  
>  #include <asm/io.h>
>  #include <asm/gic.h>
> +#include <asm/acpi.h>
>  
>  /*
>   * LR register definitions are GIC v2 specific.
> @@ -692,9 +695,122 @@ static int __init dt_gicv2_init(void)
>      return 0;
>  }
>  
> +#ifdef CONFIG_ACPI
> +static int __init
> +gic_acpi_parse_madt_cpu(struct acpi_subtable_header *header,
> +                        const unsigned long end)
> +{
> +        struct acpi_madt_generic_interrupt *processor;
> +
> +        processor = (struct acpi_madt_generic_interrupt *)header;
> +
> +        if (BAD_MADT_ENTRY(processor, end))

if ( ... )

> +                return -EINVAL;

The indentation looks wrong.

> +
> +        /* Read from APIC table and fill up the GIC variables */
> +
> +        gicv2.cbase = processor->base_address;
> +        gicv2.hbase = processor->gich_base_address;
> +        gicv2.vbase = processor->gicv_base_address;

This is per processor right? The value should be the same on each CPU as
we don't support non-banked GIC.

You would have to check that each value is the same on every CPU.

> +        gicv2_info.maintenance_irq = processor->vgic_maintenance_interrupt;
> +        if( processor->flags & ACPI_MADT_ENABLED )

The check doesn't seem necessary,

> +        {
> +            if( processor->flags & ACPI_MADT_VGIC )
> +                set_irq_type(gicv2_info.maintenance_irq, ACPI_IRQ_TYPE_EDGE_BOTH);
> +            else
> +                set_irq_type(gicv2_info.maintenance_irq, ACPI_IRQ_TYPE_LEVEL_MASK);

set_irq_type for local IRQ is very expensive. This should be done only one.

> +        }
> +
> +        processor->gich_base_address = 0;
> +        processor->gicv_base_address = 0;
> +        processor->vgic_maintenance_interrupt = 0;
> +        clean_dcache_va_range(processor, sizeof(struct acpi_madt_generic_interrupt));

Same remark as for the GTDT and MADT table. This doesn't belong to the
GIC initialization but DOM0 building.

Furthermore, the number of CPU for domain may be different as long as
the processor->flags.

Overall, I think this table should be recreated for DOM0.

> +        return 0;
> +}
> +
> +static int __init
> +gic_acpi_parse_madt_distributor(struct acpi_subtable_header *header,
> +                                const unsigned long end)
> +{
> +        struct acpi_madt_generic_distributor *dist;
> +
> +        dist = (struct acpi_madt_generic_distributor *)header;
> +
> +        if (BAD_MADT_ENTRY(dist, end))

if ( ... )

> +                return -EINVAL;

The indentation looks wrong

> +
> +        gicv2.dbase = dist->base_address;
> +
> +        return 0;
> +}
> +
> +static int __init acpi_gicv2_init(void)
> +{
> +    acpi_status status;
> +    struct acpi_table_header *table;
> +    u8 checksum;
> +    int res;

Given the usage of this variable I would rename it to count.

> +
> +    status = acpi_get_table(ACPI_SIG_MADT, 0, &table);

For a generic ACPI device code it would make sense to pass the ACPI
table in parameter as you will likely have to retrieve the same table
within the same class of device (see Serial too).

> +
> +    if ( ACPI_FAILURE(status) )
> +    {

Wrong indentation within the block.

> +              const char *msg = acpi_format_exception(status);

Missing blank line

> +              printk("\nFailed to get MADT table, %s\n", msg);

The first "\n" is not necessary.

> +              return 1;

Please return a meaningful error code.

> +    }
> +
> +    /* Collect CPU base addresses */
> +    res = acpi_parse_entries(ACPI_SIG_MADT,
> +                                sizeof(struct acpi_table_madt),
> +                                gic_acpi_parse_madt_cpu, table,
> +                                ACPI_MADT_TYPE_GENERIC_INTERRUPT,
> +                                0);

Wrong indentation

> +    if ( res < 0 )	

0 means the no GICC which should be throwing an error too. I would
replace the check by

res <= 0

> +    {

> +        printk("Error during GICC entries parsing\n");
> +        printk("\nFailed to initialize GIC IRQ controller\n");

One single printk("No valid GICC entries exists\n") would have been enough.

> +        return -EINVAL;
> +    }
> +
> +    /*
> +     * Find distributor base address. We expect one distributor entry since
> +     * ACPI 5.0 spec neither support multi-GIC instances nor GIC cascade.
> +     */
> +    res = acpi_parse_entries(ACPI_SIG_MADT,
> +                                sizeof(struct acpi_table_madt),
> +                                gic_acpi_parse_madt_distributor, table,
> +                                ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR,
> +                                0);

Wrong indentation

> +
> +    if ( res < 0 )

0 means no distributor which means the ACPI is not valid. I would
replace the check by

res <= 0


You also need to check that we don't have multiple GICD entry.

> +    {
> +        printk("Error during GICD entries parsing\n");
> +        printk("\nFailed to initialize GIC IRQ controller\n");

One single printk is enough.

> +        return -EINVAL;
> +    }
> +
> +    checksum = acpi_tb_checksum(ACPI_CAST_PTR(u8, table), table->length);
> +    table->checksum -= checksum;
> +    clean_dcache_va_range(table, sizeof(struct acpi_table_header));

This is coming out of nowhere without any explanation.

I guess this is related to the change in the ACPI table for DOM0, right?
If so, this should not be in the GIC initialization but in a specific
DOM0 building code.

> +    return 0;
> +}
> +#else
> +static int __init acpi_gicv2_init(void)
> +{
> +/* Should never reach here */
> +    return -EINVAL;
> +}
> +#endif
> +
>  static int gicv2_init(void)
>  {
> -     dt_gicv2_init();
> +    if( acpi_disabled )
> +        dt_gicv2_init();
> +    else
> +        acpi_gicv2_init();

acpi_gicv2_init is returning an error code. You should not ignore it.

>  
>      /* TODO: Add check on distributor, cpu size */
>  
> @@ -790,7 +906,21 @@ DT_DEVICE_START(gicv2, "GICv2", DEVICE_GIC)
>          .dt_match = gicv2_dt_match,
>          .init = dt_gicv2_preinit,
>  DT_DEVICE_END

Missing blank line.

> +#ifdef CONFIG_ACPI
> +/* Set up the GIC */
> +static int __init acpi_gicv2_preinit(const void *data)
> +{
> +    gicv2_info.hw_version = GIC_V2;
> +    register_gic_ops(&gicv2_ops);
> +
> +    return 0;
> +}
>  
> +ACPI_DEVICE_START(agicv2, "GICv2", DEVICE_GIC)
> +        .class_type = GIC_V2,
> +        .init = acpi_gicv2_preinit,
> +ACPI_DEVICE_END
> +#endif
>  /*
>   * Local variables:
>   * mode: C
> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
> index 701c306..e33bfd7 100644
> --- a/xen/arch/arm/gic.c
> +++ b/xen/arch/arm/gic.c
> @@ -27,6 +27,7 @@
>  #include <xen/softirq.h>
>  #include <xen/list.h>
>  #include <xen/device_tree.h>
> +#include <xen/acpi.h>
>  #include <asm/p2m.h>
>  #include <asm/domain.h>
>  #include <asm/platform.h>
> @@ -34,6 +35,7 @@
>  #include <asm/io.h>
>  #include <asm/gic.h>
>  #include <asm/vgic.h>
> +#include <asm/acpi.h>
>  
>  static void gic_restore_pending_irqs(struct vcpu *v);
>  
> @@ -261,9 +263,23 @@ void __init dt_gic_preinit(void)
>      dt_device_set_used_by(node, DOMID_XEN);
>  }
>  
> +static void __init acpi_gic_init(void)

This function should be called acpi_gic_preinit as it's used during
pre-initialization.

> +{
> +    int rc;
> +
> +    /* NOTE: Only one GIC is supported */
> +    /* hardcode to gic v2 for now */
> +    rc = acpi_device_init(DEVICE_GIC, NULL, GIC_V2);

This won't work for multiple GIC later. You should not try to use a
generic implementation just because it's there.

If you don't find a way to deal with genericity, I prefer a call to
acpi_gicv2_preinit directly.

> +    if ( rc )
> +        panic("Unable to find compatible GIC in the ACPI table");

This is not true. You check the presence of the GIC ACPI table later.

> +}
> +
>  void __init gic_preinit(void)
>  {
> -    dt_gic_preinit();
> +    if( acpi_disabled )
> +        dt_gic_preinit();
> +    else
> +        acpi_gic_init();
>  }
>  
>  /* Set up the GIC */
> diff --git a/xen/drivers/char/arm-uart.c b/xen/drivers/char/arm-uart.c
> new file mode 100644
> index 0000000..2603508
> --- /dev/null
> +++ b/xen/drivers/char/arm-uart.c

This file doesn't belong to this patch. I will review it when it will be
placed in the right patch.

Regards,

-- 
Julien Grall

  reply	other threads:[~2015-05-21 12:29 UTC|newest]

Thread overview: 194+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-17 20:03 [PATCH v2 00/41] Add ACPI support for arm64 on Xen Parth Dixit
2015-05-17 20:03 ` [PATCH v2 01/41] arm/acpi: Build numa for x86 only Parth Dixit
2015-05-18 12:51   ` Julien Grall
2015-05-20 15:07   ` Jan Beulich
2015-05-20 15:21     ` Julien Grall
2015-05-20 15:41       ` Jan Beulich
2015-05-20 15:49         ` Julien Grall
2015-05-20 16:31           ` Jan Beulich
2015-07-05 12:59             ` Parth Dixit
2015-07-05 17:39               ` Julien Grall
2015-07-05 17:49                 ` Parth Dixit
2015-07-06 10:49                 ` Jan Beulich
2015-05-17 20:03 ` [PATCH v2 02/41] arm/acpi: Build pmstat " Parth Dixit
2015-05-18 12:54   ` Julien Grall
2015-05-20 15:12   ` Jan Beulich
2015-05-24  6:10     ` Parth Dixit
2015-07-05 13:01       ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 03/41] arm/acpi : emulate io ports for arm Parth Dixit
2015-05-18 13:03   ` Julien Grall
2015-07-05 13:02     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 04/41] arm/acpi : add arm specific acpi header file Parth Dixit
2015-05-18 13:12   ` Julien Grall
2015-05-24  5:59     ` Parth Dixit
2015-07-05 13:02       ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 05/41] acpi : add helper function for mapping memory Parth Dixit
2015-05-18 13:26   ` Julien Grall
2015-05-18 14:01     ` Jan Beulich
2015-05-18 14:20       ` Julien Grall
2015-05-18 14:32         ` Jan Beulich
2015-05-18 14:35           ` Julien Grall
2015-05-24  6:40     ` Parth Dixit
2015-05-24  7:31       ` Julien Grall
2015-07-05 13:03         ` Parth Dixit
2015-05-20 16:03   ` Jan Beulich
2015-05-20 17:06     ` Julien Grall
2015-05-17 20:03 ` [PATCH v2 06/41] arm/acpi : Add basic ACPI initialization Parth Dixit
2015-05-18 14:11   ` Julien Grall
2015-05-24  6:02     ` Parth Dixit
2015-07-05 13:04       ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 07/41] arm/acpi : Introduce ARM Boot Architecture Flags in FADT Parth Dixit
2015-05-18 14:29   ` Julien Grall
2015-05-24  6:03     ` Parth Dixit
2015-07-05 13:04       ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 08/41] arm/acpi : Parse FADT table and get PSCI flags Parth Dixit
2015-05-18 14:58   ` Julien Grall
2015-05-24  6:05     ` Parth Dixit
2015-07-05 13:05       ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 09/41] arm/acpi : Add Generic Interrupt and Distributor struct Parth Dixit
2015-07-05 13:06   ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 10/41] arm/acpi : Print GIC information when MADT is parsed Parth Dixit
2015-05-18 15:06   ` Julien Grall
2015-05-24  6:09     ` Parth Dixit
2015-07-05 13:07       ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 11/41] arm/acpi : add GTDT support updated by ACPI 5.1 Parth Dixit
2015-05-18 15:11   ` Julien Grall
2015-05-24  6:06     ` Parth Dixit
2015-07-05 13:07       ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 12/41] arm : move dt specific code in smp to seperate functions Parth Dixit
2015-05-20 15:43   ` Julien Grall
2015-07-05 13:08     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 13/41] arm/acpi : parse MADT to map logical cpu to MPIDR and get cpu_possible_map Parth Dixit
2015-05-20 16:08   ` Jan Beulich
2015-05-20 16:38   ` Julien Grall
2015-07-05 13:09     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 14/41] arm : acpi add helper function for setting interrupt type Parth Dixit
2015-05-20 17:21   ` Julien Grall
2015-07-05 13:09     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 15/41] arm : acpi parse GTDT to initialize timer Parth Dixit
2015-05-20 18:03   ` Julien Grall
2015-05-24  7:00     ` Parth Dixit
2015-07-05 13:10       ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 16/41] acpi : Introduce acpi_parse_entries Parth Dixit
2015-05-20 16:13   ` Jan Beulich
2015-05-21  9:14     ` Parth Dixit
2015-05-21  9:20       ` Jan Beulich
2015-07-05 13:11         ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 17/41] arm : refactor gic into generic and dt specific parts Parth Dixit
2015-05-21 11:06   ` Julien Grall
2015-05-21 12:22   ` Julien Grall
2015-07-05 13:12     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 18/41] arm: Introduce a generic way to use a device from acpi Parth Dixit
2015-05-21 11:19   ` Julien Grall
2015-05-24  7:06     ` Parth Dixit
2015-05-24  7:40       ` Julien Grall
2015-05-25  5:58         ` Parth Dixit
2015-05-25 10:00           ` Julien Grall
2015-05-25 11:38             ` Parth Dixit
2015-07-05 13:12               ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 19/41] arm : acpi Add GIC specific ACPI boot support Parth Dixit
2015-05-21 12:29   ` Julien Grall [this message]
2015-07-05 13:13     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 20/41] arm : create generic uart initialization function Parth Dixit
2015-05-18  8:20   ` Jan Beulich
2015-05-20 18:11     ` Julien Grall
2015-05-21 11:28   ` Julien Grall
2015-05-24  7:07     ` Parth Dixit
2015-05-24  7:48       ` Julien Grall
2015-07-05 13:14         ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 21/41] arm : acpi Initialize serial port from ACPI SPCR table Parth Dixit
2015-05-26 15:04   ` Julien Grall
2015-07-05 13:14     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 22/41] arm : acpi create min DT stub for DOM0 Parth Dixit
2015-06-02 17:27   ` Julien Grall
2015-07-05 13:15     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 23/41] arm : acpi create chosen node " Parth Dixit
2015-06-02 17:40   ` Julien Grall
2015-07-05 13:16     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 24/41] arm : acpi create efi " Parth Dixit
2015-05-20 16:16   ` Jan Beulich
2015-05-24  6:30     ` Parth Dixit
2015-05-26  8:21       ` Jan Beulich
2015-05-26  8:39         ` Jan Beulich
2015-07-05 13:17         ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 25/41] arm : acpi add status override table Parth Dixit
2015-07-05 13:18   ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 26/41] arm : acpi add xen environment table Parth Dixit
2015-05-20 16:22   ` Jan Beulich
2015-05-20 17:00     ` Julien Grall
2015-05-21  6:22       ` Jan Beulich
2015-05-21 10:34         ` Julien Grall
2015-05-21 10:46           ` Jan Beulich
2015-05-21 10:52             ` Julien Grall
2015-05-21 11:38               ` Jan Beulich
2015-05-21 11:41                 ` Julien Grall
2015-05-24  7:16                   ` Parth Dixit
2015-05-26 17:13                     ` Julien Grall
2015-05-26 17:34             ` Stefano Stabellini
2015-05-27 11:53               ` Jan Beulich
2015-05-28 10:58                 ` Stefano Stabellini
2015-05-28 12:07                   ` Jan Beulich
2015-05-28 12:12                     ` Stefano Stabellini
2015-05-28 12:22                       ` Jan Beulich
2015-05-29 10:31                         ` Stefano Stabellini
2015-05-29 10:43                           ` Jan Beulich
2015-07-05 13:19                             ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 27/41] arm : add helper functions to map memory regions Parth Dixit
2015-06-08 14:05   ` Julien Grall
2015-07-05 13:19     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 28/41] arm : acpi add efi structures to common efi header Parth Dixit
2015-05-20 16:25   ` Jan Beulich
2015-07-05 13:27     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 29/41] arm : acpi read acpi memory info from uefi Parth Dixit
2015-06-08 16:09   ` Julien Grall
2015-07-05 13:28     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 30/41] arm : acpi add placeholder for acpi load address Parth Dixit
2015-06-08 16:19   ` Julien Grall
2015-07-05 13:28     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 31/41] arm : acpi estimate memory required for acpi/efi tables Parth Dixit
2015-06-08 16:44   ` Julien Grall
2015-07-05 13:29     ` Parth Dixit
2015-05-17 20:03 ` [PATCH v2 32/41] arm : acpi dynamically map mmio regions Parth Dixit
2015-06-08 16:50   ` Julien Grall
2015-06-14 15:27     ` Parth Dixit
2015-06-15  1:19       ` Julien Grall
2015-07-05 13:30         ` Parth Dixit
2015-07-30 12:19           ` Shannon Zhao
2015-07-30 18:02             ` Parth Dixit
2015-07-30 18:31               ` Julien Grall
2015-07-30 20:02                 ` Parth Dixit
2015-07-31  1:30                 ` Shannon Zhao
2015-07-31 12:42                   ` Julien Grall
2015-07-31 14:09                     ` Stefano Stabellini
2015-07-31 16:24                       ` Stefano Stabellini
2015-07-31 16:50                         ` Ian Campbell
2015-08-03 12:08                       ` Christoffer Dall
2015-07-31  1:15               ` Shannon Zhao
2015-05-17 20:04 ` [PATCH v2 33/41] arm : acpi prepare acpi tables for dom0 Parth Dixit
2015-06-08 16:54   ` Julien Grall
2015-07-05 13:31     ` Parth Dixit
2015-05-17 20:04 ` [PATCH v2 34/41] arm : acpi create and map acpi tables Parth Dixit
2015-07-05 13:31   ` Parth Dixit
2015-05-17 20:04 ` [PATCH v2 35/41] arm : acpi add helper function to calculate crc32 Parth Dixit
2015-06-08 16:59   ` Julien Grall
2015-07-05 13:33     ` Parth Dixit
2015-05-17 20:04 ` [PATCH v2 36/41] arm : acpi pass rsdp and memory via efi table Parth Dixit
2015-07-05 13:34   ` Parth Dixit
2015-05-17 20:04 ` [PATCH v2 37/41] arm : acpi add acpi parameter to enable/disable acpi Parth Dixit
2015-06-08 16:35   ` Julien Grall
2015-06-11 13:38   ` Julien Grall
2015-05-17 20:04 ` [PATCH v2 38/41] arm : acpi enable efi for acpi Parth Dixit
2015-05-20 16:27   ` Jan Beulich
2015-07-05 13:35     ` Parth Dixit
2015-05-17 20:04 ` [PATCH v2 39/41] arm : acpi configure interrupts dynamically Parth Dixit
2015-06-08 17:39   ` Julien Grall
2015-07-05 13:36     ` Parth Dixit
2015-05-17 20:04 ` [PATCH v2 40/41] xen: arm64: Add ACPI support Parth Dixit
2015-07-05 13:37   ` Parth Dixit
2015-05-17 20:04 ` [PATCH v2 41/41] arm : acpi route irq's at time of boot Parth Dixit
2015-06-08 17:44   ` Julien Grall
2015-07-05 13:37     ` Parth Dixit
2015-05-17 21:11 ` [PATCH v2 00/41] Add ACPI support for arm64 on Xen Julien Grall
     [not found]   ` <CABy3MNkMvpM21L5JtiKebCGdvPxJA_5m18c=t_OEExUjgaPRkQ@mail.gmail.com>
2015-05-18 12:46     ` Julien Grall
2015-05-18  8:25 ` Jan Beulich
2015-05-18  8:27   ` Parth Dixit

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=555DCFA2.1050103@citrix.com \
    --to=julien.grall@citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=christoffer.dall@linaro.org \
    --cc=ian.campbell@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=keir@xen.org \
    --cc=parth.dixit@linaro.org \
    --cc=stefano.stabellini@citrix.com \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xen.org \
    /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).