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