aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2017-05-22 15:53:00 +1000
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-06-06 20:49:06 +1000
commit38b0c8454b56a74fe785f0db1d218afa8f6ea478 (patch)
tree2371fcb67e716a7cd16016031cd3554d1afddede /include
parent41b14f9452c25f3dd74a8304763a3cc58bff019f (diff)
downloadskiboot-38b0c8454b56a74fe785f0db1d218afa8f6ea478.zip
skiboot-38b0c8454b56a74fe785f0db1d218afa8f6ea478.tar.gz
skiboot-38b0c8454b56a74fe785f0db1d218afa8f6ea478.tar.bz2
cpu: Introduce smt_lowest()
Recent CPUs have introduced a lower SMT priority. This uses the Linux pattern of executing priority nops in descending order to get a simple portable way to put the CPU into lowest SMT priority. Introduce smt_lowest() and use it in place of smt_very_low and smt_low ; smt_very_low sequences. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'include')
-rw-r--r--include/cpu.h3
-rw-r--r--include/processor.h2
2 files changed, 3 insertions, 2 deletions
diff --git a/include/cpu.h b/include/cpu.h
index 1e147aa..938492e 100644
--- a/include/cpu.h
+++ b/include/cpu.h
@@ -121,8 +121,7 @@ extern struct cpu_thread *boot_cpu;
static inline void __nomcount cpu_relax(void)
{
/* Relax a bit to give sibling threads some breathing space */
- smt_low();
- smt_very_low();
+ smt_lowest();
asm volatile("nop; nop; nop; nop;\n"
"nop; nop; nop; nop;\n"
"nop; nop; nop; nop;\n"
diff --git a/include/processor.h b/include/processor.h
index b98dff8..5906b86 100644
--- a/include/processor.h
+++ b/include/processor.h
@@ -197,6 +197,7 @@
#define smt_medium_low or 6,6,6
#define smt_extra_high or 7,7,7
#define smt_very_low or 31,31,31
+#define smt_lowest smt_low ; smt_very_low
#else /* __ASSEMBLY__ */
@@ -214,6 +215,7 @@ static inline void smt_medium_high(void){ asm volatile("or 5,5,5"); }
static inline void smt_medium_low(void) { asm volatile("or 6,6,6"); }
static inline void smt_extra_high(void) { asm volatile("or 7,7,7"); }
static inline void smt_very_low(void) { asm volatile("or 31,31,31"); }
+static inline void smt_lowest(void) { smt_low(); smt_very_low(); }
/*
* SPR access functions