All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Cornelia Huck <cohuck@redhat.com>
Cc: KVM <kvm@vger.kernel.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	linux-s390 <linux-s390@vger.kernel.org>
Subject: [PATCH 1/5] KVM: s390: document memory ordering for kvm_s390_vcpu_wakeup
Date: Wed,  8 Nov 2017 09:41:39 +0100	[thread overview]
Message-ID: <20171108084143.78654-2-borntraeger@de.ibm.com> (raw)
In-Reply-To: <20171108084143.78654-1-borntraeger@de.ibm.com>

swait_active does not enforce any ordering and it can therefore trigger
some subtle races when the CPU moves the read for the check before a
previous store and that store is then used on another CPU that is
preparing the swait.

On s390 there is a call to swait_active in kvm_s390_vcpu_wakeup. The
good thing is, on s390 all potential races cannot happen because all
callers of kvm_s390_vcpu_wakeup do not store (no race) or use an atomic
operation, which handles memory ordering. Since this is not guaranteed
by the Linux semantics (but by the implementation on s390) let's add
smp_mb_after_atomic to make this obvious and document the ordering.

Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Halil Pasic <pasic@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 arch/s390/kvm/interrupt.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index a832ad0..23d8fb2 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -1074,6 +1074,12 @@ void kvm_s390_vcpu_wakeup(struct kvm_vcpu *vcpu)
 	 * in kvm_vcpu_block without having the waitqueue set (polling)
 	 */
 	vcpu->valid_wakeup = true;
+	/*
+	 * This is mostly to document, that the read in swait_active could
+	 * be moved before other stores, leading to subtle races.
+	 * All current users do not store or use an atomic like update
+	 */
+	smp_mb__after_atomic();
 	if (swait_active(&vcpu->wq)) {
 		/*
 		 * The vcpu gave up the cpu voluntarily, mark it as a good
-- 
2.9.4

  reply	other threads:[~2017-11-08  8:41 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-08  8:41 [PATCH 0/5] KVM: s390: patches for 4.15 Christian Borntraeger
2017-11-08  8:41 ` Christian Borntraeger [this message]
2017-11-08  9:05   ` [PATCH 1/5] KVM: s390: document memory ordering for kvm_s390_vcpu_wakeup Cornelia Huck
2017-11-08  9:37   ` David Hildenbrand
2017-11-08  8:41 ` [PATCH 2/5] KVM: s390: SIE considerations for AP Queue virtualization Christian Borntraeger
2017-11-08  9:06   ` Cornelia Huck
2017-11-08  9:29   ` David Hildenbrand
2017-11-09  8:59     ` Christian Borntraeger
2017-11-08  8:41 ` [PATCH 3/5] KVM: s390: vsie: use common code functions for pinning Christian Borntraeger
2017-11-08  9:07   ` Cornelia Huck
2017-11-08  8:41 ` [PATCH 4/5] KVM: s390: abstract conversion between isc and enum irq_types Christian Borntraeger
2017-11-08  9:11   ` Cornelia Huck
2017-11-08  9:41   ` David Hildenbrand
2017-11-08  8:41 ` [PATCH 5/5] KVM: s390: clear_io_irq() requests are not expected for adapter interrupts Christian Borntraeger
2017-11-08  9:19   ` Cornelia Huck
2017-11-08 11:04     ` Christian Borntraeger
2017-11-08 11:09       ` Cornelia Huck
2017-11-08 12:14         ` Michael Mueller
2017-11-13 12:25           ` Cornelia Huck
2017-11-08 11:10 ` [PATCH 0/5] KVM: s390: patches for 4.15 Cornelia Huck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171108084143.78654-2-borntraeger@de.ibm.com \
    --to=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.