diff options
| -rw-r--r-- | arch/powerpc/platforms/pseries/setup.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 54a52437265c..71c634e0b87c 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
| @@ -501,7 +501,8 @@ static void pseries_dedicated_idle_sleep(void) | |||
| 501 | } | 501 | } |
| 502 | 502 | ||
| 503 | /* | 503 | /* |
| 504 | * Cede if the other thread is not idle, so that it can | 504 | * If not SMT, cede processor. If CPU is running SMT |
| 505 | * cede if the other thread is not idle, so that it can | ||
| 505 | * go single-threaded. If the other thread is idle, | 506 | * go single-threaded. If the other thread is idle, |
| 506 | * we ask the hypervisor if it has pending work it | 507 | * we ask the hypervisor if it has pending work it |
| 507 | * wants to do and cede if it does. Otherwise we keep | 508 | * wants to do and cede if it does. Otherwise we keep |
| @@ -514,7 +515,8 @@ static void pseries_dedicated_idle_sleep(void) | |||
| 514 | * very low priority. The cede enables interrupts, which | 515 | * very low priority. The cede enables interrupts, which |
| 515 | * doesn't matter here. | 516 | * doesn't matter here. |
| 516 | */ | 517 | */ |
| 517 | if (!lppaca[cpu ^ 1].idle || poll_pending() == H_PENDING) | 518 | if (!cpu_has_feature(CPU_FTR_SMT) || !lppaca[cpu ^ 1].idle |
| 519 | || poll_pending() == H_PENDING) | ||
| 518 | cede_processor(); | 520 | cede_processor(); |
| 519 | 521 | ||
| 520 | out: | 522 | out: |
