All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ralf Baechle <ralf@linux-mips.org>
To: "Robert P. J. Day" <rpjday@mindspring.com>
Cc: Satyam Sharma <satyam.sharma@gmail.com>,
	Nick Piggin <nickpiggin@yahoo.com.au>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: why does the macro "ZERO_PAGE" take an argument?
Date: Thu, 7 Jun 2007 17:37:31 +0100	[thread overview]
Message-ID: <20070607163731.GB30044@linux-mips.org> (raw)
In-Reply-To: <Pine.LNX.4.64.0706070750540.16051@localhost.localdomain>

On Thu, Jun 07, 2007 at 07:53:08AM -0400, Robert P. J. Day wrote:

> > > > MIPS?
> > >
> > > argh. that would be the *one* definition whose output got chopped
> > > because of line continuation, and it would be only one that actually
> > > uses the argument:
> > >
> > > #define ZERO_PAGE(vaddr) \
> > >         (virt_to_page((void *)(empty_zero_page + (((unsigned long)(vaddr)) &
> > > zero_page_mask))))
> > >
> > >
> > > but it still leaves the question -- if ZERO_PAGE is meant to represent
> > > a single, global shared page that is always zero, why would it *ever*
> > > need to take an argument?  and what's so special about MIPS that it
> > > differs from all the rest?
> >
> > The comment above empty_zero_page and zero_page_mask
> > declarations at arch/mips/mm/init.c:508 sheds light on this ...
> 
> well, it *sort of* does.  at line 64 of that file:
> 
> /*
>  * We have up to 8 empty zeroed pages so we can map one of the right colour
>  * when needed.  This is necessary only on R4000 / R4400 SC and MC versions
>  * where we have to avoid VCED / VECI exceptions for good performance at
>  * any price.  Since page is never written to after the initialization we
>  * don't have to care about aliases on other CPUs.
>  */
> 
> although it's not clear where in the source tree are the invocations
> that would actually make a difference to a MIPS system, which is why
> i've CC'ed ralf on this.  i'm sure he can clear this up. :-)

Cache aliases.  When the same page of physical memory is mapped twice to
user space, let's say at address addr and addr + PAGE_SIZE this is normally
harmless although wasteful on processors with virtually indexed caches as
long as the page is mapped read-only such as in case of ZERO_PAGE.

If the same thing happens with a writable page there is the chance of
severe data corruption.  Some members of the R4000 family are now trying
to be helpful by throwing the kernel a "virtual coherency" exception.  The
bad news about this exception is there might be thousands (the theoretical
worst case would be millions) of it in a single second, so servicing can be
very expensive.  For the ZERO page this can be avoided by using several
pages mapped in a way such that their addresses don't conflict.

  Ralf

  reply	other threads:[~2007-06-07 17:44 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-07 11:17 why does the macro "ZERO_PAGE" take an argument? Robert P. J. Day
2007-06-07 11:29 ` Nick Piggin
2007-06-07 11:34   ` Robert P. J. Day
2007-06-07 11:39     ` Satyam Sharma
2007-06-07 11:53       ` Robert P. J. Day
2007-06-07 16:37         ` Ralf Baechle [this message]
2007-06-07 18:04           ` H. Peter Anvin
2007-06-07 17:32         ` H. Peter Anvin
2007-06-07 19:29           ` William Lee Irwin III
2007-06-07 21:16             ` H. Peter Anvin
2007-06-08  7:25               ` Robert P. J. Day
2007-06-09  0:49                 ` H. Peter Anvin
2007-06-12  2:18               ` Nick Piggin

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=20070607163731.GB30044@linux-mips.org \
    --to=ralf@linux-mips.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nickpiggin@yahoo.com.au \
    --cc=rpjday@mindspring.com \
    --cc=satyam.sharma@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.