Fix systemtap tapsets (bz 831763) Fix qmp response race caused by spice server bug (bz 744015) Fix text mode screendumps (bz 819155) Don't renable ksm on update (bz 815156) Fix RPM install error on non-virt machines (bz 660629) Obsolete openbios to fix upgrade dependency issues (bz 694802)
62 lines
1.8 KiB
Diff
62 lines
1.8 KiB
Diff
From d12ac10d3ce10d3e1c9b23aeca397caa74be49d3 Mon Sep 17 00:00:00 2001
|
|
From: Avi Kivity <avi@redhat.com>
|
|
Date: Mon, 5 Sep 2011 11:07:05 +0300
|
|
Subject: [PATCH] qemu_vmalloc: align properly for transparent hugepages and
|
|
KVM
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
To make good use of transparent hugepages, KVM requires that guest-physical
|
|
and host-virtual addresses share the low 21 bits (as opposed to just the low
|
|
12 bits normally required).
|
|
|
|
Adjust qemu_vmalloc() to honor that requirement. Ignore it for small regions
|
|
to avoid fragmentation.
|
|
|
|
Signed-off-by: Avi Kivity <avi@redhat.com>
|
|
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
|
|
(cherry picked from commit 36b586284e678da28df3af9fd0907d2b16f9311c)
|
|
|
|
Signed-off-by: Bruce Rogers <brogers@suse.com>
|
|
Signed-off-by: Andreas Färber <afaerber@suse.de>
|
|
---
|
|
oslib-posix.c | 14 +++++++++++++-
|
|
1 file changed, 13 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/oslib-posix.c b/oslib-posix.c
|
|
index 196099c..a304fb0 100644
|
|
--- a/oslib-posix.c
|
|
+++ b/oslib-posix.c
|
|
@@ -35,6 +35,13 @@
|
|
extern int daemon(int, int);
|
|
#endif
|
|
|
|
+#if defined(__linux__) && defined(__x86_64__)
|
|
+ /* Use 2MB alignment so transparent hugepages can be used by KVM */
|
|
+# define QEMU_VMALLOC_ALIGN (512 * 4096)
|
|
+#else
|
|
+# define QEMU_VMALLOC_ALIGN getpagesize()
|
|
+#endif
|
|
+
|
|
#include "config-host.h"
|
|
#include "sysemu.h"
|
|
#include "trace.h"
|
|
@@ -80,7 +87,12 @@ void *qemu_memalign(size_t alignment, size_t size)
|
|
void *qemu_vmalloc(size_t size)
|
|
{
|
|
void *ptr;
|
|
- ptr = qemu_memalign(getpagesize(), size);
|
|
+ size_t align = QEMU_VMALLOC_ALIGN;
|
|
+
|
|
+ if (size < align) {
|
|
+ align = getpagesize();
|
|
+ }
|
|
+ ptr = qemu_memalign(align, size);
|
|
trace_qemu_vmalloc(size, ptr);
|
|
return ptr;
|
|
}
|
|
--
|
|
1.7.11.2
|
|
|