All of lore.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 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.