From: Ralf Baechle <ralf@linux-mips.org>
To: Mike Uhler <uhler@mips.com>
Cc: Jun Sun <jsun@mvista.com>, linux-mips@linux-mips.org
Subject: Re: way selection bit for multi-way cache
Date: Thu, 10 Apr 2003 22:52:12 +0200 [thread overview]
Message-ID: <20030410225212.A3294@linux-mips.org> (raw)
In-Reply-To: <200304102028.h3AKSf211575@uhler-linux.mips.com>; from uhler@mips.com on Thu, Apr 10, 2003 at 01:28:41PM -0700
On Thu, Apr 10, 2003 at 01:28:41PM -0700, Mike Uhler wrote:
> > Yep, of the existing variations that was certainly the nicest. Only a
> > single function had to be taught about multi-way caches and that only
> > because it's a bit hard to flush caches for another process due to the
> > TLB translation required for the hit cacheops. Alternative schemes need
> > more support by the code.
>
> I'm not sure what you mean by TLB translations required for hit cacheops.
> If you mean the Index Writeback or Index Invalidate functions, note that
> you can (and should) use a kseg0 address to do this. This bypasses
> the TLB, while still giving you the index that you want. We simply
> OR the kseg0 base address into the index that we've calculated and
> use that as the argument to the CACHE instruction. There's actually
> words to this effect in the MIPS32/MIPS64 spec, but it is, perhaps,
> not clear enough.
Linux has a flush_cache_page() cache operation which is used to invalidate
a page given by a virtual user-space address. That page might be the
page of a current processor which is the easy case - it might also belong
to another process. In the later case the TLB would miss-translate
the virtual address because the translation in the TLB is actually for
the current process. So this is what we're doing then:
[...]
/*
* Do indexed flush, too much work to get the (possible) TLB refills
* to work correctly.
*
* Note: page is the physical address of the page to invalidate.
*/
page = (KSEG0 + (page & (dcache_size - 1)));
/*
* The following two flush operations have to flush the page from
* all cache ways!
*/
blast_dcache_page_indexed(page);
if (exec)
blast_icache_page_indexed(page);
[...]
This can be a rather expensive operation in particular for caches with
a high degree of associativity. The worst case would be something like
a page containing code for a processor with a 32k 8-way associative
caches where we'd have to flush the entire cache - costly overkill and
the refills might be even slower ...
Ralf
next prev parent reply other threads:[~2003-04-10 20:52 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-04-10 18:05 way selection bit for multi-way cache Jun Sun
2003-04-10 18:50 ` Mike Uhler
2003-04-10 18:55 ` Jun Sun
2003-04-10 19:24 ` Ralf Baechle
2003-04-10 19:37 ` Mike Uhler
2003-04-10 19:37 ` Mike Uhler
2003-04-10 20:09 ` Ralf Baechle
2003-04-10 20:28 ` Mike Uhler
2003-04-10 20:28 ` Mike Uhler
2003-04-10 20:52 ` Ralf Baechle [this message]
2003-04-11 6:33 ` Dominic Sweetman
2003-04-11 8:15 ` Kevin D. Kissell
2003-04-11 8:15 ` Kevin D. Kissell
2003-04-11 12:10 ` Ralf Baechle
2003-04-11 11:35 ` Ralf Baechle
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030410225212.A3294@linux-mips.org \
--to=ralf@linux-mips.org \
--cc=jsun@mvista.com \
--cc=linux-mips@linux-mips.org \
--cc=uhler@mips.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox