From: Andrew Jones <drjones@redhat.com>
To: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu,
qemu-devel@nongnu.org, qemu-arm@nongnu.org
Cc: peter.maydell@linaro.org, marc.zyngier@arm.com,
andre.przywara@arm.com, eric.auger@redhat.com,
pbonzini@redhat.com, alex.bennee@linaro.org,
christoffer.dall@linaro.org
Subject: [PATCH kvm-unit-tests v8 01/10] arm/arm64: yield on cpu_relax
Date: Thu, 8 Dec 2016 18:50:21 +0100 [thread overview]
Message-ID: <20161208175030.12269-2-drjones@redhat.com> (raw)
In-Reply-To: <20161208175030.12269-1-drjones@redhat.com>
In many tests one or more cpus wait for events from other cpus. However,
with TCG, if the event triggering cpus then continue without first
informing TCG it should schedule other cpus, then those other cpus may
never get scheduled, and never see their events. This is because the
TCG scheduler relies on either the currently running cpu to invoke an
instruction that results in scheduling or for some I/O event to occur,
and then to do scheduling while handling the I/O. kvm-unit-tests do not
have external I/O events, so we must invoke a yielding instruction
wherever needed. cpu_relax() is almost always a place it's needed.
While this change is mostly for TCG, it's fine to do for KVM as well.
The Linux kernel made the same change with 1baa82f4803 for armv8. As
the yield instruction is also available on armv7, we make the change
for both.
Signed-off-by: Andrew Jones <drjones@redhat.com>
---
v8: new patch that drastically speeds up the tests with tcg,
actually allowing it to complete at all after adding
-nodefaults to the qemu command line...
---
lib/arm/asm/barrier.h | 5 +++--
lib/arm64/asm/barrier.h | 3 ++-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/lib/arm/asm/barrier.h b/lib/arm/asm/barrier.h
index 394a4a2da26f..927cd3801dfb 100644
--- a/lib/arm/asm/barrier.h
+++ b/lib/arm/asm/barrier.h
@@ -1,13 +1,14 @@
#ifndef _ASMARM_BARRIER_H_
#define _ASMARM_BARRIER_H_
/*
- * Adapted form arch/arm/include/asm/barrier.h
+ * Adapted from arch/arm/include/asm/barrier.h
*/
#define sev() asm volatile("sev" : : : "memory")
#define wfe() asm volatile("wfe" : : : "memory")
#define wfi() asm volatile("wfi" : : : "memory")
-#define cpu_relax() asm volatile("" : : : "memory")
+#define yield() asm volatile("yield" : : : "memory")
+#define cpu_relax() yield()
#define isb(option) __asm__ __volatile__ ("isb " #option : : : "memory")
#define dsb(option) __asm__ __volatile__ ("dsb " #option : : : "memory")
diff --git a/lib/arm64/asm/barrier.h b/lib/arm64/asm/barrier.h
index dbdac9d339c7..4f7bb97c2279 100644
--- a/lib/arm64/asm/barrier.h
+++ b/lib/arm64/asm/barrier.h
@@ -7,7 +7,8 @@
#define sev() asm volatile("sev" : : : "memory")
#define wfe() asm volatile("wfe" : : : "memory")
#define wfi() asm volatile("wfi" : : : "memory")
-#define cpu_relax() asm volatile("" : : : "memory")
+#define yield() asm volatile("yield" : : : "memory")
+#define cpu_relax() yield()
#define isb() asm volatile("isb" : : : "memory")
#define dmb(opt) asm volatile("dmb " #opt : : : "memory")
--
2.9.3
next prev parent reply other threads:[~2016-12-08 17:50 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-08 17:50 [PATCH kvm-unit-tests v8 00/10] arm/arm64: add gic framework Andrew Jones
2016-12-08 17:50 ` Andrew Jones [this message]
2016-12-08 17:50 ` [PATCH kvm-unit-tests v8 02/10] arm/arm64: smp: support more than 8 cpus Andrew Jones
2016-12-08 17:50 ` [PATCH kvm-unit-tests v8 03/10] arm/arm64: add some delay routines Andrew Jones
2016-12-09 11:41 ` Andre Przywara
2016-12-09 12:15 ` [Qemu-devel] " Andrew Jones
2016-12-27 15:27 ` Christopher Covington
2016-12-27 16:27 ` Andrew Jones
2016-12-13 16:41 ` Alex Bennée
2016-12-13 17:09 ` Alex Bennée
2016-12-08 17:50 ` [PATCH kvm-unit-tests v8 04/10] arm/arm64: irq enable/disable Andrew Jones
2016-12-08 17:50 ` [PATCH kvm-unit-tests v8 05/10] arm/arm64: add initial gicv2 support Andrew Jones
2016-12-08 17:50 ` [PATCH kvm-unit-tests v8 06/10] arm/arm64: gicv2: add an IPI test Andrew Jones
2016-12-08 17:50 ` [PATCH kvm-unit-tests v8 07/10] libcflat: add IS_ALIGNED() macro, and page sizes Andrew Jones
2016-12-08 17:50 ` [PATCH kvm-unit-tests v8 08/10] arm/arm64: add initial gicv3 support Andrew Jones
2016-12-08 17:50 ` [PATCH kvm-unit-tests v8 09/10] arm/arm64: gicv3: add an IPI test Andrew Jones
2016-12-09 16:08 ` Andre Przywara
2016-12-09 17:28 ` Andrew Jones
2016-12-08 17:50 ` [PATCH kvm-unit-tests v8 10/10] arm/arm64: gic: don't just use zero Andrew Jones
2016-12-14 13:46 ` [Qemu-devel] [PATCH kvm-unit-tests v8 00/10] arm/arm64: add gic framework Andrew Jones
2016-12-14 15:36 ` Alex Bennée
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=20161208175030.12269-2-drjones@redhat.com \
--to=drjones@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=andre.przywara@arm.com \
--cc=christoffer.dall@linaro.org \
--cc=eric.auger@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=marc.zyngier@arm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox