All of lore.kernel.org
 help / color / mirror / Atom feed
* Allow tools to see the hypervisor command line.
@ 2009-06-17 15:32 Ian Campbell
  2009-06-17 15:42 ` Christoph Egger
  0 siblings, 1 reply; 4+ messages in thread
From: Ian Campbell @ 2009-06-17 15:32 UTC (permalink / raw)
  To: xen-devel, Keir Fraser


This is useful from tools in the same way /proc/cmdline is useful for
the domain 0 kernel.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>

diff -r 2e802c0a5c08 -r b7c94d5e638f tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c	Wed Jun 17 15:32:27 2009 +0100
+++ b/tools/python/xen/lowlevel/xc/xc.c	Wed Jun 17 16:31:38 2009 +0100
@@ -1132,6 +1132,7 @@
     xen_changeset_info_t xen_chgset;
     xen_capabilities_info_t xen_caps;
     xen_platform_parameters_t p_parms;
+    xen_commandline_t xen_commandline;
     long xen_version;
     long xen_pagesize;
     char str[128];
@@ -1153,13 +1154,16 @@
     if ( xc_version(self->xc_handle, XENVER_platform_parameters, &p_parms) != 0 )
         return pyxc_error_to_exception();
 
+    if ( xc_version(self->xc_handle, XENVER_commandline, &xen_commandline) != 0 )
+        return pyxc_error_to_exception();
+
     snprintf(str, sizeof(str), "virt_start=0x%lx", p_parms.virt_start);
 
     xen_pagesize = xc_version(self->xc_handle, XENVER_pagesize, NULL);
     if (xen_pagesize < 0 )
         return pyxc_error_to_exception();
 
-    return Py_BuildValue("{s:i,s:i,s:s,s:s,s:i,s:s,s:s,s:s,s:s,s:s,s:s}",
+    return Py_BuildValue("{s:i,s:i,s:s,s:s,s:i,s:s,s:s,s:s,s:s,s:s,s:s,s:s}",
                          "xen_major", xen_version >> 16,
                          "xen_minor", (xen_version & 0xffff),
                          "xen_extra", xen_extra,
@@ -1167,6 +1171,7 @@
                          "xen_pagesize", xen_pagesize,
                          "platform_params", str,
                          "xen_changeset", xen_chgset,
+                         "xen_commandline", xen_commandline,
                          "cc_compiler", xen_cc.compiler,
                          "cc_compile_by", xen_cc.compile_by,
                          "cc_compile_domain", xen_cc.compile_domain,
diff -r 2e802c0a5c08 -r b7c94d5e638f tools/python/xen/xend/XendNode.py
--- a/tools/python/xen/xend/XendNode.py	Wed Jun 17 15:32:27 2009 +0100
+++ b/tools/python/xen/xend/XendNode.py	Wed Jun 17 16:31:38 2009 +0100
@@ -91,6 +91,7 @@
         # is directly exposed via XenAPI
         self.other_config["xen_pagesize"] = self.xeninfo_dict()["xen_pagesize"]
         self.other_config["platform_params"] = self.xeninfo_dict()["platform_params"]
+        self.other_config["xen_commandline"] = self.xeninfo_dict()["xen_commandline"]
             
         # load CPU UUIDs
         saved_cpus = self.state_store.load_state('cpu')
@@ -612,7 +613,8 @@
             "cc_compile_by":     xeninfo_dict["cc_compile_by"],
             "cc_compile_domain": xeninfo_dict["cc_compile_domain"],
             "cc_compile_date":   xeninfo_dict["cc_compile_date"],
-            "xen_changeset":     xeninfo_dict["xen_changeset"]
+            "xen_changeset":     xeninfo_dict["xen_changeset"],
+            "xen_commandline":   xeninfo_dict["xen_commandline"]
             })
         
         return info
@@ -888,6 +890,7 @@
                       'xen_pagesize',
                       'platform_params',
                       'xen_changeset',
+                      'xen_commandline',
                       'cc_compiler',
                       'cc_compile_by',
                       'cc_compile_domain',
diff -r 2e802c0a5c08 -r b7c94d5e638f tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py	Wed Jun 17 15:32:27 2009 +0100
+++ b/tools/python/xen/xm/main.py	Wed Jun 17 16:31:38 2009 +0100
@@ -1757,6 +1757,7 @@
             "xen_scheduler":     getVal(["sched_policy"]),
             "xen_pagesize":      getVal(["other_config", "xen_pagesize"]),
             "platform_params":   getVal(["other_config", "platform_params"]),
+            "xen_commandline":   getVal(["other_config", "xen_commandline"]),
             "xen_changeset":     getVal(["software_version", "xen_changeset"]),
             "cc_compiler":       getVal(["software_version", "cc_compiler"]),
             "cc_compile_by":     getVal(["software_version", "cc_compile_by"]),
diff -r 2e802c0a5c08 -r b7c94d5e638f xen/common/compat/kernel.c
--- a/xen/common/compat/kernel.c	Wed Jun 17 15:32:27 2009 +0100
+++ b/xen/common/compat/kernel.c	Wed Jun 17 16:31:38 2009 +0100
@@ -14,6 +14,8 @@
 #include <compat/xen.h>
 #include <compat/nmi.h>
 #include <compat/version.h>
+
+extern xen_commandline_t saved_cmdline;
 
 #define xen_extraversion compat_extraversion
 #define xen_extraversion_t compat_extraversion_t
diff -r 2e802c0a5c08 -r b7c94d5e638f xen/common/kernel.c
--- a/xen/common/kernel.c	Wed Jun 17 15:32:27 2009 +0100
+++ b/xen/common/kernel.c	Wed Jun 17 16:31:38 2009 +0100
@@ -24,12 +24,16 @@
 
 int tainted;
 
+xen_commandline_t saved_cmdline;
+
 void cmdline_parse(char *cmdline)
 {
     char opt[100], *optval, *optkey, *q;
     const char *p = cmdline;
     struct kernel_param *param;
     int bool_assert;
+
+    safe_strcpy(saved_cmdline, cmdline);
 
     if ( p == NULL )
         return;
@@ -246,7 +250,14 @@
                            ARRAY_SIZE(current->domain->handle)) )
             return -EFAULT;
         return 0;
-    }    
+    }
+
+    case XENVER_commandline:
+    {
+        if ( copy_to_guest(arg, saved_cmdline, ARRAY_SIZE(saved_cmdline)) )
+            return -EFAULT;
+        return 0;
+    }
     }
 
     return -ENOSYS;
diff -r 2e802c0a5c08 -r b7c94d5e638f xen/include/public/version.h
--- a/xen/include/public/version.h	Wed Jun 17 15:32:27 2009 +0100
+++ b/xen/include/public/version.h	Wed Jun 17 16:31:38 2009 +0100
@@ -78,6 +78,9 @@
 /* arg == xen_domain_handle_t. */
 #define XENVER_guest_handle 8
 
+#define XENVER_commandline 9
+typedef char xen_commandline_t[1024];
+
 #endif /* __XEN_PUBLIC_VERSION_H__ */
 
 /*

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Allow tools to see the hypervisor command line.
  2009-06-17 15:32 Allow tools to see the hypervisor command line Ian Campbell
@ 2009-06-17 15:42 ` Christoph Egger
  2009-06-17 15:49   ` Ian Campbell
  0 siblings, 1 reply; 4+ messages in thread
From: Christoph Egger @ 2009-06-17 15:42 UTC (permalink / raw)
  To: xen-devel; +Cc: Ian Campbell, Keir Fraser

On Wednesday 17 June 2009 17:32:25 Ian Campbell wrote:
> This is useful from tools in the same way /proc/cmdline is useful for
> the domain 0 kernel.

On NetBSD Dom0, this is sysctl machdep.booted_kernel.
Current implementation doesn't work properly, since Xen throws away
the first argument at startup.
Is it possible to not kill it ?

Christoph


>
> Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
>
> diff -r 2e802c0a5c08 -r b7c94d5e638f tools/python/xen/lowlevel/xc/xc.c
> --- a/tools/python/xen/lowlevel/xc/xc.c	Wed Jun 17 15:32:27 2009 +0100
> +++ b/tools/python/xen/lowlevel/xc/xc.c	Wed Jun 17 16:31:38 2009 +0100
> @@ -1132,6 +1132,7 @@
>      xen_changeset_info_t xen_chgset;
>      xen_capabilities_info_t xen_caps;
>      xen_platform_parameters_t p_parms;
> +    xen_commandline_t xen_commandline;
>      long xen_version;
>      long xen_pagesize;
>      char str[128];
> @@ -1153,13 +1154,16 @@
>      if ( xc_version(self->xc_handle, XENVER_platform_parameters, &p_parms)
> != 0 ) return pyxc_error_to_exception();
>
> +    if ( xc_version(self->xc_handle, XENVER_commandline, &xen_commandline)
> != 0 ) +        return pyxc_error_to_exception();
> +
>      snprintf(str, sizeof(str), "virt_start=0x%lx", p_parms.virt_start);
>
>      xen_pagesize = xc_version(self->xc_handle, XENVER_pagesize, NULL);
>      if (xen_pagesize < 0 )
>          return pyxc_error_to_exception();
>
> -    return Py_BuildValue("{s:i,s:i,s:s,s:s,s:i,s:s,s:s,s:s,s:s,s:s,s:s}",
> +    return
> Py_BuildValue("{s:i,s:i,s:s,s:s,s:i,s:s,s:s,s:s,s:s,s:s,s:s,s:s}",
> "xen_major", xen_version >> 16,
>                           "xen_minor", (xen_version & 0xffff),
>                           "xen_extra", xen_extra,
> @@ -1167,6 +1171,7 @@
>                           "xen_pagesize", xen_pagesize,
>                           "platform_params", str,
>                           "xen_changeset", xen_chgset,
> +                         "xen_commandline", xen_commandline,
>                           "cc_compiler", xen_cc.compiler,
>                           "cc_compile_by", xen_cc.compile_by,
>                           "cc_compile_domain", xen_cc.compile_domain,
> diff -r 2e802c0a5c08 -r b7c94d5e638f tools/python/xen/xend/XendNode.py
> --- a/tools/python/xen/xend/XendNode.py	Wed Jun 17 15:32:27 2009 +0100
> +++ b/tools/python/xen/xend/XendNode.py	Wed Jun 17 16:31:38 2009 +0100
> @@ -91,6 +91,7 @@
>          # is directly exposed via XenAPI
>          self.other_config["xen_pagesize"] =
> self.xeninfo_dict()["xen_pagesize"] self.other_config["platform_params"] =
> self.xeninfo_dict()["platform_params"] +       
> self.other_config["xen_commandline"] =
> self.xeninfo_dict()["xen_commandline"]
>
>          # load CPU UUIDs
>          saved_cpus = self.state_store.load_state('cpu')
> @@ -612,7 +613,8 @@
>              "cc_compile_by":     xeninfo_dict["cc_compile_by"],
>              "cc_compile_domain": xeninfo_dict["cc_compile_domain"],
>              "cc_compile_date":   xeninfo_dict["cc_compile_date"],
> -            "xen_changeset":     xeninfo_dict["xen_changeset"]
> +            "xen_changeset":     xeninfo_dict["xen_changeset"],
> +            "xen_commandline":   xeninfo_dict["xen_commandline"]
>              })
>
>          return info
> @@ -888,6 +890,7 @@
>                        'xen_pagesize',
>                        'platform_params',
>                        'xen_changeset',
> +                      'xen_commandline',
>                        'cc_compiler',
>                        'cc_compile_by',
>                        'cc_compile_domain',
> diff -r 2e802c0a5c08 -r b7c94d5e638f tools/python/xen/xm/main.py
> --- a/tools/python/xen/xm/main.py	Wed Jun 17 15:32:27 2009 +0100
> +++ b/tools/python/xen/xm/main.py	Wed Jun 17 16:31:38 2009 +0100
> @@ -1757,6 +1757,7 @@
>              "xen_scheduler":     getVal(["sched_policy"]),
>              "xen_pagesize":      getVal(["other_config", "xen_pagesize"]),
>              "platform_params":   getVal(["other_config",
> "platform_params"]), +            "xen_commandline":  
> getVal(["other_config", "xen_commandline"]), "xen_changeset":    
> getVal(["software_version", "xen_changeset"]), "cc_compiler":      
> getVal(["software_version", "cc_compiler"]), "cc_compile_by":    
> getVal(["software_version", "cc_compile_by"]), diff -r 2e802c0a5c08 -r
> b7c94d5e638f xen/common/compat/kernel.c
> --- a/xen/common/compat/kernel.c	Wed Jun 17 15:32:27 2009 +0100
> +++ b/xen/common/compat/kernel.c	Wed Jun 17 16:31:38 2009 +0100
> @@ -14,6 +14,8 @@
>  #include <compat/xen.h>
>  #include <compat/nmi.h>
>  #include <compat/version.h>
> +
> +extern xen_commandline_t saved_cmdline;
>
>  #define xen_extraversion compat_extraversion
>  #define xen_extraversion_t compat_extraversion_t
> diff -r 2e802c0a5c08 -r b7c94d5e638f xen/common/kernel.c
> --- a/xen/common/kernel.c	Wed Jun 17 15:32:27 2009 +0100
> +++ b/xen/common/kernel.c	Wed Jun 17 16:31:38 2009 +0100
> @@ -24,12 +24,16 @@
>
>  int tainted;
>
> +xen_commandline_t saved_cmdline;
> +
>  void cmdline_parse(char *cmdline)
>  {
>      char opt[100], *optval, *optkey, *q;
>      const char *p = cmdline;
>      struct kernel_param *param;
>      int bool_assert;
> +
> +    safe_strcpy(saved_cmdline, cmdline);
>
>      if ( p == NULL )
>          return;
> @@ -246,7 +250,14 @@
>                             ARRAY_SIZE(current->domain->handle)) )
>              return -EFAULT;
>          return 0;
> -    }
> +    }
> +
> +    case XENVER_commandline:
> +    {
> +        if ( copy_to_guest(arg, saved_cmdline, ARRAY_SIZE(saved_cmdline))
> ) +            return -EFAULT;
> +        return 0;
> +    }
>      }
>
>      return -ENOSYS;
> diff -r 2e802c0a5c08 -r b7c94d5e638f xen/include/public/version.h
> --- a/xen/include/public/version.h	Wed Jun 17 15:32:27 2009 +0100
> +++ b/xen/include/public/version.h	Wed Jun 17 16:31:38 2009 +0100
> @@ -78,6 +78,9 @@
>  /* arg == xen_domain_handle_t. */
>  #define XENVER_guest_handle 8
>
> +#define XENVER_commandline 9
> +typedef char xen_commandline_t[1024];
> +
>  #endif /* __XEN_PUBLIC_VERSION_H__ */
>
>  /*
>
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel



-- 
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Thomas M. McCoy, Giuliano Meroni
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Allow tools to see the hypervisor command line.
  2009-06-17 15:42 ` Christoph Egger
@ 2009-06-17 15:49   ` Ian Campbell
  2009-06-17 16:08     ` Christoph Egger
  0 siblings, 1 reply; 4+ messages in thread
From: Ian Campbell @ 2009-06-17 15:49 UTC (permalink / raw)
  To: Christoph Egger; +Cc: Keir, xen-devel@lists.xensource.com, Fraser

On Wed, 2009-06-17 at 11:42 -0400, Christoph Egger wrote:
> On Wednesday 17 June 2009 17:32:25 Ian Campbell wrote:
> > This is useful from tools in the same way /proc/cmdline is useful for
> > the domain 0 kernel.
> 
> On NetBSD Dom0, this is sysctl machdep.booted_kernel.
> Current implementation doesn't work properly, since Xen throws away
> the first argument at startup.
> Is it possible to not kill it ?

You mean "module /boot/netsd foo=bar baz=1" becomes just "foo=bar baz=1"
on the command line which the kernel sees but on native netbsd it would
be "/boot/netsd foo=bar baz=1"? This patch wouldn't make any difference
to that (I guess you are just bringing it up as an aside).

Changing Xen's behaviour here would be interesting -- Linux for example
doesn't expect to get the extra element on the command line, not sure
what it would do with it, similarly for other existing dom0 guests. It
would also be inconsistent with how PV domU's are launched.

Ian.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Allow tools to see the hypervisor command line.
  2009-06-17 15:49   ` Ian Campbell
@ 2009-06-17 16:08     ` Christoph Egger
  0 siblings, 0 replies; 4+ messages in thread
From: Christoph Egger @ 2009-06-17 16:08 UTC (permalink / raw)
  To: Ian Campbell; +Cc: xen-devel@lists.xensource.com, Keir Fraser

On Wednesday 17 June 2009 17:49:41 Ian Campbell wrote:
> On Wed, 2009-06-17 at 11:42 -0400, Christoph Egger wrote:
> > On Wednesday 17 June 2009 17:32:25 Ian Campbell wrote:
> > > This is useful from tools in the same way /proc/cmdline is useful for
> > > the domain 0 kernel.
> >
> > On NetBSD Dom0, this is sysctl machdep.booted_kernel.
> > Current implementation doesn't work properly, since Xen throws away
> > the first argument at startup.
> > Is it possible to not kill it ?
>
> You mean "module /boot/netsd foo=bar baz=1" becomes just "foo=bar baz=1"
> on the command line which the kernel sees but on native netbsd it would
> be "/boot/netsd foo=bar baz=1"?

Correct. On NetBSD, the system tools accessing kernel virtual space need the
kernel name to find the correct one since the kernel can be anywere and can
have any name (though there's a default name and default place).

You can also place the linux kernel anywhere and have any name for it.
GRUB doesn't care about it, right ? (Though there's a default name and a
default place as well)

> This patch wouldn't make any difference 
> to that (I guess you are just bringing it up as an aside).

I supposed so.

> Changing Xen's behaviour here would be interesting -- Linux for example
> doesn't expect to get the extra element on the command line, not sure
> what it would do with it, similarly for other existing dom0 guests. It
> would also be inconsistent with how PV domU's are launched.

I suppose, Xen throws the first argument away for historical reasons
with the assumption that noone needs it because Linux has no use for it.

Christoph


-- 
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Thomas M. McCoy, Giuliano Meroni
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-06-17 16:08 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-17 15:32 Allow tools to see the hypervisor command line Ian Campbell
2009-06-17 15:42 ` Christoph Egger
2009-06-17 15:49   ` Ian Campbell
2009-06-17 16:08     ` Christoph Egger

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.