From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Michael Abd-El-Malek <mabdelmalek@cmu.edu>
Cc: Mark McLoughlin <markmc@redhat.com>,
xen-devel <xen-devel@lists.xensource.com>,
Andrea Arcangeli <andrea@qumranet.com>,
Eduardo Habkost <ehabkost@redhat.com>,
Keir Fraser <keir.fraser@eu.citrix.com>,
Christoph Lameter <clameter@sgi.com>
Subject: Re: Vanilla Linux and has_foreign_mapping
Date: Fri, 25 Apr 2008 15:33:38 -0700 [thread overview]
Message-ID: <48125C42.6030709@goop.org> (raw)
In-Reply-To: <48122378.2090802@cmu.edu>
Michael Abd-El-Malek wrote:
> How about we do the following:
>
> arch_exit_mmap_pre(mm);
>
> lru_add_drain();
> flush_cache_mm(mm);
> tlb = tlb_gather_mmu(mm, 1);
> /* Don't update_hiwater_rss(mm) here, do_exit already did */
> /* Use -1 here to ensure all VMAs in the mm are unmapped */
> end = unmap_vmas(&tlb, vma, 0, -1, &nr_accounted, NULL);
>
> arch_exit_mmap_post(mm);
>
> We'll reintroduce has_foreign_mappings. If has_foreign_mappings is
> _not_ set, then arch_exit_mmap_pre can early unpin the page tables and
> arch_exit_mmap_post will do nothing. If has_foreign_mappings is set,
> then arch_exist_mmap_pre won't do anything, and arch_exit_mmap_post
> will do the actual xen_exit_mmap call.
>
> What do you think?
I'm thinking along the lines of:
1. steal the "private" field in struct page for Xen pte pages
2. if we install a grant mapping in that page, allocate a secondary
page and point private to it. In that secondary page, keep an
array of grant handles corresponding to the grant mappings in the
pte page (non-grant mappings have an invalid handle).
3. In unpin_page, if we're unpinning a pte page with a non-null
private page, then walk the private page to tear down the grant
mappings, and free the private page, and unpin the pte page normally.
I like it because it 1) avoids the need for any core kernel hooks, and
2) decouples unpinning grant pages from the mechanism used to actually
map the grant pages, 2a) the metadata for granted pages is stored with
the pagetable (effectively), so the grant driver doesn't need to do
anything special to make it work. Also it means all the information to
pull down the mapping is available for normal unmap operations (ie, we
can do it in set_pte without needing a special zap_pte hook).
No doubt I'm overlooking something important. What is it?
I guess one concern is if the per-grant-mapping data is larger than a
pte, then the private "page" will either need to be larger than a page,
or more complex a structure than a simple array. The kernel and user
handles would be stored separately, since they'd have separate ptes
anyway. Looks like it will need to be a (domid, ref, handle) tuple,
which would be 10 bytes. Are refs and/or handles really 32-bit
quantities? Hm, though it looks like GNTTABOP_unmap_grant_ref only
uses the handle, so that's quite convenient.
Would this scheme work? Does it seem reasonable? Does it solve the
problem?
J
next prev parent reply other threads:[~2008-04-25 22:33 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-20 21:19 Vanilla Linux and has_foreign_mapping Michael Abd-El-Malek
2008-04-21 11:46 ` Jeremy Fitzhardinge
2008-04-21 16:36 ` Mark McLoughlin
2008-04-21 18:00 ` Michael Abd-El-Malek
2008-04-21 17:52 ` Keir Fraser
2008-04-21 18:10 ` Michael Abd-El-Malek
2008-04-21 18:17 ` Michael Abd-El-Malek
2008-04-21 18:30 ` Keir Fraser
2008-04-25 0:18 ` Jeremy Fitzhardinge
2008-04-25 6:01 ` Keir Fraser
2008-04-25 17:11 ` Michael Abd-El-Malek
2008-04-25 18:22 ` Jeremy Fitzhardinge
2008-04-25 18:31 ` Michael Abd-El-Malek
2008-04-25 22:33 ` Jeremy Fitzhardinge [this message]
2008-04-29 16:39 ` Michael Abd-El-Malek
2008-04-29 17:32 ` Jeremy Fitzhardinge
2008-04-30 16:31 ` Michael Abd-El-Malek
[not found] ` <20080425172416.GC23300@duo.random>
2008-04-26 0:14 ` Jeremy Fitzhardinge
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=48125C42.6030709@goop.org \
--to=jeremy@goop.org \
--cc=andrea@qumranet.com \
--cc=clameter@sgi.com \
--cc=ehabkost@redhat.com \
--cc=keir.fraser@eu.citrix.com \
--cc=mabdelmalek@cmu.edu \
--cc=markmc@redhat.com \
--cc=xen-devel@lists.xensource.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.