public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Pekka Enberg <penberg@kernel.org>
To: kvm@vger.kernel.org
Cc: Pekka Enberg <penberg@kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Asias He <asias.hejun@gmail.com>,
	Cyrill Gorcunov <gorcunov@gmail.com>, Ingo Molnar <mingo@elte.hu>,
	Prasad Joshi <prasadjoshi124@gmail.com>,
	Sasha Levin <levinsasha928@gmail.com>
Subject: [PATCH] kvm tools: Boot to host /bin/sh via 9p by default
Date: Tue,  9 Aug 2011 18:33:34 +0300	[thread overview]
Message-ID: <1312904014-3538-1-git-send-email-penberg@kernel.org> (raw)

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@linux-foundation.org>
Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Prasad Joshi <prasadjoshi124@gmail.com>
Cc: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
---
 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


             reply	other threads:[~2011-08-09 15:33 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-09 15:33 Pekka Enberg [this message]
2011-08-09 15:36 ` [PATCH] kvm tools: Boot to host /bin/sh via 9p by default Pekka Enberg
2011-08-09 15:37   ` Ingo Molnar
2011-08-09 16:59 ` Avi Kivity
2011-08-09 17:33   ` Pekka Enberg
2011-08-09 20:06   ` Sasha Levin
2011-08-09 20:15     ` Pekka Enberg
2011-08-09 20:30       ` Sasha Levin

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=1312904014-3538-1-git-send-email-penberg@kernel.org \
    --to=penberg@kernel.org \
    --cc=asias.hejun@gmail.com \
    --cc=gorcunov@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=levinsasha928@gmail.com \
    --cc=mingo@elte.hu \
    --cc=prasadjoshi124@gmail.com \
    --cc=torvalds@linux-foundation.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox