[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] add support for memory suffix in user tools and in kernel



ChangeSet 1.1443.2.2, 2005/04/05 11:11:54+01:00, vh249@xxxxxxxxxxxxxxxxxxxxxx

        add support for memory suffix in user tools and in kernel
        
        Signed-off-by: Vincent Hanquez <vincent@xxxxxxxxxxxxx>



 tools/python/xen/xm/main.py |   29 +++++++++++++++++++++++++++--
 xen/arch/x86/domain_build.c |    2 +-
 xen/common/kernel.c         |   18 ++++++++++++++++++
 xen/include/xen/init.h      |    6 +++++-
 4 files changed, 51 insertions(+), 4 deletions(-)


diff -Nru a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       2005-04-05 09:03:22 -04:00
+++ b/tools/python/xen/xm/main.py       2005-04-05 09:03:22 -04:00
@@ -14,6 +14,31 @@
 from xen.xm import create, destroy, migrate, shutdown, sysrq
 from xen.xm.opts import *
 
+def unit(c):
+    if not c.isalpha():
+        return 0
+    base = 1
+    if c == 'G' or c == 'g': base = 1024 * 1024 * 1024
+    elif c == 'M' or c == 'm': base = 1024 * 1024
+    elif c == 'K' or c == 'k': base = 1024
+    else:
+        print 'ignoring unknown unit'
+    return base
+
+def int_unit(str, dest):
+    base = unit(str[-1])
+    if not base:
+        return int(str)
+
+    value = int(str[:-1])
+    dst_base = unit(dest)
+    if dst_base == 0:
+        dst_base = 1
+    if dst_base > base:
+        return value / (dst_base / base)
+    else:
+        return value * (base / dst_base)
+
 class Group:
 
     name = ""
@@ -475,7 +500,7 @@
     def main(self, args):
         if len(args) != 3: self.err("%s: Invalid argument(s)" % args[0])
         dom = args[1]
-        mem = int(args[2])
+        mem = int_unit(args[2], 'm')
         server.xend_domain_maxmem_set(dom, mem)
 
 xm.prog(ProgMaxmem)
@@ -493,7 +518,7 @@
     def main(self, args):
         if len(args) != 3: self.err("%s: Invalid argument(s)" % args[0])
         dom = args[1]
-        mem_target = int(args[2])
+        mem_target = int_unit(args[2], 'm')
         server.xend_domain_mem_target_set(dom, mem_target)
 
 xm.prog(ProgBalloon)
diff -Nru a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c
--- a/xen/arch/x86/domain_build.c       2005-04-05 09:03:22 -04:00
+++ b/xen/arch/x86/domain_build.c       2005-04-05 09:03:22 -04:00
@@ -23,7 +23,7 @@
 
 /* opt_dom0_mem: Kilobytes of memory allocated to domain 0. */
 static unsigned int opt_dom0_mem = 0;
-integer_param("dom0_mem", opt_dom0_mem);
+integer_unit_param("dom0_mem", opt_dom0_mem);
 
 #if defined(__i386__)
 /* No ring-3 access in initial leaf page tables. */
diff -Nru a/xen/common/kernel.c b/xen/common/kernel.c
--- a/xen/common/kernel.c       2005-04-05 09:03:22 -04:00
+++ b/xen/common/kernel.c       2005-04-05 09:03:22 -04:00
@@ -55,6 +55,24 @@
                     *(unsigned int *)param->var =
                         simple_strtol(opt, (char **)&opt, 0);
                 break;
+            case OPT_UINT_UNIT:
+                if ( opt != NULL )
+                {
+                    int base = 1;
+                    unsigned int value;
+
+                    value = simple_strtoul(opt, (char **)&opt, 0);
+                    if (*opt == 'G' || *opt == 'g') {
+                        base = 1024 * 1024;
+                        opt++;
+                    } if (*opt == 'M' || *opt == 'm') {
+                        base = 1024;
+                        opt++;
+                    } else if (*opt == 'K' || *opt == 'k')
+                        opt++;
+                    *(unsigned int *) param->var = value * base;
+                }
+                break;
             case OPT_BOOL:
                 *(int *)param->var = 1;
                 break;
diff -Nru a/xen/include/xen/init.h b/xen/include/xen/init.h
--- a/xen/include/xen/init.h    2005-04-05 09:03:22 -04:00
+++ b/xen/include/xen/init.h    2005-04-05 09:03:22 -04:00
@@ -59,7 +59,7 @@
  */
 struct kernel_param {
     const char *name;
-    enum { OPT_STR, OPT_UINT, OPT_BOOL } type;
+    enum { OPT_STR, OPT_UINT, OPT_UINT_UNIT, OPT_BOOL } type;
     void *var;
     unsigned int len;
 };
@@ -74,6 +74,10 @@
     static char __setup_str_##_var[] __initdata = _name; \
     static struct kernel_param __setup_##_var __attribute_used__ \
         __initsetup = { __setup_str_##_var, OPT_UINT, &_var, sizeof(_var) }
+#define integer_unit_param(_name, _var) \
+    static char __setup_str_##_var[] __initdata = _name; \
+    static struct kernel_param __setup_##_var __attribute_used__ \
+        __initsetup = { __setup_str_##_var, OPT_UINT_UNIT, &_var, sizeof(_var) 
}
 #define string_param(_name, _var) \
     static char __setup_str_##_var[] __initdata = _name; \
     static struct kernel_param __setup_##_var __attribute_used__ \

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.