* map_page() and pinned TLB entries
@ 2005-06-16 14:47 Marcelo Tosatti
2005-06-16 21:13 ` Dan Malek
0 siblings, 1 reply; 4+ messages in thread
From: Marcelo Tosatti @ 2005-06-16 14:47 UTC (permalink / raw)
To: Dan Malek, linux-ppc-embedded
Hi Dan,
So we've got rid of direct pte manipulators similar to what was done in v2.4.
Such patch for v2.6 is in the 8xx tree I posted previously, you've also seen
it here in the list.
Remaining problem is that map_page() is going to flush the TLB for the
addresses being created. Obviously there is a collision with the 4kb
PTE's, which thrases the 8Mbyte entry.
So what I have done internally is to simply comment out the
flush_HPTE() call in map_page(), which does the trick.
What would be an elegant way of dealing with this? We can insert
a conditional there such that only addresses not covered
by other mappings (in this case the 8Mbyte entry) get flushed.
Any better ideas?
diff -Nur --exclude-from=/home/marcelo/excl /mnt/test2/tslinux_mv21/linux-2.6/arch/ppc/mm/pgtable.c linux-2.6/arch/ppc/mm/pgtable.c
--- /mnt/test2/tslinux_mv21/linux-2.6/arch/ppc/mm/pgtable.c 2005-05-16 13:19:47.000000000 -0300
+++ linux-2.6/arch/ppc/mm/pgtable.c 2005-06-16 15:52:32.000000000 -0300
@@ -299,8 +299,8 @@
if (pg != 0) {
err = 0;
set_pte(pg, pfn_pte(pa >> PAGE_SHIFT, __pgprot(flags)));
- if (mem_init_done)
- flush_HPTE(0, va, pmd_val(*pd));
+ // if (mem_init_done)
+// flush_HPTE(0, va, pmd_val(*pd));
}
spin_unlock(&init_mm.page_table_lock);
return err;
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: map_page() and pinned TLB entries
2005-06-16 21:13 ` Dan Malek
@ 2005-06-16 16:47 ` Marcelo Tosatti
2005-06-16 22:17 ` Dan Malek
0 siblings, 1 reply; 4+ messages in thread
From: Marcelo Tosatti @ 2005-06-16 16:47 UTC (permalink / raw)
To: Dan Malek; +Cc: linux-ppc-embedded
On Thu, Jun 16, 2005 at 05:13:19PM -0400, Dan Malek wrote:
>
> On Jun 16, 2005, at 10:47 AM, Marcelo Tosatti wrote:
>
> >What would be an elegant way of dealing with this? We can insert
> >a conditional there such that only addresses not covered
> >by other mappings (in this case the 8Mbyte entry) get flushed.
>
> I'd like to make _tlbie() a macro on 8xx that simply tests the VA
> and doesn't invalidate anything in the pinned space. Of course,
> the code shouldn't be doing this anyway, and I think this
> should be treated as a bug if it happens.
Well it is expected that mapin_ram() flushes the va for the
PTE's being created.
That is the only well known occurence of _tlbie() on
a possibly pinned region.
I agree that adding a debugging check on _tlbie() to
catch invalidations in pinned space is a good thing.
> If the Linux VM thinks it needs to be doing this, pinned space
> isn't going to work.
Well the VM does that now, but it can be changed to skip the
pinned region.
>The _tlbie() is an exported symbol, I suspect for MOL, so
> we have to accommodate that.
What does MOL stand for?
> Thanks.
There are two separate approaches:
a) Fix mapin_ram() to skip pinned regions
b) Fix _tlbie() to skip pinned regions and warn about such
misusage.
If b) is chosen alone, which is what you seem to suggest, we
will get tons of warnings (or traps) anyway from mapin_ram().
So having that said, isnt the correct way out of this to change
both a) and b)?
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: map_page() and pinned TLB entries
2005-06-16 14:47 map_page() and pinned TLB entries Marcelo Tosatti
@ 2005-06-16 21:13 ` Dan Malek
2005-06-16 16:47 ` Marcelo Tosatti
0 siblings, 1 reply; 4+ messages in thread
From: Dan Malek @ 2005-06-16 21:13 UTC (permalink / raw)
To: Marcelo Tosatti; +Cc: linux-ppc-embedded
On Jun 16, 2005, at 10:47 AM, Marcelo Tosatti wrote:
> What would be an elegant way of dealing with this? We can insert
> a conditional there such that only addresses not covered
> by other mappings (in this case the 8Mbyte entry) get flushed.
I'd like to make _tlbie() a macro on 8xx that simply tests the VA
and doesn't invalidate anything in the pinned space. Of course,
the code shouldn't be doing this anyway, and I think this
should be treated as a bug if it happens. If the Linux VM
thinks it needs to be doing this, pinned space isn't going to work.
The _tlbie() is an exported symbol, I suspect for MOL, so
we have to accommodate that.
Thanks.
-- Dan
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: map_page() and pinned TLB entries
2005-06-16 16:47 ` Marcelo Tosatti
@ 2005-06-16 22:17 ` Dan Malek
0 siblings, 0 replies; 4+ messages in thread
From: Dan Malek @ 2005-06-16 22:17 UTC (permalink / raw)
To: Marcelo Tosatti; +Cc: linux-ppc-embedded
On Jun 16, 2005, at 12:47 PM, Marcelo Tosatti wrote:
> Well it is expected that mapin_ram() flushes the va for the
> PTE's being created.
>
> That is the only well known occurence of _tlbie() on
> a possibly pinned region.
Crap ... no, it's not. It's map_page() that does the flush,
which happens on ioremap() as well. When we pin
entries, we also pin some IO space as well. We need
to update ioremap() to be smart about pinned entries
like it does BATs and CAMs. I wonder if we can just
make this a generic test in ioremap(). It doesn't have
to know how the spaces are "pinned", just that they are
and how they are mapped.
> What does MOL stand for?
MacOS on Linux. I don't think 8xx will run this any
time soon :-)
> If b) is chosen alone, which is what you seem to suggest, we
> will get tons of warnings (or traps) anyway from mapin_ram().
It's from more than just mapin_ram(). As I said, we also
use some of the entries to pin IO space. We used to pin only
8M of instructions, which is more than sufficient, then various
8M windows of data space. I think we used to pin 24M of
data and 8M of IMMR (plus anything above that, which could
be flash or other IO).
> So having that said, isnt the correct way out of this to change
> both a) and b)?
We certainly have to implement b) to catch all pinned spaces,
then update accordingly to ensure none of the wired entries
get evicted.
Thanks.
-- Dan
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2005-06-16 22:17 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-16 14:47 map_page() and pinned TLB entries Marcelo Tosatti
2005-06-16 21:13 ` Dan Malek
2005-06-16 16:47 ` Marcelo Tosatti
2005-06-16 22:17 ` Dan Malek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).