qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] vl.c: Replace -virtfs string manipulation with QemuOpts
@ 2011-03-13 18:08 Stefan Hajnoczi
  2011-03-15 21:35 ` Venkateswararao Jujjuri (JV)
  0 siblings, 1 reply; 2+ messages in thread
From: Stefan Hajnoczi @ 2011-03-13 18:08 UTC (permalink / raw)
  To: qemu-devel
  Cc: Anthony Liguori, Venkateswararao Jujjuri, Aneesh Kumar K.V,
	Stefan Hajnoczi

The -virtfs option creates an fsdev representing the pass-through file
system and a guest-visible virtio-9p-pci device that can access this
file system.  This patch replaces the string manipulation used to build
and reparse option lists with direct QemuOpts calls.  Removing the
string manipulation code makes it easier to maintain and less error
prone.

An error message is also updated to use "mount_tag" instead of
"mnt_tag".

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
 vl.c |   56 +++++++++++++++++++-------------------------------------
 1 files changed, 19 insertions(+), 37 deletions(-)

Aneesh: This approach should make a host page bypass option easier to add.

diff --git a/vl.c b/vl.c
index 5e007a7..f500c4c 100644
--- a/vl.c
+++ b/vl.c
@@ -2411,9 +2411,8 @@ int main(int argc, char **argv, char **envp)
                 }
                 break;
             case QEMU_OPTION_virtfs: {
-                char *arg_fsdev = NULL;
-                char *arg_9p = NULL;
-                int len = 0;
+                QemuOpts *fsdev;
+                QemuOpts *device;
 
                 olist = qemu_find_opts("virtfs");
                 if (!olist) {
@@ -2432,45 +2431,28 @@ int main(int argc, char **argv, char **envp)
                         qemu_opt_get(opts, "security_model") == NULL) {
                     fprintf(stderr, "Usage: -virtfs fstype,path=/share_path/,"
                             "security_model=[mapped|passthrough|none],"
-                            "mnt_tag=tag.\n");
+                            "mount_tag=tag.\n");
                     exit(1);
                 }
 
-                len = strlen(",id=,path=,security_model=");
-                len += strlen(qemu_opt_get(opts, "fstype"));
-                len += strlen(qemu_opt_get(opts, "mount_tag"));
-                len += strlen(qemu_opt_get(opts, "path"));
-                len += strlen(qemu_opt_get(opts, "security_model"));
-                arg_fsdev = qemu_malloc((len + 1) * sizeof(*arg_fsdev));
-
-                snprintf(arg_fsdev, (len + 1) * sizeof(*arg_fsdev),
-                         "%s,id=%s,path=%s,security_model=%s",
-                         qemu_opt_get(opts, "fstype"),
-                         qemu_opt_get(opts, "mount_tag"),
-                         qemu_opt_get(opts, "path"),
-                         qemu_opt_get(opts, "security_model"));
-
-                len = strlen("virtio-9p-pci,fsdev=,mount_tag=");
-                len += 2*strlen(qemu_opt_get(opts, "mount_tag"));
-                arg_9p = qemu_malloc((len + 1) * sizeof(*arg_9p));
-
-                snprintf(arg_9p, (len + 1) * sizeof(*arg_9p),
-                         "virtio-9p-pci,fsdev=%s,mount_tag=%s",
-                         qemu_opt_get(opts, "mount_tag"),
-                         qemu_opt_get(opts, "mount_tag"));
-
-                if (!qemu_opts_parse(qemu_find_opts("fsdev"), arg_fsdev, 1)) {
-                    fprintf(stderr, "parse error [fsdev]: %s\n", optarg);
+                fsdev = qemu_opts_create(qemu_find_opts("fsdev"),
+                                         qemu_opt_get(opts, "mount_tag"), 1);
+                if (!fsdev) {
+                    fprintf(stderr, "duplicate fsdev: %s\n",
+                            qemu_opt_get(opts, "mount_tag"));
                     exit(1);
                 }
-
-                if (!qemu_opts_parse(qemu_find_opts("device"), arg_9p, 1)) {
-                    fprintf(stderr, "parse error [device]: %s\n", optarg);
-                    exit(1);
-                }
-
-                qemu_free(arg_fsdev);
-                qemu_free(arg_9p);
+                qemu_opt_set(fsdev, "fstype", qemu_opt_get(opts, "fstype"));
+                qemu_opt_set(fsdev, "path", qemu_opt_get(opts, "path"));
+                qemu_opt_set(fsdev, "security_model",
+                             qemu_opt_get(opts, "security_model"));
+
+                device = qemu_opts_create(qemu_find_opts("device"), NULL, 0);
+                qemu_opt_set(device, "driver", "virtio-9p-pci");
+                qemu_opt_set(device, "fsdev",
+                             qemu_opt_get(opts, "mount_tag"));
+                qemu_opt_set(device, "mount_tag",
+                             qemu_opt_get(opts, "mount_tag"));
                 break;
             }
             case QEMU_OPTION_serial:
-- 
1.7.2.3

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

* Re: [Qemu-devel] [PATCH] vl.c: Replace -virtfs string manipulation with QemuOpts
  2011-03-13 18:08 [Qemu-devel] [PATCH] vl.c: Replace -virtfs string manipulation with QemuOpts Stefan Hajnoczi
@ 2011-03-15 21:35 ` Venkateswararao Jujjuri (JV)
  0 siblings, 0 replies; 2+ messages in thread
From: Venkateswararao Jujjuri (JV) @ 2011-03-15 21:35 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: Anthony Liguori, qemu-devel, Aneesh Kumar K.V

On 3/13/2011 11:08 AM, Stefan Hajnoczi wrote:
> The -virtfs option creates an fsdev representing the pass-through file
> system and a guest-visible virtio-9p-pci device that can access this
> file system.  This patch replaces the string manipulation used to build
> and reparse option lists with direct QemuOpts calls.  Removing the
> string manipulation code makes it easier to maintain and less error
> prone.
> 
> An error message is also updated to use "mount_tag" instead of
> "mnt_tag".
> 


> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

Looks good to me with one nitpick below.. otherwise
Reviewed-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>

> ---
>  vl.c |   56 +++++++++++++++++++-------------------------------------
>  1 files changed, 19 insertions(+), 37 deletions(-)
> 
> Aneesh: This approach should make a host page bypass option easier to add.
> 
> diff --git a/vl.c b/vl.c
> index 5e007a7..f500c4c 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -2411,9 +2411,8 @@ int main(int argc, char **argv, char **envp)
>                  }
>                  break;
>              case QEMU_OPTION_virtfs: {
> -                char *arg_fsdev = NULL;
> -                char *arg_9p = NULL;
> -                int len = 0;
> +                QemuOpts *fsdev;
> +                QemuOpts *device;
> 
>                  olist = qemu_find_opts("virtfs");
>                  if (!olist) {
> @@ -2432,45 +2431,28 @@ int main(int argc, char **argv, char **envp)
>                          qemu_opt_get(opts, "security_model") == NULL) {
>                      fprintf(stderr, "Usage: -virtfs fstype,path=/share_path/,"
>                              "security_model=[mapped|passthrough|none],"
> -                            "mnt_tag=tag.\n");
> +                            "mount_tag=tag.\n");
>                      exit(1);
>                  }
> 
> -                len = strlen(",id=,path=,security_model=");
> -                len += strlen(qemu_opt_get(opts, "fstype"));
> -                len += strlen(qemu_opt_get(opts, "mount_tag"));
> -                len += strlen(qemu_opt_get(opts, "path"));
> -                len += strlen(qemu_opt_get(opts, "security_model"));
> -                arg_fsdev = qemu_malloc((len + 1) * sizeof(*arg_fsdev));
> -
> -                snprintf(arg_fsdev, (len + 1) * sizeof(*arg_fsdev),
> -                         "%s,id=%s,path=%s,security_model=%s",
> -                         qemu_opt_get(opts, "fstype"),
> -                         qemu_opt_get(opts, "mount_tag"),
> -                         qemu_opt_get(opts, "path"),
> -                         qemu_opt_get(opts, "security_model"));
> -
> -                len = strlen("virtio-9p-pci,fsdev=,mount_tag=");
> -                len += 2*strlen(qemu_opt_get(opts, "mount_tag"));
> -                arg_9p = qemu_malloc((len + 1) * sizeof(*arg_9p));
> -
> -                snprintf(arg_9p, (len + 1) * sizeof(*arg_9p),
> -                         "virtio-9p-pci,fsdev=%s,mount_tag=%s",
> -                         qemu_opt_get(opts, "mount_tag"),
> -                         qemu_opt_get(opts, "mount_tag"));
> -
> -                if (!qemu_opts_parse(qemu_find_opts("fsdev"), arg_fsdev, 1)) {
> -                    fprintf(stderr, "parse error [fsdev]: %s\n", optarg);
> +                fsdev = qemu_opts_create(qemu_find_opts("fsdev"),
> +                                         qemu_opt_get(opts, "mount_tag"), 1);
> +                if (!fsdev) {
> +                    fprintf(stderr, "duplicate fsdev: %s\n",

"duplicate fsdev id: %s\n"

- JV

> +                            qemu_opt_get(opts, "mount_tag"));
>                      exit(1);
>                  }
> -
> -                if (!qemu_opts_parse(qemu_find_opts("device"), arg_9p, 1)) {
> -                    fprintf(stderr, "parse error [device]: %s\n", optarg);
> -                    exit(1);
> -                }
> -
> -                qemu_free(arg_fsdev);
> -                qemu_free(arg_9p);
> +                qemu_opt_set(fsdev, "fstype", qemu_opt_get(opts, "fstype"));
> +                qemu_opt_set(fsdev, "path", qemu_opt_get(opts, "path"));
> +                qemu_opt_set(fsdev, "security_model",
> +                             qemu_opt_get(opts, "security_model"));
> +
> +                device = qemu_opts_create(qemu_find_opts("device"), NULL, 0);
> +                qemu_opt_set(device, "driver", "virtio-9p-pci");
> +                qemu_opt_set(device, "fsdev",
> +                             qemu_opt_get(opts, "mount_tag"));
> +                qemu_opt_set(device, "mount_tag",
> +                             qemu_opt_get(opts, "mount_tag"));
>                  break;
>              }
>              case QEMU_OPTION_serial:

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

end of thread, other threads:[~2011-03-15 21:35 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-13 18:08 [Qemu-devel] [PATCH] vl.c: Replace -virtfs string manipulation with QemuOpts Stefan Hajnoczi
2011-03-15 21:35 ` Venkateswararao Jujjuri (JV)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).