linux-mips
[Top] [All Lists]

Re: Tags are dead alias Milo is dead part II

To: Thomas Bogendoerfer <tsbogend@alpha.franken.de>, linux-mips@fnet.fr, linux-mips@vger.rutgers.edu, linux@cthulhu.engr.sgi.com
Subject: Re: Tags are dead alias Milo is dead part II
From: ralf@uni-koblenz.de
Date: Thu, 8 Oct 1998 17:03:35 +0200
In-reply-to: <19981007002547.44731@alpha.franken.de>; from Thomas Bogendoerfer on Wed, Oct 07, 1998 at 12:25:47AM +0200
References: <19981007002547.44731@alpha.franken.de>
Sender: owner-linux@cthulhu.engr.sgi.com
On Wed, Oct 07, 1998 at 12:25:47AM +0200, Thomas Bogendoerfer wrote:

> In the process of making Milo obsolete I've also removed tags stuff. This
> was simple for the Indy and took only a few hours for the Olivetti. I hope
> it's also possible for the Decstation. Before I'll start commiting the changes
> we should make sure, how to solve the missing tags for all plattforms.
> 
> Another old code, which might be obsolete now is the wired entry stuff
> in arch/mips/kernel/head.S. It's already disabled for R4k CPUs and
> I would prefer to remove that stuff also for the other CPUs. If you
> need wired entries, I would propose using the add_wired_entry()
> function as I already do it for the JAZZ hardware (arch/mips/jazz/setup.c).

People should consider that TLB entries are a scarce resource.  Wiring them
can seriously impact performance.  (Which reminds me of the lock warning
bit in the 68851 - Moto people we seriously assuming somebody could wire all
ATC (that is TLB in Moto slang) entries ...)

Our current 32 bit page table structure is good for mapping everything in
the lowest 4gb of physical address space.  Things outside of this area are
the only things which will need to be mapped by some other mean.  We've
so far used wired entries which in most cases they're a bad idea for the
above mentioned reason.  Since loading and flushing a single TLB entry is
a quite cheap thing on MIPS parts of the kernel could do things like

        struct wired {
                caddr_t physical;
                caddr_t virtual;
                u32     mask;
                u32     usage;
                u8 entry;
        } gfx_entry = {
                GFX_PBASE,
                GFX_VBASE,
                PM_4M
        };

        entry = load_wired_entry(&gfx_entry);

        ... /* Munge mapped address space */

        flush_wired_entry(entry);

Applied to the G364 drivers (which as of now is still MIPS specific anyway)
this means that we'll avoid TLB trashing in the case of scrolling and have
the full TLB available for userland.

The second alternative which can be used where it's ok to disable interrupts
is to access memory using one of the XKPHYS segments.

  Ralf

<Prev in Thread] Current Thread [Next in Thread>