diff options
author | Emilio G. Cota | 2016-06-08 20:55:22 +0200 |
---|---|---|
committer | Richard Henderson | 2016-06-12 01:10:17 +0200 |
commit | 462cda505f304c3915e5e30429cee22418f5a6ea (patch) | |
tree | 5b17ecf0e03b6526e3774b4f9a3c8b1dde8be6f2 | |
parent | seqlock: rename write_lock/unlock to write_begin/end (diff) | |
download | qemu-462cda505f304c3915e5e30429cee22418f5a6ea.tar.gz qemu-462cda505f304c3915e5e30429cee22418f5a6ea.tar.xz qemu-462cda505f304c3915e5e30429cee22418f5a6ea.zip |
include/processor.h: define cpu_relax()
Taken from the linux kernel.
Reviewed-by: Sergey Fedorov <sergey.fedorov@linaro.org>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Emilio G. Cota <cota@braap.org>
Message-Id: <1465412133-3029-5-git-send-email-cota@braap.org>
Signed-off-by: Richard Henderson <rth@twiddle.net>
-rw-r--r-- | include/qemu/processor.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/include/qemu/processor.h b/include/qemu/processor.h new file mode 100644 index 0000000000..8b2570283a --- /dev/null +++ b/include/qemu/processor.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2016, Emilio G. Cota <cota@braap.org> + * + * License: GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ +#ifndef QEMU_PROCESSOR_H +#define QEMU_PROCESSOR_H + +#include "qemu/atomic.h" + +#if defined(__i386__) || defined(__x86_64__) +# define cpu_relax() asm volatile("rep; nop" ::: "memory") + +#elif defined(__ia64__) +# define cpu_relax() asm volatile("hint @pause" ::: "memory") + +#elif defined(__aarch64__) +# define cpu_relax() asm volatile("yield" ::: "memory") + +#elif defined(__powerpc64__) +/* set Hardware Multi-Threading (HMT) priority to low; then back to medium */ +# define cpu_relax() asm volatile("or 1, 1, 1;" \ + "or 2, 2, 2;" ::: "memory") + +#else +# define cpu_relax() barrier() +#endif + +#endif /* QEMU_PROCESSOR_H */ |