Commit 9b9b72fe authored by Jake Moilanen's avatar Jake Moilanen Committed by Paul Mackerras

[POWERPC] Use H_CEDE on non-SMT

On the JS21 systems, they have the SPLPAR hypertas set, but are not SMT
capable.  So, they are not making the H_CEDE call.  This is causing the
hypervisor to have to queue up work for the hdecr, taking an excessive
amount of time in maintenance code, and causing jitter on the box.

Making the H_CEDE call helps alleviate that problem.
Signed-off-by: default avatarJake Moilanen <moilanen@austin.ibm.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 9fc0a92c
...@@ -501,7 +501,8 @@ static void pseries_dedicated_idle_sleep(void) ...@@ -501,7 +501,8 @@ static void pseries_dedicated_idle_sleep(void)
} }
/* /*
* Cede if the other thread is not idle, so that it can * If not SMT, cede processor. If CPU is running SMT
* cede if the other thread is not idle, so that it can
* go single-threaded. If the other thread is idle, * go single-threaded. If the other thread is idle,
* we ask the hypervisor if it has pending work it * we ask the hypervisor if it has pending work it
* wants to do and cede if it does. Otherwise we keep * wants to do and cede if it does. Otherwise we keep
...@@ -514,7 +515,8 @@ static void pseries_dedicated_idle_sleep(void) ...@@ -514,7 +515,8 @@ static void pseries_dedicated_idle_sleep(void)
* very low priority. The cede enables interrupts, which * very low priority. The cede enables interrupts, which
* doesn't matter here. * doesn't matter here.
*/ */
if (!lppaca[cpu ^ 1].idle || poll_pending() == H_PENDING) if (!cpu_has_feature(CPU_FTR_SMT) || !lppaca[cpu ^ 1].idle
|| poll_pending() == H_PENDING)
cede_processor(); cede_processor();
out: out:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment