linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Nick Piggin <npiggin@suse.de>
Cc: Thomas Hellstrom <thomas@tungstengraphics.com>,
	Andrew Morton <akpm@osdl.org>,
	Linux Memory Management <linux-mm@kvack.org>,
	Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: [patch 3/3] mm: fault handler to replace nopage and populate
Date: Tue, 10 Oct 2006 06:50:36 +1000	[thread overview]
Message-ID: <1160427036.7752.13.camel@localhost.localdomain> (raw)
In-Reply-To: <20061009135254.GA19784@wotan.suse.de>

On Mon, 2006-10-09 at 15:52 +0200, Nick Piggin wrote:
> On Mon, Oct 09, 2006 at 03:38:10PM +0200, Thomas Hellstrom wrote:
> > Nick Piggin wrote:
> > >On Mon, Oct 09, 2006 at 10:07:50PM +1000, Benjamin Herrenschmidt wrote:
> > >
> > >Ok I guess that would work. I was kind of thinking that one needs to
> > >hold the mmap_sem for writing when changing the flags, but so long
> > >as everyone *else* does, then I guess you can get exclusion from just
> > >the read lock. And your per-object mutex would prevent concurrent
> > >nopages from modifying it.
> > 
> > Wouldn't that confuse concurrent readers?
> 
> I think it should be safe so long as the entire mapping has been
> unmapped. After that, there is no read path that should care about
> that flag bit. So long as it is well commented (and maybe done via
> a helper in mm/memory.c), I can't yet see a problem with it.

Should be fine then. Migration does

	- take object mutex
	- unmap_mapping_range() -> remove all PTEs for all mappings to
          that object
	- do whatever is needed for actual migration (copy data etc...)
	- release object mutex

And nopage() does

	- take object mutex
	- check object flags consistency, possibly update VMA
          (also possibly updaet VMA pgprot too while at it for cacheable
           vs. non cacheable, though it's not strictly necessary if we
           use the helper)
	- if object is in ram
		- get struct page
		- drop mutex
		- return struct page
	- else
		- get pfn
		- use helper to install PTE
		- drop mutex
		- return NOPAGE_REFAULT

We don't strictly have to return struct page when the object is in ram
but I feel like it's better for accounting.

Now there is still the question of where that RAM comes from, how it
gets accounted, and wether there is any way we can make it swappable
(which complicates things but would be nice as objects can be fairly big
and we may end up using a significant amount of physical memory with the
graphic objects).

> > Could it be an option to make it safe for the fault handler to 
> > temporarily drop the mmap_sem read lock given that some conditions TBD 
> > are met?
> > In that case it can retake the mmap_sem write lock, do the VMA flags 
> > modifications, downgrade and do the pte modifications using a helper, or 
> > even use remap_pfn_range() during the time the write lock is held?
> 
> When you drop and retake the mmap_sem, you need to start again from
> find_vma. At which point you technically probably want to start again
> from the architecture specfic fault code. It sounds difficult but I
> won't say it can't be done.

I can be done with returning NOPAGE_REFAULT but as you said, I don't
think it's necessary.

Cheers,
Ben.


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2006-10-09 20:50 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-07 13:05 [rfc] 2.6.19-rc1: vm stuff Nick Piggin
2006-10-07 13:05 ` [patch 1/3] mm: arch_free_page fix Nick Piggin
2006-10-07 13:05 ` [patch 2/3] mm: locks_freed fix Nick Piggin
2006-10-07 13:06 ` [patch 3/3] mm: add arch_alloc_page Nick Piggin
2006-10-07 20:43   ` Andrew Morton
2006-10-08  1:39     ` Nick Piggin
2006-10-11 14:48       ` Martin Schwidefsky
2006-10-11 14:56         ` Nick Piggin
2006-10-11 15:07           ` Martin Schwidefsky
2006-10-07 13:06 ` [patch 1/3] mm: fault vs invalidate/truncate check Nick Piggin
2006-10-07 13:06 ` [patch 2/3] mm: fault vs invalidate/truncate race fix Nick Piggin
2006-10-07 20:43   ` Andrew Morton
2006-10-07 20:44   ` Andrew Morton
2006-10-08  2:05     ` Nick Piggin
2006-10-07 13:06 ` [patch 3/3] mm: fault handler to replace nopage and populate Nick Piggin
2006-10-07 15:14   ` Jeff Garzik
2006-10-08  2:17     ` Nick Piggin
2006-10-07 20:44   ` Andrew Morton
2006-10-08  2:12     ` Nick Piggin
2006-10-08 23:46     ` Benjamin Herrenschmidt
2006-10-09 10:26       ` Nick Piggin
2006-10-09 10:50         ` Benjamin Herrenschmidt
2006-10-09 11:00           ` Nick Piggin
2006-10-09 11:10             ` Benjamin Herrenschmidt
2006-10-09 11:19               ` Nick Piggin
2006-10-09 11:32                 ` Benjamin Herrenschmidt
2006-10-09 11:45                   ` Nick Piggin
2006-10-09 11:49                     ` Benjamin Herrenschmidt
2006-10-09 11:58                       ` Nick Piggin
2006-10-09 12:07                         ` Benjamin Herrenschmidt
2006-10-09 12:14                           ` Nick Piggin
2006-10-09 13:38                             ` Thomas Hellstrom
2006-10-09 13:52                               ` Nick Piggin
2006-10-09 20:50                                 ` Benjamin Herrenschmidt [this message]
2006-10-10  6:11                                   ` Thomas Hellström
2006-10-10  7:55                                     ` Benjamin Herrenschmidt
2006-10-10  8:39                                       ` Thomas Hellstrom
2006-10-09 20:45                               ` Benjamin Herrenschmidt
2006-10-09 12:09                         ` Nick Piggin
2006-10-09 12:11                           ` Benjamin Herrenschmidt
2006-10-10 12:10   ` Christoph Hellwig
2006-10-10 12:13     ` Nick Piggin
2006-10-10 17:52       ` Andrew Morton
2006-10-11  0:43         ` SPAM: " Nick Piggin
     [not found]   ` <5c77e7070610120456t1bdaa95cre611080c9c953582@mail.gmail.com>
2006-10-12 12:07     ` Nick Piggin
2006-10-14 13:28       ` Ingo Oeser
2006-10-15  7:54         ` Nick Piggin
2006-10-24 21:31   ` Dave Airlie
2006-10-26 11:09     ` Nick Piggin

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=1160427036.7752.13.camel@localhost.localdomain \
    --to=benh@kernel.crashing.org \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=npiggin@suse.de \
    --cc=thomas@tungstengraphics.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