From: "Thomas Hellström" <thomas@tungstengraphics.com>
To: Linux kernel mailing list <linux-kernel@vger.kernel.org>
Cc: dri-devel <dri-devel@lists.sourceforge.net>
Subject: [RFC] Use kernel_map_pages() to avoid illegal page aliasing.
Date: Sun, 06 Apr 2008 16:12:20 +0200 [thread overview]
Message-ID: <47F8DA44.3070008@tungstengraphics.com> (raw)
Hi!
For a long time now, the agpgart module has been creating illegal
mapping aliases, since the user-space mappings of the pages in the gart
are usually write-combined, whereas the kernel linear mapping of the
same pages are uc for x86, and may even be wb for some architectures.
In order to fix this, and to facilitate fast insertion and removal of
pages into / from the gart I'd like to disable all default kernel
mappings for those pages, which would in effect, make them behave as
highmem pages from our point of view.
As prevously discussed, the x86 set_memory_xxx() interface wasn't
suitable for this, since it handles only a single mapping, and the pages
may have more than one default kernel mapping.
But it turns out that there is an interface that does exactly this.
kernel_map_pages(). But it is only available with
CONFIG_DEBUG_PAGEALLOC. I'd like to make that function exported by
default, but with some minor alterations as the original functions does
some debug checks as well, that aren't desirable for the purpose
mentioned above:
As with highmem pages, if the driver sets up user-space mappings with
non-standard caching attributes, those mappings need to be killed at
suspend time, since the suspend code would otherwise create temporary
incompatible mappings.
On x86 this all would probably work fine. Does kernel_map_pages() work
identically on other architectures? Specifically: Will it always work
with a 4K page granularity?
Thanks,
Thomas
/*
* Enable / disable all default kernel mappings of a number of contigous
pages.
* This is an alias for kernel_map_pages() but with debug checks removed.
*/
int kernel_default_map_pages(struct page *page, int numpages, int enable);
EXPORT_SYMBOL(kernel_default_map_pages);
/*
* Enable / disable all default kernel mappings of a number of single pages.
*/
int kernel_default_map_pagearray(struct page **pages, int numpages, int
enable);
EXPORT_SYMBOL(kernel_default_map_pagearray);
next reply other threads:[~2008-04-06 14:12 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-06 14:12 Thomas Hellström [this message]
2008-04-06 19:01 ` [RFC] Use kernel_map_pages() to avoid illegal page aliasing Jeremy Fitzhardinge
2008-04-06 19:13 ` Thomas Hellström
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=47F8DA44.3070008@tungstengraphics.com \
--to=thomas@tungstengraphics.com \
--cc=dri-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
/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