qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC v4 00/33] arm cleanup experiment for kvm-only build


From: Claudio Fontana
Subject: Re: [RFC v4 00/33] arm cleanup experiment for kvm-only build
Date: Fri, 5 Mar 2021 16:58:01 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0

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
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]