]> xenbits.xen.org Git - xenclient/xen.git/commitdiff
Move the ACPI_NVS region to a safer place, on the top of guest RAM.
authorJean Guyader <jean.guyader@eu.citrix.com>
Wed, 25 Mar 2009 14:19:33 +0000 (14:19 +0000)
committerJean Guyader <jean.guyader@eu.citrix.com>
Wed, 25 Mar 2009 14:19:33 +0000 (14:19 +0000)
tools/libxc/xc_linux.c

index 21959d02af7710f69808938d15f0608e9d79bfc3..e2c56210c779f79c95880df2ddab77d6cceb48ff 100644 (file)
@@ -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;
        }