This patch updates 'kvm run' to boot to host filesystem via 9p '/bin/sh' by default: $ ./kvm run # kvm run -k ../../arch/x86/boot/bzImage -m 320 -c 2 --name guest-3462 [ 0.000000] Linux version 3.1.0-rc1+ (penberg@tiger) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #7 SMP PREEMPT Tue Aug 9 16:39:20 EEST 2011 [ 0.000000] Command line: notsc noapic noacpi pci=conf1 reboot=k panic=1 console=ttyS0 earlyprintk=serial init=/bin/sh root=/dev/vda rw root=/dev/root rootflags=rw,trans=virtio,version=9p2000.u rootfstype=9p [snip] [ 1.803261] VFS: Mounted root (9p filesystem) on device 0:13. [ 1.805153] devtmpfs: mounted [ 1.808353] Freeing unused kernel memory: 924k freed [ 1.810592] Write protecting the kernel read-only data: 12288k [ 1.816268] Freeing unused kernel memory: 632k freed [ 1.826030] Freeing unused kernel memory: 1448k freed sh: cannot set terminal process group (-1): Inappropriate ioctl for device sh: no job control in this shell sh-4.1# Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> Cc: Asias He <asias.hejun@xxxxxxxxx> Cc: Cyrill Gorcunov <gorcunov@xxxxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxx> Cc: Prasad Joshi <prasadjoshi124@xxxxxxxxx> Cc: Sasha Levin <levinsasha928@xxxxxxxxx> Signed-off-by: Pekka Enberg <penberg@xxxxxxxxxx> --- tools/kvm/builtin-run.c | 57 +++++----------------------------------------- 1 files changed, 7 insertions(+), 50 deletions(-) diff --git a/tools/kvm/builtin-run.c b/tools/kvm/builtin-run.c index fa51850..fa5de27 100644 --- a/tools/kvm/builtin-run.c +++ b/tools/kvm/builtin-run.c @@ -447,46 +447,6 @@ static const char *find_vmlinux(void) return NULL; } -static int root_device(char *dev, long *part) -{ - struct stat st; - - if (stat("/", &st) < 0) - return -1; - - *part = minor(st.st_dev); - - sprintf(dev, "/dev/block/%u:0", major(st.st_dev)); - if (access(dev, R_OK) < 0) - return -1; - - return 0; -} - -static char *host_image(char *cmd_line, size_t size) -{ - char *t; - char device[PATH_MAX]; - long part = 0; - - t = malloc(PATH_MAX); - if (!t) - return NULL; - - /* check for the root file system */ - if (root_device(device, &part) < 0) { - free(t); - return NULL; - } - strncpy(t, device, PATH_MAX); - if (!strstr(cmd_line, "root=")) { - char tmp[PATH_MAX]; - snprintf(tmp, sizeof(tmp), "root=/dev/vda%ld rw ", part); - strlcat(cmd_line, tmp, size); - } - return t; -} - void kvm_run_help(void) { usage_with_options(run_usage, options); @@ -500,7 +460,6 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix) unsigned int nr_online_cpus; int exit_code = 0; int max_cpus, recommended_cpus; - char *hi; int i; void *ret; @@ -635,14 +594,14 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix) if (kernel_cmdline) strlcat(real_cmdline, kernel_cmdline, sizeof(real_cmdline)); - hi = NULL; if (!using_rootfs && !image_filename[0]) { - hi = host_image(real_cmdline, sizeof(real_cmdline)); - if (hi) { - image_filename[0] = hi; - readonly_image[0] = true; - image_count++; - } + if (virtio_9p__init(kvm, "/", "/dev/root") < 0) + die("Unable to initialize virtio 9p"); + + using_rootfs = 1; + + if (!strstr(real_cmdline, "init=")) + strlcat(real_cmdline, " init=/bin/sh ", sizeof(real_cmdline)); } if (!strstr(real_cmdline, "root=")) @@ -660,8 +619,6 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix) virtio_blk__init_all(kvm); } - free(hi); - printf(" # kvm run -k %s -m %Lu -c %d --name %s\n", kernel_filename, ram_size / 1024 / 1024, nrcpus, guest_name); if (!kvm__load_kernel(kvm, kernel_filename, initrd_filename, -- 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html