mbox series

[0/8] Start replacing target_ulong with vaddr

Message ID 20230420212850.20400-1-anjo@rev.ng (mailing list archive)
Headers show
Series Start replacing target_ulong with vaddr | expand

Message

Anton Johansson April 20, 2023, 9:28 p.m. UTC
This is a first patchset in removing target_ulong from non-target/
directories.  As use of target_ulong is spread accross the codebase we
are attempting to target as few maintainers as possible with each
patchset in order to ease reviewing.

The following instances of target_ulong remain in accel/ and tcg/
    - atomic helpers (atomic_common.c.inc), cpu_atomic_*()
      (atomic_template.h,) and cpu_[st|ld]*()
      (cputlb.c/ldst_common.c.inc) are only used in target/ and can
      be pulled out into a separate target-specific file;

    - Calls to cpu_get_tb_cpu_state() cast pc and cs_base to
      target_ulong in order to avoid having to touch the target/
      directory in this patchset;

    - walk_memory_regions() is used in user-exec.c and
      linux-user/elfload.c;

    - helper_ret_*_mmu() is used in tcg/*/tcg-target.c.inc and
      tcg/tci.c;

    - Functions in translate-all.c dealing with TCGContext.gen_insn_data
      will be switched off target_ulong once gen_insn_data and
      TARGET_INSN_START_WORDS have been dealt with;

    - kvm_find_sw_breakpoint() in kvm-all.c used in target/;

    - The last address when looking up page flags for an interval
      [start,last] in pageflags_find()/pageflags_next() is still
      target_long.  I'm not sure why this is required.  This only
      seems relevant on 32-bit guests since the addresses passed
      to the interval tree are uint64_t's, are we relying on a
      sign extension here for some reason?

    - CPUTLBEntry and functions that read from it will be left for a
      later date;

Smaller patchsets implementing above changes will follow.

Finally, the grand goal is to allow for heterogeneous QEMU binaries
consisting of multiple frontends.

RFC: https://lists.nongnu.org/archive/html/qemu-devel/2022-12/msg04518.html

Anton Johansson (8):
  accel: Replace `target_ulong` with `vaddr` in TB/TLB
  accel: Replace target_ulong with vaddr in probe_*()
  accel/tcg: Replace target_ulong with vaddr in *_mmu_lookup()
  accel/tcg: Replace target_ulong with vaddr in helper_unaligned_*()
  accel/tcg: Replace target_ulong with vaddr in translator_*()
  accel/tcg: Replace target_ulong with vaddr in page_*()
  cpu: Replace target_ulong with vaddr in tb_invalidate_phys_addr()
  tcg: Replace target_ulong with vaddr in tcg_gen_code()

 accel/stubs/tcg-stub.c       |   6 +-
 accel/tcg/cpu-exec.c         |  49 ++++-----
 accel/tcg/cputlb.c           | 195 +++++++++++++++++------------------
 accel/tcg/internal.h         |   6 +-
 accel/tcg/tb-hash.h          |  12 +--
 accel/tcg/tb-jmp-cache.h     |   2 +-
 accel/tcg/tb-maint.c         |   2 +-
 accel/tcg/translate-all.c    |  15 +--
 accel/tcg/translator.c       |  10 +-
 accel/tcg/user-exec.c        |  59 ++++++-----
 cpu.c                        |   2 +-
 include/exec/cpu-all.h       |  10 +-
 include/exec/cpu-defs.h      |   4 +-
 include/exec/cpu_ldst.h      |   6 +-
 include/exec/exec-all.h      |  98 +++++++++---------
 include/exec/translate-all.h |   2 +-
 include/exec/translator.h    |   6 +-
 include/qemu/plugin-memory.h |   2 +-
 include/tcg/tcg-ldst.h       |   4 +-
 include/tcg/tcg.h            |   2 +-
 tcg/tcg.c                    |   2 +-
 21 files changed, 247 insertions(+), 247 deletions(-)

--
2.39.1

Comments

Richard Henderson April 23, 2023, 10:59 a.m. UTC | #1
On 4/20/23 22:28, Anton Johansson wrote:
> This is a first patchset in removing target_ulong from non-target/
> directories.  As use of target_ulong is spread accross the codebase we
> are attempting to target as few maintainers as possible with each
> patchset in order to ease reviewing.
> 
> The following instances of target_ulong remain in accel/ and tcg/
>      - atomic helpers (atomic_common.c.inc), cpu_atomic_*()
>        (atomic_template.h,) and cpu_[st|ld]*()
>        (cputlb.c/ldst_common.c.inc) are only used in target/ and can
>        be pulled out into a separate target-specific file;
> 
>      - Calls to cpu_get_tb_cpu_state() cast pc and cs_base to
>        target_ulong in order to avoid having to touch the target/
>        directory in this patchset;
> 
>      - walk_memory_regions() is used in user-exec.c and
>        linux-user/elfload.c;
> 
>      - helper_ret_*_mmu() is used in tcg/*/tcg-target.c.inc and
>        tcg/tci.c;
> 
>      - Functions in translate-all.c dealing with TCGContext.gen_insn_data
>        will be switched off target_ulong once gen_insn_data and
>        TARGET_INSN_START_WORDS have been dealt with;
> 
>      - kvm_find_sw_breakpoint() in kvm-all.c used in target/;
> 
>      - The last address when looking up page flags for an interval
>        [start,last] in pageflags_find()/pageflags_next() is still
>        target_long.  I'm not sure why this is required.  This only
>        seems relevant on 32-bit guests since the addresses passed
>        to the interval tree are uint64_t's, are we relying on a
>        sign extension here for some reason?
> 
>      - CPUTLBEntry and functions that read from it will be left for a
>        later date;
> 
> Smaller patchsets implementing above changes will follow.

You may wish to browse my work in progress

   https://gitlab.com/rth7680/qemu/-/commits/tcg-once/

to avoid duplication, as I have done some of these.  This tree is on top of my atomicity 
patch set; I'm working on upstreaming that now.


r~
Zhijian Li (Fujitsu)" via April 24, 2023, 12:37 p.m. UTC | #2
On 4/23/23 12:59, Richard Henderson wrote:
> You may wish to browse my work in progress
>
>   https://gitlab.com/rth7680/qemu/-/commits/tcg-once/
>
> to avoid duplication, as I have done some of these.  This tree is on 
> top of my atomicity patch set; I'm working on upstreaming that now.
I had a suspicion that would be the case, I'll take a look. Thanks!