From: Benjamin Herrenschmidt <benh@kernel.crashing.org> Date: 2017-07-07 21:12:45
When writing to the process table, we need to ensure the store is
visible to a subsequent access by the MMU. We assume we never have
the PID active while doing the update, so a ptesync/isync pair
should hopefully be a big enough hammer for our purpose.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
Note: Architecturally, we also need to use a tlbie(l) with RIC=2
to flush the process table cache. However this is (very) expensive
and we know that POWER9 will invalidate its cache when hitting the
mtpid instruction.
To be safe, we should add the tlbie for any ARCH300 processor we
don't know about though. (Aneesh, Nick do we need a ftr bit ?)
arch/powerpc/mm/mmu_context_book3s64.c | 8 ++++++++
1 file changed, 8 insertions(+)
From: Nicholas Piggin <hidden> Date: 2017-07-10 04:40:20
On Fri, 07 Jul 2017 16:12:16 -0500
Benjamin Herrenschmidt [off-list ref] wrote:
When writing to the process table, we need to ensure the store is
visible to a subsequent access by the MMU. We assume we never have
the PID active while doing the update, so a ptesync/isync pair
should hopefully be a big enough hammer for our purpose.
Do we need this if it's going from invalid->valid?
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
Note: Architecturally, we also need to use a tlbie(l) with RIC=2
to flush the process table cache. However this is (very) expensive
and we know that POWER9 will invalidate its cache when hitting the
mtpid instruction.
To be safe, we should add the tlbie for any ARCH300 processor we
don't know about though. (Aneesh, Nick do we need a ftr bit ?)
Good question, I'm not sure. Aside from this particular thing, it
seems like a good idea in general to add implementation specific
tests into the ftr framework.
We could add the PVR into it so we don't have to pollute FTR bits.
The POWER9_DD1 bit for example could just be a PVR mask and cmp.
From: Benjamin Herrenschmidt <benh@kernel.crashing.org> Date: 2017-07-10 06:44:47
On Mon, 2017-07-10 at 14:40 +1000, Nicholas Piggin wrote:
On Fri, 07 Jul 2017 16:12:16 -0500
Benjamin Herrenschmidt [off-list ref] wrote:
quoted
When writing to the process table, we need to ensure the store is
visible to a subsequent access by the MMU. We assume we never have
the PID active while doing the update, so a ptesync/isync pair
should hopefully be a big enough hammer for our purpose.
Do we need this if it's going from invalid->valid?
No. While there is no valid bit in radix, I checked with HW and they
will not cache an entry that has an invalid RTS field. We should ensure
this gets architected for future impl. though.
quoted
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
Note: Architecturally, we also need to use a tlbie(l) with RIC=2
to flush the process table cache. However this is (very) expensive
and we know that POWER9 will invalidate its cache when hitting the
mtpid instruction.
To be safe, we should add the tlbie for any ARCH300 processor we
don't know about though. (Aneesh, Nick do we need a ftr bit ?)
Good question, I'm not sure. Aside from this particular thing, it
seems like a good idea in general to add implementation specific
tests into the ftr framework.
We could add the PVR into it so we don't have to pollute FTR bits.
The POWER9_DD1 bit for example could just be a PVR mask and cmp.
Reading the PVR isn't necessarily cheap though, we may want to cache
it.
From: Michael Ellerman <hidden> Date: 2017-07-11 12:48:28
On Fri, 2017-07-07 at 21:12:16 UTC, Benjamin Herrenschmidt wrote:
When writing to the process table, we need to ensure the store is
visible to a subsequent access by the MMU. We assume we never have
the PID active while doing the update, so a ptesync/isync pair
should hopefully be a big enough hammer for our purpose.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>