Vaidyanathan Srinivasan <sva...@linux.vnet.ibm.com> writes: > * Nicholas Piggin <npig...@gmail.com> [2017-06-12 09:58:34]: > >> The CTRL register is read-only except bit 63 which is the run latch >> control. This means it can be updated with a mtspr rather than >> mfspr/mtspr. >> >> Signed-off-by: Nicholas Piggin <npig...@gmail.com> > >> diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c >> index baae104b16c7..a44ea034c226 100644 >> --- a/arch/powerpc/kernel/process.c >> +++ b/arch/powerpc/kernel/process.c >> @@ -1973,13 +1969,9 @@ void notrace __ppc64_runlatch_on(void) >> void notrace __ppc64_runlatch_off(void) >> { >> struct thread_info *ti = current_thread_info(); >> - unsigned long ctrl; >> >> ti->local_flags &= ~_TLF_RUNLATCH; >> - >> - ctrl = mfspr(SPRN_CTRLF); >> - ctrl &= ~CTRL_RUNLATCH; >> - mtspr(SPRN_CTRLT, ctrl); >> + mtspr(SPRN_CTRLT, 0); > > Good idea. Writing to CTRL register can change only the RUN field. > Was this any different in older generations?
No AFAICS back to 2.02. > Anton and Ben kept the mfspr/mtspr part in earlier updates to this > routine. Doing the read/modify write is forward compatible vs a new writable field, whereas writing the whole register with a known value is not. cheers