From: Hugh Dickins <hugh@veritas.com>
To: Casey Leedom <casey_leedom@yahoo.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: ZERO_PAGE() vs. loadable modules in Redhat 4.4 i386 kernels ...
Date: Wed, 27 Jun 2007 20:02:41 +0100 (BST) [thread overview]
Message-ID: <Pine.LNX.4.64.0706271956430.30942@blonde.wat.veritas.com> (raw)
In-Reply-To: <20070627181208.98426.qmail@web30504.mail.mud.yahoo.com>
On Wed, 27 Jun 2007, Casey Leedom wrote:
>
> I'm working on a driver that does a get_user_pages() for a DMA write. We
> have a timeout on the DMA completion where we mark the pages as COW and return
> to the application so it can potentially generate more data in order to
> increase throughput, etc. The problem is that when we traverse the
> PGT/PUD/PMD/PTE hierarchy to mark the pages, we sometime fault out when the PUD
> covering [0x80000000, 0xc0000000) comes out as zero when that entire region is
> covered by a single large malloc()'ed buffer. This happens because
> get_user_pages() returns a reference to empty_zero_page without passing through
> the fault path when a page is backed by anonymous memory. I put a check this
> in my driver using ZERO_PAGE() and everything is great. Except that it doesn't
> work on 32-bit i386 Redhat 4.4 kernels because the symbol for empty_zero_page
> is not only not exported via EXPORT_SYMBOL() but has also somehow been stripped
> from the kallsyms table. This means that I can't check for the ZERO_PAGE() in
> a module.
>
> Can someone suggest a better way of doing this? Either by some subterfuge to
> get empty_zero_page or perhaps by asking the kernel to instantiate the
> PGT/PUD/PMD/PTE hierarchy for a page? I'm sort of stuck here. Thanks for any
> help and/or advice you can offer.
I can't speak for Red Hat 4.4; but in general, you should be passing the
write flag to get_user_pages if you're going to modify the content of
those pages, which will then allocate the hierarchy needed and break
COW where necessary. If that doesn't suit you (e.g. it's supposed to
be a readonly area in userspace), then you proably shouldn't be using
get_user_pages at all, but letting userspace mmap your driver pages
into its space instead. Definitely don't play empty_zero_page games.
Hugh
next prev parent reply other threads:[~2007-06-27 19:03 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-27 18:12 Casey Leedom
2007-06-27 18:39 ` Arjan van de Ven
2007-06-27 18:53 ` Casey Leedom
2007-06-27 20:18 ` Arjan van de Ven
2007-06-27 21:40 ` Casey Leedom
2007-06-27 22:43 ` Casey Leedom
2007-06-27 19:02 ` Hugh Dickins [this message]
2007-06-27 19:13 ` Casey Leedom
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=Pine.LNX.4.64.0706271956430.30942@blonde.wat.veritas.com \
--to=hugh@veritas.com \
--cc=casey_leedom@yahoo.com \
--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
all inboxes | Powered by JetHome®