OSDN Git Service

powerpc/64s/idle: POWER9 ESL=0 stop avoid save/restore overhead
authorNicholas Piggin <npiggin@gmail.com>
Sun, 1 Apr 2018 05:48:55 +0000 (15:48 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 4 Apr 2018 01:11:43 +0000 (11:11 +1000)
commitb9ee31e100e73075431faaf7af2ee0fbfd6e624b
treebcc182bc963d0d3c126c6046ba8c3562d3f9d908
parentd0b791c02994486b21fc48949ba276c72a88938d
powerpc/64s/idle: POWER9 ESL=0 stop avoid save/restore overhead

When stop is executed with EC=ESL=0, it appears to execute like a
normal instruction (resuming from NIP when woken by interrupt). So all
the save/restore handling can be avoided completely. In particular NV
GPRs do not have to be saved, and MSR does not have to be switched
back to kernel MSR.

So move the test for EC=ESL=0 sleep states out to power9_idle_stop,
and return directly to the caller after stop in that case.

This improves performance for ping-pong benchmark with the stop0_lite
idle state by 2.54% for 2 threads in the same core, and 2.57% for
different cores. Performance increase with HV_POSSIBLE defined will be
improved further by avoiding the hwsync.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/idle_book3s.S