From: john cooper <john.cooper@redhat.com>
To: Avi Kivity <avi@redhat.com>
Cc: john cooper <john.cooper@third-harmonic.com>,
kvm@vger.kernel.org, aliguori@us.ibm.com,
Marcelo Tosatti <mtosatti@redhat.com>,
john.cooper@redhat.com
Subject: Re: Resend: patch: qemu + hugetlbfs..
Date: Fri, 23 Jan 2009 16:21:46 -0500 [thread overview]
Message-ID: <497A34EA.3050703@redhat.com> (raw)
In-Reply-To: <4975A78B.1060101@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 589 bytes --]
Avi Kivity wrote:
> john cooper wrote:
>> This trivial patch never did manage to find its way
>> in. Marcelo called it to my attention earlier in
>> the week. I've tweaked it to apply to kvm-83 and
>> the resulting patch is attached. I've left the
>> prior e-mail discussion below for reference.
>>
>
> Sorry for missing this (copying me helps). Please resubmit with a
> signoff.Also, please protect with #ifdef MAP_POPULATE to ease merging
> into upstream eventually.
Updated patch attached.
-john
Signed-off-by: john cooper <john.cooper@redhat.com>
--
john.cooper@redhat.com
[-- Attachment #2: prealloc.diff-090123 --]
[-- Type: text/plain, Size: 3734 bytes --]
kernel/x86/Kbuild | 4 ++--
qemu/vl.c | 38 ++++++++++++++++++++++++++++++++++----
2 files changed, 36 insertions(+), 6 deletions(-)
=================================================================
--- a/qemu/vl.c
+++ b/qemu/vl.c
@@ -237,6 +237,9 @@ int semihosting_enabled = 0;
int time_drift_fix = 0;
unsigned int kvm_shadow_memory = 0;
const char *mem_path = NULL;
+#ifdef MAP_POPULATE
+int mem_prealloc = 1; /* force preallocation of physical target memory */
+#endif
int hpagesize = 0;
const char *cpu_vendor_string;
#ifdef TARGET_ARM
@@ -4116,7 +4119,12 @@ static void help(int exitcode)
#endif
"-tdf inject timer interrupts that got lost\n"
"-kvm-shadow-memory megs set the amount of shadow pages to be allocated\n"
- "-mem-path set the path to hugetlbfs/tmpfs mounted directory, also enables allocation of guest memory with huge pages\n"
+ "-mem-path set the path to hugetlbfs/tmpfs mounted directory, also\n"
+ " enables allocation of guest memory with huge pages\n"
+#ifdef MAP_POPULATE
+ "-mem-prealloc toggles preallocation of -mem-path backed physical memory\n"
+ " at startup. Default is enabled.\n"
+#endif
"-option-rom rom load a file, rom, into the option ROM space\n"
#ifdef TARGET_SPARC
"-prom-env variable=value set OpenBIOS nvram variables\n"
@@ -4246,6 +4254,9 @@ enum {
QEMU_OPTION_tdf,
QEMU_OPTION_kvm_shadow_memory,
QEMU_OPTION_mempath,
+#ifdef MAP_POPULATE
+ QEMU_OPTION_mem_prealloc,
+#endif
};
typedef struct QEMUOption {
@@ -4381,6 +4392,9 @@ static const QEMUOption qemu_options[] =
{ "icount", HAS_ARG, QEMU_OPTION_icount },
{ "incoming", HAS_ARG, QEMU_OPTION_incoming },
{ "mem-path", HAS_ARG, QEMU_OPTION_mempath },
+#ifdef MAP_POPULATE
+ { "mem-prealloc", 0, QEMU_OPTION_mem_prealloc },
+#endif
{ NULL },
};
@@ -4663,6 +4677,9 @@ void *alloc_mem_area(size_t memory, unsi
char *filename;
void *area;
int fd;
+#ifdef MAP_POPULATE
+ int flags;
+#endif
if (asprintf(&filename, "%s/kvm.XXXXXX", path) == -1)
return NULL;
@@ -4690,13 +4707,21 @@ void *alloc_mem_area(size_t memory, unsi
*/
ftruncate(fd, memory);
+#ifdef MAP_POPULATE
+ /* NB: MAP_POPULATE won't exhaustively alloc all phys pages in the case
+ * MAP_PRIVATE is requested. For mem_prealloc we mmap as MAP_SHARED
+ * to sidestep this quirk.
+ */
+ flags = mem_prealloc ? MAP_POPULATE|MAP_SHARED : MAP_PRIVATE;
+ area = mmap(0, memory, PROT_READ|PROT_WRITE, flags, fd, 0);
+#else
area = mmap(0, memory, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
+#endif
if (area == MAP_FAILED) {
- perror("mmap");
+ perror("alloc_mem_area: can't mmap hugetlbfs pages");
close(fd);
- return NULL;
+ return (NULL);
}
-
*len = memory;
return area;
}
@@ -5377,6 +5402,11 @@ int main(int argc, char **argv, char **e
case QEMU_OPTION_mempath:
mem_path = optarg;
break;
+#ifdef MAP_POPULATE
+ case QEMU_OPTION_mem_prealloc:
+ mem_prealloc = !mem_prealloc;
+ break;
+#endif
case QEMU_OPTION_name:
qemu_name = optarg;
break;
=================================================================
--- a/kernel/x86/Kbuild
+++ b/kernel/x86/Kbuild
@@ -9,8 +9,8 @@ kvm-objs := kvm_main.o x86.o mmu.o x86_e
ifeq ($(EXT_CONFIG_KVM_TRACE),y)
kvm-objs += kvm_trace.o
endif
-ifeq ($(CONFIG_DMAR),y)
-kvm-objs += vtd.o
+ifeq ($(CONFIG_IOMMU_API),y)
+kvm-objs += iommu.o
endif
kvm-intel-objs := vmx.o vmx-debug.o ../external-module-compat.o
kvm-amd-objs := svm.o ../external-module-compat.o
next prev parent reply other threads:[~2009-01-23 21:30 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-08 22:02 patch: qemu + hugetlbfs john cooper
2008-07-08 23:09 ` Anthony Liguori
2008-07-09 0:23 ` john cooper
2008-07-09 1:08 ` Anthony Liguori
2008-07-09 17:03 ` Marcelo Tosatti
2008-07-09 17:11 ` Anthony Liguori
2008-07-10 16:40 ` john cooper
2008-07-10 17:58 ` Anthony Liguori
2008-07-10 20:16 ` john cooper
2008-07-10 20:47 ` Anthony Liguori
2008-07-10 21:12 ` john cooper
2008-07-10 21:38 ` Anthony Liguori
2008-08-25 23:05 ` Resend: " john cooper
2008-08-26 8:11 ` Avi Kivity
2008-08-27 4:13 ` john cooper
2009-01-16 2:19 ` john cooper
2009-01-20 10:29 ` Avi Kivity
2009-01-23 21:21 ` john cooper [this message]
2009-02-05 15:42 ` Avi Kivity
2009-02-05 16:12 ` Marcelo Tosatti
2009-02-05 16:15 ` Avi Kivity
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=497A34EA.3050703@redhat.com \
--to=john.cooper@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=avi@redhat.com \
--cc=john.cooper@third-harmonic.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.