Message ID | 20210305145941.32020-1-cfontana@suse.de |
---|---|
Headers | show |
Series | arm cleanup experiment for kvm-only build | expand |
On 3/5/21 3:59 PM, Claudio Fontana wrote: > Here a new version of the series that enables kvm-only builds. > The goal here is to enable the KVM-only build. > > The split of additional kvm code to kvm/ is planned for the next series, > along with the splitting of the accelerator-specific extensions to the > cpu class. > > Last patches with XXX are not meant for applying, and are only there for > reference. They allow a clean make check by disabling the tests that > currently fail. > > TEST FAILURES: > > The following tests fail, and I'd appreciate any help here: > > test-crypto-tlscredsx509 > test-crypto-tlssession > test-io-channel-tls these three actually work fine. Sorry for the confusion. We are left with the breakages that follow. > arm-cpu-features > device-introspect-test > qom-test > test-hmp > > The following tests fail, and probably they just need disabling: > > tpm-tis-device-test > tpm-tis-device-swtpm-test > > v3 -> v4: > > * added style cleanup patches > > * added header cleanup > > * added basic move of simple KVM-only code to kvm/ > > * fixed some qtest failures due to existing: > > if (kvm_enabled) { > > } else { > > } > > which needed explicit if qtest_enabled() in addition to tcg_enabled() check > > * include 32bit cpus for AArch64 too. > > v2 -> v3: > > * "target/arm: tcg: add sysemu and user subsirs" > - new standalone patch to create the empty tcg/sysemu and tcg/user subdirs. > > * "target/arm: only build psci for TCG" > - do not move psci inside tcg/ directory, because HVF might use it soon. > (Peter) > > * "target/arm: move physical address translation" > - change the module name from "get-phys-addr" to "cpu-mmu", > which includes aa64_va_parameter in this patch, and that > will also contain the get_mmu_idx* functions later in the series. > (Richard) > > * "target/arm: split cpregs from tcg/helper.c" > - moved raw_read and raw_write to cpregs.h (Richard) > > * "target/arm: only perform TCG cpu and machine inits if TCG enabled" > - add an explanatory comment before the kvm function for cpreg list init > - change the use of g_renew to g_new, since we do not do the double > initialization of cpreg list anymore. > > * "target/arm: add temporary stub for arm_rebuild_hflags" > - use a if (tcg_enabled()) instead of #ifdef (Richard) > > * "target/arm: split vfp state setting from tcg helpers" > - explain better what goes where in the commit (Richard) > > * "target/arm: move arm_mmu_idx*" > - move the functions to cpu-mmu instead of get-phys-addr (Richard) > > * "target/arm: move sve_zcr_len_for_el to common_cpu" > > - add a comment about those functions being in theory > TARGET_AARCH64 specific, but making the change would spawn > a large number of additional #ifdefs. This state predates this > change (Richard). > > * "target/arm: move aarch64_sync_32_to_64 (and vv) to cpu code" > > - explain better why these functions are needed for KVM too (Richard) > > * "target/arm: move sve_exception_el out of TCG helpers" > > - bring over the sve_exception_el code, making it available for KVM too. > (Richard) > > * "target/arm: wrap call to aarch64_sve_change_el in tcg_enabled()" > > - mention in the commit that this enables finally a build with > configure --enable-kvm --disable-tcg > > > v1 -> v2: reworked of the whole series > > In this v2, only the first two patches remain, the rest is > reworked. > > Main reasons for the rework were: > > 1) moving out cpregs to its own module, leave the tcg-only part in tcg/ > > 2) split of arm cpu32, cpu64 and cpu models. This is still not perfect, > but I think it's an improvement. > > 3) import less stuff, that is actually unused or can be stubbed on KVM > (thanks to the precious feedback on the previous RFCv1). > > ... > > Main issues: > > 1) basically needs the "configure only machines compatible with KVM" from Philippe, > so we can avoid some of the stubs. > > 2) tests/ work fine building with tcg or with tcg + kvm, > but for making a kvm-only build pass the tests, more work is needed in tests/ > figuring out which tests are TCG-only and which need to be tweaked. > > Thanks a lot for your comments! > > > . / . / . / . / . / . / > > > Hi all, > > this is an experiment, a cleanup based on and requiring the series > "i386 cleanup PART 2": > > https://lists.gnu.org/archive/html/qemu-devel/2021-02/msg05935.html > > The goal is to split the code between TCG-only and non-TCG code, > fixing the KVM-only build (configure --disable-tcg), > > and laying the ground for further cleanups and the use of the > new accel objects in the hierarchy to specialize the cpu > according to the accelerator. > > This is known to be an early state, with probably a lot of work > still needed. > > I thought it could be useful to share early, especially in light > of the combination of this with Philippe's work on building > only the machines and devices compatible with KVM for arm. > > Comments welcome, thanks, > > Claudio > > > Claudio Fontana (33): > target/arm: move translate modules to tcg/ > target/arm: move helpers to tcg/ > arm: tcg: only build under CONFIG_TCG > target/arm: tcg: add sysemu and user subsirs > target/arm: only build psci for TCG > target/arm: split off cpu-sysemu.c > target/arm: move physical address translation to cpu-mmu > target/arm: cpu-mmu: fix comment style > target/arm: split cpregs from tcg/helper.c > target/arm: cpregs: fix style (mostly just comments) > target/arm: move cpu definitions to common cpu module > target/arm: only perform TCG cpu and machine inits if TCG enabled > target/arm: kvm: add stubs for some helpers > target/arm: move cpsr_read, cpsr_write to cpu_common > target/arm: add temporary stub for arm_rebuild_hflags > target/arm: split vfp state setting from tcg helpers > target/arm: move arm_mmu_idx* to cpu-mmu > target/arm: move sve_zcr_len_for_el to common_cpu > target/arm: move arm_sctlr away from tcg helpers > target/arm: move arm_cpu_list to common_cpu > target/arm: move aarch64_sync_32_to_64 (and vv) to cpu code > target/arm: split 32bit cpu models from cpu.c to cpu32.c > target/arm: move sve_exception_el out of TCG helpers > target/arm: move TCG cpu and models inside tcg/ > target/arm: cpu: fix style > target/arm: wrap call to aarch64_sve_change_el in tcg_enabled() > target/arm: remove kvm include file for PSCI and arm-powerctl > target/arm: move kvm-const.h, kvm.c, kvm64.c, kvm_arm.h to kvm/ > target/arm: cleanup cpu includes > target/arm: remove broad "else" statements when checking accels > tests/qtest: skip bios-tables-test test_acpi_oem_fields_virt for KVM > XXX disable a bunch of tests that seem to use tcg cpus > XXX disable arm-cpu-features > > meson.build | 3 +- > target/arm/arm-powerctl.h | 2 - > target/arm/cpregs.h | 274 + > target/arm/cpu-mmu.h | 119 + > target/arm/cpu-qom.h | 3 - > target/arm/cpu-vfp.h | 29 + > target/arm/cpu.h | 246 +- > target/arm/cpu32.h | 27 + > target/arm/internals.h | 47 +- > target/arm/{ => kvm}/kvm-consts.h | 0 > target/arm/{ => kvm}/kvm_arm.h | 0 > target/arm/kvm/trace.h | 1 + > target/arm/{ => tcg}/op_addsub.h | 0 > target/arm/tcg/tcg-cpu.h | 37 + > target/arm/tcg/trace.h | 1 + > target/arm/{ => tcg}/translate-a64.h | 0 > target/arm/{ => tcg}/translate.h | 0 > target/arm/{ => tcg}/vec_internal.h | 0 > target/arm/trace.h | 1 - > target/arm/{ => tcg}/a32-uncond.decode | 0 > target/arm/{ => tcg}/a32.decode | 0 > target/arm/{ => tcg}/m-nocp.decode | 0 > target/arm/{ => tcg}/neon-dp.decode | 0 > target/arm/{ => tcg}/neon-ls.decode | 0 > target/arm/{ => tcg}/neon-shared.decode | 0 > target/arm/{ => tcg}/sve.decode | 0 > target/arm/{ => tcg}/t16.decode | 0 > target/arm/{ => tcg}/t32.decode | 0 > target/arm/{ => tcg}/vfp-uncond.decode | 0 > target/arm/{ => tcg}/vfp.decode | 0 > hw/arm/boot.c | 5 +- > hw/arm/pxa2xx.c | 1 + > hw/arm/pxa2xx_pic.c | 1 + > hw/arm/sbsa-ref.c | 2 +- > hw/arm/virt-acpi-build.c | 2 +- > hw/arm/virt.c | 2 +- > hw/arm/xlnx-versal.c | 2 +- > hw/arm/xlnx-zynqmp.c | 2 +- > hw/cpu/a15mpcore.c | 2 +- > hw/intc/arm_gic_kvm.c | 2 +- > hw/intc/arm_gicv3_cpuif.c | 1 + > hw/intc/arm_gicv3_its_kvm.c | 2 +- > hw/intc/arm_gicv3_kvm.c | 3 +- > target/arm/arm-powerctl.c | 8 +- > target/arm/cpregs.c | 377 + > target/arm/cpu-common.c | 329 + > target/arm/cpu-mmu-sysemu.c | 2307 +++++++ > target/arm/cpu-mmu.c | 219 + > target/arm/cpu-sysemu.c | 1088 +++ > target/arm/cpu-user.c | 40 + > target/arm/cpu-vfp.c | 92 + > target/arm/cpu.c | 950 +-- > target/arm/cpu32.c | 502 ++ > target/arm/cpu64.c | 154 +- > target/arm/cpustate-list.c | 146 + > target/arm/gdbstub.c | 5 +- > target/arm/kvm-stub.c | 24 - > target/arm/kvm/helper-stubs.c | 43 + > target/arm/{ => kvm}/kvm.c | 18 +- > target/arm/{ => kvm}/kvm64.c | 0 > target/arm/machine.c | 40 +- > target/arm/monitor.c | 2 +- > target/arm/psci.c | 1 - > target/arm/{helper.c => tcg/cpregs.c} | 6082 +---------------- > target/arm/tcg/cpu-vfp.c | 146 + > target/arm/{ => tcg}/crypto_helper.c | 0 > target/arm/{ => tcg}/debug_helper.c | 0 > target/arm/{ => tcg}/helper-a64.c | 0 > target/arm/tcg/helper.c | 1521 +++++ > target/arm/{ => tcg}/iwmmxt_helper.c | 0 > target/arm/{ => tcg}/m_helper.c | 1 + > target/arm/{ => tcg}/mte_helper.c | 0 > target/arm/{ => tcg}/neon_helper.c | 0 > target/arm/{ => tcg}/op_helper.c | 1 + > target/arm/{ => tcg}/pauth_helper.c | 2 +- > target/arm/{ => tcg}/sve_helper.c | 0 > target/arm/tcg/sysemu/tcg-cpu.c | 52 + > .../arm/{cpu_tcg.c => tcg/tcg-cpu-models.c} | 16 +- > target/arm/tcg/tcg-cpu.c | 229 + > target/arm/{ => tcg}/tlb_helper.c | 1 + > target/arm/{ => tcg}/translate-a64.c | 1 + > target/arm/{ => tcg}/translate-sve.c | 0 > target/arm/{ => tcg}/translate.c | 1 + > target/arm/{ => tcg}/vec_helper.c | 0 > target/arm/{ => tcg}/vfp_helper.c | 210 +- > tests/qtest/bios-tables-test.c | 7 + > target/arm/{ => tcg}/translate-neon.c.inc | 0 > target/arm/{ => tcg}/translate-vfp.c.inc | 0 > MAINTAINERS | 2 +- > target/arm/kvm/meson.build | 8 + > target/arm/kvm/trace-events | 4 + > target/arm/meson.build | 53 +- > target/arm/tcg/meson.build | 45 + > target/arm/tcg/sysemu/meson.build | 4 + > target/arm/{ => tcg}/trace-events | 3 - > target/arm/tcg/user/meson.build | 3 + > tests/meson.build | 6 +- > tests/qtest/meson.build | 14 +- > 98 files changed, 8107 insertions(+), 7467 deletions(-) > create mode 100644 target/arm/cpregs.h > create mode 100644 target/arm/cpu-mmu.h > create mode 100644 target/arm/cpu-vfp.h > create mode 100644 target/arm/cpu32.h > rename target/arm/{ => kvm}/kvm-consts.h (100%) > rename target/arm/{ => kvm}/kvm_arm.h (100%) > create mode 100644 target/arm/kvm/trace.h > rename target/arm/{ => tcg}/op_addsub.h (100%) > create mode 100644 target/arm/tcg/tcg-cpu.h > create mode 100644 target/arm/tcg/trace.h > rename target/arm/{ => tcg}/translate-a64.h (100%) > rename target/arm/{ => tcg}/translate.h (100%) > rename target/arm/{ => tcg}/vec_internal.h (100%) > delete mode 100644 target/arm/trace.h > rename target/arm/{ => tcg}/a32-uncond.decode (100%) > rename target/arm/{ => tcg}/a32.decode (100%) > rename target/arm/{ => tcg}/m-nocp.decode (100%) > rename target/arm/{ => tcg}/neon-dp.decode (100%) > rename target/arm/{ => tcg}/neon-ls.decode (100%) > rename target/arm/{ => tcg}/neon-shared.decode (100%) > rename target/arm/{ => tcg}/sve.decode (100%) > rename target/arm/{ => tcg}/t16.decode (100%) > rename target/arm/{ => tcg}/t32.decode (100%) > rename target/arm/{ => tcg}/vfp-uncond.decode (100%) > rename target/arm/{ => tcg}/vfp.decode (100%) > create mode 100644 target/arm/cpregs.c > create mode 100644 target/arm/cpu-common.c > create mode 100644 target/arm/cpu-mmu-sysemu.c > create mode 100644 target/arm/cpu-mmu.c > create mode 100644 target/arm/cpu-sysemu.c > create mode 100644 target/arm/cpu-user.c > create mode 100644 target/arm/cpu-vfp.c > create mode 100644 target/arm/cpu32.c > create mode 100644 target/arm/cpustate-list.c > delete mode 100644 target/arm/kvm-stub.c > create mode 100644 target/arm/kvm/helper-stubs.c > rename target/arm/{ => kvm}/kvm.c (98%) > rename target/arm/{ => kvm}/kvm64.c (100%) > rename target/arm/{helper.c => tcg/cpregs.c} (59%) > create mode 100644 target/arm/tcg/cpu-vfp.c > rename target/arm/{ => tcg}/crypto_helper.c (100%) > rename target/arm/{ => tcg}/debug_helper.c (100%) > rename target/arm/{ => tcg}/helper-a64.c (100%) > create mode 100644 target/arm/tcg/helper.c > rename target/arm/{ => tcg}/iwmmxt_helper.c (100%) > rename target/arm/{ => tcg}/m_helper.c (99%) > rename target/arm/{ => tcg}/mte_helper.c (100%) > rename target/arm/{ => tcg}/neon_helper.c (100%) > rename target/arm/{ => tcg}/op_helper.c (99%) > rename target/arm/{ => tcg}/pauth_helper.c (99%) > rename target/arm/{ => tcg}/sve_helper.c (100%) > create mode 100644 target/arm/tcg/sysemu/tcg-cpu.c > rename target/arm/{cpu_tcg.c => tcg/tcg-cpu-models.c} (99%) > create mode 100644 target/arm/tcg/tcg-cpu.c > rename target/arm/{ => tcg}/tlb_helper.c (99%) > rename target/arm/{ => tcg}/translate-a64.c (99%) > rename target/arm/{ => tcg}/translate-sve.c (100%) > rename target/arm/{ => tcg}/translate.c (99%) > rename target/arm/{ => tcg}/vec_helper.c (100%) > rename target/arm/{ => tcg}/vfp_helper.c (84%) > rename target/arm/{ => tcg}/translate-neon.c.inc (100%) > rename target/arm/{ => tcg}/translate-vfp.c.inc (100%) > create mode 100644 target/arm/kvm/meson.build > create mode 100644 target/arm/kvm/trace-events > create mode 100644 target/arm/tcg/meson.build > create mode 100644 target/arm/tcg/sysemu/meson.build > rename target/arm/{ => tcg}/trace-events (85%) > create mode 100644 target/arm/tcg/user/meson.build >