1. 02 Mar, 2018 4 commits
    • Markus Armbruster's avatar
      qapi: Empty out qapi-schema.json · 112ed241
      Markus Armbruster authored
      The previous commit improved compile time by including less of the
      generated QAPI headers.  This is impossible for stuff defined directly
      in qapi-schema.json, because that ends up in headers that that pull in
      everything.
      
      Move everything but include directives from qapi-schema.json to new
      sub-module qapi/misc.json, then include just the "misc" shard where
      possible.
      
      It's possible everywhere, except:
      
      * monitor.c needs qmp-command.h to get qmp_init_marshal()
      
      * monitor.c, ui/vnc.c and the generated qapi-event-FOO.c need
        qapi-event.h to get enum QAPIEvent
      
      Perhaps we'll get rid of those some other day.
      
      Adding a type to qapi/migration.json now recompiles some 120 instead
      of 2300 out of 5100 objects.
      Signed-off-by: 's avatarMarkus Armbruster <armbru@redhat.com>
      Message-Id: <20180211093607.27351-25-armbru@redhat.com>
      [eblake: rebase to master]
      Signed-off-by: 's avatarEric Blake <eblake@redhat.com>
      112ed241
    • Markus Armbruster's avatar
      qapi: Generate separate .h, .c for each module · 252dc310
      Markus Armbruster authored
      Our qapi-schema.json is composed of modules connected by include
      directives, but the generated code is monolithic all the same: one
      qapi-types.h with all the types, one qapi-visit.h with all the
      visitors, and so forth.  These monolithic headers get included all
      over the place.  In my "build everything" tree, adding a QAPI type
      recompiles about 4800 out of 5100 objects.
      
      We wouldn't write such monolithic headers by hand.  It stands to
      reason that we shouldn't generate them, either.
      
      Split up generated qapi-types.h to mirror the schema's modular
      structure: one header per module.  Name the main module's header
      qapi-types.h, and sub-module D/B.json's header D/qapi-types-B.h.
      
      Mirror the schema's includes in the headers, so that qapi-types.h gets
      you everything exactly as before.  If you need less, you can include
      one or more of the sub-module headers.  To be exploited shortly.
      
      Split up qapi-types.c, qapi-visit.h, qapi-visit.c, qmp-commands.h,
      qmp-commands.c, qapi-event.h, qapi-event.c the same way.
      qmp-introspect.h, qmp-introspect.c and qapi.texi remain monolithic.
      
      The split of qmp-commands.c duplicates static helper function
      qmp_marshal_output_str() in qapi-commands-char.c and
      qapi-commands-misc.c.  This happens when commands returning the same
      type occur in multiple modules.  Not worth avoiding.
      
      Since I'm going to rename qapi-event.[ch] to qapi-events.[ch], and
      qmp-commands.[ch] to qapi-commands.[ch], name the shards that way
      already, to reduce churn.  This requires temporary hacks in
      commands.py and events.py.  Similarly, c_name() must temporarily
      be taught to munge '/' in common.py.  They'll go away with the rename.
      Signed-off-by: 's avatarMarkus Armbruster <armbru@redhat.com>
      Message-Id: <20180211093607.27351-23-armbru@redhat.com>
      Reviewed-by: 's avatarEric Blake <eblake@redhat.com>
      [eblake: declare a dummy variable in each .c file, to shut up OSX
      toolchain warnings about empty .o files, including hacking c_name()]
      Signed-off-by: 's avatarEric Blake <eblake@redhat.com>
      252dc310
    • Markus Armbruster's avatar
      qapi/types qapi/visit: Generate built-in stuff into separate files · cdb6610a
      Markus Armbruster authored
      Linking code from multiple separate QAPI schemata into the same
      program is possible, but involves some weirdness around built-in
      types:
      
      * We generate code for built-in types into .c only with option
        --builtins.  The user is responsible for generating code for exactly
        one QAPI schema per program with --builtins.
      
      * We generate code for built-in types into .h regardless of
        --builtins, but guarded by #ifndef QAPI_VISIT_BUILTIN.  Because all
        copies of this code are exactly the same, including any combination
        of these headers works.
      
      Replace this contraption by something more conventional: generate code
      for built-in types into their very own files: qapi-builtin-types.c,
      qapi-builtin-visit.c, qapi-builtin-types.h, qapi-builtin-visit.h, but
      only with --builtins.  Obey --output-dir, but ignore --prefix for
      them.
      
      Make qapi-types.h include qapi-builtin-types.h.  With multiple
      schemata you now have multiple qapi-types.[ch], but only one
      qapi-builtin-types.[ch].  Same for qapi-visit.[ch] and
      qapi-builtin-visit.[ch].
      
      Bonus: if all you need is built-in stuff, you can include a much
      smaller header.  To be exploited shortly.
      Signed-off-by: 's avatarMarkus Armbruster <armbru@redhat.com>
      Message-Id: <20180211093607.27351-21-armbru@redhat.com>
      Reviewed-by: 's avatarEric Blake <eblake@redhat.com>
      Reviewed-by: 's avatarMarc-André Lureau <marcandre.lureau@redhat.com>
      Reviewed-by: 's avatarMichael Roth <mdroth@linux.vnet.ibm.com>
      [eblake: fix octal constant for python 3]
      Signed-off-by: 's avatarEric Blake <eblake@redhat.com>
      cdb6610a
    • Markus Armbruster's avatar
      qapi: Rename generated qmp-marshal.c to qmp-commands.c · 834a3f34
      Markus Armbruster authored
      All generated .c are named like their .h, except for qmp-marshal.c and
      qmp-commands.h.  To add to the confusion, tests-qmp-commands.c falsely
      matches generated test-qmp-commands.h.
      
      Get rid of this unnecessary complication.
      Signed-off-by: 's avatarMarkus Armbruster <armbru@redhat.com>
      Message-Id: <20180211093607.27351-19-armbru@redhat.com>
      Reviewed-by: 's avatarEric Blake <eblake@redhat.com>
      Reviewed-by: 's avatarMarc-André Lureau <marcandre.lureau@redhat.com>
      Reviewed-by: 's avatarMichael Roth <mdroth@linux.vnet.ibm.com>
      Signed-off-by: 's avatarEric Blake <eblake@redhat.com>
      834a3f34
  2. 19 Feb, 2018 2 commits
  3. 16 Feb, 2018 1 commit
  4. 31 Jan, 2018 1 commit
  5. 24 Jan, 2018 1 commit
  6. 18 Jan, 2018 1 commit
  7. 09 Jan, 2018 1 commit
  8. 25 Oct, 2017 1 commit
  9. 10 Oct, 2017 1 commit
  10. 21 Sep, 2017 1 commit
    • Paolo Bonzini's avatar
      scsi, file-posix: add support for persistent reservation management · 7c9e5276
      Paolo Bonzini authored
      It is a common requirement for virtual machine to send persistent
      reservations, but this currently requires either running QEMU with
      CAP_SYS_RAWIO, or using out-of-tree patches that let an unprivileged
      QEMU bypass Linux's filter on SG_IO commands.
      
      As an alternative mechanism, the next patches will introduce a
      privileged helper to run persistent reservation commands without
      expanding QEMU's attack surface unnecessarily.
      
      The helper is invoked through a "pr-manager" QOM object, to which
      file-posix.c passes SG_IO requests for PERSISTENT RESERVE OUT and
      PERSISTENT RESERVE IN commands.  For example:
      
        $ qemu-system-x86_64
            -device virtio-scsi \
            -object pr-manager-helper,id=helper0,path=/var/run/qemu-pr-helper.sock
            -drive if=none,id=hd,driver=raw,file.filename=/dev/sdb,file.pr-manager=helper0
            -device scsi-block,drive=hd
      
      or:
      
        $ qemu-system-x86_64
            -device virtio-scsi \
            -object pr-manager-helper,id=helper0,path=/var/run/qemu-pr-helper.sock
            -blockdev node-name=hd,driver=raw,file.driver=host_device,file.filename=/dev/sdb,file.pr-manager=helper0
            -device scsi-block,drive=hd
      
      Multiple pr-manager implementations are conceivable and possible, though
      only one is implemented right now.  For example, a pr-manager could:
      
      - talk directly to the multipath daemon from a privileged QEMU
        (i.e. QEMU links to libmpathpersist); this makes reservation work
        properly with multipath, but still requires CAP_SYS_RAWIO
      
      - use the Linux IOC_PR_* ioctls (they require CAP_SYS_ADMIN though)
      
      - more interestingly, implement reservations directly in QEMU
        through file system locks or a shared database (e.g. sqlite)
      Signed-off-by: 's avatarPaolo Bonzini <pbonzini@redhat.com>
      7c9e5276
  11. 19 Sep, 2017 1 commit
  12. 18 Sep, 2017 1 commit
  13. 15 Sep, 2017 1 commit
  14. 20 Jul, 2017 1 commit
  15. 11 Jul, 2017 1 commit
  16. 10 Jul, 2017 1 commit
    • Vladimir Sementsov-Ogievskiy's avatar
      nbd: use generic trace subsystem instead of TRACE macro · 9588463e
      Vladimir Sementsov-Ogievskiy authored
      Let NBD use the trace mechanisms already present in qemu. Now you can
      use the -trace optino of qemu, or the -T/--trace option of qemu-img,
      qemu-io, and qemu-nbd, to select nbd traces. For qemu, the QMP commands
      trace-event-{get,set}-state can also toggle tracing on the fly.
      
      Example:
         qemu-nbd --trace 'nbd_*' <image file> # enables all nbd traces
      
      Recompilation with CFLAGS=-DDEBUG_NBD is no more needed, furthermore,
      DEBUG_NBD macro is removed from the code.
      Signed-off-by: 's avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
      Message-Id: <20170707152918.23086-11-vsementsov@virtuozzo.com>
      [eblake: minor tweaks to a couple of traces]
      Signed-off-by: 's avatarEric Blake <eblake@redhat.com>
      9588463e
  17. 04 Jul, 2017 1 commit
  18. 15 Jun, 2017 4 commits
  19. 02 Jun, 2017 1 commit
  20. 17 May, 2017 1 commit
  21. 20 Mar, 2017 1 commit
  22. 21 Feb, 2017 1 commit
  23. 20 Feb, 2017 1 commit
  24. 31 Jan, 2017 6 commits
  25. 22 Dec, 2016 1 commit
  26. 20 Dec, 2016 1 commit
    • Thomas Huth's avatar
      Move target-* CPU file into a target/ folder · fcf5ef2a
      Thomas Huth authored
      We've currently got 18 architectures in QEMU, and thus 18 target-xxx
      folders in the root folder of the QEMU source tree. More architectures
      (e.g. RISC-V, AVR) are likely to be included soon, too, so the main
      folder of the QEMU sources slowly gets quite overcrowded with the
      target-xxx folders.
      To disburden the main folder a little bit, let's move the target-xxx
      folders into a dedicated target/ folder, so that target-xxx/ simply
      becomes target/xxx/ instead.
      
      Acked-by: Laurent Vivier <laurent@vivier.eu> [m68k part]
      Acked-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de> [tricore part]
      Acked-by: Michael Walle <michael@walle.cc> [lm32 part]
      Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com> [s390x part]
      Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> [s390x part]
      Acked-by: Eduardo Habkost <ehabkost@redhat.com> [i386 part]
      Acked-by: Artyom Tarasenko <atar4qemu@gmail.com> [sparc part]
      Acked-by: Richard Henderson <rth@twiddle.net> [alpha part]
      Acked-by: Max Filippov <jcmvbkbc@gmail.com> [xtensa part]
      Reviewed-by: David Gibson <david@gibson.dropbear.id.au> [ppc part]
      Acked-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> [cris&microblaze part]
      Acked-by: Guan Xuetao <gxt@mprc.pku.edu.cn> [unicore32 part]
      Signed-off-by: 's avatarThomas Huth <thuth@redhat.com>
      fcf5ef2a
  27. 15 Dec, 2016 1 commit
    • Marc-André Lureau's avatar
      contrib: add libvhost-user · 7b2e5c65
      Marc-André Lureau authored
      Add a library to help implementing vhost-user backend (or slave).
      
      Dealing with vhost-user as an application developer isn't so easy: you
      have all the trouble with any protocol: validation, unix ancillary data,
      shared memory, eventfd, logging, and on top of that you need to deal
      with virtio queues, if possible efficiently.
      
      qemu test has a nice vhost-user testing application vhost-user-bridge,
      which implements most of vhost-user, and virtio.c which implements
      virtqueues manipulation. Based on these two, I tried to make a simple
      library, reusable for tests or development of new vhost-user scenarios.
      Signed-off-by: 's avatarMarc-André Lureau <marcandre.lureau@redhat.com>
      [Felipe: set used_idx copy on SET_VRING_ADDR and update shadow avail idx
       on SET_VRING_BASE]
      Signed-off-by: 's avatarFelipe Franciosi <felipe@nutanix.com>
      Reviewed-by: 's avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: 's avatarMichael S. Tsirkin <mst@redhat.com>
      7b2e5c65
  28. 26 Oct, 2016 1 commit