From: Michael Abd-El-Malek <mabdelmalek@cmu.edu>
To: xen-devel <xen-devel@lists.xensource.com>
Cc: Mark McLoughlin <markmc@redhat.com>,
Jeremy Fitzhardinge <jeremy@goop.org>,
Eduardo Habkost <ehabkost@redhat.com>
Subject: Vanilla Linux and has_foreign_mapping
Date: Sun, 20 Apr 2008 17:19:20 -0400 [thread overview]
Message-ID: <480BB358.3070508@cmu.edu> (raw)
Hello,
I'm trying to add support to Linux 2.6.25 for the "has_foreign_mappings" MMU
context flag. Xen's Linux 2.6.18 tree uses this flag, so that page tables are
properly disposed of when an application exits when it has foreign mappings. See:
http://lists.xensource.com/archives/html/xen-devel/2006-08/msg00038.html
Here is my attempt:
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 2a054ef..3e51897 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -633,8 +633,13 @@ void xen_exit_mmap(struct mm_struct *mm)
spin_lock(&mm->page_table_lock);
/* pgd may not be pinned in the error exit path of execve */
- if (PagePinned(virt_to_page(mm->pgd)))
- xen_pgd_unpin(mm->pgd);
+ if (PagePinned(virt_to_page(mm->pgd))) {
+ if (mm->context.has_foreign_mappings) {
+ printk("%s: because of has_foreign_mappings, delaying unpinning\n",
__FUNCTION__);
+ } else {
+ xen_pgd_unpin(mm->pgd);
+ }
+ }
spin_unlock(&mm->page_table_lock);
}
diff --git a/include/asm-x86/mmu.h b/include/asm-x86/mmu.h
index efa962c..7194698 100644
--- a/include/asm-x86/mmu.h
+++ b/include/asm-x86/mmu.h
@@ -18,6 +18,9 @@ typedef struct {
int size;
struct mutex lock;
void *vdso;
+#ifdef CONFIG_XEN
+ int has_foreign_mappings;
+#endif
} mm_context_t;
#ifdef CONFIG_SMP
Unfortunately, I got the following kernel crash on process exit:
BUG: unable to handle kernel paging request at ebdae008
IP: [<c01157f9>] pgd_mop_up_pmds+0x6a/0xd8
*pdpt = 000000007f494027
Oops: 0003 [#1] PREEMPT SMP
Modules linked in: efsvm(F) nfs lockd sunrpc dm_snapshot dm_mirror dm_mod
Pid: 5565, comm: a.out Tainted: GF (2.6.25 #9)
EIP: 0061:[<c01157f9>] EFLAGS: 00010246 CPU: 0
EIP is at pgd_mop_up_pmds+0x6a/0xd8
...
Call Trace:
[<c01158bf>] pgd_free+0x8/0x19
[<c011fca0>] __mmdrop+0x16/0x2a
[<c01244bc>] do_exit+0x1b3/0x569
[<c01248d5>] do_group_exit+0x63/0x7a
[<c0107066>] syscall_call+0x7/0xb
Has anyone else implemented this functionality in the mainline Linux tree? Any
thoughts?
Thanks,
Mike
next reply other threads:[~2008-04-20 21:19 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-20 21:19 Michael Abd-El-Malek [this message]
2008-04-21 11:46 ` Vanilla Linux and has_foreign_mapping 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
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=480BB358.3070508@cmu.edu \
--to=mabdelmalek@cmu.edu \
--cc=ehabkost@redhat.com \
--cc=jeremy@goop.org \
--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.