Thread (19 messages) flat view 19 messages, 4 authors, 2005-05-09

Re: [PATCH] 8xx: fix usage of pinned 8Mbyte TLB entries

From: Marcelo Tosatti <hidden>
Date: 2005-05-07 03:41:47

On Fri, May 06, 2005 at 11:09:15PM -0400, Dan Malek wrote:
On May 6, 2005, at 4:03 PM, Marcelo Tosatti wrote:
quoted
The data I have tells me otherwise. I have seen the I-TLB entries
getting created for kernel space.
Of course.  That's because the pinned entries aren't working :-)
quoted
Can't the BDI work on the 8Mbyte page?  Same for other software
or debuggers...
The BDI can, but other software functions will walk the page
tables looking for PTE information.  
Do you have any practical example which you are certain is going
to break? 

I dont remember any, and I dont think any software should be walking
kernel pte's directly...

It is not possible to have the 8Mbyte pinned TLB and 4kb pagetables 
mapping the same kernel virtual addresses.
quoted
       /* get the PTE for the bootpage */
       if (!get_pteptr(&init_mm, bootpage, &pte))
              panic("get_pteptr failed\n");

       /* and make it uncachable */
       pte_val(*pte) |= _PAGE_NO_CACHE;
       _tlbie(bootpage);
This is a bad hack (that I wrote) that needs to get fixed.
quoted
Because DMA pages need to have their PTE's marked as uncached, which 
in turn
means their TLB's need to be marked as uncached.
Right, but these are allocated from the vmalloc() space, far away
from the pinned entries. 
quoted
I dont think you can have multiple overlapping TLB entries.
Sure you can, we do it all of the time.  The kernel maps all of
memory, and then user applications do it again.  The only time
it causes a problem is when you have different cache attributes
for the same physical page.  In this case, you need to ensure
you only use one mapping.  You can't have the same virtual
address twice in the TLB (iirc, the 8xx automatically invalidates
an existing one if you do this), but you can have the same
physical page mapped multiple times.  
You can't have both a 4kb page and a 8Mbyte page mapping the virtual 
address KERNELBASE + 0. 

Do you agree? 
quoted
How is the MMU supposed to decide between multiple mappings
for the same address ?
You are thinking backward.  The MMU maps the virtual address
accessed, there is only one valid at a time.  You can have multiple
VM addresses accessing the same physical page.
Right - I'm talking about kernel virtual addresses: in this specific case,
we can't have more than one mapping for the first page at KERNELBASE.
quoted
That is how it is now. See previous posts with detailed TLB debugging.
Something isn't correct if it isn't working.  
quoted
Maybe you thought you got it right because the initial 8Mbyte
mapping works?
No, this is required to work for some execute in place from rom
systems I have done.  It was adapted from that.  The initial 8M
mapping must be evicted when the  mapin_ram() is done.  It's
supposed to happen that way.
quoted
Unfortunately that mapping is trashed after overlapping
pte's are created.
Right, that is supposed to happen unless TLB pinning
is configured.
OK, we seem to be on the same page now. 

So you do agree that pte's should not be created for the first
8MBytes if CONFIG_PIN_TLB is set? :) 

Should I send an updated patch or you plan to do that? 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help