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

[Xen-devel] [PATCH 05/10] xen/setup: Set identity mapping for non-RAM E8

To: linux-kernel@xxxxxxxxxxxxxxx, jeremy@xxxxxxxx, hpa@xxxxxxxxx
Subject: [Xen-devel] [PATCH 05/10] xen/setup: Set identity mapping for non-RAM E820 and E820 gaps.
From: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Date: Tue, 21 Dec 2010 16:37:35 -0500
Cc: Konrad Rzeszutek Wilk <konrad@xxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxx, Jan Beulich <JBeulich@xxxxxxxxxx>, Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Delivery-date: Tue, 21 Dec 2010 14:03:49 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1292967460-15709-1-git-send-email-konrad.wilk@xxxxxxxxxx>
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/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1292967460-15709-1-git-send-email-konrad.wilk@xxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
For all regions that are not considered RAM, we do not
necessarily have to set the P2M, as it assumes that any
P2M top branch (so covering 134217728 pages, on 64-bit) or
middle branch (so covering 262144 pages, on 64-bit) are identity.
Meaning pfn_to_mfn(pfn)==pfn. However, not all E820 gaps are
that large, so for smaller and for boundary conditions we fill
out the P2M mapping with the identity mapping.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
---
 arch/x86/xen/setup.c |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index d984d36..752c865 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -146,6 +146,34 @@ static unsigned long __init 
xen_return_unused_memory(unsigned long max_pfn,
        return released;
 }
 
+static unsigned long __init xen_set_identity(const struct e820map *e820)
+{
+       phys_addr_t last = 0;
+       int i;
+       unsigned long identity = 0;
+       unsigned long pfn;
+
+       for (i = 0; i < e820->nr_map; i++) {
+               phys_addr_t start = e820->map[i].addr;
+               phys_addr_t end = start + e820->map[i].size;
+
+               if (end < start)
+                       continue;
+
+               if (e820->map[i].type != E820_RAM) {
+                       for (pfn = PFN_UP(start); pfn < PFN_DOWN(end); pfn++)
+                               set_phys_to_machine(pfn, pfn);
+                       identity += pfn - PFN_UP(start);
+               }
+               if (start > last && ((start - last) > 0)) {
+                       for (pfn = PFN_UP(last); pfn < PFN_DOWN(start); pfn++)
+                               set_phys_to_machine(pfn, pfn);
+                       identity += pfn - PFN_UP(last);
+               }
+               last = end;
+       }
+       return identity;
+}
 /**
  * machine_specific_memory_setup - Hook for machine specific memory setup.
  **/
@@ -254,6 +282,12 @@ char * __init xen_memory_setup(void)
 
        xen_add_extra_mem(extra_pages);
 
+       /*
+        * Set P2M for all non-RAM pages and E820 gaps to be identity
+        * type PFNs.
+        */
+       printk(KERN_INFO "Set %ld page(s) to 1-1 mapping.\n",
+               xen_set_identity(&e820));
        return "Xen";
 }
 
-- 
1.7.1


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

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