All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 00/57] tcg: Improve atomicity support
@ 2023-05-03  7:05 Richard Henderson
  2023-05-03  7:06 ` [PATCH v4 01/57] include/exec/memop: Add bits describing atomicity Richard Henderson
                   ` (57 more replies)
  0 siblings, 58 replies; 132+ messages in thread
From: Richard Henderson @ 2023-05-03  7:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: git, gaosong, philmd, qemu-arm, qemu-riscv, qemu-s390x

v1: https://lore.kernel.org/qemu-devel/20221118094754.242910-1-richard.henderson@linaro.org/
v2: https://lore.kernel.org/qemu-devel/20230216025739.1211680-1-richard.henderson@linaro.org/
v3: https://lore.kernel.org/qemu-devel/20230425193146.2106111-1-richard.henderson@linaro.org/

Based-on: 20230503065729.1745843-1-richard.henderson@linaro.org
("[PATCH v4 00/54] tcg: Simplify calls to load/store helpers")

The main objective here is to support Arm FEAT_LSE2, which says that any
single memory access that does not cross a 16-byte boundary is atomic.
This is the MO_ATOM_WITHIN16 control.

While I'm touching all of this, a secondary objective is to handle the
atomicity of the IBM machines.  Both Power and s390x treat misaligned
accesses as atomic on the lsb of the pointer.  For instance, an 8-byte
access at ptr % 8 == 4 will appear as two atomic 4-byte accesses, and
ptr % 4 == 2 will appear as four 2-byte accesses.
This is the MO_ATOM_SUBALIGN control.

By default, acceses are atomic only if aligned, which is the current
behaviour of the tcg code generator (mostly, anyway, there were bugs).
This is the MO_ATOM_IFALIGN control.

Further, one can say that a large memory access is really a set of
contiguous smaller accesses, and we need not provide more atomicity
than that (modulo MO_ATOM_WITHIN16).  This is the MO_ATMAX_* control.

Changes for v4:
  - Rebase, fixing some conflicts.


r~


Richard Henderson (57):
  include/exec/memop: Add bits describing atomicity
  accel/tcg: Add cpu_in_serial_context
  accel/tcg: Introduce tlb_read_idx
  accel/tcg: Reorg system mode load helpers
  accel/tcg: Reorg system mode store helpers
  accel/tcg: Honor atomicity of loads
  accel/tcg: Honor atomicity of stores
  target/loongarch: Do not include tcg-ldst.h
  tcg: Unify helper_{be,le}_{ld,st}*
  accel/tcg: Implement helper_{ld,st}*_mmu for user-only
  tcg/tci: Use helper_{ld,st}*_mmu for user-only
  tcg: Add 128-bit guest memory primitives
  meson: Detect atomic128 support with optimization
  tcg/i386: Add have_atomic16
  accel/tcg: Use have_atomic16 in ldst_atomicity.c.inc
  accel/tcg: Add aarch64 specific support in ldst_atomicity
  tcg/aarch64: Detect have_lse, have_lse2 for linux
  tcg/aarch64: Detect have_lse, have_lse2 for darwin
  accel/tcg: Add have_lse2 support in ldst_atomicity
  tcg: Introduce TCG_OPF_TYPE_MASK
  tcg/i386: Use full load/store helpers in user-only mode
  tcg/aarch64: Use full load/store helpers in user-only mode
  tcg/ppc: Use full load/store helpers in user-only mode
  tcg/loongarch64: Use full load/store helpers in user-only mode
  tcg/riscv: Use full load/store helpers in user-only mode
  tcg/arm: Adjust constraints on qemu_ld/st
  tcg/arm: Use full load/store helpers in user-only mode
  tcg/mips: Use full load/store helpers in user-only mode
  tcg/s390x: Use full load/store helpers in user-only mode
  tcg/sparc64: Allocate %g2 as a third temporary
  tcg/sparc64: Rename tcg_out_movi_imm13 to tcg_out_movi_s13
  tcg/sparc64: Rename tcg_out_movi_imm32 to tcg_out_movi_u32
  tcg/sparc64: Split out tcg_out_movi_s32
  tcg/sparc64: Use standard slow path for softmmu
  accel/tcg: Remove helper_unaligned_{ld,st}
  tcg/loongarch64: Assert the host supports unaligned accesses
  tcg/loongarch64: Support softmmu unaligned accesses
  tcg/riscv: Support softmmu unaligned accesses
  tcg: Introduce tcg_target_has_memory_bswap
  tcg: Add INDEX_op_qemu_{ld,st}_i128
  tcg: Support TCG_TYPE_I128 in tcg_out_{ld,st}_helper_{args,ret}
  tcg: Introduce atom_and_align_for_opc
  tcg/i386: Use atom_and_align_for_opc
  tcg/aarch64: Use atom_and_align_for_opc
  tcg/arm: Use atom_and_align_for_opc
  tcg/loongarch64: Use atom_and_align_for_opc
  tcg/mips: Use atom_and_align_for_opc
  tcg/ppc: Use atom_and_align_for_opc
  tcg/riscv: Use atom_and_align_for_opc
  tcg/s390x: Use atom_and_align_for_opc
  tcg/sparc64: Use atom_and_align_for_opc
  tcg/i386: Honor 64-bit atomicity in 32-bit mode
  tcg/i386: Support 128-bit load/store with have_atomic16
  tcg/aarch64: Rename temporaries
  tcg/aarch64: Support 128-bit load/store
  tcg/ppc: Support 128-bit load/store
  tcg/s390x: Support 128-bit load/store

 accel/tcg/internal.h             |    5 +
 accel/tcg/tcg-runtime.h          |    3 +
 include/exec/cpu-defs.h          |    7 +-
 include/exec/cpu_ldst.h          |   26 +-
 include/exec/memop.h             |   36 +
 include/qemu/cpuid.h             |   18 +
 include/tcg/tcg-ldst.h           |   72 +-
 include/tcg/tcg-opc.h            |    8 +
 include/tcg/tcg.h                |   22 +-
 tcg/aarch64/tcg-target-con-set.h |    2 +
 tcg/aarch64/tcg-target.h         |    6 +-
 tcg/arm/tcg-target-con-set.h     |   16 +-
 tcg/arm/tcg-target-con-str.h     |    5 +-
 tcg/arm/tcg-target.h             |    3 +-
 tcg/i386/tcg-target.h            |    7 +-
 tcg/loongarch64/tcg-target.h     |    3 +-
 tcg/mips/tcg-target.h            |    4 +-
 tcg/ppc/tcg-target-con-set.h     |    2 +
 tcg/ppc/tcg-target-con-str.h     |    1 +
 tcg/ppc/tcg-target.h             |    4 +-
 tcg/riscv/tcg-target.h           |    4 +-
 tcg/s390x/tcg-target-con-set.h   |    2 +
 tcg/s390x/tcg-target.h           |    4 +-
 tcg/sparc64/tcg-target-con-set.h |    2 -
 tcg/sparc64/tcg-target-con-str.h |    1 -
 tcg/sparc64/tcg-target.h         |    4 +-
 tcg/tcg-internal.h               |    2 +
 tcg/tci/tcg-target.h             |    4 +-
 accel/tcg/cpu-exec-common.c      |    3 +
 accel/tcg/cputlb.c               | 1799 ++++++++++++++++++------------
 accel/tcg/tb-maint.c             |    2 +-
 accel/tcg/user-exec.c            |  489 +++++---
 target/loongarch/csr_helper.c    |    1 -
 target/loongarch/iocsr_helper.c  |    1 -
 tcg/optimize.c                   |   15 +-
 tcg/tcg-op.c                     |  265 +++--
 tcg/tcg.c                        |  270 ++++-
 tcg/tci.c                        |  150 +--
 accel/tcg/ldst_atomicity.c.inc   | 1373 +++++++++++++++++++++++
 docs/devel/loads-stores.rst      |   36 +-
 docs/devel/tcg-ops.rst           |   11 +-
 meson.build                      |   52 +-
 tcg/aarch64/tcg-target.c.inc     |  384 +++++--
 tcg/arm/tcg-target.c.inc         |  121 +-
 tcg/i386/tcg-target.c.inc        |  366 ++++--
 tcg/loongarch64/tcg-target.c.inc |   91 +-
 tcg/mips/tcg-target.c.inc        |  104 +-
 tcg/ppc/tcg-target.c.inc         |  261 +++--
 tcg/riscv/tcg-target.c.inc       |  132 +--
 tcg/s390x/tcg-target.c.inc       |  177 ++-
 tcg/sparc64/tcg-target.c.inc     |  714 ++++--------
 tcg/tci/tcg-target.c.inc         |    8 +-
 52 files changed, 4663 insertions(+), 2435 deletions(-)
 create mode 100644 accel/tcg/ldst_atomicity.c.inc

-- 
2.34.1



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

end of thread, other threads:[~2023-05-09 14:35 UTC | newest]

Thread overview: 132+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-03  7:05 [PATCH v4 00/57] tcg: Improve atomicity support Richard Henderson
2023-05-03  7:06 ` [PATCH v4 01/57] include/exec/memop: Add bits describing atomicity Richard Henderson
2023-05-04 14:49   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 02/57] accel/tcg: Add cpu_in_serial_context Richard Henderson
2023-05-03  7:06 ` [PATCH v4 03/57] accel/tcg: Introduce tlb_read_idx Richard Henderson
2023-05-04 15:02   ` Peter Maydell
2023-05-05 18:57     ` Richard Henderson
2023-05-07 10:09       ` Peter Maydell
2023-05-08 10:02         ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 04/57] accel/tcg: Reorg system mode load helpers Richard Henderson
2023-05-04 15:39   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 05/57] accel/tcg: Reorg system mode store helpers Richard Henderson
2023-05-04 15:44   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 06/57] accel/tcg: Honor atomicity of loads Richard Henderson
2023-05-04 17:17   ` Peter Maydell
2023-05-05 20:19     ` Richard Henderson
2023-05-09 12:04       ` Peter Maydell
2023-05-09 14:27         ` Richard Henderson
2023-05-09 14:33           ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 07/57] accel/tcg: Honor atomicity of stores Richard Henderson
2023-05-05  9:28   ` Peter Maydell
2023-05-08 10:11     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 08/57] target/loongarch: Do not include tcg-ldst.h Richard Henderson
2023-05-05  9:29   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 09/57] tcg: Unify helper_{be,le}_{ld,st}* Richard Henderson
2023-05-05  9:36   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 10/57] accel/tcg: Implement helper_{ld, st}*_mmu for user-only Richard Henderson
2023-05-05  9:43   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 11/57] tcg/tci: Use helper_{ld,st}*_mmu " Richard Henderson
2023-05-05  9:44   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 12/57] tcg: Add 128-bit guest memory primitives Richard Henderson
2023-05-05 10:04   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 13/57] meson: Detect atomic128 support with optimization Richard Henderson
2023-05-05 10:29   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 14/57] tcg/i386: Add have_atomic16 Richard Henderson
2023-05-05 10:34   ` Peter Maydell
2023-05-08 13:41     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 15/57] accel/tcg: Use have_atomic16 in ldst_atomicity.c.inc Richard Henderson
2023-05-05 10:37   ` Peter Maydell
2023-05-08 13:48     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 16/57] accel/tcg: Add aarch64 specific support in ldst_atomicity Richard Henderson
2023-05-03  7:06 ` [PATCH v4 17/57] tcg/aarch64: Detect have_lse, have_lse2 for linux Richard Henderson
2023-05-05 10:41   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 18/57] tcg/aarch64: Detect have_lse, have_lse2 for darwin Richard Henderson
2023-05-05 10:43   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 19/57] accel/tcg: Add have_lse2 support in ldst_atomicity Richard Henderson
2023-05-03  7:06 ` [PATCH v4 20/57] tcg: Introduce TCG_OPF_TYPE_MASK Richard Henderson
2023-05-05 10:45   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 21/57] tcg/i386: Use full load/store helpers in user-only mode Richard Henderson
2023-05-05 12:01   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 22/57] tcg/aarch64: " Richard Henderson
2023-05-05 12:06   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 23/57] tcg/ppc: " Richard Henderson
2023-05-05 12:07   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 24/57] tcg/loongarch64: " Richard Henderson
2023-05-05 12:07   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 25/57] tcg/riscv: " Richard Henderson
2023-05-05 12:07   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 26/57] tcg/arm: Adjust constraints on qemu_ld/st Richard Henderson
2023-05-05 12:14   ` Peter Maydell
2023-05-08 15:13     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 27/57] tcg/arm: Use full load/store helpers in user-only mode Richard Henderson
2023-05-05 12:15   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 28/57] tcg/mips: " Richard Henderson
2023-05-05 12:15   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 29/57] tcg/s390x: " Richard Henderson
2023-05-05 12:16   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 30/57] tcg/sparc64: Allocate %g2 as a third temporary Richard Henderson
2023-05-05 12:19   ` Peter Maydell
2023-05-08 15:17     ` Richard Henderson
2023-05-09  9:24       ` Peter Maydell
2023-05-09 14:34         ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 31/57] tcg/sparc64: Rename tcg_out_movi_imm13 to tcg_out_movi_s13 Richard Henderson
2023-05-05 12:20   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 32/57] tcg/sparc64: Rename tcg_out_movi_imm32 to tcg_out_movi_u32 Richard Henderson
2023-05-05 12:22   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 33/57] tcg/sparc64: Split out tcg_out_movi_s32 Richard Henderson
2023-05-05 12:23   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 34/57] tcg/sparc64: Use standard slow path for softmmu Richard Henderson
2023-05-05 12:26   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 35/57] accel/tcg: Remove helper_unaligned_{ld,st} Richard Henderson
2023-05-05 12:27   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 36/57] tcg/loongarch64: Assert the host supports unaligned accesses Richard Henderson
2023-05-05 12:30   ` Peter Maydell
2023-05-05 13:24   ` WANG Xuerui
2023-05-06  2:03     ` Song Gao
2023-05-03  7:06 ` [PATCH v4 37/57] tcg/loongarch64: Support softmmu " Richard Henderson
2023-05-05 12:35   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 38/57] tcg/riscv: " Richard Henderson
2023-05-05 10:35   ` LIU Zhiwei
2023-05-03  7:06 ` [PATCH v4 39/57] tcg: Introduce tcg_target_has_memory_bswap Richard Henderson
2023-05-05 12:41   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 40/57] tcg: Add INDEX_op_qemu_{ld,st}_i128 Richard Henderson
2023-05-05 12:45   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 41/57] tcg: Support TCG_TYPE_I128 in tcg_out_{ld, st}_helper_{args, ret} Richard Henderson
2023-05-05 12:53   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 42/57] tcg: Introduce atom_and_align_for_opc Richard Henderson
2023-05-05 13:03   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 43/57] tcg/i386: Use atom_and_align_for_opc Richard Henderson
2023-05-05 13:14   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 44/57] tcg/aarch64: " Richard Henderson
2023-05-05 13:15   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 45/57] tcg/arm: " Richard Henderson
2023-05-05 13:15   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 46/57] tcg/loongarch64: " Richard Henderson
2023-05-05 13:16   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 47/57] tcg/mips: " Richard Henderson
2023-05-05 13:17   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 48/57] tcg/ppc: " Richard Henderson
2023-05-05 13:18   ` Peter Maydell
2023-05-08 17:32     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 49/57] tcg/riscv: " Richard Henderson
2023-05-05 13:19   ` Peter Maydell
2023-05-08 17:33     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 50/57] tcg/s390x: " Richard Henderson
2023-05-05 13:20   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 51/57] tcg/sparc64: " Richard Henderson
2023-05-05 13:20   ` Peter Maydell
2023-05-08 17:34     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 52/57] tcg/i386: Honor 64-bit atomicity in 32-bit mode Richard Henderson
2023-05-05 13:27   ` Peter Maydell
2023-05-08 16:15     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 53/57] tcg/i386: Support 128-bit load/store with have_atomic16 Richard Henderson
2023-05-05 13:34   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 54/57] tcg/aarch64: Rename temporaries Richard Henderson
2023-05-05 13:36   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 55/57] tcg/aarch64: Support 128-bit load/store Richard Henderson
2023-05-05 13:41   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 56/57] tcg/ppc: " Richard Henderson
2023-05-08 12:16   ` Daniel Henrique Barboza
2023-05-03  7:06 ` [PATCH v4 57/57] tcg/s390x: " Richard Henderson
2023-05-05 13:43 ` [PATCH v4 00/57] tcg: Improve atomicity support Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.