[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Re-arrange things in the domain builder a bit so as to make sure that



# HG changeset patch
# User sos22@xxxxxxxxxxxxxxxxxxxx
# Node ID 6411e42ae4973719fb6b48740e9f267e6b3fa808
# Parent  4cce50ba45208ff31c2addfe0a9a0ef9083e64a0
Re-arrange things in the domain builder a bit so as to make sure that
when we make a page below 4G in the domain, that gets reflected into
the M2P and P2M tables.

Signed-off-by: Steven Smith, sos22@xxxxxxxxx

diff -r 4cce50ba4520 -r 6411e42ae497 tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c      Sun Jan 29 09:55:28 2006
+++ b/tools/libxc/xc_linux_build.c      Mon Jan 30 11:53:33 2006
@@ -654,72 +654,6 @@
         }
     }
 
-    if ( (mmu = xc_init_mmu_updates(xc_handle, dom)) == NULL )
-        goto error_out;
-
-    /* Write the phys->machine and machine->phys table entries. */
-    physmap_pfn = (vphysmap_start - dsi.v_start) >> PAGE_SHIFT;
-    physmap = physmap_e = xc_map_foreign_range(
-        xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE,
-        page_array[physmap_pfn++]);
-
-    for ( count = 0; count < nr_pages; count++ )
-    {
-        if ( xc_add_mmu_update(
-            xc_handle, mmu,
-            ((uint64_t)page_array[count] << PAGE_SHIFT) | MMU_MACHPHYS_UPDATE,
-            count) )
-        {
-            fprintf(stderr,"m2p update failure p=%lx m=%lx\n",
-                    count, page_array[count]); 
-            munmap(physmap, PAGE_SIZE);
-            goto error_out;
-        }
-        *physmap_e++ = page_array[count];
-        if ( ((unsigned long)physmap_e & (PAGE_SIZE-1)) == 0 )
-        {
-            munmap(physmap, PAGE_SIZE);
-            physmap = physmap_e = xc_map_foreign_range(
-                xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE,
-                page_array[physmap_pfn++]);
-        }
-    }
-    munmap(physmap, PAGE_SIZE);
-
-    /* Send the page update requests down to the hypervisor. */
-    if ( xc_finish_mmu_updates(xc_handle, mmu) )
-        goto error_out;
-
-    if ( shadow_mode_enabled )
-    {
-        struct xen_reserved_phys_area xrpa;
-
-        /* Enable shadow translate mode */
-        if ( xc_shadow_control(xc_handle, dom,
-                               DOM0_SHADOW_CONTROL_OP_ENABLE_TRANSLATE,
-                               NULL, 0, NULL) < 0 )
-        {
-            PERROR("Could not enable translation mode");
-            goto error_out;
-        }
-
-        /* Find the shared info frame.  It's guaranteed to be at the
-           start of the PFN hole. */
-        xrpa.domid = dom;
-        xrpa.idx   = 0;
-        rc = xc_memory_op(xc_handle, XENMEM_reserved_phys_area, &xrpa);
-        if ( rc != 0 )
-        {
-            PERROR("Cannot find shared info pfn");
-            goto error_out;
-        }
-        guest_shared_info_mfn = xrpa.first_pfn;
-    }
-    else
-    {
-        guest_shared_info_mfn = shared_info_frame;
-    }
-
     /* setup page tables */
 #if defined(__i386__)
     if (dsi.pae_kernel)
@@ -773,6 +707,72 @@
                    ctxt->ctrlreg[3] >> PAGE_SHIFT, dom) )
         goto error_out;
 #endif
+
+    if ( (mmu = xc_init_mmu_updates(xc_handle, dom)) == NULL )
+        goto error_out;
+
+    /* Write the phys->machine and machine->phys table entries. */
+    physmap_pfn = (vphysmap_start - dsi.v_start) >> PAGE_SHIFT;
+    physmap = physmap_e = xc_map_foreign_range(
+        xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE,
+        page_array[physmap_pfn++]);
+
+    for ( count = 0; count < nr_pages; count++ )
+    {
+        if ( xc_add_mmu_update(
+            xc_handle, mmu,
+            ((uint64_t)page_array[count] << PAGE_SHIFT) | MMU_MACHPHYS_UPDATE,
+            count) )
+        {
+            fprintf(stderr,"m2p update failure p=%lx m=%lx\n",
+                    count, page_array[count]); 
+            munmap(physmap, PAGE_SIZE);
+            goto error_out;
+        }
+        *physmap_e++ = page_array[count];
+        if ( ((unsigned long)physmap_e & (PAGE_SIZE-1)) == 0 )
+        {
+            munmap(physmap, PAGE_SIZE);
+            physmap = physmap_e = xc_map_foreign_range(
+                xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE,
+                page_array[physmap_pfn++]);
+        }
+    }
+    munmap(physmap, PAGE_SIZE);
+
+    /* Send the page update requests down to the hypervisor. */
+    if ( xc_finish_mmu_updates(xc_handle, mmu) )
+        goto error_out;
+
+    if ( shadow_mode_enabled )
+    {
+        struct xen_reserved_phys_area xrpa;
+
+        /* Enable shadow translate mode */
+        if ( xc_shadow_control(xc_handle, dom,
+                               DOM0_SHADOW_CONTROL_OP_ENABLE_TRANSLATE,
+                               NULL, 0, NULL) < 0 )
+        {
+            PERROR("Could not enable translation mode");
+            goto error_out;
+        }
+
+        /* Find the shared info frame.  It's guaranteed to be at the
+           start of the PFN hole. */
+        xrpa.domid = dom;
+        xrpa.idx   = 0;
+        rc = xc_memory_op(xc_handle, XENMEM_reserved_phys_area, &xrpa);
+        if ( rc != 0 )
+        {
+            PERROR("Cannot find shared info pfn");
+            goto error_out;
+        }
+        guest_shared_info_mfn = xrpa.first_pfn;
+    }
+    else
+    {
+        guest_shared_info_mfn = shared_info_frame;
+    }
 
     *store_mfn = page_array[(vstoreinfo_start-dsi.v_start) >> PAGE_SHIFT];
     *console_mfn = page_array[(vconsole_start-dsi.v_start) >> PAGE_SHIFT];

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.