From: Andi Kleen <ak@suse.de>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Andi Kleen <ak@suse.de>, Andrea Arcangeli <andrea@suse.de>,
Benjamin LaHaise <bcrl@redhat.com>,
linux-kernel@vger.kernel.org,
Richard Brunner <richard.brunner@amd.com>,
mark.langsdorf@amd.com
Subject: Re: another new version of pageattr caching conflict fix for 2.4
Date: Sun, 16 Jun 2002 18:48:01 +0200 [thread overview]
Message-ID: <20020616184801.A15227@wotan.suse.de> (raw)
In-Reply-To: <m17kkzv8lq.fsf@frodo.biederman.org>
On Sun, Jun 16, 2002 at 04:08:49AM -0600, Eric W. Biederman wrote:
> Andi Kleen <ak@suse.de> writes:
>
> > On Fri, Jun 14, 2002 at 12:31:33PM -0500, Andrea Arcangeli wrote:
> > > On Fri, Jun 14, 2002 at 06:13:28PM +0200, Andi Kleen wrote:
> > > > +#ifdef CONFIG_HIGHMEM
> > > > + /* Hopefully not be mapped anywhere else. */
> > > > + if (page >= highmem_start_page)
> > > > + return 0;
> > > > +#endif
> > >
> > > there's no hope here. If you don't want to code it right because nobody
> > > is exercising such path and flush both any per-cpu kmap-atomic slot and
> > > the page->virtual, please place a BUG() there or any more graceful
> > > failure notification.
> >
> > Ok done.
> >
> > I also removed the DRM change because it was buggy. I'm not 100% yet
> > it is even a problem. Needs more investigation.
> >
> > BTW there is another corner case that was overlooked:
> > mmap of /dev/kmem, /proc/kcore, /dev/mem. To handle this correctly
> > the mmap functions would need to always walk the kernel page table
> > and force the correct caching attribute in the user mapping.
> > But what to do when there is already an existing mapping to user space?
>
> Don't allow the change_page_attr if page->count > 1 is an easy solution,
> and it probably suffices. Beyond that anything mmaped can be found
Erm, what should it do then? Fail the AGP map ?
> by walking into the backing address space, and then through the
> vm_area_structs found with i_mmap && i_mmap_shared. Of course the
> vm_area_structs may possibly need to break because of the multiple
> page protections.
I know that, but it seems rather racy expensive and complicated.
>
> > > > +int change_page_attr(struct page *page, int numpages, pgprot_t prot)
> > > > +{
> > >
> > > this API not the best, again I would recommend something on these lines:
> >
> > Hmm: i would really prefer to do the allocation in the caller.
> > If you want your API you could do just do it as a simple wrapper to
> > the existing function (with the new numpages it would be even
> > efficient)
>
> Using pgprot_t to convey the cacheablity of a page appears to be an
> abuse. At the very least we need a PAGE_CACHE_MASK, to find just
> the cacheability attributes.
change_page_attr is more than just cachability. You can use it e.g.
to write protect kernel pages not (if you wanted to do that for some
reason)
The current one is fine with PAGE_KERNEL_NOCACHE, you could eventually
define PAGE_KERNEL_WRITECOMBINING too if you wanted.
> And we should really consider using the other cacheability page
> attributes on x86, not just cache enable/disable. Using just mtrr's
> is limiting in that you don't always have enough of them, and that
> sometimes valid ram is mapped uncacheable, because of the mtrr
> alignment restrictions.
Exposing it to user space in a more general way is tricky because
you need to avoid aliases with different caching attributes and also
change the kernel map as needed (would be surely an interesting
project, but definitely requires more work)
You can already use WT. DRM does that already in fact.
Newer Intel/AMD CPUs allow to set up a more general PAT table with some
more modis, but to be honest I don't see the point in most of them,
except perhaps WC. Unfortunately there is no 'weak ordering like alpha/sparc64'
mode that could be used in the kernel :-)
-Andi
next prev parent reply other threads:[~2002-06-16 16:48 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-06-13 20:15 New " Andi Kleen
2002-06-14 1:03 ` Benjamin LaHaise
2002-06-14 1:24 ` Andi Kleen
2002-06-14 1:37 ` Benjamin LaHaise
2002-06-14 4:00 ` Andrea Arcangeli
2002-06-14 4:17 ` Benjamin LaHaise
2002-06-14 4:27 ` Andi Kleen
2002-06-14 15:28 ` Benjamin LaHaise
2002-06-14 16:13 ` Andi Kleen
2002-06-14 17:31 ` Andrea Arcangeli
2002-06-14 18:05 ` another new " Andi Kleen
2002-06-16 10:08 ` Eric W. Biederman
2002-06-16 16:48 ` Andi Kleen [this message]
2002-06-16 17:50 ` Eric W. Biederman
2002-06-16 18:43 ` Andi Kleen
2002-06-16 19:56 ` Eric W. Biederman
2002-06-16 23:37 ` Andi Kleen
2002-06-17 0:08 ` Albert D. Cahalan
2002-06-17 4:06 ` Eric W. Biederman
2002-06-17 6:53 ` Andrea Arcangeli
2002-06-17 15:46 ` Eric W. Biederman
2002-06-14 4:28 ` New " Andrea Arcangeli
2002-06-17 21:07 another new " richard.brunner
2002-06-18 17:34 ` Eric W. Biederman
2002-06-17 21:13 richard.brunner
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=20020616184801.A15227@wotan.suse.de \
--to=ak@suse.de \
--cc=andrea@suse.de \
--cc=bcrl@redhat.com \
--cc=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.langsdorf@amd.com \
--cc=richard.brunner@amd.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
all inboxes | Powered by JetHome®