Re: [PATCH 00/18] Allow architectures to override __READ_ONCE()

2020-07-13 Thread Peter Zijlstra
On Fri, Jul 10, 2020 at 05:51:44PM +0100, Will Deacon wrote:

> SeongJae Park (1):
>   Documentation/barriers/kokr: Remove references to
> [smp_]read_barrier_depends()
> 
> Will Deacon (18):
>   tools: bpf: Use local copy of headers including uapi/linux/filter.h
>   compiler.h: Split {READ,WRITE}_ONCE definitions out into rwonce.h
>   asm/rwonce: Allow __READ_ONCE to be overridden by the architecture
>   alpha: Override READ_ONCE() with barriered implementation
>   asm/rwonce: Remove smp_read_barrier_depends() invocation
>   asm/rwonce: Don't pull  into 'asm-generic/rwonce.h'
>   vhost: Remove redundant use of read_barrier_depends() barrier
>   alpha: Replace smp_read_barrier_depends() usage with smp_[r]mb()
>   locking/barriers: Remove definitions for [smp_]read_barrier_depends()
>   Documentation/barriers: Remove references to
> [smp_]read_barrier_depends()
>   tools/memory-model: Remove smp_read_barrier_depends() from informal
> doc
>   include/linux: Remove smp_read_barrier_depends() from comments
>   checkpatch: Remove checks relating to [smp_]read_barrier_depends()
>   arm64: Reduce the number of header files pulled into vmlinux.lds.S
>   arm64: alternatives: Split up alternative.h
>   arm64: cpufeatures: Add capability for LDAPR instruction
>   arm64: alternatives: Remove READ_ONCE() usage during patch operation
>   arm64: lto: Strengthen READ_ONCE() to acquire when CONFIG_LTO=y

Acked-by: Peter Zijlstra (Intel) 
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization


[PATCH 00/18] Allow architectures to override __READ_ONCE()

2020-07-10 Thread Will Deacon
Hi all,

This is version three of the patches I previously posted here:

  v1: https://lore.kernel.org/lkml/20191108170120.22331-1-w...@kernel.org/
  v2: https://lore.kernel.org/r/20200630173734.14057-1-w...@kernel.org

Changes since v2 include:

  * Actually add the barrier in READ_ONCE() for Alpha!
  * Implement Alpha's smp_load_acquire() using __READ_ONCE(), rather than
the other way around.
  * Further untangling of header files
  * Use CONFIG_LTO instead of CONFIG_CLANG_LTO

I have booted this on arm64, and build-tested as follows:

  - arm64   allnoconfig, defconfig (also bisected) and allmodconfig
  - arm32   allnoconfig, defconfig and allmodconfig
  - x86_64  allnoconfig, defconfig and allmodcofig
  - alpha   defconfig, defconfig+CONFIG_SMP=y
  - riscv64 defconfig
  - powerpc64   defconfig
  - s390defconfig
  - sparc32 defconfig, defconfig+CONFIG_SMP=y
  - sparc64 defconfig

Cheers,

Will

Cc: Joel Fernandes 
Cc: Sami Tolvanen 
Cc: Nick Desaulniers 
Cc: Kees Cook 
Cc: Marco Elver 
Cc: "Paul E. McKenney" 
Cc: Matt Turner 
Cc: Ivan Kokshaysky 
Cc: Richard Henderson 
Cc: Peter Zijlstra 
Cc: Alan Stern 
Cc: "Michael S. Tsirkin" 
Cc: Jason Wang 
Cc: Arnd Bergmann 
Cc: Boqun Feng 
Cc: Catalin Marinas 
Cc: Mark Rutland 
Cc: linux-arm-ker...@lists.infradead.org>
Cc: linux-al...@vger.kernel.org
Cc: virtualization@lists.linux-foundation.org
Cc: kernel-t...@android.com

--->8

SeongJae Park (1):
  Documentation/barriers/kokr: Remove references to
[smp_]read_barrier_depends()

Will Deacon (18):
  tools: bpf: Use local copy of headers including uapi/linux/filter.h
  compiler.h: Split {READ,WRITE}_ONCE definitions out into rwonce.h
  asm/rwonce: Allow __READ_ONCE to be overridden by the architecture
  alpha: Override READ_ONCE() with barriered implementation
  asm/rwonce: Remove smp_read_barrier_depends() invocation
  asm/rwonce: Don't pull  into 'asm-generic/rwonce.h'
  vhost: Remove redundant use of read_barrier_depends() barrier
  alpha: Replace smp_read_barrier_depends() usage with smp_[r]mb()
  locking/barriers: Remove definitions for [smp_]read_barrier_depends()
  Documentation/barriers: Remove references to
[smp_]read_barrier_depends()
  tools/memory-model: Remove smp_read_barrier_depends() from informal
doc
  include/linux: Remove smp_read_barrier_depends() from comments
  checkpatch: Remove checks relating to [smp_]read_barrier_depends()
  arm64: Reduce the number of header files pulled into vmlinux.lds.S
  arm64: alternatives: Split up alternative.h
  arm64: cpufeatures: Add capability for LDAPR instruction
  arm64: alternatives: Remove READ_ONCE() usage during patch operation
  arm64: lto: Strengthen READ_ONCE() to acquire when CONFIG_LTO=y

 .../RCU/Design/Requirements/Requirements.rst  |   2 +-
 Documentation/memory-barriers.txt | 156 +-
 .../translations/ko_KR/memory-barriers.txt| 146 +
 arch/alpha/include/asm/atomic.h   |  16 +-
 arch/alpha/include/asm/barrier.h  |  59 +---
 arch/alpha/include/asm/pgtable.h  |  10 +-
 arch/alpha/include/asm/rwonce.h   |  35 +++
 arch/arm/include/asm/vdso/gettimeofday.h  |   1 +
 arch/arm64/Kconfig|   3 +
 arch/arm64/include/asm/alternative-macros.h   | 276 ++
 arch/arm64/include/asm/alternative.h  | 267 +
 arch/arm64/include/asm/cpucaps.h  |   3 +-
 arch/arm64/include/asm/insn.h |   3 +-
 arch/arm64/include/asm/kernel-pgtable.h   |   2 +-
 arch/arm64/include/asm/memory.h   |  11 +-
 arch/arm64/include/asm/rwonce.h   |  63 
 arch/arm64/include/asm/uaccess.h  |   1 +
 .../include/asm/vdso/compat_gettimeofday.h|   1 +
 arch/arm64/include/asm/vdso/gettimeofday.h|   1 +
 arch/arm64/kernel/alternative.c   |   7 +-
 arch/arm64/kernel/cpufeature.c|  10 +
 arch/arm64/kernel/entry.S |   1 +
 arch/arm64/kernel/vdso/Makefile   |   2 +-
 arch/arm64/kernel/vdso32/Makefile |   2 +-
 arch/arm64/kernel/vmlinux.lds.S   |   1 -
 arch/arm64/kvm/hyp-init.S |   1 +
 arch/riscv/include/asm/vdso/gettimeofday.h|   1 +
 drivers/vhost/vhost.c |   5 -
 include/asm-generic/Kbuild|   1 +
 include/asm-generic/barrier.h |  19 +-
 include/asm-generic/rwonce.h  |  80 +
 include/linux/compiler.h  |  83 +-
 include/linux/nospec.h|   2 +
 include/linux/percpu-refcount.h   |   2 +-
 include/linux/ptr_ring.h  |   2 +-
 mm/memory.c   |   2 +-
 scripts/checkpatch.pl |   9 +-
 tools/bpf/Makefile|   3 +-
 tools/include/uapi/linux/filter.h |  90 ++
 .../Documentation/

Re: [PATCH 00/18] Allow architectures to override __READ_ONCE()

2020-07-01 Thread Josh Triplett
On Tue, Jun 30, 2020 at 06:37:16PM +0100, Will Deacon wrote:
> The patches allow architectures to provide their own implementation of
> __READ_ONCE(). This serves two main purposes:
> 
>   1. It finally allows us to remove [smp_]read_barrier_depends() from the
>  Linux memory model and make it an implementation detail of the Alpha
>  back-end.

And there was much rejoicing. Thank you.
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization


[PATCH 00/18] Allow architectures to override __READ_ONCE()

2020-06-30 Thread Will Deacon
Hi everyone,

This is the long-awaited version two of the patches I previously
posted in November last year:

  https://lore.kernel.org/lkml/20191108170120.22331-1-w...@kernel.org/

I ended up parking the series while the READ_ONCE() implementation was
being overhauled, but with that merged during the recent merge window
and LTO patches being posted again [1], it was time for a refresh.

The patches allow architectures to provide their own implementation of
__READ_ONCE(). This serves two main purposes:

  1. It finally allows us to remove [smp_]read_barrier_depends() from the
 Linux memory model and make it an implementation detail of the Alpha
 back-end.

  2. It allows arm64 to upgrade __READ_ONCE() to have RCpc acquire
 semantics when compiling with LTO, since this may enable compiler
 optimisations that break dependency ordering and therefore we
 require fencing to ensure ordering within the CPU.

Both of these are implemented by this series.

I've kept Paul's acks from v1 since, although the series has changed
somewhat, the patches with his Ack have not changed materially in my
opinion. I will drop them if anybody objects.

In terms of merging this, my preference would be a stable branch in the
arm64 tree, which others can pull in as they need it.

Cheers,

Will

[1] https://lore.kernel.org/r/20200624203200.78870-1-samitolva...@google.com

Cc: Sami Tolvanen 
Cc: Nick Desaulniers 
Cc: Kees Cook 
Cc: Marco Elver 
Cc: "Paul E. McKenney" 
Cc: Josh Triplett 
Cc: Matt Turner 
Cc: Ivan Kokshaysky 
Cc: Richard Henderson 
Cc: Peter Zijlstra 
Cc: Alan Stern 
Cc: "Michael S. Tsirkin" 
Cc: Jason Wang 
Cc: Arnd Bergmann 
Cc: Boqun Feng 
Cc: Catalin Marinas 
Cc: Mark Rutland 
Cc: linux-arm-ker...@lists.infradead.org>
Cc: linux-al...@vger.kernel.org
Cc: virtualization@lists.linux-foundation.org
Cc: kernel-t...@android.com

--->8

SeongJae Park (1):
  Documentation/barriers/kokr: Remove references to
[smp_]read_barrier_depends()

Will Deacon (17):
  tools: bpf: Use local copy of headers including uapi/linux/filter.h
  compiler.h: Split {READ,WRITE}_ONCE definitions out into rwonce.h
  asm/rwonce: Allow __READ_ONCE to be overridden by the architecture
  alpha: Override READ_ONCE() with barriered implementation
  asm/rwonce: Remove smp_read_barrier_depends() invocation
  vhost: Remove redundant use of read_barrier_depends() barrier
  alpha: Replace smp_read_barrier_depends() usage with smp_[r]mb()
  locking/barriers: Remove definitions for [smp_]read_barrier_depends()
  Documentation/barriers: Remove references to
[smp_]read_barrier_depends()
  tools/memory-model: Remove smp_read_barrier_depends() from informal
doc
  include/linux: Remove smp_read_barrier_depends() from comments
  checkpatch: Remove checks relating to [smp_]read_barrier_depends()
  arm64: Reduce the number of header files pulled into vmlinux.lds.S
  arm64: alternatives: Split up alternative.h
  arm64: cpufeatures: Add capability for LDAPR instruction
  arm64: alternatives: Remove READ_ONCE() usage during patch operation
  arm64: lto: Strengthen READ_ONCE() to acquire when CLANG_LTO=y

 .../RCU/Design/Requirements/Requirements.rst  |   2 +-
 Documentation/memory-barriers.txt | 156 +-
 .../translations/ko_KR/memory-barriers.txt| 146 +
 arch/alpha/include/asm/atomic.h   |  16 +-
 arch/alpha/include/asm/barrier.h  |  61 +---
 arch/alpha/include/asm/pgtable.h  |  10 +-
 arch/alpha/include/asm/rwonce.h   |  19 ++
 arch/arm64/Kconfig|   3 +
 arch/arm64/include/asm/alternative-macros.h   | 276 ++
 arch/arm64/include/asm/alternative.h  | 267 +
 arch/arm64/include/asm/cpucaps.h  |   3 +-
 arch/arm64/include/asm/insn.h |   3 +-
 arch/arm64/include/asm/kernel-pgtable.h   |   2 +-
 arch/arm64/include/asm/memory.h   |  11 +-
 arch/arm64/include/asm/rwonce.h   |  63 
 arch/arm64/include/asm/uaccess.h  |   1 +
 arch/arm64/kernel/alternative.c   |   7 +-
 arch/arm64/kernel/cpufeature.c|  10 +
 arch/arm64/kernel/entry.S |   1 +
 arch/arm64/kernel/vdso/Makefile   |   2 +-
 arch/arm64/kernel/vdso32/Makefile |   2 +-
 arch/arm64/kernel/vmlinux.lds.S   |   1 -
 arch/arm64/kvm/hyp-init.S |   1 +
 drivers/vhost/vhost.c |   5 -
 include/asm-generic/Kbuild|   1 +
 include/asm-generic/barrier.h |  17 --
 include/asm-generic/rwonce.h  |  82 ++
 include/linux/compiler.h  |  83 +-
 include/linux/percpu-refcount.h   |   2 +-
 include/linux/ptr_ring.h  |   2 +-
 mm/memory.c   |   2 +-
 scripts/checkpatch.pl |   9 +-
 tools/bpf/Makefile