From 192a99d1d73d351ff7305cf7aecaa2210bcb6647 Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov Date: Sun, 11 Jul 2010 14:06:30 +0400 Subject: [PATCH] kvm: Add --mem= option Which allow an user to specify the amount of memory he would like to provide for kernel. Signed-off-by: Cyrill Gorcunov --- include/kvm/kvm.h | 2 +- kvm.c | 4 ++-- main.c | 15 +++++++++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/include/kvm/kvm.h b/include/kvm/kvm.h index 7acca0e..88fa6e8 100644 --- a/include/kvm/kvm.h +++ b/include/kvm/kvm.h @@ -31,7 +31,7 @@ struct kvm { struct interrupt_table interrupt_table; }; -struct kvm *kvm__init(const char *kvm_dev); +struct kvm *kvm__init(const char *kvm_dev, unsigned long ram_size); void kvm__delete(struct kvm *self); void kvm__setup_cpuid(struct kvm *self); void kvm__enable_singlestep(struct kvm *self); diff --git a/kvm.c b/kvm.c index 045fcd8..3baa67e 100644 --- a/kvm.c +++ b/kvm.c @@ -151,7 +151,7 @@ static bool kvm__cpu_supports_vm(void) return regs.ecx & (1 << feature); } -struct kvm *kvm__init(const char *kvm_dev) +struct kvm *kvm__init(const char *kvm_dev, unsigned long ram_size) { struct kvm_userspace_memory_region mem; struct kvm_pit_config pit_config = { .flags = 0, }; @@ -192,7 +192,7 @@ struct kvm *kvm__init(const char *kvm_dev) if (ret < 0) die_perror("KVM_CREATE_PIT2 ioctl"); - self->ram_size = 64UL * 1024UL * 1024UL; + self->ram_size = ram_size; page_size = sysconf(_SC_PAGESIZE); if (posix_memalign(&self->ram_start, page_size, self->ram_size) != 0) diff --git a/main.c b/main.c index 57ae33b..f3e69ae 100644 --- a/main.c +++ b/main.c @@ -14,7 +14,10 @@ extern bool ioport_debug; static void usage(char *argv[]) { - fprintf(stderr, " usage: %s [--single-step] [--ioport-debug] [--params=] [--kernel=]\n", + fprintf(stderr, " usage: %s " + "[--single-step] [--ioport-debug] " + "[--kvm-dev=device] [--mem=MB] [--params=] " + "[--kernel=]\n", argv[0]); exit(1); } @@ -44,6 +47,7 @@ int main(int argc, char *argv[]) const char *kernel_filename = NULL; const char *kernel_cmdline = NULL; const char *kvm_dev = "/dev/kvm"; + unsigned long ram_size = 64UL << 20; bool single_step = false; int i; @@ -62,6 +66,13 @@ int main(int argc, char *argv[]) } else if (option_matches(argv[i], "--single-step")) { single_step = true; continue; + } else if (option_matches(argv[i], "--mem=")) { + unsigned long val = atol(&argv[i][6]) << 20; + if (val < ram_size) + die("Not enough memory specified: %sMB (min %luMB)", + argv[i], ram_size >> 20); + ram_size = val; + continue; } else if (option_matches(argv[i], "--ioport-debug")) { ioport_debug = true; continue; @@ -78,7 +89,7 @@ int main(int argc, char *argv[]) if (!kernel_filename) usage(argv); - kvm = kvm__init(kvm_dev); + kvm = kvm__init(kvm_dev, ram_size); kvm__setup_cpuid(kvm);