|   | 
      | 
  
  
      | 
      | 
  
 
     | 
    | 
  
  
     | 
    | 
  
  
    |   | 
      | 
  
  
    | 
         
xen-devel
[Xen-devel] Re: Vanilla Linux and has_foreign_mapping
 
Michael Abd-El-Malek wrote:
 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.
 
 I was hoping to avoid having to introduce that flag, but I have to admit 
I haven't given it much analysis.  How are you using it?
 
  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
 
Which line is that?
   J
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 
 |   
 
 | 
    | 
  
  
    |   | 
    |