WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] minios: do not pin page tables [was: Really need

To: Jeremy Fitzhardinge <jeremy@xxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] minios: do not pin page tables [was: Really need to pin page tables?]
From: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
Date: Tue, 27 May 2008 11:58:36 +0100
Cc: Xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Tue, 27 May 2008 03:59:05 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <483BE73D.3090403@xxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Mail-followup-to: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>, Jeremy Fitzhardinge <jeremy@xxxxxxxx>, Xen-devel@xxxxxxxxxxxxxxxxxxx
References: <20080527101704.GN4335@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <483BE73D.3090403@xxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.12-2006-07-14
Jeremy Fitzhardinge, le Tue 27 May 2008 11:49:33 +0100, a écrit :
> Samuel Thibault wrote:
> >Hello,
> >
> >In extras/mini-os/arch/x86/mm.c:new_pt_frame, Mini-OS pins its L1,
> >L2, and L3 page tables.  Does that really make a difference from the
> >Hypervisor point of view?  I mean, once L4 is pinned, pointing to these,
> >and thus their content has been checked, is there any performance
> >difference?
> >  
> 
> Shouldn't be.  Pinning an L4 implicitly pins everything else below it.  
> The only reason to pin the leafy parts of a pagetable is if you want to 
> play games with incrementally pinning the pagetable, or if you want to 
> pull them apart and rearrange the pieces for some reason.  For example, 
> I do incremental pagetable pins in the Xen/pvops kernel to limit the 
> number of pte locks I need to hold at any one time.

Ok, that's what I had in mind indeed.  Here is a patch to drop that from
Mini-OS.

Samuel



minios: We do not need to pin the page tables, as they implicitely get
pinned when we point the permanent page directory to them.

Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>

diff -r 2141ac752316 extras/mini-os/arch/x86/mm.c
--- a/extras/mini-os/arch/x86/mm.c      Fri May 23 15:43:32 2008 +0100
+++ b/extras/mini-os/arch/x86/mm.c      Tue May 27 11:51:43 2008 +0100
@@ -59,11 +59,10 @@
 {   
     pgentry_t *tab = (pgentry_t *)start_info.pt_base;
     unsigned long pt_page = (unsigned long)pfn_to_virt(*pt_pfn); 
-    unsigned long prot_e, prot_t, pincmd;
+    unsigned long prot_e, prot_t;
     mmu_update_t mmu_updates[1];
-    struct mmuext_op pin_request;
     
-    prot_e = prot_t = pincmd = 0;
+    prot_e = prot_t = 0;
     DEBUG("Allocating new L%d pt frame for pt_pfn=%lx, "
            "prev_l_mfn=%lx, offset=%lx", 
            level, *pt_pfn, prev_l_mfn, offset);
@@ -77,18 +76,15 @@
     case L1_FRAME:
          prot_e = L1_PROT;
          prot_t = L2_PROT;
-         pincmd = MMUEXT_PIN_L1_TABLE;
          break;
     case L2_FRAME:
          prot_e = L2_PROT;
          prot_t = L3_PROT;
-         pincmd = MMUEXT_PIN_L2_TABLE;
          break;
 #if defined(__x86_64__)
     case L3_FRAME:
          prot_e = L3_PROT;
          prot_t = L4_PROT;
-         pincmd = MMUEXT_PIN_L3_TABLE;
          break;
 #endif
     default:
@@ -113,15 +109,6 @@
          do_exit();
     }
                         
-    /* Pin the page to provide correct protection */
-    pin_request.cmd = pincmd;
-    pin_request.arg1.mfn = pfn_to_mfn(*pt_pfn);
-    if(HYPERVISOR_mmuext_op(&pin_request, 1, NULL, DOMID_SELF) < 0)
-    {
-        printk("ERROR: pinning failed\n");
-        do_exit();
-    }
-
     /* Now fill the new page table page with entries.
        Update the page directory as well. */
     mmu_updates[0].ptr = ((pgentry_t)prev_l_mfn << PAGE_SHIFT) + 
sizeof(pgentry_t) * offset;

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>