On 1/12/26 20:17, Roman Bogorodskiy wrote:
> The "virt" board in QEMU has a "virtualization" option
> that is documented like this:
> 
> virtualization
>   Set ``on``/``off`` to enable/disable emulating a guest CPU which implements 
> the
>   Arm Virtualization Extensions. The default is ``off``.
> 
> (from system/arm/virt.rst)
> 
> According to the documentation, the "virtualiaztion" option
> is related to the "gic-version" option. Specifically, gic version=4
> requires virtualization to be enabled. And gic version=max will use
> version=4 when virtualization is enabled, and 3 when not.
> Libvirt does not currently model neither gic version "3" nor "max"

yes we do model GICv3 actually, but not 4.

``gic``
   Enable for architectures using a General Interrupt Controller instead of APIC
   in order to handle interrupts. For example, the 'aarch64' architecture uses
   ``gic`` instead of ``apic``. The optional attribute ``version`` specifies the
   GIC version; however, it may not be supported by all hypervisors. Accepted
   values are ``2``, ``3`` and ``host``. :since:`Since 1.2.16`

And there's this one funny comment in hw/arm/virt.c:

static VirtGICType finalize_gic_version_do(const char *accel_name,
                                           VirtGICType gic_version,
                                           int gics_supported,
                                           unsigned int max_cpus)
{
    /* Convert host/max/nosel to GIC version number */
    switch (gic_version) {
    case VIRT_GIC_VERSION_HOST:
        if (!kvm_enabled()) {
            error_report("gic-version=host requires KVM");
            exit(1);
        }

        /* For KVM, gic-version=host means gic-version=max */
        return finalize_gic_version_do(accel_name, VIRT_GIC_VERSION_MAX,
                                       gics_supported, max_cpus);

> though.
> 
> It is also documented for the "vexpress-a(9|15)" boards, where it is
> also disabled by default:
> 
> - QEMU defaults to providing a CPU which does not provide either
>   TrustZone or the Virtualization Extensions: if you want these you
>   must enable them with ``-machine secure=on`` and ``-machine
>   virtualization=on``
> 
> (system/arm/vexpress.rst).
> 
> On the command line it looks like:
> 
>  qemu-system-aarch64 -machine type=virt,virtualization=on ..
> 
> Model it using the "virtualization" element in the "features" section:
> 
>   <features>
>     <virtualization/>
>   </features>
> 
> Signed-off-by: Roman Bogorodskiy <[email protected]>
> ---
>  docs/formatdomain.rst                         |  4 ++
>  src/conf/domain_conf.c                        |  4 ++
>  src/conf/domain_conf.h                        |  1 +
>  src/conf/schemas/domaincommon.rng             |  5 +++
>  src/qemu/qemu_command.c                       |  9 ++++
>  src/qemu/qemu_validate.c                      |  1 +
>  ...64-virt-virtualization.aarch64-latest.args | 38 ++++++++++++++++
>  ...h64-virt-virtualization.aarch64-latest.xml | 45 +++++++++++++++++++
>  .../aarch64-virt-virtualization.xml           | 25 +++++++++++
>  tests/qemuxmlconftest.c                       |  2 +
>  10 files changed, 134 insertions(+)
>  create mode 100644 
> tests/qemuxmlconfdata/aarch64-virt-virtualization.aarch64-latest.args
>  create mode 100644 
> tests/qemuxmlconfdata/aarch64-virt-virtualization.aarch64-latest.xml
>  create mode 100644 tests/qemuxmlconfdata/aarch64-virt-virtualization.xml

Reviewed-by: Michal Privoznik <[email protected]>

Michal

Reply via email to