[PATCH][RFC] Replaced tlbilx with tlbwe in the initialization code
Scott Wood
scottwood at freescale.com
Wed Feb 20 06:47:58 EST 2013
On 02/15/2013 09:16:15 AM, Diana Craciun wrote:
> On 02/15/2013 02:11 AM, Benjamin Herrenschmidt wrote:
>> On Thu, 2013-02-14 at 14:56 +0200, Diana Craciun wrote:
>>> From: Diana Craciun <Diana.Craciun at freescale.com>
>>>
>>> On Freescale e6500 cores EPCR[DGTMI] controls whether guest
>>> supervisor
>>> state can execute TLB management instructions. If EPCR[DGTMI]=0
>>> tlbwe and tlbilx are allowed to execute normally in the guest state.
>>>
>>> A hypervisor may choose to virtualize TLB1 and for this purpose it
>>> may use IPROT to protect the entries for being invalidated by the
>>> guest. However, because tlbwe and tlbilx execution in the guest
>>> state
>>> are sharing the same bit, it is not possible to have a scenario
>>> where
>>> tlbwe is allowed to be executed in guest state and tlbilx traps.
>>> When
>>> guest TLB management instructions are allowed to be executed in
>>> guest
>>> state the guest cannot use tlbilx to invalidate TLB1 guest entries.
>> Sorry, I don't understand the explanation... can you be more
>> detailed ?
>
> TLB1 supports huge page sizes. The guest may see the memory as
> contiguous but it sees the guest physical memory as presented by the
> hypervisor. In reality the real physical memory may be fragmented. In
> this case the hypervisor can add more than one TLB1 entry for one
> guest request and the hypervisor will keep track of all fragments.
> When the guest performs a tlbilx, the hypervisor will correctly
> invalidate all the corresponding fragments because both tlbwe and
> tlbilx trap and has full control of tlb management instructions
> targeting TLB1.
>
> For e6500 a single bit controls if tlbwe and tlbilx trap to the
> Hypervisor. tlbwe targeting TLB1 always traps. But if we want to use
> LRAT for TLB0, we have to configure tlbwe (targeting TLB 0) to go
> directly to the guest. But in this case tlbilx (which is targeting
> both TLBs) will never trap.
>
> If the tlbilx does not trap, the guest can invalidate only one of
> (possible more) fragments and furthermore the synchronization between
> what entries the hypervisor thinks there are in the TLB1 and what are
> the actual entries is lost.
This patch addresses boot-time invalidations only. How will you handle
hugetlb invalidations (or indirect entry invalidations, once that
becomes supported)?
-Scott
More information about the Linuxppc-dev
mailing list