2020-12-15 18:38:05

by Uros Bizjak

[permalink] [raw]
Subject: [PATCH 0/3] x86/KVM/VMX: Introduce and use try_cmpxchg64()

This patch series introduces try_cmpxchg64() atomic locking function.

try_cmpxchg64() provides the same interface for 64 bit and 32 bit targets,
emits CMPXCHGQ for 64 bit targets and CMPXCHG8B for 32 bit targets,
and provides appropriate fallbacks when CMPXCHG8B is unavailable.

try_cmpxchg64() reuses flags from CMPXCHGQ/CMPXCHG8B instructions and
avoids unneeded CMP for 64 bit targets or XOR/XOR/OR sequence for
32 bit targets.

Cc: Will Deacon <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Boqun Feng <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Paolo Bonzini <[email protected]>
Cc: Sean Christopherson <[email protected]>
Cc: Vitaly Kuznetsov <[email protected]>
Cc: Wanpeng Li <[email protected]>
Cc: Jim Mattson <[email protected]>
Cc: Joerg Roedel <[email protected]>

Uros Bizjak (3):
asm-generic/atomic: Add try_cmpxchg64() instrumentation
locking/atomic/x86: Introduce arch_try_cmpxchg64()
KVM/VMX: Use try_cmpxchg64() in posted_intr.c

arch/x86/include/asm/cmpxchg_32.h | 62 +++++++++++++++++++----
arch/x86/include/asm/cmpxchg_64.h | 6 +++
arch/x86/kvm/vmx/posted_intr.c | 9 ++--
include/asm-generic/atomic-instrumented.h | 46 ++++++++++++++++-
scripts/atomic/gen-atomic-instrumented.sh | 2 +-
5 files changed, 108 insertions(+), 17 deletions(-)

--
2.26.2


2021-01-15 18:12:25

by Sean Christopherson

[permalink] [raw]
Subject: Re: [PATCH 0/3] x86/KVM/VMX: Introduce and use try_cmpxchg64()

On Tue, Dec 15, 2020, Uros Bizjak wrote:
> This patch series introduces try_cmpxchg64() atomic locking function.
>
> try_cmpxchg64() provides the same interface for 64 bit and 32 bit targets,
> emits CMPXCHGQ for 64 bit targets and CMPXCHG8B for 32 bit targets,
> and provides appropriate fallbacks when CMPXCHG8B is unavailable.
>
> try_cmpxchg64() reuses flags from CMPXCHGQ/CMPXCHG8B instructions and
> avoids unneeded CMP for 64 bit targets or XOR/XOR/OR sequence for
> 32 bit targets.
>
> Cc: Will Deacon <[email protected]>
> Cc: Peter Zijlstra <[email protected]>
> Cc: Boqun Feng <[email protected]>
> Cc: Thomas Gleixner <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: Borislav Petkov <[email protected]>
> Cc: "H. Peter Anvin" <[email protected]>
> Cc: Paolo Bonzini <[email protected]>
> Cc: Sean Christopherson <[email protected]>
> Cc: Vitaly Kuznetsov <[email protected]>
> Cc: Wanpeng Li <[email protected]>
> Cc: Jim Mattson <[email protected]>
> Cc: Joerg Roedel <[email protected]>
>
> Uros Bizjak (3):
> asm-generic/atomic: Add try_cmpxchg64() instrumentation
> locking/atomic/x86: Introduce arch_try_cmpxchg64()
> KVM/VMX: Use try_cmpxchg64() in posted_intr.c

For anyone else trying to apply this, it depends on v5.11-rc1 (commit
29f006fdefe6, "asm-generic/atomic: Add try_cmpxchg() fallbacks"), which hasn't
yet been merged into Paolo's tree.

> arch/x86/include/asm/cmpxchg_32.h | 62 +++++++++++++++++++----
> arch/x86/include/asm/cmpxchg_64.h | 6 +++
> arch/x86/kvm/vmx/posted_intr.c | 9 ++--
> include/asm-generic/atomic-instrumented.h | 46 ++++++++++++++++-
> scripts/atomic/gen-atomic-instrumented.sh | 2 +-
> 5 files changed, 108 insertions(+), 17 deletions(-)
>
> --
> 2.26.2
>

2021-01-18 18:32:56

by Paolo Bonzini

[permalink] [raw]
Subject: Re: [PATCH 0/3] x86/KVM/VMX: Introduce and use try_cmpxchg64()

On 15/12/20 19:28, Uros Bizjak wrote:
> This patch series introduces try_cmpxchg64() atomic locking function.
>
> try_cmpxchg64() provides the same interface for 64 bit and 32 bit targets,
> emits CMPXCHGQ for 64 bit targets and CMPXCHG8B for 32 bit targets,
> and provides appropriate fallbacks when CMPXCHG8B is unavailable.
>
> try_cmpxchg64() reuses flags from CMPXCHGQ/CMPXCHG8B instructions and
> avoids unneeded CMP for 64 bit targets or XOR/XOR/OR sequence for
> 32 bit targets.
>
> Cc: Will Deacon <[email protected]>
> Cc: Peter Zijlstra <[email protected]>
> Cc: Boqun Feng <[email protected]>
> Cc: Thomas Gleixner <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: Borislav Petkov <[email protected]>
> Cc: "H. Peter Anvin" <[email protected]>
> Cc: Paolo Bonzini <[email protected]>
> Cc: Sean Christopherson <[email protected]>
> Cc: Vitaly Kuznetsov <[email protected]>
> Cc: Wanpeng Li <[email protected]>
> Cc: Jim Mattson <[email protected]>
> Cc: Joerg Roedel <[email protected]>
>
> Uros Bizjak (3):
> asm-generic/atomic: Add try_cmpxchg64() instrumentation
> locking/atomic/x86: Introduce arch_try_cmpxchg64()
> KVM/VMX: Use try_cmpxchg64() in posted_intr.c
>
> arch/x86/include/asm/cmpxchg_32.h | 62 +++++++++++++++++++----
> arch/x86/include/asm/cmpxchg_64.h | 6 +++
> arch/x86/kvm/vmx/posted_intr.c | 9 ++--
> include/asm-generic/atomic-instrumented.h | 46 ++++++++++++++++-
> scripts/atomic/gen-atomic-instrumented.sh | 2 +-
> 5 files changed, 108 insertions(+), 17 deletions(-)
>

Queued, thanks.

Paolo