From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51261) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WL5VG-0007eI-0P for qemu-devel@nongnu.org; Wed, 05 Mar 2014 01:40:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WL5V8-0002uT-Sj for qemu-devel@nongnu.org; Wed, 05 Mar 2014 01:40:29 -0500 Received: from mx1.redhat.com ([209.132.183.28]:2419) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WL5V8-0002po-Hl for qemu-devel@nongnu.org; Wed, 05 Mar 2014 01:40:22 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s256eHgu006090 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 5 Mar 2014 01:40:17 -0500 Date: Wed, 5 Mar 2014 14:40:14 +0800 From: Amos Kong Message-ID: <20140305064014.GD2669@amosk.info> References: <1393912317-26221-1-git-send-email-akong@redhat.com> <1393912317-26221-3-git-send-email-akong@redhat.com> <53164D9C.4080500@redhat.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="cmJC7u66zC7hs+87" Content-Disposition: inline In-Reply-To: <53164D9C.4080500@redhat.com> Subject: Re: [Qemu-devel] [PATCH v3 2/2] query-command-line-options: query all the options in qemu-options.hx List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake Cc: libvir-list@redhat.com, armbru@redhat.com, qemu-devel@nongnu.org, lcapitulino@redhat.com, jyang@redhat.com, pbonzini@redhat.com --cmJC7u66zC7hs+87 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Mar 04, 2014 at 03:03:08PM -0700, Eric Blake wrote: Hi Eric, > On 03/03/2014 10:51 PM, Amos Kong wrote: > > vm_config_groups[] only contains part of the options which have > > argument, and all options which have no argument aren't added to > > vm_config_groups[]. Current query-command-line-options only > > checks options from vm_config_groups[], so some options will > > be lost. > >=20 > > We have some macros in qemu-options.hx to generate a table that > > contains all the options. This patch tries to query options from > > the table. > >=20 > > Then we won't lose the legacy options that weren't added to > > vm_config_groups[] (eg: -vnc, -smbios). The options that have > > no argument will also be returned (eg: -enable-fips) > >=20 > > Some options that have argument have a NULL desc list, some > > options don't have argument, and "parameters" is mandatory > > in the past. So we add a new field "arguments" to present >=20 > Here you call it "arguments", but in the code you call it "argument". >=20 > > if the option takes unspecified arguments. > >=20 > > Signed-off-by: Amos Kong > > --- > > qapi-schema.json | 8 ++++++-- > > qemu-options.h | 18 ++++++++++++++++++ > > util/qemu-config.c | 35 +++++++++++++++++++++++++++++------ > > vl.c | 17 ----------------- > > 4 files changed, 53 insertions(+), 25 deletions(-) >=20 > Umm, did you test this? >=20 > $ printf %s\\n \ > '{"execute":"qmp_capabilities"}' \ > '{"execute":"query-command-line-options"}' \ > '{"execute":"quit"}' \ > | ./x86_64-softmmu/qemu-system-x86_64 -qmp stdio | grep fips > $ =20 {"return": [{"parameters": [{"name": "timestamp", "type": "boolean"}], "opt= ion": "msg"}... {"parameters": [], "option": "enable-fips", "argument": fal= se}, ... the output of query-command-line-options is one-line, it contains all the options. I can find 'englab-fips' in the output. > I was expecting -enable-fips to appear somewhere in the output. > Something's not right, but I'm not going to figure out what. Here's > hoping v4 actually gets it working. >=20 > >=20 > > diff --git a/qapi-schema.json b/qapi-schema.json > > index 05ced9d..0bd8e12 100644 > > --- a/qapi-schema.json > > +++ b/qapi-schema.json > > @@ -3944,12 +3944,16 @@ > > # > > # @option: option name > > # > > -# @parameters: an array of @CommandLineParameterInfo > > +# @parameters: array of @CommandLineParameterInfo, possibly empty > > +# @argument: @optional present if the @parameters array is empty. If > > +# true, then the option takes unspecified arguments, if > > +# false, then the option is merely a boolean flag (since 2.= 0) >=20 > For that matter, even this wasn't true. In my testing, I see the same > thing as pre-patch for the -smbios option: >=20 > {"parameters": [], "option": "smbios"} >=20 > but the docs imply that I should now see: >=20 > {"parameters": [], "option": "smbios", "argument": true} I really got : {"parameters": [], "option": "smbios", "argument": true} (I was testing with latest qemu upstream + my patches, attached the output file) > > +++ b/qemu-options.h > > @@ -25,6 +25,8 @@ > > * THE SOFTWARE. > > */ > > =20 > > +#include "sysemu/arch_init.h" > > + > > #ifndef _QEMU_OPTIONS_H_ > > #define _QEMU_OPTIONS_H_ > > =20 > > @@ -33,4 +35,20 @@ enum { > > #include "qemu-options-wrapper.h" > > }; > > =20 > > +#define HAS_ARG 0x0001 >=20 > Defining this non-namespace-friendly macro in a header seems risky. Can > you localize its use, by using it only in the .c file that needs it, > and/or #undef it when done using it? I will define it in vl.c & qemu-config.c =20 > > + > > +typedef struct QEMUOption { > > + const char *name; > > + int flags; > > + int index; > > + uint32_t arch_mask; > > +} QEMUOption; Keep this in qemu-options.h > > +static const QEMUOption qemu_options[] =3D { > > + { "h", 0, QEMU_OPTION_h, QEMU_ARCH_ALL }, > > +#define QEMU_OPTIONS_GENERATE_OPTIONS > > +#include "qemu-options-wrapper.h" > > + { NULL }, > > +}; > > Sticking a static array in a header is even worse than the v2 - now > every .c file that includes this .h has its own copy of the variable. > You really want the .h to just declare the variable as extern, then have > a single .c file actually implement it. I will implement it in qemu-config.c when I post V4, thanks =20 > > + for (i =3D 0; qemu_options[i].name; i++) { > > + if (!has_option || !strcmp(option, qemu_options[i].name)) { > > info =3D g_malloc0(sizeof(*info)); >=20 > defaults info->has_argument to false and info->argument to false... >=20 > > - info->option =3D g_strdup(vm_config_groups[i]->name); > > - if (!strcmp("drive", vm_config_groups[i]->name)) { > > + info->option =3D g_strdup(qemu_options[i].name); > > + > > + int idx =3D get_group_index(qemu_options[i].name); > > + > > + if (qemu_options[i].flags) { if flags =3D=3D HAS_ARG =3D=3D 0x1 ---> True > > + info->argument =3D true; +# If true, then the option takes unspecified argument= s, > > + } else { /// default case +# if false, then the option is merely a boolean flag } >=20 > ...changes info->argument to true for options that take unspecified > arguments (such as -smbios), but with no effect to output unless... >=20 > > + > > + if (!strcmp("drive", qemu_options[i].name)) { > > info->parameters =3D get_drive_infolist(); > > - } else { > > + } else if (idx >=3D 0) { > > info->parameters =3D > > - get_param_infolist(vm_config_groups[i]->desc); > > + get_param_infolist(vm_config_groups[idx]->desc); > > + } > > + > > + if (!info->parameters) { > > + info->has_argument =3D true; // # @argument: @optional present if the @parameters array is empty. If info->parameters is NULL, the array is empty, then @argument presents. > > } else { @argument won't present=20 option has argument and array isn't empty } >=20 > ...this line gets executed. I guess info->parameters is false for both > boolean options (where info->argument remains at its default of false) > and for unspecified arguments (where info->argument was set to true > above), while omitting the argument output for options that take named > options? But while it looks okay in theory, the implementation was > still broken based on my testing, so I'm not sure what went wrong. I can only confirm the issue of macro/table definition. Can you help to re-check if something is wrong in your environment? --=20 Amos. --cmJC7u66zC7hs+87 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="query-command-line-options.output.txt" Content-Transfer-Encoding: quoted-printable {"QMP": {"version": {"qemu": {"micro": 50, "minor": 7, "major": 1}, "packag= e": ""}, "capabilities": []}}=0D {"return": {}}=0D {"return": [{"parameters": [{"name": "timestamp", "type": "boolean"}], "opt= ion": "msg"}, {"parameters": [], "option": "object", "argument": true}, {"p= arameters": [], "option": "tdf", "argument": false}, {"parameters": [], "op= tion": "no-kvm-irqchip", "argument": false}, {"parameters": [], "option": "= no-kvm-pit", "argument": false}, {"parameters": [], "option": "no-kvm-pit-r= einjection", "argument": false}, {"parameters": [], "option": "no-kvm", "ar= gument": false}, {"parameters": [], "option": "enable-fips", "argument": fa= lse}, {"parameters": [], "option": "qtest-log", "argument": true}, {"parame= ters": [], "option": "qtest", "argument": true}, {"parameters": [{"name": "= file", "type": "string"}, {"name": "events", "type": "string"}], "option": = "trace"}, {"parameters": [], "option": "no-user-config", "argument": false}= , {"parameters": [], "option": "nodefconfig", "argument": false}, {"paramet= ers": [], "option": "writeconfig", "argument": true}, {"parameters": [], "o= ption": "readconfig", "argument": true}, {"parameters": [{"name": "enable",= "type": "boolean"}], "option": "sandbox"}, {"parameters": [], "option": "o= ld-param", "argument": false}, {"parameters": [], "option": "semihosting", = "argument": false}, {"parameters": [], "option": "prom-env", "argument": tr= ue}, {"parameters": [], "option": "runas", "argument": true}, {"parameters"= : [], "option": "chroot", "argument": true}, {"parameters": [], "option": "= nodefaults", "argument": false}, {"parameters": [], "option": "incoming", "= argument": true}, {"parameters": [], "option": "tb-size", "argument": true}= , {"parameters": [], "option": "show-cursor", "argument": false}, {"paramet= ers": [], "option": "virtioconsole", "argument": true}, {"parameters": [], = "option": "echr", "argument": true}, {"parameters": [], "option": "watchdog= -action", "argument": true}, {"parameters": [], "option": "watchdog", "argu= ment": true}, {"parameters": [], "option": "icount", "argument": true}, {"p= arameters": [{"name": "driftfix", "type": "string"}, {"name": "clock", "typ= e": "string"}, {"name": "base", "type": "string"}], "option": "rtc"}, {"par= ameters": [], "option": "startdate", "argument": true}, {"parameters": [], = "option": "localtime", "argument": false}, {"parameters": [], "option": "cl= ock", "argument": true}, {"parameters": [{"name": "romfile", "type": "strin= g"}, {"name": "bootindex", "type": "number"}], "option": "option-rom"}, {"p= arameters": [], "option": "daemonize", "argument": false}, {"parameters": [= ], "option": "loadvm", "argument": true}, {"parameters": [], "option": "no-= shutdown", "argument": false}, {"parameters": [], "option": "no-reboot", "a= rgument": false}, {"parameters": [], "option": "xen-attach", "argument": fa= lse}, {"parameters": [], "option": "xen-create", "argument": false}, {"para= meters": [], "option": "xen-domid", "argument": true}, {"parameters": [], "= option": "enable-kvm", "argument": false}, {"parameters": [], "option": "bi= os", "argument": true}, {"parameters": [], "option": "L", "argument": true}= , {"parameters": [], "option": "D", "argument": true}, {"parameters": [], "= option": "d", "argument": true}, {"parameters": [], "option": "s", "argumen= t": false}, {"parameters": [], "option": "gdb", "argument": true}, {"parame= ters": [{"name": "mlock", "type": "boolean"}], "option": "realtime"}, {"par= ameters": [], "option": "S", "argument": false}, {"parameters": [], "option= ": "singlestep", "argument": false}, {"parameters": [], "option": "pidfile"= , "argument": true}, {"parameters": [], "option": "debugcon", "argument": t= rue}, {"parameters": [{"name": "pretty", "type": "boolean"}, {"name": "defa= ult", "type": "boolean"}, {"name": "chardev", "type": "string"}, {"name": "= mode", "type": "string"}], "option": "mon"}, {"parameters": [], "option": "= qmp", "argument": true}, {"parameters": [], "option": "monitor", "argument"= : true}, {"parameters": [], "option": "parallel", "argument": true}, {"para= meters": [], "option": "serial", "argument": true}, {"parameters": [], "opt= ion": "dtb", "argument": true}, {"parameters": [], "option": "initrd", "arg= ument": true}, {"parameters": [], "option": "append", "argument": true}, {"= parameters": [], "option": "kernel", "argument": true}, {"parameters": [], = "option": "bt", "argument": true}, {"parameters": [{"name": "initiator-name= ", "help": "Initiator iqn name to use when connecting", "type": "string"}, = {"name": "header-digest", "help": "HeaderDigest setting. {CRC32C|CRC32C-NON= E|NONE-CRC32C|NONE}", "type": "string"}, {"name": "password", "help": "pass= word for CHAP authentication to target", "type": "string"}, {"name": "user"= , "help": "username for CHAP authentication to target", "type": "string"}],= "option": "iscsi"}, {"parameters": [{"name": "chardev", "type": "string"},= {"name": "size", "type": "size"}, {"name": "debug", "type": "number"}, {"n= ame": "name", "type": "string"}, {"name": "signal", "type": "boolean"}, {"n= ame": "mux", "type": "boolean"}, {"name": "rows", "type": "number"}, {"name= ": "cols", "type": "number"}, {"name": "height", "type": "number"}, {"name"= : "width", "type": "number"}, {"name": "telnet", "type": "boolean"}, {"name= ": "delay", "type": "boolean"}, {"name": "server", "type": "boolean"}, {"na= me": "wait", "type": "boolean"}, {"name": "ipv6", "type": "boolean"}, {"nam= e": "ipv4", "type": "boolean"}, {"name": "to", "type": "number"}, {"name": = "localport", "type": "string"}, {"name": "localaddr", "type": "string"}, {"= name": "port", "type": "string"}, {"name": "host", "type": "string"}, {"nam= e": "path", "type": "string"}, {"name": "backend", "type": "string"}], "opt= ion": "chardev"}, {"parameters": [], "option": "netdev", "argument": true},= {"parameters": [], "option": "net", "argument": true}, {"parameters": [], = "option": "smb", "argument": true}, {"parameters": [], "option": "redir", "= argument": true}, {"parameters": [], "option": "bootp", "argument": true}, = {"parameters": [], "option": "tftp", "argument": true}, {"parameters": [], = "option": "smbios", "argument": true}, {"parameters": [], "option": "acpita= ble", "argument": true}, {"parameters": [], "option": "no-hpet", "argument"= : false}, {"parameters": [], "option": "no-acpi", "argument": false}, {"par= ameters": [], "option": "no-fd-bootchk", "argument": false}, {"parameters":= [], "option": "rtc-td-hack", "argument": false}, {"parameters": [], "optio= n": "win2k-hack", "argument": false}, {"parameters": [], "option": "vnc", "= argument": true}, {"parameters": [], "option": "g", "argument": true}, {"pa= rameters": [], "option": "full-screen", "argument": false}, {"parameters": = [], "option": "vga", "argument": true}, {"parameters": [], "option": "rotat= e", "argument": true}, {"parameters": [], "option": "portrait", "argument":= false}, {"parameters": [{"name": "seamless-migration", "type": "boolean"},= {"name": "playback-compression", "type": "boolean"}, {"name": "agent-mouse= ", "type": "boolean"}, {"name": "streaming-video", "type": "string"}, {"nam= e": "zlib-glz-wan-compression", "type": "string"}, {"name": "jpeg-wan-compr= ession", "type": "string"}, {"name": "image-compression", "type": "string"}= , {"name": "plaintext-channel", "type": "string"}, {"name": "tls-channel", = "type": "string"}, {"name": "tls-ciphers", "type": "string"}, {"name": "x50= 9-dh-key-file", "type": "string"}, {"name": "x509-cacert-file", "type": "st= ring"}, {"name": "x509-cert-file", "type": "string"}, {"name": "x509-key-pa= ssword", "type": "string"}, {"name": "x509-key-file", "type": "string"}, {"= name": "x509-dir", "type": "string"}, {"name": "sasl", "type": "boolean"}, = {"name": "disable-agent-file-xfer", "type": "boolean"}, {"name": "disable-c= opy-paste", "type": "boolean"}, {"name": "disable-ticketing", "type": "bool= ean"}, {"name": "password", "type": "string"}, {"name": "ipv6", "type": "bo= olean"}, {"name": "ipv4", "type": "boolean"}, {"name": "addr", "type": "str= ing"}, {"name": "tls-port", "type": "number"}, {"name": "port", "type": "nu= mber"}], "option": "spice"}, {"parameters": [], "option": "sdl", "argument"= : false}, {"parameters": [], "option": "no-quit", "argument": false}, {"par= ameters": [], "option": "ctrl-grab", "argument": false}, {"parameters": [],= "option": "alt-grab", "argument": false}, {"parameters": [], "option": "no= -frame", "argument": false}, {"parameters": [], "option": "curses", "argume= nt": false}, {"parameters": [], "option": "nographic", "argument": false}, = {"parameters": [], "option": "display", "argument": true}, {"parameters": [= ], "option": "usbdevice", "argument": true}, {"parameters": [], "option": "= usb", "argument": false}, {"parameters": [], "option": "virtfs_synth", "arg= ument": false}, {"parameters": [{"name": "sock_fd", "type": "number"}, {"na= me": "socket", "type": "string"}, {"name": "readonly", "type": "boolean"}, = {"name": "writeout", "type": "string"}, {"name": "security_model", "type": = "string"}, {"name": "mount_tag", "type": "string"}, {"name": "path", "type"= : "string"}, {"name": "fsdriver", "type": "string"}], "option": "virtfs"}, = {"parameters": [{"name": "sock_fd", "type": "number"}, {"name": "socket", "= type": "string"}, {"name": "readonly", "type": "boolean"}, {"name": "writeo= ut", "type": "string"}, {"name": "security_model", "type": "string"}, {"nam= e": "path", "type": "string"}, {"name": "fsdriver", "type": "string"}], "op= tion": "fsdev"}, {"parameters": [], "option": "hdachs", "argument": true}, = {"parameters": [], "option": "snapshot", "argument": false}, {"parameters":= [], "option": "pflash", "argument": true}, {"parameters": [], "option": "s= d", "argument": true}, {"parameters": [], "option": "mtdblock", "argument":= true}, {"parameters": [{"name": "copy-on-read", "help": "copy read data fr= om backing file into image file", "type": "boolean"}, {"name": "werror", "h= elp": "write error action", "type": "string"}, {"name": "rerror", "help": "= read error action", "type": "string"}, {"name": "read-only", "help": "open = drive file as read-only", "type": "boolean"}, {"name": "file", "help": "fil= e name", "type": "string"}, {"name": "addr", "help": "pci address (virtio o= nly)", "type": "string"}, {"name": "boot", "help": "(deprecated, ignored)",= "type": "boolean"}, {"name": "trans", "help": "chs translation (auto, lba,= none)", "type": "string"}, {"name": "secs", "help": "number of sectors (id= e disk geometry)", "type": "number"}, {"name": "heads", "help": "number of = heads (ide disk geometry)", "type": "number"}, {"name": "cyls", "help": "nu= mber of cylinders (ide disk geometry)", "type": "number"}, {"name": "if", "= help": "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)", "type": "s= tring"}, {"name": "media", "help": "media type (disk, cdrom)", "type": "str= ing"}, {"name": "index", "help": "index number", "type": "number"}, {"name"= : "unit", "help": "unit number (i.e. lun for scsi)", "type": "number"}, {"n= ame": "bus", "help": "bus number", "type": "number"}, {"name": "throttling.= iops-size", "help": "when limiting by iops max size of an I/O in bytes", "t= ype": "number"}, {"name": "throttling.bps-write-max", "help": "total bytes = write burst", "type": "number"}, {"name": "throttling.bps-read-max", "help"= : "total bytes read burst", "type": "number"}, {"name": "throttling.bps-tot= al-max", "help": "total bytes burst", "type": "number"}, {"name": "throttli= ng.iops-write-max", "help": "I/O operations write burst", "type": "number"}= , {"name": "throttling.iops-read-max", "help": "I/O operations read burst",= "type": "number"}, {"name": "throttling.iops-total-max", "help": "I/O oper= ations burst", "type": "number"}, {"name": "throttling.bps-write", "help": = "limit write bytes per second", "type": "number"}, {"name": "throttling.bps= -read", "help": "limit read bytes per second", "type": "number"}, {"name": = "throttling.bps-total", "help": "limit total bytes per second", "type": "nu= mber"}, {"name": "throttling.iops-write", "help": "limit write operations p= er second", "type": "number"}, {"name": "throttling.iops-read", "help": "li= mit read operations per second", "type": "number"}, {"name": "throttling.io= ps-total", "help": "limit total I/O operations per second", "type": "number= "}, {"name": "werror", "help": "write error action", "type": "string"}, {"n= ame": "serial", "help": "disk serial number", "type": "string"}, {"name": "= format", "help": "disk format (raw, qcow2, ...)", "type": "string"}, {"name= ": "aio", "help": "host AIO implementation (threads, native)", "type": "str= ing"}, {"name": "cache.no-flush", "help": "ignore any flush requests for th= e device", "type": "boolean"}, {"name": "cache.direct", "help": "enables us= e of O_DIRECT (bypass the host page cache)", "type": "boolean"}, {"name": "= cache.writeback", "help": "enables writeback mode for any caches", "type": = "boolean"}, {"name": "discard", "help": "discard operation (ignore/off, unm= ap/on)", "type": "string"}, {"name": "snapshot", "help": "enable/disable sn= apshot mode", "type": "boolean"}], "option": "drive"}, {"parameters": [], "= option": "cdrom", "argument": true}, {"parameters": [], "option": "hdd", "a= rgument": true}, {"parameters": [], "option": "hdc", "argument": true}, {"p= arameters": [], "option": "hdb", "argument": true}, {"parameters": [], "opt= ion": "hda", "argument": true}, {"parameters": [], "option": "fdb", "argume= nt": true}, {"parameters": [], "option": "fda", "argument": true}, {"parame= ters": [], "option": "uuid", "argument": true}, {"parameters": [], "option"= : "name", "argument": true}, {"parameters": [], "option": "device", "argume= nt": true}, {"parameters": [], "option": "balloon", "argument": true}, {"pa= rameters": [], "option": "soundhw", "argument": true}, {"parameters": [], "= option": "audio-help", "argument": false}, {"parameters": [], "option": "k"= , "argument": true}, {"parameters": [], "option": "mem-prealloc", "argument= ": false}, {"parameters": [], "option": "mem-path", "argument": true}, {"pa= rameters": [], "option": "m", "argument": true}, {"parameters": [], "option= ": "boot", "argument": true}, {"parameters": [{"name": "value", "type": "st= ring"}, {"name": "property", "type": "string"}, {"name": "driver", "type": = "string"}], "option": "global"}, {"parameters": [], "option": "set", "argum= ent": true}, {"parameters": [{"name": "opaque", "help": "free-form string u= sed to describe fd", "type": "string"}, {"name": "set", "help": "ID of the = fd set to add fd to", "type": "number"}, {"name": "fd", "help": "file descr= iptor of which a duplicate is added to fd set", "type": "number"}], "option= ": "add-fd"}, {"parameters": [], "option": "numa", "argument": true}, {"par= ameters": [], "option": "smp", "argument": true}, {"parameters": [], "optio= n": "cpu", "argument": true}, {"parameters": [], "option": "M", "argument":= true}, {"parameters": [{"name": "firmware", "help": "firmware image", "typ= e": "string"}, {"name": "usb", "help": "Set on/off to enable/disable usb", = "type": "boolean"}, {"name": "mem-merge", "help": "enable/disable memory me= rge support", "type": "boolean"}, {"name": "dump-guest-core", "help": "Incl= ude guest memory in a core dump", "type": "boolean"}, {"name": "dt_compati= ble", "help": "Overrides the \"compatible\" property of the dt root node", = "type": "string"}, {"name": "phandle_start", "help": "The first phandle ID = we may generate dynamically", "type": "number"}, {"name": "dumpdtb", "help"= : "Dump current dtb to a file and quit", "type": "string"}, {"name": "dtb",= "help": "Linux kernel device tree file", "type": "string"}, {"name": "appe= nd", "help": "Linux kernel command line", "type": "string"}, {"name": "init= rd", "help": "Linux initial ramdisk file", "type": "string"}, {"name": "ker= nel", "help": "Linux kernel image file", "type": "string"}, {"name": "kvm_s= hadow_mem", "help": "KVM shadow MMU size", "type": "size"}, {"name": "kerne= l_irqchip", "help": "use KVM in-kernel irqchip", "type": "boolean"}, {"name= ": "accel", "help": "accelerator list", "type": "string"}, {"name": "type",= "help": "emulated machine", "type": "string"}], "option": "machine"}, {"pa= rameters": [], "option": "version", "argument": false}, {"parameters": [], = "option": "help", "argument": false}, {"parameters": [], "option": "h", "ar= gument": false}]}=0D {"return": {}}=0D {"timestamp": {"seconds": 1394001181, "microseconds": 494773}, "event": "SH= UTDOWN"}=0D {"timestamp": {"seconds": 1394001181, "microseconds": 495125}, "event": "DE= VICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}}=0D {"timestamp": {"seconds": 1394001181, "microseconds": 495275}, "event": "DE= VICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}}=0D --cmJC7u66zC7hs+87--