From: David Howells <dhowells@redhat.com>
To: Andrew Morton <akpm@osdl.org>
Cc: David Woodhouse <dwmw2@infradead.org>,
hch@infradead.org, torvalds@osdl.org, davidm@snapgear.com,
linux-kernel@vger.kernel.org, uclinux-dev@uclinux.org,
Hiroyuki KAMEZAWA <kamezawa.hiroyu@jp.fujitsu.com>
Subject: Re: [PATCH] VM routine fixes
Date: Thu, 11 Nov 2004 11:29:36 +0000 [thread overview]
Message-ID: <24698.1100172576@redhat.com> (raw)
In-Reply-To: <20041110182659.3f8138d6.akpm@osdl.org>
> > On Wed, 2004-11-10 at 11:01 -0800, Andrew Morton wrote:
> > > Why _does_ !CONFIG_MMU futz around with page counts in such weird ways
> > > anyway? Why does it have requirements for higher-order pages which
> > > differ from !CONFIG_MMU?
The problem is ptrace() and various /proc/<pid/ files; or more properly, the
problem is access_process_vm() and suchlike.
When one process goes rooting around in another process's memory map, it
increments the refcount on the page it is looking at to stop it going away.
The problem on uClinux is that a process can have multipage chunks mapped into
userspace, and access_process_vm() can look at a page in the middle of such a
span.
Without this change, bad_page() is called when access_process_vm() calls a
put_page() on a page in the middle because its refcount would say it's no
longer in use and then put_page() would then attempt to free the page.
access_process_vm() guards against the target page going away due to the
target process exiting at an inconvenient moment by pinning the target mm and
holding its semaphore.
> I assume the CONFIG_MMU logic assumes that it's legal to physically free a
> single page from inside the middle of a higher-order page.
No, it isn't. munmap() is prohibited from releasing anything other than a
complete mmap() on uClinux.
> See, if we enable the compound page logic if !CONFIG_MMU then all this
> stuff just goes away and the page refcounting is controlled purely by the
> head page. A get_page() or a put_page() against any of the constituent
> pages will manipulate the head page's refcount.
That's true to a point, and probably a reasonable idea, assuming that compound
pages aren't limited in size to TLB-specific values. If they are, then it
makes no real difference.
> > > If someone could explain the reasoning behind the current code, and the
> > > FRV enhancements then perhaps we could work something out.
> >
> > I think these parts aren't FRV-specific;
They aren't FRV specific. They were uClinux enhancements before I got my hands
on it. They are even in your -mm3 kernel. All I did was to make the freeing
case work properly.
> > they're the fixes required to do proper shared readable mmap with
> > !CONFIG_MMU.
That's not 100% true. They're required to do multipage mmap with !MMU. As I've
said they predate my involvement with the nommu stuff in 2.6 and 2.4 both.
David
next prev parent reply other threads:[~2004-11-11 11:31 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-08 14:32 [PATCH] VM routine fixes dhowells
2004-11-09 12:55 ` Christoph Hellwig
2004-11-09 13:53 ` David Howells
2004-11-09 14:01 ` Christoph Hellwig
2004-11-10 13:37 ` David Howells
2004-11-10 19:01 ` Andrew Morton
2004-11-11 1:17 ` David Woodhouse
2004-11-11 2:26 ` Andrew Morton
2004-11-11 11:29 ` David Howells [this message]
2004-11-11 11:43 ` Andrew Morton
2004-11-11 12:03 ` David Howells
2004-11-11 22:31 ` Andrew Morton
2004-11-12 10:33 ` David Howells
2004-11-12 10:38 ` Andrew Morton
2004-11-12 11:05 ` David Howells
2004-11-14 5:07 ` Linus Torvalds
2004-11-15 13:14 ` David Howells
2004-11-15 15:35 ` Linus Torvalds
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=24698.1100172576@redhat.com \
--to=dhowells@redhat.com \
--cc=akpm@osdl.org \
--cc=davidm@snapgear.com \
--cc=dwmw2@infradead.org \
--cc=hch@infradead.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
--cc=uclinux-dev@uclinux.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;
as well as URLs for NNTP newsgroup(s).