Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Oct 2013 03:56:08 +0000 (UTC)
From:      Neel Natu <neel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r256176 - in head: lib/libvmmapi share/examples/bhyve usr.sbin/bhyve usr.sbin/bhyvectl usr.sbin/bhyveload
Message-ID:  <201310090356.r993u8bM085667@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: neel
Date: Wed Oct  9 03:56:07 2013
New Revision: 256176
URL: http://svnweb.freebsd.org/changeset/base/256176

Log:
  Parse the memory size parameter using expand_number() to allow specifying
  the memory size more intuitively (e.g. 512M, 4G etc).
  
  Submitted by:	rodrigc
  Reviewed by:	grehan
  Approved by:	re (blanket)

Modified:
  head/lib/libvmmapi/vmmapi.c
  head/lib/libvmmapi/vmmapi.h
  head/share/examples/bhyve/vmrun.sh
  head/usr.sbin/bhyve/Makefile
  head/usr.sbin/bhyve/bhyverun.c
  head/usr.sbin/bhyvectl/Makefile
  head/usr.sbin/bhyveload/Makefile
  head/usr.sbin/bhyveload/bhyveload.8
  head/usr.sbin/bhyveload/bhyveload.c

Modified: head/lib/libvmmapi/vmmapi.c
==============================================================================
--- head/lib/libvmmapi/vmmapi.c	Wed Oct  9 03:19:05 2013	(r256175)
+++ head/lib/libvmmapi/vmmapi.c	Wed Oct  9 03:56:07 2013	(r256176)
@@ -43,11 +43,14 @@ __FBSDID("$FreeBSD$");
 #include <fcntl.h>
 #include <unistd.h>
 
+#include <libutil.h>
+
 #include <machine/vmm.h>
 #include <machine/vmm_dev.h>
 
 #include "vmmapi.h"
 
+#define	MB	(1024 * 1024UL)
 #define	GB	(1024 * 1024 * 1024UL)
 
 struct vmctx {
@@ -124,6 +127,30 @@ vm_destroy(struct vmctx *vm)
 }
 
 int
+vm_parse_memsize(const char *optarg, size_t *ret_memsize)
+{
+	char *endptr;
+	size_t optval;
+	int error;
+
+	optval = strtoul(optarg, &endptr, 0);
+	if (*optarg != '\0' && *endptr == '\0') {
+		/*
+		 * For the sake of backward compatibility if the memory size
+		 * specified on the command line is less than a megabyte then
+		 * it is interpreted as being in units of MB.
+		 */
+		if (optval < MB)
+			optval *= MB;
+		*ret_memsize = optval;
+		error = 0;
+	} else
+		error = expand_number(optarg, ret_memsize);
+
+	return (error);
+}
+
+int
 vm_get_memory_seg(struct vmctx *ctx, vm_paddr_t gpa, size_t *ret_len,
 		  int *wired)
 {

Modified: head/lib/libvmmapi/vmmapi.h
==============================================================================
--- head/lib/libvmmapi/vmmapi.h	Wed Oct  9 03:19:05 2013	(r256175)
+++ head/lib/libvmmapi/vmmapi.h	Wed Oct  9 03:56:07 2013	(r256176)
@@ -45,6 +45,7 @@ enum vm_mmap_style {
 int	vm_create(const char *name);
 struct vmctx *vm_open(const char *name);
 void	vm_destroy(struct vmctx *ctx);
+int	vm_parse_memsize(const char *optarg, size_t *memsize);
 int	vm_get_memory_seg(struct vmctx *ctx, vm_paddr_t gpa, size_t *ret_len,
 			  int *wired);
 int	vm_setup_memory(struct vmctx *ctx, size_t len, enum vm_mmap_style s);

Modified: head/share/examples/bhyve/vmrun.sh
==============================================================================
--- head/share/examples/bhyve/vmrun.sh	Wed Oct  9 03:19:05 2013	(r256175)
+++ head/share/examples/bhyve/vmrun.sh	Wed Oct  9 03:56:07 2013	(r256176)
@@ -31,7 +31,7 @@ LOADER=/usr/sbin/bhyveload
 BHYVECTL=/usr/sbin/bhyvectl
 FBSDRUN=/usr/sbin/bhyve
 
-DEFAULT_MEMSIZE=512
+DEFAULT_MEMSIZE=512M
 DEFAULT_CPUS=2
 DEFAULT_TAPDEV=tap0
 
@@ -47,7 +47,7 @@ usage() {
 	echo "       -g: listen for connection from kgdb at <gdbport>"
 	echo "       -i: force boot of the Installation CDROM image"
 	echo "       -I: Installation CDROM image location (default is ${DEFAULT_ISOFILE})"
-	echo "       -m: memory size in MB (default is ${DEFAULT_MEMSIZE}MB)"
+	echo "       -m: memory size (default is ${DEFAULT_MEMSIZE})"
 	echo "       -t: tap device for virtio-net (default is $DEFAULT_TAPDEV)"
 	echo ""
 	echo "       This script needs to be executed with superuser privileges"

Modified: head/usr.sbin/bhyve/Makefile
==============================================================================
--- head/usr.sbin/bhyve/Makefile	Wed Oct  9 03:19:05 2013	(r256175)
+++ head/usr.sbin/bhyve/Makefile	Wed Oct  9 03:56:07 2013	(r256176)
@@ -17,8 +17,8 @@ SRCS+=	vmm_instruction_emul.c
 
 NO_MAN=
 
-DPADD=	${LIBVMMAPI} ${LIBMD} ${LIBPTHREAD}
-LDADD=	-lvmmapi -lmd -lpthread
+DPADD=	${LIBVMMAPI} ${LIBMD} ${LIBUTIL} ${LIBPTHREAD}
+LDADD=	-lvmmapi -lmd -lutil -lpthread
 
 WARNS?=	2
 

Modified: head/usr.sbin/bhyve/bhyverun.c
==============================================================================
--- head/usr.sbin/bhyve/bhyverun.c	Wed Oct  9 03:19:05 2013	(r256175)
+++ head/usr.sbin/bhyve/bhyverun.c	Wed Oct  9 03:56:07 2013	(r256176)
@@ -37,12 +37,14 @@ __FBSDID("$FreeBSD$");
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <err.h>
 #include <libgen.h>
 #include <unistd.h>
 #include <assert.h>
 #include <errno.h>
 #include <pthread.h>
 #include <pthread_np.h>
+#include <sysexits.h>
 
 #include <machine/vmm.h>
 #include <vmmapi.h>
@@ -529,7 +531,9 @@ main(int argc, char *argv[])
 			else
 				break;
                 case 'm':
-			memsize = strtoul(optarg, NULL, 0) * MB;
+			error = vm_parse_memsize(optarg, &memsize);
+			if (error)
+				errx(EX_USAGE, "invalid memsize '%s'", optarg);
 			break;
 		case 'H':
 			guest_vmexit_on_hlt = 1;

Modified: head/usr.sbin/bhyvectl/Makefile
==============================================================================
--- head/usr.sbin/bhyvectl/Makefile	Wed Oct  9 03:19:05 2013	(r256175)
+++ head/usr.sbin/bhyvectl/Makefile	Wed Oct  9 03:56:07 2013	(r256176)
@@ -7,8 +7,8 @@ SRCS=	bhyvectl.c
 
 NO_MAN=
 
-DPADD=	${LIBVMMAPI}
-LDADD=	-lvmmapi
+DPADD=	${LIBVMMAPI} ${LIBUTIL}
+LDADD=	-lvmmapi -lutil
 
 WARNS?=	3
 

Modified: head/usr.sbin/bhyveload/Makefile
==============================================================================
--- head/usr.sbin/bhyveload/Makefile	Wed Oct  9 03:19:05 2013	(r256175)
+++ head/usr.sbin/bhyveload/Makefile	Wed Oct  9 03:56:07 2013	(r256176)
@@ -4,8 +4,8 @@ PROG=	bhyveload
 SRCS=	bhyveload.c
 MAN=	bhyveload.8
 
-DPADD+=	${LIBVMMAPI}
-LDADD+=	-lvmmapi
+DPADD+=	${LIBVMMAPI} ${LIBUTIL}
+LDADD+=	-lvmmapi -lutil
 
 WARNS?=	3
 

Modified: head/usr.sbin/bhyveload/bhyveload.8
==============================================================================
--- head/usr.sbin/bhyveload/bhyveload.8	Wed Oct  9 03:19:05 2013	(r256175)
+++ head/usr.sbin/bhyveload/bhyveload.8	Wed Oct  9 03:56:07 2013	(r256176)
@@ -1,4 +1,4 @@
-.\"
+\"
 .\" Copyright (c) 2012 NetApp Inc
 .\" All rights reserved.
 .\"
@@ -60,13 +60,29 @@ and will be created if it does not alrea
 .Sh OPTIONS
 The following options are available:
 .Bl -tag -width indent
-.It Fl m Ar mem-size
+.It Fl m Ar mem-size Xo
+.Sm off
+.Op Cm K | k | M | m | G | g | T | t
+.Xc
+.Sm on
+.Ar mem-size
+is the amount of memory allocated to the guest.
+.Pp
+The
 .Ar mem-size
-is the amount of memory allocated to the guest in units of megabytes.
+argument may be suffixed with one of
+.Cm K ,
+.Cm M ,
+.Cm G
+or
+.Cm T
+(either upper or lower case) to indicate a multiple of
+Kilobytes, Megabytes, Gigabytes or Terabytes
+respectively.
 .Pp
 The default value of
 .Ar mem-size
-is 256.
+is 256M.
 .It Fl d Ar disk-path
 The
 .Ar disk-path
@@ -83,7 +99,7 @@ that boots off the ISO image
 .Pa /freebsd/release.iso
 and has 1GB memory allocated to it:
 .Pp
-.Dl "bhyveload -m 1024 -d /freebsd/release.iso freebsd-vm"
+.Dl "bhyveload -m 1G -d /freebsd/release.iso freebsd-vm"
 .Sh SEE ALSO
 .Xr bhyve 4 ,
 .Xr bhyve 8 ,

Modified: head/usr.sbin/bhyveload/bhyveload.c
==============================================================================
--- head/usr.sbin/bhyveload/bhyveload.c	Wed Oct  9 03:19:05 2013	(r256175)
+++ head/usr.sbin/bhyveload/bhyveload.c	Wed Oct  9 03:56:07 2013	(r256176)
@@ -67,12 +67,14 @@ __FBSDID("$FreeBSD$");
 #include <dirent.h>
 #include <dlfcn.h>
 #include <errno.h>
+#include <err.h>
 #include <fcntl.h>
 #include <getopt.h>
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sysexits.h>
 #include <termios.h>
 #include <unistd.h>
 
@@ -581,9 +583,10 @@ main(int argc, char** argv)
 			break;
 
 		case 'm':
-			mem_size = strtoul(optarg, NULL, 0) * MB;
+			error = vm_parse_memsize(optarg, &mem_size);
+			if (error != 0)
+				errx(EX_USAGE, "Invalid memsize '%s'", optarg);
 			break;
-		
 		case '?':
 			usage();
 		}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310090356.r993u8bM085667>