2
0
Эх сурвалжийг харах

Make qemu_mempath_getpagesize() accept NULL

qemu_mempath_getpagesize() gets the effective (host side) page size for
a block of memory backed by an mmap()ed file on the host.  It requires
the mem_path parameter to be non-NULL.

This ends up meaning all the callers need a different case for handling
anonymous memory (for memory-backend-ram or default memory with -mem-path
is not specified).

We can make all those callers a little simpler by having
qemu_mempath_getpagesize() accept NULL, and treat that as the anonymous
memory case.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
David Gibson 7 жил өмнө
parent
commit
0de6e2a3ca
3 өөрчлөгдсөн 22 нэмэгдсэн , 33 устгасан
  1. 6 15
      exec.c
  2. 2 6
      target/ppc/kvm.c
  3. 14 12
      util/mmap-alloc.c

+ 6 - 15
exec.c

@@ -1488,19 +1488,14 @@ void ram_block_dump(Monitor *mon)
  */
  */
 static int find_max_supported_pagesize(Object *obj, void *opaque)
 static int find_max_supported_pagesize(Object *obj, void *opaque)
 {
 {
-    char *mem_path;
     long *hpsize_min = opaque;
     long *hpsize_min = opaque;
 
 
     if (object_dynamic_cast(obj, TYPE_MEMORY_BACKEND)) {
     if (object_dynamic_cast(obj, TYPE_MEMORY_BACKEND)) {
-        mem_path = object_property_get_str(obj, "mem-path", NULL);
-        if (mem_path) {
-            long hpsize = qemu_mempath_getpagesize(mem_path);
-            g_free(mem_path);
-            if (hpsize < *hpsize_min) {
-                *hpsize_min = hpsize;
-            }
-        } else {
-            *hpsize_min = getpagesize();
+        char *mem_path = object_property_get_str(obj, "mem-path", NULL);
+        long hpsize = qemu_mempath_getpagesize(mem_path);
+        g_free(mem_path);
+        if (hpsize < *hpsize_min) {
+            *hpsize_min = hpsize;
         }
         }
     }
     }
 
 
@@ -1513,11 +1508,7 @@ long qemu_getrampagesize(void)
     long mainrampagesize;
     long mainrampagesize;
     Object *memdev_root;
     Object *memdev_root;
 
 
-    if (mem_path) {
-        mainrampagesize = qemu_mempath_getpagesize(mem_path);
-    } else {
-        mainrampagesize = getpagesize();
-    }
+    mainrampagesize = qemu_mempath_getpagesize(mem_path);
 
 
     /* it's possible we have memory-backend objects with
     /* it's possible we have memory-backend objects with
      * hugepage-backed RAM. these may get mapped into system
      * hugepage-backed RAM. these may get mapped into system

+ 2 - 6
target/ppc/kvm.c

@@ -499,12 +499,8 @@ bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
     char *mempath = object_property_get_str(mem_obj, "mem-path", NULL);
     char *mempath = object_property_get_str(mem_obj, "mem-path", NULL);
     long pagesize;
     long pagesize;
 
 
-    if (mempath) {
-        pagesize = qemu_mempath_getpagesize(mempath);
-        g_free(mempath);
-    } else {
-        pagesize = getpagesize();
-    }
+    pagesize = qemu_mempath_getpagesize(mempath);
+    g_free(mempath);
 
 
     return pagesize >= max_cpu_page_size;
     return pagesize >= max_cpu_page_size;
 }
 }

+ 14 - 12
util/mmap-alloc.c

@@ -50,19 +50,21 @@ size_t qemu_mempath_getpagesize(const char *mem_path)
     struct statfs fs;
     struct statfs fs;
     int ret;
     int ret;
 
 
-    do {
-        ret = statfs(mem_path, &fs);
-    } while (ret != 0 && errno == EINTR);
-
-    if (ret != 0) {
-        fprintf(stderr, "Couldn't statfs() memory path: %s\n",
-                strerror(errno));
-        exit(1);
-    }
+    if (mem_path) {
+        do {
+            ret = statfs(mem_path, &fs);
+        } while (ret != 0 && errno == EINTR);
 
 
-    if (fs.f_type == HUGETLBFS_MAGIC) {
-        /* It's hugepage, return the huge page size */
-        return fs.f_bsize;
+        if (ret != 0) {
+            fprintf(stderr, "Couldn't statfs() memory path: %s\n",
+                    strerror(errno));
+            exit(1);
+        }
+
+        if (fs.f_type == HUGETLBFS_MAGIC) {
+            /* It's hugepage, return the huge page size */
+            return fs.f_bsize;
+        }
     }
     }
 #ifdef __sparc__
 #ifdef __sparc__
     /* SPARC Linux needs greater alignment than the pagesize */
     /* SPARC Linux needs greater alignment than the pagesize */