[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 1/2] xen/arm: Improve handling of nr_spis


  • To: Michal Orzel <michal.orzel@xxxxxxx>
  • From: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
  • Date: Wed, 12 Mar 2025 10:18:57 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Bn42wP4yoYAoScoQp+R6oxveYDV5SMA6NYFW1P7XDxo=; b=Kc6HttqhPiI36J20JyLC7p6SKa6s5ejhYBvzUvp0i6EBhg4ctdfe4jaJRDph6rmDElDKJOh6Agx5kvZsi+chFcTxyvxirB6LCbMrq/kXOP8Lk2ujIDSbWGUKB4A5/ZVQdLfJpFlvDW96G8GxQvRIbdULTG7LyYqVG+Q+Xgy5rbNtSKELaoENqBjTLzgx6fJNmupG63/iLNI/jhvA/nOi2ZtJ1yniWK/hrxs+bmYUs3kK25SAL+c8PYDou+4yBtf76+zF1ORPWmOQVw5O24DJEa9d0znvT/mg1lACp4DXDRiS2mXD+qcZn6jFtdTBsOdlnOCMUA0yJpcIXt9N8z13nw==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Bn42wP4yoYAoScoQp+R6oxveYDV5SMA6NYFW1P7XDxo=; b=n7EVIx31AQqSpxiQD4QG99kSkU0FOzxN8PJJ1IQR1EfDkn+6BSTR6oTrWF8Gdvpub3/sSvq1Ar1o/dtPvqhkzomY/xJ1qR878WaZaiXFbA7WuzWrEo07jEv7UwWRzO6Up09s1vPWB9GdnrtXaVwdCJ3bEP7VcX2zq5Z3BxzZGlJW59xujW5OUPAakLhKE4bXSoKX1NJdufclJg4djUpDnfulpvslk4i3JyMPaIU1yNow6d3lMrdHVIu4GIYUKd+xKjLPTUiHAOawglYYvcAiFasUUhpzpRgl7U0of0RDzodw3SxGU4rwNRRhCuAsf+v9euhGz+1SWfV2u36JvzplUQ==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=sty4TCV8207NZJEYcREi0gFalSpGVrsAxM1rDis1xLdYGAAe6GfljfW6ZCM0BzmThV8zKxCmGrLKWgDtCM3yrU636R1WIJE+UTczdfdTNnKQrztwMGNvC4KcgKtqbxAjG0VR5HNDT+IfzOOtacCId8ydO7iqCY9d/lmdxMSNV9cJybfQibu408y29c3aELPPBY0HzGNFsKJIaYigfiYJhSkxDKqHj+uc0pCpTXnXOoc3eKUhqIe1PvO6yVKR+6WScRuGW0NK7wt0CpFdc8kZFZA5v5hNjs2OrCNt7DPbnyVCqOHZ2tzKPRORb76ay12suNp8je2iiCFT2c8D1oJ1nw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=siMhGNWUELr37buG8181jVHnV/nHf6BXIVt5O2ZvQXHLZSjXBxHXCrWnbOlXY9Pob9B1chsM8DiUVi2ZdG8ku/w2QV7vgJ7Zce0cwo7dcDJIIih1MTz6JINcVl11UeHp3TT1IPANtB2s/AOLAoByyE7tSoUXOU2g5mnb34d/E6vw7pEeNa8ee3nZawHjLh51Yr+qOWTPmtDC1YFLFghG2ObSrCOoKRWM3Pc6508aJdOsrmrBCDZzCjThcY2DbGOunbakQIbANaK42BpC2GgQi+UFYoGQeJslwe33GIiTCusPDVB0tzDqvoos4VuuUMLVVhOC6mLHO9ZP0pGtnIIcpg==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Wed, 12 Mar 2025 10:19:23 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHbkzfe3FkZaWCwR0OEX8fvH5KRoLNvSdiA
  • Thread-topic: [PATCH v2 1/2] xen/arm: Improve handling of nr_spis

Hi Michal,

> On 12 Mar 2025, at 11:16, Michal Orzel <michal.orzel@xxxxxxx> wrote:
> 
> At the moment, we print a warning about max number of IRQs supported by
> GIC bigger than vGIC only for hardware domain. This check is not hwdom
> special, and should be made common. Also, in case of user not specifying
> nr_spis for dom0less domUs, we should take into account max number of
> IRQs supported by vGIC if it's smaller than for GIC.
> 
> Introduce VGIC_MAX_IRQS macro and use it instead of hardcoded 992 value.
> Introduce VGIC_DEF_NR_SPIS macro to store the default number of vGIC SPIs.
> Fix calculation of nr_spis for dom0less domUs and make the GIC/vGIC max
> IRQs comparison common.
> 
> Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>

Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>

Cheers
Bertrand

> ---
> Changes in v2:
> - add macro for: min(gic_number_lines(), VGIC_MAX_IRQS) - 32
> ---
> xen/arch/arm/dom0less-build.c   | 2 +-
> xen/arch/arm/domain_build.c     | 8 +-------
> xen/arch/arm/gic.c              | 3 +++
> xen/arch/arm/include/asm/vgic.h | 6 ++++++
> 4 files changed, 11 insertions(+), 8 deletions(-)
> 
> diff --git a/xen/arch/arm/dom0less-build.c b/xen/arch/arm/dom0less-build.c
> index 31f31c38da3f..573b0d25ae41 100644
> --- a/xen/arch/arm/dom0less-build.c
> +++ b/xen/arch/arm/dom0less-build.c
> @@ -1018,7 +1018,7 @@ void __init create_domUs(void)
>         {
>             int vpl011_virq = GUEST_VPL011_SPI;
> 
> -            d_cfg.arch.nr_spis = gic_number_lines() - 32;
> +            d_cfg.arch.nr_spis = VGIC_DEF_NR_SPIS;
> 
>             /*
>              * The VPL011 virq is GUEST_VPL011_SPI, unless direct-map is
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 7cc141ef75e9..2b5b4331834f 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -2371,13 +2371,7 @@ void __init create_dom0(void)
> 
>     /* The vGIC for DOM0 is exactly emulating the hardware GIC */
>     dom0_cfg.arch.gic_version = XEN_DOMCTL_CONFIG_GIC_NATIVE;
> -    /*
> -     * Xen vGIC supports a maximum of 992 interrupt lines.
> -     * 32 are substracted to cover local IRQs.
> -     */
> -    dom0_cfg.arch.nr_spis = min(gic_number_lines(), (unsigned int) 992) - 32;
> -    if ( gic_number_lines() > 992 )
> -        printk(XENLOG_WARNING "Maximum number of vGIC IRQs exceeded.\n");
> +    dom0_cfg.arch.nr_spis = VGIC_DEF_NR_SPIS;
>     dom0_cfg.arch.tee_type = tee_get_type();
>     dom0_cfg.max_vcpus = dom0_max_vcpus();
> 
> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
> index acf61a4de373..e80fe0ca2421 100644
> --- a/xen/arch/arm/gic.c
> +++ b/xen/arch/arm/gic.c
> @@ -251,6 +251,9 @@ void __init gic_init(void)
>         panic("Failed to initialize the GIC drivers\n");
>     /* Clear LR mask for cpu0 */
>     clear_cpu_lr_mask();
> +
> +    if ( gic_number_lines() > VGIC_MAX_IRQS )
> +        printk(XENLOG_WARNING "Maximum number of vGIC IRQs exceeded\n");
> }
> 
> void send_SGI_mask(const cpumask_t *cpumask, enum gic_sgi sgi)
> diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgic.h
> index e309dca1ad01..35c0c6a8b0b0 100644
> --- a/xen/arch/arm/include/asm/vgic.h
> +++ b/xen/arch/arm/include/asm/vgic.h
> @@ -329,6 +329,12 @@ extern void vgic_check_inflight_irqs_pending(struct vcpu 
> *v,
>  */
> #define vgic_num_irqs(d)        ((d)->arch.vgic.nr_spis + 32)
> 
> +/* Maximum number of IRQs supported by vGIC */
> +#define VGIC_MAX_IRQS 992U
> +
> +/* Default number of vGIC SPIs. 32 are substracted to cover local IRQs. */
> +#define VGIC_DEF_NR_SPIS (min(gic_number_lines(), VGIC_MAX_IRQS) - 32)
> +
> /*
>  * Allocate a guest VIRQ
>  *  - spi == 0 => allocate a PPI. It will be the same on every vCPU
> -- 
> 2.25.1
> 




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.