|
@@ -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,
|
|
|
* we ask the hypervisor if it has pending work it
|
|
|
* wants to do and cede if it does. Otherwise we keep
|
|
@@ -514,7 +515,8 @@ static void pseries_dedicated_idle_sleep(void)
|
|
|
* very low priority. The cede enables interrupts, which
|
|
|
* 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();
|
|
|
|
|
|
out:
|