diff options
author | Emilio G. Cota <cota@braap.org> | 2016-06-08 14:55:22 -0400 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2016-06-11 23:10:17 +0000 |
commit | 462cda505f304c3915e5e30429cee22418f5a6ea (patch) | |
tree | 5b17ecf0e03b6526e3774b4f9a3c8b1dde8be6f2 /include | |
parent | 03719e44b6d6d559c506808e5b6c340feff867b8 (diff) |
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>
Diffstat (limited to 'include')
-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 */ |