From: "Gautham R. Shenoy" <e...@linux.vnet.ibm.com> Commit d947fb4c965c ("cpuidle: pseries: Fixup exit latency for CEDE(0)") sets the exit latency of CEDE(0) based on the latency values of the Extended CEDE states advertised by the platform
On some of the POWER9 LPARs, the older firmwares advertise a very low value of 2us for CEDE1 exit latency on a Dedicated LPAR. However the measured value is 5us on an average. Due to the low advertised exit latency, we are entering CEDE(0) more aggressively on such platforms. While this helps achieve SMT folding faster, we pay the penalty of having to send an IPI to wakeup the CPU when the target residency is very short. This is showing up as a performance regression on the newer kernels running on the LPARs with older firmware. Hence, set the exit latency of CEDE(0) based on the latency values advertized by platform only from POWER10 onwards. The values advertized on POWER10 platforms is more realistic and informed by the latency measurements. For platforms older than POWER10, retain the hardcoded value of exit latency, which is 10us. Though this is higher than the measured values, we would be erring on the side of caution. Reported-by: Enrico Joedecke <joede...@de.ibm.com> Fixes: commit d947fb4c965c ("cpuidle: pseries: Fixup exit latency for CEDE(0)") Signed-off-by: Gautham R. Shenoy <e...@linux.vnet.ibm.com> --- drivers/cpuidle/cpuidle-pseries.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/cpuidle/cpuidle-pseries.c b/drivers/cpuidle/cpuidle-pseries.c index a2b5c6f..7207467 100644 --- a/drivers/cpuidle/cpuidle-pseries.c +++ b/drivers/cpuidle/cpuidle-pseries.c @@ -419,7 +419,8 @@ static int pseries_idle_probe(void) cpuidle_state_table = shared_states; max_idle_state = ARRAY_SIZE(shared_states); } else { - fixup_cede0_latency(); + if (pvr_version_is(PVR_POWER10)) + fixup_cede0_latency(); cpuidle_state_table = dedicated_states; max_idle_state = NR_DEDICATED_STATES; } -- 1.9.4