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@citrix.com>
This commit is contained in:
Keir Fraser committed 2008-01-17 12:59:10 +00:00
1 parent 1f30c27a9b
commit e0413522fd
1 file changed
+18 -3
+18 -3
View File
@@ -77,13 +77,19 @@ static void build_e820map(void *e820_page, unsigned long long mem_size)
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;
@@ -244,6 +250,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) ||
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.