forked from luck/tmp_suning_uos_patched
powerpc/tm: Document h/rfid and mtmsrd quirk
The ISA has a quirk that's useful for the Linux implementation. Document it here so others are less likely to trip over it. Suggested-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Michael Neuling <mikey@neuling.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200325040546.3091563-1-mikey@neuling.org
This commit is contained in:
parent
91ffeaa7e5
commit
b8707e2374
|
@ -245,3 +245,30 @@ POWER9N DD2.2.
|
|||
Guest migration from POWER8 to POWER9 will work with POWER9N DD2.2 and
|
||||
POWER9C DD1.2. Since earlier POWER9 processors don't support TM
|
||||
emulation, migration from POWER8 to POWER9 is not supported there.
|
||||
|
||||
Kernel implementation
|
||||
=====================
|
||||
|
||||
h/rfid mtmsrd quirk
|
||||
-------------------
|
||||
|
||||
As defined in the ISA, rfid has a quirk which is useful in early
|
||||
exception handling. When in a userspace transaction and we enter the
|
||||
kernel via some exception, MSR will end up as TM=0 and TS=01 (ie. TM
|
||||
off but TM suspended). Regularly the kernel will want change bits in
|
||||
the MSR and will perform an rfid to do this. In this case rfid can
|
||||
have SRR0 TM = 0 and TS = 00 (ie. TM off and non transaction) and the
|
||||
resulting MSR will retain TM = 0 and TS=01 from before (ie. stay in
|
||||
suspend). This is a quirk in the architecture as this would normally
|
||||
be a transition from TS=01 to TS=00 (ie. suspend -> non transactional)
|
||||
which is an illegal transition.
|
||||
|
||||
This quirk is described the architecture in the definition of rfid
|
||||
with these lines:
|
||||
|
||||
if (MSR 29:31 ¬ = 0b010 | SRR1 29:31 ¬ = 0b000) then
|
||||
MSR 29:31 <- SRR1 29:31
|
||||
|
||||
hrfid and mtmsrd have the same quirk.
|
||||
|
||||
The Linux kernel uses this quirk in it's early exception handling.
|
||||
|
|
Loading…
Reference in New Issue
Block a user