All of lore.kernel.org
 help / color / mirror / Atom feed
* Vanilla Linux and has_foreign_mapping
@ 2008-04-20 21:19 Michael Abd-El-Malek
  2008-04-21 11:46 ` Jeremy Fitzhardinge
  2008-04-21 17:52 ` Keir Fraser
  0 siblings, 2 replies; 18+ messages in thread
From: Michael Abd-El-Malek @ 2008-04-20 21:19 UTC (permalink / raw)
  To: xen-devel; +Cc: Mark McLoughlin, Jeremy Fitzhardinge, Eduardo Habkost

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

^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2008-04-30 16:31 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

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.