From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Roland Dreier <rdreier@cisco.com>
Cc: Eli Cohen <eli@mellanox.co.il>,
Andrew Morton <akpm@linux-foundation.org>,
Rusty Russell <rusty@rustcorp.com.au>,
linux-kernel@vger.kernel.org, linuxppc-dev@ozlabs.org
Subject: Re: FW: [PATCH] powerpc/mm: Export HPAGE_SHIFT
Date: Thu, 05 Feb 2009 10:55:29 +1100 [thread overview]
Message-ID: <1233791729.4612.28.camel@pasglop> (raw)
In-Reply-To: <adad4dym2zp.fsf@cisco.com>
> get_user_pages() also gives us the vma back, and we can see from
> is_vm_hugetlb_page() (-- BTW can I just say that a function
> is_xxx_page() that operates on vmas is horribly misnamed --) that these
> pages all come from a hugetlb mapping, but figuring out the size of that
> mapping is I guess a challenge.
Note that g_u_p() has all sort of shortcommings... we were discussing
some of that recently due to bugs reported from the field.
The problem mostly is that you cannot guarantee that the physical page
will remain mapped to that virtual address in the process. For example,
if your code is part of some library used by an application, and that
application somewhere does a fork/exec (for example, a system() call to
run a shell helper), copy-on-write will hit, and you may end up with
the child process getting the original physical page and the original
process getting the copy...
So your HW will still DMA to a valid page (ie, it's count will have
been incremented) but it's not going to be the one the application
uses any more.
There are similar issues that can be cause, afaik, by madvise, etc...
We've been discussing that at KS with various people, Linus says g_u_p()
sucks, don't do that :-) Most of the time, the other approach should be
used, ie, the driver allocates memory, and userspace mmap's it, in which
case you get access to the VMA to set flags such as don't copy on fork.
An option possibly would be to make fork() pre-COW pages with an
elevated count to ensure that at least the original process is the one
to keep the original physical page... but that has other potential side
effects or performance issues.
A can of worms..
Cheers,
Ben.
next prev parent reply other threads:[~2009-02-04 23:56 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20090203164930.GA10101@mtls03>
2009-02-04 1:08 ` FW: [PATCH] powerpc/mm: Export HPAGE_SHIFT Roland Dreier
2009-02-04 1:50 ` Benjamin Herrenschmidt
2009-02-04 5:13 ` Andrew Morton
2009-02-04 5:31 ` Nick Piggin
2009-02-04 6:17 ` wli
2009-02-04 6:16 ` Roland Dreier
2009-02-04 6:26 ` Andrew Morton
2009-02-04 19:11 ` Roland Dreier
2009-02-04 21:00 ` wli
2009-02-04 21:31 ` Roland Dreier
2009-02-04 21:23 ` Andrew Morton
2009-02-04 23:55 ` Benjamin Herrenschmidt [this message]
2009-02-05 5:10 ` Roland Dreier
2009-02-05 5:24 ` Benjamin Herrenschmidt
2009-02-05 5:33 ` Roland Dreier
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=1233791729.4612.28.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=akpm@linux-foundation.org \
--cc=eli@mellanox.co.il \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=rdreier@cisco.com \
--cc=rusty@rustcorp.com.au \
/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;
as well as URLs for NNTP newsgroup(s).