Linux KVM/arm64 development list
 help / color / mirror / Atom feed
* [PATCH v5 00/18] kvm/arm: Introduce a customizable aarch64 KVM host model
@ 2026-05-19 13:27 Eric Auger
  2026-05-19 13:27 ` [PATCH v5 01/18] scripts: introduce scripts/update-aarch64-cpu-sysregs-header.py Eric Auger
                   ` (18 more replies)
  0 siblings, 19 replies; 76+ messages in thread
From: Eric Auger @ 2026-05-19 13:27 UTC (permalink / raw)
  To: eric.auger.pro, eric.auger, qemu-devel, qemu-arm, kvmarm,
	peter.maydell, shaju.abraham, khushit.shah, yangjinqian1, cohuck,
	richard.henderson, sebott, skolothumtho, philmd
  Cc: maz, oliver.upton, pbonzini, armbru, berrange, abologna, jdenemar

This series enhances the current host KVM model with capability to
set writable ID reg fields. 

Since v6.7 kernel, KVM/arm allows the userspace to overwrite the values
of a subset of ID regs. The list of writable fields continues to grow.
The feature ID range is defined as the AArch64 System register space
with op0==3, op1=={0, 1, 3}, CRn==0, CRm=={0-7}, op2=={0-7}.

The end goal is to get more flexibility when migrating guests
between different host hardware.

QEMU retrieves the writable ID fields from KVM UAPI [1] and
match them against a generated description of ID regs and their
named fields that stem from AARCHMRS Registers.json file.
Current description is based on latest 2026-03 edition.
The content of the generated files was compared against kernel
linux/arch/arm64/tools/sysreg file. It is not straightforward
to have unit tests for python scripts as there are many cases for
field extraction.

For each writable named field a uint64 property is created
following the "SYSREG_<REG>_<FIELD>" naming convention. REG and
FIELD names are those described in ARM ARM Reference manual.

The list of SYSREG_ID properties can be retrieved through the qmp
monitor using query-cpu-model-expansion [2].

Connie & Eric

This series can be found at:
https://github.com/eauger/qemu/tree/arm-cpu-model-v5

History:
--------

v4 -> v5:
- generate target/arm/cpu-idregs.h.inc that look similar to
  the format used in [RFC PATCH v1 02/13] target/arm:
  named_cpu_model: Add ID Register Fields without the
  description of the value values nor safe policy/value.
  I guess valid values could be generated from the Registers.json
  file too. Safe policy/values cannot.
  I reused one patch from the above series.
  Let's see how both series can progress/coexist without any
  anticipated bias.
- Addressed all comments from Shameer on v4
- Addressed 2 comments from v4 that were missed including the
  issue of IDreg visibility affected by some other settings.
  Unfortunately I was not able to test it.
- Further look at overrides between low level id reg field
  properties versus legacy CPU options. I have the feeling they
  can coexist as long as we document the hierarchy between them:
  host kvm default -> ID reg field props -> legacy CPU options
- Noticed more writable fields that are RES0/RAZ
- Improved commit messages in general

References:
-----------

[1]
KVM_CAP_ARM_SUPPORTED_REG_MASK_RANGES
KVM_ARM_GET_REG_WRITABLE_MASKS
Documentation/virt/kvm/api.rst

[2]
qemu-system-aarch64 -qmp unix:/home/augere/TEST/QEMU/qmp-sock,server,nowait -M virt --enable-kvm -cpu custom
sudo build/run qmp-shell /home/augere/TEST/QEMU/qmp-sock
Welcome to the QMP low-level shell!
Connected to QEMU 11.0.50
(QEMU) query-cpu-model-expansion type=full model={"name":"host"}


Cornelia Huck (3):
  target/arm/kvm: Introduce kvm_get_writable_id_regs
  arm-qmp-cmds: introspection for ID register props
  arm/cpu-features: document ID reg properties

Eric Auger (14):
  scripts: introduce scripts/update-aarch64-cpu-sysregs-header.py
  target/arm/cpu-sysregs.h.inc: Sort by name alphabetical order
  target/arm/cpu-sysregs.h.inc: Update with automatic generation
  arm/cpu: Add infra to handle generated ID register definitions
  scripts: Introduce scripts/aarch64_sysreg_helpers module
  scripts: Introduce scripts/update-aarch64-cpu-sysreg-properties.py
  target/arm/cpu-idregs.h.inc: generate with script
  target/arm/cpu64: Retrieve writable ID reg map in
    aarch64_host_initfn()
  arm/kvm: Initialize all writable ID registers from host
  arm/kvm: write back modified ID regs to KVM
  target/arm/kvm: Introduce kvm_arm_expose_idreg_properties
  target/arm/kvm: Special case REVIDR_EL1 and AIDR_EL1
  target/arm/kvm: Ignore some writable bits that shouldn't be
  target/arm/cpu: Expose writable ID reg field properties on the kvm
    host vcpu model

Shaju Abraham (1):
  target/arm/cpu_idregs: generate tables for Arm64 ID registers and
    fields

 docs/system/arm/cpu-features.rst              | 106 ++-
 scripts/aarch64_sysreg_helpers.py             | 109 ++++
 .../update-aarch64-cpu-sysreg-properties.py   | 168 +++++
 scripts/update-aarch64-cpu-sysregs-header.py  |  51 ++
 target/arm/arm-qmp-cmds.c                     |  19 +
 target/arm/cpu-idregs.c                       |  50 ++
 target/arm/cpu-idregs.h                       |  33 +
 target/arm/cpu-idregs.h.inc                   | 617 ++++++++++++++++++
 target/arm/cpu-sysregs.h.inc                  |  57 +-
 target/arm/cpu.h                              |   3 +
 target/arm/cpu64.c                            |  14 +
 target/arm/kvm-stub.c                         |   5 +
 target/arm/kvm.c                              | 320 ++++++++-
 target/arm/kvm_arm.h                          |  12 +
 target/arm/meson.build                        |   1 +
 target/arm/trace-events                       |   6 +
 16 files changed, 1539 insertions(+), 32 deletions(-)
 create mode 100644 scripts/aarch64_sysreg_helpers.py
 create mode 100644 scripts/update-aarch64-cpu-sysreg-properties.py
 create mode 100755 scripts/update-aarch64-cpu-sysregs-header.py
 create mode 100644 target/arm/cpu-idregs.c
 create mode 100644 target/arm/cpu-idregs.h
 create mode 100644 target/arm/cpu-idregs.h.inc

-- 
2.53.0


^ permalink raw reply	[flat|nested] 76+ messages in thread

end of thread, other threads:[~2026-06-16  8:03 UTC | newest]

Thread overview: 76+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-19 13:27 [PATCH v5 00/18] kvm/arm: Introduce a customizable aarch64 KVM host model Eric Auger
2026-05-19 13:27 ` [PATCH v5 01/18] scripts: introduce scripts/update-aarch64-cpu-sysregs-header.py Eric Auger
2026-05-19 13:27 ` [PATCH v5 02/18] target/arm/cpu-sysregs.h.inc: Sort by name alphabetical order Eric Auger
2026-06-01 14:07   ` Shameer Kolothum Thodi
2026-05-19 13:27 ` [PATCH v5 03/18] target/arm/cpu-sysregs.h.inc: Update with automatic generation Eric Auger
2026-06-01 14:09   ` Shameer Kolothum Thodi
2026-05-19 13:27 ` [PATCH v5 04/18] arm/cpu: Add infra to handle generated ID register definitions Eric Auger
2026-05-21 13:23   ` Sebastian Ott
2026-06-01 14:28   ` Shameer Kolothum Thodi
2026-06-12  7:38     ` Eric Auger
2026-06-15 13:20       ` Shameer Kolothum Thodi
2026-05-19 13:27 ` [PATCH v5 05/18] scripts: Introduce scripts/aarch64_sysreg_helpers module Eric Auger
2026-05-19 13:27 ` [PATCH v5 06/18] scripts: Introduce scripts/update-aarch64-cpu-sysreg-properties.py Eric Auger
2026-05-27 14:35   ` Khushit Shah
2026-05-27 15:11     ` Eric Auger
2026-05-19 13:27 ` [PATCH v5 07/18] target/arm/cpu-idregs.h.inc: generate with script Eric Auger
2026-05-19 13:27 ` [PATCH v5 08/18] target/arm/cpu_idregs: generate tables for Arm64 ID registers and fields Eric Auger
2026-05-21 13:27   ` Sebastian Ott
2026-05-27 14:52   ` Khushit Shah
2026-05-27 15:14     ` Eric Auger
2026-05-19 13:27 ` [PATCH v5 09/18] target/arm/kvm: Introduce kvm_get_writable_id_regs Eric Auger
2026-05-21 13:43   ` Sebastian Ott
2026-06-01 15:26   ` Shameer Kolothum Thodi
2026-05-19 13:27 ` [PATCH v5 10/18] target/arm/cpu64: Retrieve writable ID reg map in aarch64_host_initfn() Eric Auger
2026-05-21 13:47   ` Sebastian Ott
2026-05-27 14:54   ` Khushit Shah
2026-05-27 15:17     ` Eric Auger
2026-05-19 13:27 ` [PATCH v5 11/18] arm/kvm: Initialize all writable ID registers from host Eric Auger
2026-05-21 14:22   ` Sebastian Ott
2026-05-27 15:02   ` Khushit Shah
2026-05-27 15:25     ` Eric Auger
2026-05-27 15:30     ` Eric Auger
2026-05-19 13:27 ` [PATCH v5 12/18] arm/kvm: write back modified ID regs to KVM Eric Auger
2026-05-27 14:42   ` Khushit Shah
2026-05-27 15:28     ` Khushit Shah
2026-05-27 15:33       ` Khushit Shah
2026-05-28 17:35     ` Eric Auger
2026-05-19 13:27 ` [PATCH v5 13/18] target/arm/kvm: Introduce kvm_arm_expose_idreg_properties Eric Auger
2026-05-26 14:42   ` Sebastian Ott
2026-05-27 15:08   ` Khushit Shah
2026-05-27 15:32     ` Eric Auger
2026-05-27 15:44       ` Khushit Shah
2026-05-27 16:19         ` Eric Auger
2026-05-28  5:07           ` Khushit Shah
2026-05-28 15:22             ` Eric Auger
2026-05-19 13:27 ` [PATCH v5 14/18] target/arm/kvm: Special case REVIDR_EL1 and AIDR_EL1 Eric Auger
2026-05-26 15:08   ` Sebastian Ott
2026-05-19 13:27 ` [PATCH v5 15/18] target/arm/kvm: Ignore some writable bits that shouldn't be Eric Auger
2026-05-27 14:46   ` Khushit Shah
2026-05-27 15:45     ` Eric Auger
2026-05-27 15:54       ` Khushit Shah
2026-05-27 16:01         ` Eric Auger
2026-05-27 16:16           ` Khushit Shah
2026-05-27 16:30             ` Eric Auger
2026-05-19 13:27 ` [PATCH v5 16/18] target/arm/cpu: Expose writable ID reg field properties on the kvm host vcpu model Eric Auger
2026-05-26 14:51   ` Sebastian Ott
2026-05-27 15:16   ` Khushit Shah
2026-05-27 15:51     ` Eric Auger
2026-05-27 15:56       ` Khushit Shah
2026-05-27 16:04         ` Eric Auger
2026-05-27 16:11           ` Khushit Shah
2026-05-27 17:20             ` Eric Auger
2026-05-28  5:29               ` Khushit Shah
2026-05-28 17:31                 ` Eric Auger
2026-05-28 15:14             ` Eric Auger
2026-05-19 13:27 ` [PATCH v5 17/18] arm-qmp-cmds: introspection for ID register props Eric Auger
2026-05-27  6:29   ` Sebastian Ott
2026-06-16  8:02     ` Eric Auger
2026-05-27 15:17   ` Khushit Shah
2026-05-27 15:55     ` Eric Auger
2026-05-19 13:27 ` [PATCH v5 18/18] arm/cpu-features: document ID reg properties Eric Auger
2026-05-27  6:37   ` Sebastian Ott
2026-06-04  6:08 ` [PATCH v5 00/18] kvm/arm: Introduce a customizable aarch64 KVM host model Jinqian Yang
2026-06-04  6:32   ` Jinqian Yang
2026-06-04  8:31     ` Eric Auger
2026-06-04 12:00       ` Jinqian Yang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox