# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1200664451 0
# Node ID d2282880a92e51deae71ec4c42b8771fb91d969d
# Parent 79dab3f0d0940fb30b25ccb7147423e4fae6f9ca
hvm: Allocate an unmapped guard page to separate ordinary low RAM
from special pages (ioreq, xenstore, etc). This will stop some probe
functions (e.g., embedded in memtest) from stomping on the special
pages.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
xen-unstable changeset: 16728:be960a84e492c1baa0a2dfa76b1a770d0df5e433
xen-unstable date: Thu Jan 17 12:59:10 2008 +0000
---
tools/libxc/xc_hvm_build.c | 21 ++++++++++++++++++---
1 files changed, 18 insertions(+), 3 deletions(-)
diff -r 79dab3f0d094 -r d2282880a92e tools/libxc/xc_hvm_build.c
--- a/tools/libxc/xc_hvm_build.c Fri Jan 18 13:53:38 2008 +0000
+++ b/tools/libxc/xc_hvm_build.c Fri Jan 18 13:54:11 2008 +0000
@@ -85,13 +85,19 @@ static void build_e820map(void *e820_pag
e820entry[nr_map].type = E820_RESERVED;
nr_map++;
- /* Low RAM goes here. Remove 3 pages for ioreq, bufioreq, and xenstore. */
+ /*
+ * Low RAM goes here. Remove 4 pages for: ioreq, bufioreq, and xenstore.
+ * 1. Guard page.
+ * 2. Buffered ioreq.
+ * 3. Xenstore.
+ * 4. Normal ioreq.
+ */
e820entry[nr_map].addr = 0x100000;
- e820entry[nr_map].size = mem_size - 0x100000 - PAGE_SIZE * 3;
+ e820entry[nr_map].size = mem_size - 0x100000 - PAGE_SIZE * 4;
e820entry[nr_map].type = E820_RAM;
nr_map++;
- /* Explicitly reserve space for special pages (ioreq and xenstore). */
+ /* Explicitly reserve space for special pages. */
e820entry[nr_map].addr = mem_size - PAGE_SIZE * 3;
e820entry[nr_map].size = PAGE_SIZE * 3;
e820entry[nr_map].type = E820_RESERVED;
@@ -253,6 +259,15 @@ static int setup_guest(int xc_handle,
else
shared_page_nr = (v_end >> PAGE_SHIFT) - 1;
+ /* Free the guard page that separates low RAM from special pages. */
+ rc = xc_domain_memory_decrease_reservation(
+ xc_handle, dom, 1, 0, &page_array[shared_page_nr-3]);
+ if ( rc != 0 )
+ {
+ PERROR("Could not deallocate guard page for HVM guest.\n");
+ goto error_out;
+ }
+
/* Paranoia: clean pages. */
if ( xc_clear_domain_page(xc_handle, dom, shared_page_nr) ||
xc_clear_domain_page(xc_handle, dom, shared_page_nr-1) ||
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|