qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Hu Tao <hutao@cn.fujitsu.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	qemu-devel@nongnu.org, Igor Mammedov <imammedo@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3.2 07/31] vl: redo -object parsing
Date: Sun, 8 Jun 2014 12:05:12 +0300	[thread overview]
Message-ID: <20140608090512.GA14823@redhat.com> (raw)
In-Reply-To: <fec50a257535a8b0389718d978da8a26939d8887.1400049817.git.hutao@cn.fujitsu.com>

On Wed, May 14, 2014 at 05:43:11PM +0800, Hu Tao wrote:
> From: Paolo Bonzini <pbonzini@redhat.com>
> 
> Follow the lines of the HMP implementation, using OptsVisitor
> to parse the options.  This gives access to OptsVisitor's
> rich parsing of integer lists.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

This needs to be rebased on top of master:
it conflicts with
commit 6b1b1440199c1a910b91bc9e029974f44746633d
    machine: Make -machine opts properties of MachineState


> ---
>  vl.c | 86 ++++++++++++++++++++++++++++----------------------------------------
>  1 file changed, 35 insertions(+), 51 deletions(-)
> 
> diff --git a/vl.c b/vl.c
> index 7020377..641d459 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -115,8 +115,7 @@ int main(int argc, char **argv)
>  #include "qemu/osdep.h"
>  
>  #include "ui/qemu-spice.h"
> -#include "qapi/string-input-visitor.h"
> -#include "qom/object_interfaces.h"
> +#include "qapi/opts-visitor.h"
>  
>  #define DEFAULT_RAM_SIZE 128
>  
> @@ -2786,68 +2785,53 @@ static void free_and_trace(gpointer mem)
>      free(mem);
>  }
>  
> -static int object_set_property(const char *name, const char *value, void *opaque)
> -{
> -    Object *obj = OBJECT(opaque);
> -    StringInputVisitor *siv;
> -    Error *local_err = NULL;
> -
> -    if (strcmp(name, "qom-type") == 0 || strcmp(name, "id") == 0) {
> -        return 0;
> -    }
> -
> -    siv = string_input_visitor_new(value);
> -    object_property_set(obj, string_input_get_visitor(siv), name, &local_err);
> -    string_input_visitor_cleanup(siv);
> -
> -    if (local_err) {
> -        qerror_report_err(local_err);
> -        error_free(local_err);
> -        return -1;
> -    }
> -
> -    return 0;
> -}
> -
>  static int object_create(QemuOpts *opts, void *opaque)
>  {
> -    const char *type = qemu_opt_get(opts, "qom-type");
> -    const char *id = qemu_opts_id(opts);
> -    Error *local_err = NULL;
> -    Object *obj;
> -
> -    g_assert(type != NULL);
> -
> -    if (id == NULL) {
> -        qerror_report(QERR_MISSING_PARAMETER, "id");
> -        return -1;
> +    Error *err = NULL;
> +    char *type = NULL;
> +    char *id = NULL;
> +    void *dummy = NULL;
> +    OptsVisitor *ov;
> +    QDict *pdict;
> +
> +    ov = opts_visitor_new(opts);
> +    pdict = qemu_opts_to_qdict(opts, NULL);
> +
> +    visit_start_struct(opts_get_visitor(ov), &dummy, NULL, NULL, 0, &err);
> +    if (err) {
> +        goto out;
>      }
>  
> -    obj = object_new(type);
> -    if (qemu_opt_foreach(opts, object_set_property, obj, 1) < 0) {
> -        object_unref(obj);
> -        return -1;
> +    qdict_del(pdict, "qom-type");
> +    visit_type_str(opts_get_visitor(ov), &type, "qom-type", &err);
> +    if (err) {
> +        goto out;
>      }
>  
> -    if (!object_dynamic_cast(obj, TYPE_USER_CREATABLE)) {
> -        error_setg(&local_err, "object '%s' isn't supported by -object",
> -                   id);
> +    qdict_del(pdict, "id");
> +    visit_type_str(opts_get_visitor(ov), &id, "id", &err);
> +    if (err) {
>          goto out;
>      }
>  
> -    user_creatable_complete(obj, &local_err);
> -    if (local_err) {
> +    object_add(type, id, pdict, opts_get_visitor(ov), &err);
> +    if (err) {
>          goto out;
>      }
> -
> -    object_property_add_child(container_get(object_get_root(), "/objects"),
> -                              id, obj, &local_err);
> +    visit_end_struct(opts_get_visitor(ov), &err);
> +    if (err) {
> +        qmp_object_del(id, NULL);
> +    }
>  
>  out:
> -    object_unref(obj);
> -    if (local_err) {
> -        qerror_report_err(local_err);
> -        error_free(local_err);
> +    opts_visitor_cleanup(ov);
> +
> +    QDECREF(pdict);
> +    g_free(id);
> +    g_free(type);
> +    g_free(dummy);
> +    if (err) {
> +        qerror_report_err(err);
>          return -1;
>      }
>      return 0;
> -- 
> 1.8.5.2.229.g4448466
> 

  reply	other threads:[~2014-06-08  9:05 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-14  9:43 [Qemu-devel] [PATCH v3.2 00/31] NUMA series, and hostmem improvements Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 01/31] NUMA: move numa related code to new file numa.c Hu Tao
2014-06-08 10:09   ` Michael S. Tsirkin
2014-06-09  2:22     ` Hu Tao
2014-06-09  6:26       ` Michael S. Tsirkin
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 02/31] NUMA: check if the total numa memory size is equal to ram_size Hu Tao
2014-06-08 10:09   ` Michael S. Tsirkin
2014-06-09  2:23     ` Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 03/31] NUMA: Add numa_info structure to contain numa nodes info Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 04/31] NUMA: convert -numa option to use OptsVisitor Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 05/31] NUMA: expand MAX_NODES from 64 to 128 Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 06/31] man: improve -numa doc Hu Tao
2014-05-14 20:11   ` Eduardo Habkost
2014-06-08 10:09   ` Michael S. Tsirkin
2014-06-09  2:23     ` Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 07/31] vl: redo -object parsing Hu Tao
2014-06-08  9:05   ` Michael S. Tsirkin [this message]
2014-06-09  2:13     ` Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 08/31] qmp: allow object-add completion handler to get canonical path Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 09/31] qmp: improve error reporting for -object and object-add Hu Tao
2014-05-14 20:13   ` Eduardo Habkost
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 10/31] pc: pass QEMUMachineInitArgs to pc_memory_init Hu Tao
2014-05-14 20:14   ` Eduardo Habkost
2014-06-08  9:40   ` Michael S. Tsirkin
2014-06-09  2:13     ` Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 11/31] numa: introduce memory_region_allocate_system_memory Hu Tao
2014-05-14 20:30   ` Eduardo Habkost
2014-06-09  2:24     ` Hu Tao
2014-06-08 10:10   ` Michael S. Tsirkin
2014-06-09  2:27     ` Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 12/31] add memdev backend infrastructure Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 13/31] numa: add -numa node, memdev= option Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 14/31] memory: reorganize file-based allocation Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 15/31] memory: move mem_path handling to memory_region_allocate_system_memory Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 16/31] memory: add error propagation to file-based RAM allocation Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 17/31] memory: move preallocation code out of exec.c Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 18/31] memory: move RAM_PREALLOC_MASK to exec.c, rename Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 19/31] hostmem: add file-based HostMemoryBackend Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 20/31] hostmem: separate allocation from UserCreatable complete method Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 21/31] hostmem: add merge and dump properties Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 22/31] hostmem: allow preallocation of any memory region Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 23/31] hostmem: add property to map memory with MAP_SHARED Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 24/31] configure: add Linux libnuma detection Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 25/31] hostmem: add properties for NUMA memory policy Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 26/31] Introduce signed range Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 27/31] qapi: make string input visitor parse int list Hu Tao
2014-06-08 10:11   ` Michael S. Tsirkin
2014-06-09  2:28     ` Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 28/31] qapi: make string output " Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 29/31] qom: introduce object_property_get_enum and object_property_get_uint16List Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 30/31] qmp: add query-memdev Hu Tao
2014-05-14  9:43 ` [Qemu-devel] [PATCH v3.2 31/31] hmp: add info memdev Hu Tao
2014-06-08 10:10   ` Michael S. Tsirkin
2014-06-09  2:28     ` Hu Tao
2014-06-08 10:11 ` [Qemu-devel] [PATCH v3.2 00/31] NUMA series, and hostmem improvements Michael S. Tsirkin
2014-06-09  2:30   ` Hu Tao

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=20140608090512.GA14823@redhat.com \
    --to=mst@redhat.com \
    --cc=hutao@cn.fujitsu.com \
    --cc=imammedo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.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 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).