From 9f17f5554c5edc4e383136703a1d9100a2f5664e Mon Sep 17 00:00:00 2001 From: Jean Guyader Date: Wed, 25 Mar 2009 14:19:33 +0000 Subject: [PATCH] Move the ACPI_NVS region to a safer place, on the top of guest RAM. --- tools/libxc/xc_linux.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/tools/libxc/xc_linux.c b/tools/libxc/xc_linux.c index 21959d0..e2c5621 100644 --- a/tools/libxc/xc_linux.c +++ b/tools/libxc/xc_linux.c @@ -617,30 +617,33 @@ int xc_add_acpi_nvs(int xc_handle, uint32_t domid, struct e820entry *entry) { +#define ACPI_NVS_BASE_ADDRESS 0xfec80000 FILE *fd; char line[256]; char *s; uint64_t begin_addr, end_addr, size; - - if ((fd = fopen("/proc/iomem", "r"))) + if (!(fd = fopen("/proc/iomem", "r"))) return 0; while ((fgets(line, 256, fd))) if (strstr(line, "ACPI Non-volatile Storage")) { - begin_addr = strtol(line, &s, 16); - end_addr = strtol(s + 1, NULL, 16); + begin_addr = strtoll(line, &s, 16); + end_addr = strtoll(s + 1, NULL, 16); size = end_addr - begin_addr + 1; - entry->addr = begin_addr; - entry->size = size; - entry->type = E820_NVS; - - xc_domain_memory_mapping(xc_handle, domid, - begin_addr >> XC_PAGE_SHIFT, - begin_addr >> XC_PAGE_SHIFT, - size >> XC_PAGE_SHIFT, - 1); + + if (xc_domain_memory_mapping(xc_handle, domid, + ACPI_NVS_BASE_ADDRESS >> XC_PAGE_SHIFT, + begin_addr >> XC_PAGE_SHIFT, + size >> XC_PAGE_SHIFT, + 1) == 0) + { + entry->addr = ACPI_NVS_BASE_ADDRESS; + entry->size = size; + entry->type = E820_NVS; + } + fclose(fd); return 1; } -- 2.39.5