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

Re: [RFC PATCH 15/19] arm: Add gicv4 to domain creation


  • To: Mykyta Poturai <Mykyta_Poturai@xxxxxxxx>
  • From: Mykola Kvach <xakep.amatop@xxxxxxxxx>
  • Date: Wed, 18 Feb 2026 23:00:00 +0200
  • Arc-authentication-results: i=1; mx.google.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=DTZ6u5gGdRwr4VTl6AL1sSb/XPuOQB72LCs3Lhy/UsU=; fh=S1TgsMYO/ju21WOcmYTQxMlAU8ImCjuw50drwKkfBt8=; b=Za0SEojcENRRwvw6ZGBs//onSH7Zl1S0tXn0Od6sQEYQ9aGGmn1+Sr9waxc9VZnLih OpUECsNZ0BfKgFp5kXoOu4+xUHNsHkCNoC9gXIBWQ7mdRpjBH4Y4MCa2OBsf7O4+DlfL 9QbqnXj1JYtbItTkc/hgDvxkLtgMlriCvNntdw4uoQ/oneoZ2E9tGdw5UN7oG2im9U8x KdqYYo12Q3jooIbV5VfJyb/xSwmGESW8pJddOHRSo/PexWYElLDWgDDBHNCUjllGIZ1j qszhyUDeJIbHvvDyjw5Lc57L68YTPXNnWT1zVcErKqmDaBlIH86IgDt5UNtQByj/Kga4 5y6w==; darn=lists.xenproject.org
  • Arc-seal: i=1; a=rsa-sha256; t=1771448459; cv=none; d=google.com; s=arc-20240605; b=GtkvKriRVl6HTbpVD/E7I/1sseHB4fdtwyagtvPDR6BYLdlshrg4yLfjXzNJ2OKbgo gUUp+k21mK0qz9Z5e4gVkvt0PLNFn113Riruu8OTGEXhx5pptAzmFx2Co2LlIrJ6kbKp QdlpKKiIJWKQJrZGHqg+OalExK4G43aajmMQCBmwlRxpvSawPWVN2fHGEy3MmKNCmnxO TGeKLZ9izxN64tD4DgAw1wGzvqhowIPXGqnM26DRvIUHe9jIERTYa8MxmNr9LLRIeeYP QhXlIUilK6hplKBroo3wNpJ+QUAwZp4PUFtGjYa2E+nOrD7/rtyp5rBqEn+zPpn4c1ta VsUg==
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Wed, 18 Feb 2026 21:01:03 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Mon, Feb 2, 2026 at 6:14 PM Mykyta Poturai <Mykyta_Poturai@xxxxxxxx> wrote:
>
> Allow creating domains with GIC_V4 version.

I am not convinced we should extend the public domctl ABI with
XEN_DOMCTL_CONFIG_GIC_V4/V4_1.

The GIC spec treats v4 as an extension of v3:

  Because GICv4 is an extension of GICv3, all references to GICv3
  in this manual apply equally to GICv4, unless explicitly indicated
  otherwise. Any changes for GICv4.1 are indicated accordingly.

>From a guest ABI perspective, a v4-capable system is still a GICv3
programmer's model, with additional optional features (e.g. vLPI/
vPE/ITS commands). Those features should be enabled/queried via the
relevant capability bits, not by inventing new "GIC version" domctl
values.

So I'd prefer:
* keep gic_hw_version accurate internally (v3/v4/v4.1 as needed),
  but
* for domctl configuration, treat v4.x as XEN_DOMCTL_CONFIG_GIC_V3,
  and keep dom0less DT generation using the gicv3 node.

This avoids growing the public ABI and toolstack churn for something
that is effectively a v3 + extensions model.


Best regards,
Mykola


>
> Signed-off-by: Mykyta Poturai <mykyta_poturai@xxxxxxxx>
> ---
>  xen/arch/arm/dom0less-build.c |  1 +
>  xen/arch/arm/domain.c         | 16 ++++++++++++++++
>  xen/arch/arm/vgic.c           |  2 ++
>  xen/include/public/arch-arm.h |  2 ++
>  4 files changed, 21 insertions(+)
>
> diff --git a/xen/arch/arm/dom0less-build.c b/xen/arch/arm/dom0less-build.c
> index 4181c10538..3c4b074b05 100644
> --- a/xen/arch/arm/dom0less-build.c
> +++ b/xen/arch/arm/dom0less-build.c
> @@ -157,6 +157,7 @@ int __init make_intc_domU_node(struct kernel_info *kinfo)
>      {
>  #ifdef CONFIG_GICV3
>      case GIC_V3:
> +    case GIC_V4:
>          return make_gicv3_domU_node(kinfo);
>  #endif
>  #ifdef CONFIG_VGICV2
> diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
> index 507df807ed..864e5511c9 100644
> --- a/xen/arch/arm/domain.c
> +++ b/xen/arch/arm/domain.c
> @@ -604,6 +604,14 @@ int arch_sanitise_domain_config(struct 
> xen_domctl_createdomain *config)
>              config->arch.gic_version = XEN_DOMCTL_CONFIG_GIC_V3;
>              break;
>
> +        case GIC_V4:
> +            config->arch.gic_version = XEN_DOMCTL_CONFIG_GIC_V4;
> +            break;
> +
> +        case GIC_V4_1:
> +            config->arch.gic_version = XEN_DOMCTL_CONFIG_GIC_V4_1;
> +            break;
> +
>          default:
>              ASSERT_UNREACHABLE();
>              return -EINVAL;
> @@ -679,6 +687,14 @@ int arch_domain_create(struct domain *d,
>          d->arch.vgic.version = GIC_V3;
>          break;
>
> +    case XEN_DOMCTL_CONFIG_GIC_V4:
> +        d->arch.vgic.version = GIC_V4;
> +        break;
> +
> +    case XEN_DOMCTL_CONFIG_GIC_V4_1:
> +        d->arch.vgic.version = GIC_V4_1;
> +        break;
> +
>      default:
>          BUG();
>      }
> diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c
> index 6baf870ad5..e5752faeb7 100644
> --- a/xen/arch/arm/vgic.c
> +++ b/xen/arch/arm/vgic.c
> @@ -153,6 +153,7 @@ int domain_vgic_register(struct domain *d, unsigned int 
> *mmio_count)
>      {
>  #ifdef CONFIG_GICV3
>      case GIC_V3:
> +    case GIC_V4:
>          if ( vgic_v3_init(d, mmio_count) )
>             return -ENODEV;
>          break;
> @@ -929,6 +930,7 @@ unsigned int vgic_max_vcpus(unsigned int 
> domctl_vgic_version)
>
>  #ifdef CONFIG_GICV3
>      case XEN_DOMCTL_CONFIG_GIC_V3:
> +    case XEN_DOMCTL_CONFIG_GIC_V4:
>          return 4096;
>  #endif
>
> diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h
> index 96365e5603..12690cf3ac 100644
> --- a/xen/include/public/arch-arm.h
> +++ b/xen/include/public/arch-arm.h
> @@ -322,6 +322,8 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
>  #define XEN_DOMCTL_CONFIG_GIC_NATIVE    0
>  #define XEN_DOMCTL_CONFIG_GIC_V2        1
>  #define XEN_DOMCTL_CONFIG_GIC_V3        2
> +#define XEN_DOMCTL_CONFIG_GIC_V4        3
> +#define XEN_DOMCTL_CONFIG_GIC_V4_1      4
>
>  #define XEN_DOMCTL_CONFIG_TEE_NONE      0
>  #define XEN_DOMCTL_CONFIG_TEE_OPTEE     1
> --
> 2.51.2



 


Rackspace

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