All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Stabellini <sstabellini@kernel.org>
To: Julien Grall <julien.grall@arm.com>
Cc: xen-devel@lists.xenproject.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Andrii_Anisov@epam.com, Oleksandr_Tyshchenko@epam.com
Subject: Re: [PATCH MM-PART2 RESEND v2 15/19] xen/arm: mm: Introduce DEFINE_PAGE_TABLE{, S} and use it
Date: Mon, 3 Jun 2019 16:29:00 -0700 (PDT)	[thread overview]
Message-ID: <alpine.DEB.2.21.1906031628470.14041@sstabellini-ThinkPad-T480s> (raw)
In-Reply-To: <20190514122456.28559-16-julien.grall@arm.com>

On Tue, 14 May 2019, Julien Grall wrote:
> We have multiple static page-tables defined in arch/arm/mm.c. The
> current way to define them is difficult to read and does not help when
> making modification.
> 
> Two new helpers DEFINE_PAGE_TABLES (to define multiple page-tables) and
> DEFINE_PAGE_TABLE (alias of DEFINE_PAGE_TABLES(..., 1)) are introduced
> and now used to define static page-tables.
> 
> Note that DEFINE_PAGE_TABLES() alignment differs from what is currently
> used for allocating page-tables. This is fine because page-tables are
> only required to be aligned to a page-size.
> 
> Signed-off-by: Julien Grall <julien.grall@arm.com>

Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>


> ---
>     Changes in v2:
>         - Patch in replacement of "Use the shorter version
>         __aligned(PAGE_SIZE) to align page-tables".
> ---
>  xen/arch/arm/mm.c | 32 ++++++++++++++++++--------------
>  1 file changed, 18 insertions(+), 14 deletions(-)
> 
> diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
> index 6db7dda0da..9a5f2e1c3f 100644
> --- a/xen/arch/arm/mm.c
> +++ b/xen/arch/arm/mm.c
> @@ -50,6 +50,11 @@ struct domain *dom_xen, *dom_io, *dom_cow;
>  #undef mfn_to_virt
>  #define mfn_to_virt(mfn) __mfn_to_virt(mfn_x(mfn))
>  
> +#define DEFINE_PAGE_TABLES(name, nr)                    \
> +lpae_t __aligned(PAGE_SIZE) name[LPAE_ENTRIES * (nr)]
> +
> +#define DEFINE_PAGE_TABLE(name) DEFINE_PAGE_TABLES(name, 1)
> +
>  /* Static start-of-day pagetables that we use before the allocators
>   * are up. These are used by all CPUs during bringup before switching
>   * to the CPUs own pagetables.
> @@ -73,13 +78,13 @@ struct domain *dom_xen, *dom_io, *dom_cow;
>   * Finally, if EARLY_PRINTK is enabled then xen_fixmap will be mapped
>   * by the CPU once it has moved off the 1:1 mapping.
>   */
> -lpae_t boot_pgtable[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +DEFINE_PAGE_TABLE(boot_pgtable);
>  #ifdef CONFIG_ARM_64
> -lpae_t boot_first[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> -lpae_t boot_first_id[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +DEFINE_PAGE_TABLE(boot_first);
> +DEFINE_PAGE_TABLE(boot_first_id);
>  #endif
> -lpae_t boot_second[LPAE_ENTRIES]  __attribute__((__aligned__(4096)));
> -lpae_t boot_third[LPAE_ENTRIES]  __attribute__((__aligned__(4096)));
> +DEFINE_PAGE_TABLE(boot_second);
> +DEFINE_PAGE_TABLE(boot_third);
>  
>  /* Main runtime page tables */
>  
> @@ -93,8 +98,8 @@ lpae_t boot_third[LPAE_ENTRIES]  __attribute__((__aligned__(4096)));
>  
>  #ifdef CONFIG_ARM_64
>  #define HYP_PT_ROOT_LEVEL 0
> -lpae_t xen_pgtable[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> -lpae_t xen_first[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +static DEFINE_PAGE_TABLE(xen_pgtable);
> +static DEFINE_PAGE_TABLE(xen_first);
>  #define THIS_CPU_PGTABLE xen_pgtable
>  #else
>  #define HYP_PT_ROOT_LEVEL 1
> @@ -107,17 +112,16 @@ static DEFINE_PER_CPU(lpae_t *, xen_pgtable);
>   * DOMHEAP_VIRT_START...DOMHEAP_VIRT_END in 2MB chunks. */
>  static DEFINE_PER_CPU(lpae_t *, xen_dommap);
>  /* Root of the trie for cpu0, other CPU's PTs are dynamically allocated */
> -lpae_t cpu0_pgtable[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +static DEFINE_PAGE_TABLE(cpu0_pgtable);
>  /* cpu0's domheap page tables */
> -lpae_t cpu0_dommap[LPAE_ENTRIES*DOMHEAP_SECOND_PAGES]
> -    __attribute__((__aligned__(4096*DOMHEAP_SECOND_PAGES)));
> +static DEFINE_PAGE_TABLES(cpu0_dommap, DOMHEAP_SECOND_PAGES);
>  #endif
>  
>  #ifdef CONFIG_ARM_64
>  /* The first page of the first level mapping of the xenheap. The
>   * subsequent xenheap first level pages are dynamically allocated, but
>   * we need this one to bootstrap ourselves. */
> -lpae_t xenheap_first_first[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +static DEFINE_PAGE_TABLE(xenheap_first_first);
>  /* The zeroeth level slot which uses xenheap_first_first. Used because
>   * setup_xenheap_mappings otherwise relies on mfn_to_virt which isn't
>   * valid for a non-xenheap mapping. */
> @@ -131,12 +135,12 @@ static __initdata int xenheap_first_first_slot = -1;
>   * addresses from 0 to 0x7fffffff. Offsets into it are calculated
>   * with second_linear_offset(), not second_table_offset().
>   */
> -lpae_t xen_second[LPAE_ENTRIES*2] __attribute__((__aligned__(4096*2)));
> +static DEFINE_PAGE_TABLES(xen_second, 2);
>  /* First level page table used for fixmap */
> -lpae_t xen_fixmap[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +DEFINE_PAGE_TABLE(xen_fixmap);
>  /* First level page table used to map Xen itself with the XN bit set
>   * as appropriate. */
> -static lpae_t xen_xenmap[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +static DEFINE_PAGE_TABLE(xen_xenmap);
>  
>  /* Non-boot CPUs use this to find the correct pagetables. */
>  uint64_t init_ttbr;
> -- 
> 2.11.0
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

WARNING: multiple messages have this Message-ID (diff)
From: Stefano Stabellini <sstabellini@kernel.org>
To: Julien Grall <julien.grall@arm.com>
Cc: xen-devel@lists.xenproject.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Andrii_Anisov@epam.com, Oleksandr_Tyshchenko@epam.com
Subject: Re: [Xen-devel] [PATCH MM-PART2 RESEND v2 15/19] xen/arm: mm: Introduce DEFINE_PAGE_TABLE{, S} and use it
Date: Mon, 3 Jun 2019 16:29:00 -0700 (PDT)	[thread overview]
Message-ID: <alpine.DEB.2.21.1906031628470.14041@sstabellini-ThinkPad-T480s> (raw)
Message-ID: <20190603232900.RChN_N7Px6lamq8Bh2vZ01R00wxUuDjPd_wzumycDEA@z> (raw)
In-Reply-To: <20190514122456.28559-16-julien.grall@arm.com>

On Tue, 14 May 2019, Julien Grall wrote:
> We have multiple static page-tables defined in arch/arm/mm.c. The
> current way to define them is difficult to read and does not help when
> making modification.
> 
> Two new helpers DEFINE_PAGE_TABLES (to define multiple page-tables) and
> DEFINE_PAGE_TABLE (alias of DEFINE_PAGE_TABLES(..., 1)) are introduced
> and now used to define static page-tables.
> 
> Note that DEFINE_PAGE_TABLES() alignment differs from what is currently
> used for allocating page-tables. This is fine because page-tables are
> only required to be aligned to a page-size.
> 
> Signed-off-by: Julien Grall <julien.grall@arm.com>

Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>


> ---
>     Changes in v2:
>         - Patch in replacement of "Use the shorter version
>         __aligned(PAGE_SIZE) to align page-tables".
> ---
>  xen/arch/arm/mm.c | 32 ++++++++++++++++++--------------
>  1 file changed, 18 insertions(+), 14 deletions(-)
> 
> diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
> index 6db7dda0da..9a5f2e1c3f 100644
> --- a/xen/arch/arm/mm.c
> +++ b/xen/arch/arm/mm.c
> @@ -50,6 +50,11 @@ struct domain *dom_xen, *dom_io, *dom_cow;
>  #undef mfn_to_virt
>  #define mfn_to_virt(mfn) __mfn_to_virt(mfn_x(mfn))
>  
> +#define DEFINE_PAGE_TABLES(name, nr)                    \
> +lpae_t __aligned(PAGE_SIZE) name[LPAE_ENTRIES * (nr)]
> +
> +#define DEFINE_PAGE_TABLE(name) DEFINE_PAGE_TABLES(name, 1)
> +
>  /* Static start-of-day pagetables that we use before the allocators
>   * are up. These are used by all CPUs during bringup before switching
>   * to the CPUs own pagetables.
> @@ -73,13 +78,13 @@ struct domain *dom_xen, *dom_io, *dom_cow;
>   * Finally, if EARLY_PRINTK is enabled then xen_fixmap will be mapped
>   * by the CPU once it has moved off the 1:1 mapping.
>   */
> -lpae_t boot_pgtable[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +DEFINE_PAGE_TABLE(boot_pgtable);
>  #ifdef CONFIG_ARM_64
> -lpae_t boot_first[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> -lpae_t boot_first_id[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +DEFINE_PAGE_TABLE(boot_first);
> +DEFINE_PAGE_TABLE(boot_first_id);
>  #endif
> -lpae_t boot_second[LPAE_ENTRIES]  __attribute__((__aligned__(4096)));
> -lpae_t boot_third[LPAE_ENTRIES]  __attribute__((__aligned__(4096)));
> +DEFINE_PAGE_TABLE(boot_second);
> +DEFINE_PAGE_TABLE(boot_third);
>  
>  /* Main runtime page tables */
>  
> @@ -93,8 +98,8 @@ lpae_t boot_third[LPAE_ENTRIES]  __attribute__((__aligned__(4096)));
>  
>  #ifdef CONFIG_ARM_64
>  #define HYP_PT_ROOT_LEVEL 0
> -lpae_t xen_pgtable[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> -lpae_t xen_first[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +static DEFINE_PAGE_TABLE(xen_pgtable);
> +static DEFINE_PAGE_TABLE(xen_first);
>  #define THIS_CPU_PGTABLE xen_pgtable
>  #else
>  #define HYP_PT_ROOT_LEVEL 1
> @@ -107,17 +112,16 @@ static DEFINE_PER_CPU(lpae_t *, xen_pgtable);
>   * DOMHEAP_VIRT_START...DOMHEAP_VIRT_END in 2MB chunks. */
>  static DEFINE_PER_CPU(lpae_t *, xen_dommap);
>  /* Root of the trie for cpu0, other CPU's PTs are dynamically allocated */
> -lpae_t cpu0_pgtable[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +static DEFINE_PAGE_TABLE(cpu0_pgtable);
>  /* cpu0's domheap page tables */
> -lpae_t cpu0_dommap[LPAE_ENTRIES*DOMHEAP_SECOND_PAGES]
> -    __attribute__((__aligned__(4096*DOMHEAP_SECOND_PAGES)));
> +static DEFINE_PAGE_TABLES(cpu0_dommap, DOMHEAP_SECOND_PAGES);
>  #endif
>  
>  #ifdef CONFIG_ARM_64
>  /* The first page of the first level mapping of the xenheap. The
>   * subsequent xenheap first level pages are dynamically allocated, but
>   * we need this one to bootstrap ourselves. */
> -lpae_t xenheap_first_first[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +static DEFINE_PAGE_TABLE(xenheap_first_first);
>  /* The zeroeth level slot which uses xenheap_first_first. Used because
>   * setup_xenheap_mappings otherwise relies on mfn_to_virt which isn't
>   * valid for a non-xenheap mapping. */
> @@ -131,12 +135,12 @@ static __initdata int xenheap_first_first_slot = -1;
>   * addresses from 0 to 0x7fffffff. Offsets into it are calculated
>   * with second_linear_offset(), not second_table_offset().
>   */
> -lpae_t xen_second[LPAE_ENTRIES*2] __attribute__((__aligned__(4096*2)));
> +static DEFINE_PAGE_TABLES(xen_second, 2);
>  /* First level page table used for fixmap */
> -lpae_t xen_fixmap[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +DEFINE_PAGE_TABLE(xen_fixmap);
>  /* First level page table used to map Xen itself with the XN bit set
>   * as appropriate. */
> -static lpae_t xen_xenmap[LPAE_ENTRIES] __attribute__((__aligned__(4096)));
> +static DEFINE_PAGE_TABLE(xen_xenmap);
>  
>  /* Non-boot CPUs use this to find the correct pagetables. */
>  uint64_t init_ttbr;
> -- 
> 2.11.0
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2019-06-03 23:29 UTC|newest]

Thread overview: 114+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-14 12:24 [PATCH MM-PART2 RESEND v2 00/19] xen/arm: Clean-up & fixes in boot/mm code Julien Grall
2019-05-14 12:24 ` [Xen-devel] " Julien Grall
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 01/19] xen/const: Extend the existing macro BIT to take a suffix in parameter Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-14 12:37   ` Jan Beulich
2019-05-14 12:37     ` [Xen-devel] " Jan Beulich
2019-05-20 21:43   ` Stefano Stabellini
2019-05-20 21:43     ` [Xen-devel] " Stefano Stabellini
2019-05-21 10:01     ` Andrii Anisov
2019-05-21 10:01       ` [Xen-devel] " Andrii Anisov
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 02/19] xen/arm: Rename SCTLR_* defines and remove unused one Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-20 21:46   ` Stefano Stabellini
2019-05-20 21:46     ` [Xen-devel] " Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 03/19] xen/arm: processor: Use BIT(.., UL) instead of _AC(1, U) in SCTLR_ defines Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-20 21:48   ` Stefano Stabellini
2019-05-20 21:48     ` [Xen-devel] " Stefano Stabellini
2019-05-21 10:01   ` Andrii Anisov
2019-05-21 10:01     ` [Xen-devel] " Andrii Anisov
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 04/19] xen/arm: Rework HSCTLR_BASE Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-20 22:56   ` Stefano Stabellini
2019-05-20 22:56     ` [Xen-devel] " Stefano Stabellini
2019-05-21 10:09     ` Julien Grall
2019-05-21 10:09       ` [Xen-devel] " Julien Grall
2019-05-29 16:54       ` Julien Grall
2019-05-29 16:54         ` [Xen-devel] " Julien Grall
2019-06-03 23:12         ` Stefano Stabellini
2019-06-03 23:12           ` [Xen-devel] " Stefano Stabellini
2019-06-04 10:27           ` Julien Grall
2019-06-04 17:41             ` Stefano Stabellini
2019-05-30 16:17       ` Andrii Anisov
2019-05-30 16:17         ` [Xen-devel] " Andrii Anisov
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 05/19] xen/arm: Remove parameter cpuid from start_xen Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-21 10:01   ` Andrii Anisov
2019-05-21 10:01     ` [Xen-devel] " Andrii Anisov
2019-06-06 17:15     ` Julien Grall
2019-06-07 22:39   ` Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 06/19] xen/arm: Rework secondary_start prototype Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-20 22:56   ` Stefano Stabellini
2019-05-20 22:56     ` [Xen-devel] " Stefano Stabellini
2019-05-29 17:06     ` Julien Grall
2019-05-29 17:06       ` [Xen-devel] " Julien Grall
2019-05-30 16:18       ` Andrii Anisov
2019-05-30 16:18         ` [Xen-devel] " Andrii Anisov
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 07/19] xen/arm64: head: Remove unnecessary comment Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-20 22:56   ` Stefano Stabellini
2019-05-20 22:56     ` [Xen-devel] " Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 08/19] xen/arm64: head: Move earlyprintk messages in .rodata.str Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-20 22:56   ` Stefano Stabellini
2019-05-20 22:56     ` [Xen-devel] " Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 09/19] xen/arm64: head: Correctly report the HW CPU ID Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-20 22:56   ` Stefano Stabellini
2019-05-20 22:56     ` [Xen-devel] " Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 10/19] xen/arm32: " Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-06-03 22:45   ` Stefano Stabellini
2019-06-03 22:45     ` [Xen-devel] " Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 11/19] xen/arm32: head: Don't set MAIR0 and MAIR1 Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-06-03 22:47   ` Stefano Stabellini
2019-06-03 22:47     ` [Xen-devel] " Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 12/19] xen/arm32: head: Always zero r3 before update a page-table entry Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-21 10:03   ` Andrii Anisov
2019-05-21 10:03     ` [Xen-devel] " Andrii Anisov
2019-06-03 23:15   ` Stefano Stabellini
2019-06-03 23:15     ` [Xen-devel] " Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 13/19] xen/arm32: mm: Avoid to zero and clean cache for CPU0 domheap Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-06-03 23:20   ` Stefano Stabellini
2019-06-03 23:20     ` [Xen-devel] " Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 14/19] xen/arm32: mm: Avoid cleaning the cache for secondary CPUs page-tables Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-06-04 23:11   ` Stefano Stabellini
2019-06-05 10:19     ` Julien Grall
2019-06-10 10:15       ` Julien Grall
2019-06-10 20:28       ` Stefano Stabellini
2019-06-10 20:40         ` Julien Grall
2019-06-10 20:54           ` Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 15/19] xen/arm: mm: Introduce DEFINE_PAGE_TABLE{, S} and use it Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-06-03 23:29   ` Stefano Stabellini [this message]
2019-06-03 23:29     ` Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 16/19] xen/arm: mm: Protect Xen page-table update with a spinlock Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-05-21 10:04   ` Andrii Anisov
2019-05-21 10:04     ` [Xen-devel] " Andrii Anisov
2019-06-04 23:11   ` Stefano Stabellini
2019-06-05 10:36     ` Julien Grall
2019-06-08  0:17       ` Stefano Stabellini
2019-06-13 12:06         ` Julien Grall
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 17/19] xen/arm: mm: Initialize page-tables earlier Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-06-04 23:12   ` Stefano Stabellini
2019-06-06 17:32     ` Julien Grall
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 18/19] xen/arm: mm: Check start is always before end in {destroy, modify}_xen_mappings Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-06-04 23:12   ` Stefano Stabellini
2019-05-14 12:24 ` [PATCH MM-PART2 RESEND v2 19/19] xen/arm: Pair call to set_fixmap with call to clear_fixmap in copy_from_paddr Julien Grall
2019-05-14 12:24   ` [Xen-devel] " Julien Grall
2019-06-04 17:59   ` Stefano Stabellini
2019-06-04 20:18     ` Julien Grall
2019-06-04 23:12       ` Stefano Stabellini
2019-06-06 17:38         ` Julien Grall
2019-05-29 17:23 ` [PATCH MM-PART2 RESEND v2 00/19] xen/arm: Clean-up & fixes in boot/mm code Julien Grall
2019-05-29 17:23   ` [Xen-devel] " Julien Grall
2019-06-13 12:09 ` Julien Grall

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=alpine.DEB.2.21.1906031628470.14041@sstabellini-ThinkPad-T480s \
    --to=sstabellini@kernel.org \
    --cc=Andrii_Anisov@epam.com \
    --cc=Oleksandr_Tyshchenko@epam.com \
    --cc=julien.grall@arm.com \
    --cc=xen-devel@lists.xenproject.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 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.