|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC PATCH 15/19] arm: Add gicv4 to domain creation
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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |