Skip to content
Snippets Groups Projects
  1. Apr 01, 2021
    • Priyankar Jain's avatar
      dbus-vmstate: Increase the size of input stream buffer used during load · 1d9fa7a8
      Priyankar Jain authored
      
      This commit fixes an issue where migration is failing in the load phase
      because of a false alarm about data unavailability.
      
      Following is the error received when the amount of data to be transferred
      exceeds the default buffer size setup by G_BUFFERED_INPUT_STREAM(4KiB),
      even when the maximum data size supported by this backend is 1MiB
      (DBUS_VMSTATE_SIZE_LIMIT):
      
        dbus_vmstate_post_load: Invalid vmstate size: 4364
        qemu-kvm: error while loading state for instance 0x0 of device 'dbus-vmstate/dbus-vmstate'
      
      This commit sets the size of the input stream buffer used during load to
      DBUS_VMSTATE_SIZE_LIMIT which is the maximum amount of data a helper can
      send during save phase.
      Secondly, this commit makes sure that the input stream buffer is loaded before
      checking the size of the data available in it, rectifying the false alarm about
      data unavailability.
      
      Fixes: 5010cec2 ("Add dbus-vmstate object")
      Signed-off-by: default avatarPriyankar Jain <priyankar.jain@nutanix.com>
      Message-Id: <cdaad4718e62bf22fd5e93ef3e252de20da5c17c.1612273156.git.priyankar.jain@nutanix.com>
      [ Modified printf format for gsize ]
      Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
      1d9fa7a8
  2. Mar 09, 2021
  3. Feb 18, 2021
  4. Feb 09, 2021
  5. Feb 08, 2021
    • Pavel Dovgalyuk's avatar
      replay: rng-builtin support · 54550d88
      Pavel Dovgalyuk authored
      
      This patch enables using rng-builtin with record/replay
      by making the callbacks deterministic.
      
      Signed-off-by: default avatarPavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
      Message-Id: <161233201286.170686.7858208964037376305.stgit@pasha-ThinkPad-X280>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      54550d88
    • Igor Mammedov's avatar
      machine: add missing doc for memory-backend option · 8db0b204
      Igor Mammedov authored
      
      Add documentation for '-machine memory-backend' CLI option and
      how to use it.
      
      And document that x-use-canonical-path-for-ramblock-id,
      is considered to be stable to make sure it won't go away by accident.
      
      x- was intended for unstable/iternal properties, and not supposed to
      be stable option. However it's too late to rename (drop x-)
      it as it would mean that users will have to mantain both
      x-use-canonical-path-for-ramblock-id (for QEMU 5.0-5.2) versions
      and prefix-less for later versions.
      
      Signed-off-by: default avatarIgor Mammedov <imammedo@redhat.com>
      Message-Id: <20210121161504.1007247-1-imammedo@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      8db0b204
    • David Gibson's avatar
      confidential guest support: Introduce new confidential guest support class · f91f9f25
      David Gibson authored
      
      Several architectures have mechanisms which are designed to protect
      guest memory from interference or eavesdropping by a compromised
      hypervisor.  AMD SEV does this with in-chip memory encryption and
      Intel's TDX can do similar things.  POWER's Protected Execution
      Framework (PEF) accomplishes a similar goal using an ultravisor and
      new memory protection features, instead of encryption.
      
      To (partially) unify handling for these, this introduces a new
      ConfidentialGuestSupport QOM base class.  "Confidential" is kind of vague,
      but "confidential computing" seems to be the buzzword about these schemes,
      and "secure" or "protected" are often used in connection to unrelated
      things (such as hypervisor-from-guest or guest-from-guest security).
      
      The "support" in the name is significant because in at least some of the
      cases it requires the guest to take specific actions in order to protect
      itself from hypervisor eavesdropping.
      
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      f91f9f25
  6. Feb 01, 2021
  7. Jan 28, 2021
  8. Dec 18, 2020
  9. Dec 15, 2020
  10. Nov 17, 2020
  11. Nov 15, 2020
  12. Oct 27, 2020
  13. Oct 13, 2020
  14. Sep 22, 2020
  15. Sep 18, 2020
  16. Sep 16, 2020
  17. Sep 09, 2020
  18. Aug 21, 2020
  19. Jul 24, 2020
    • Stefan Berger's avatar
      tpm_emulator: Report an error if chardev is missing · 88f83074
      Stefan Berger authored
      
      This patch fixes the odd error reporting when trying to send a file
      descriptor to the TPM emulator if one has not passed a valid chardev.
      
      $ x86_64-softmmu/qemu-system-x86_64 -tpmdev emulator,id=tpm0
      qemu-system-x86_64: -tpmdev emulator,id=tpm0: tpm-emulator: Failed to send CMD_SET_DATAFD: Success
      qemu-system-x86_64: -tpmdev emulator,id=tpm0: tpm-emulator: Could not cleanly shutdown the TPM: Success
      
      This is the new error report:
      
      $ x86_64-softmmu/qemu-system-x86_64 -tpmdev emulator,id=tpm0
      qemu-system-x86_64: -tpmdev emulator,id=tpm0: tpm-emulator: parameter 'chardev' is missing
      
      This change does not hide the display of supported TPM types if a non-existent type is passed:
      
      $ x86_64-softmmu/qemu-system-x86_64 -tpmdev nonexistent,id=tpm0
      qemu-system-x86_64: -tpmdev nonexistent,id=tpm0: Parameter 'type' expects a TPM backend type
      Supported TPM types (choose only one):
       passthrough   Passthrough TPM backend driver
          emulator   TPM emulator backend driver
      
      Signed-off-by: default avatarStefan Berger <stefanb@linux.ibm.com>
      Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
      Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
      88f83074
  20. Jul 21, 2020
  21. Jul 10, 2020
    • Markus Armbruster's avatar
      error: Eliminate error_propagate() with Coccinelle, part 1 · 668f62ec
      Markus Armbruster authored
      
      When all we do with an Error we receive into a local variable is
      propagating to somewhere else, we can just as well receive it there
      right away.  Convert
      
          if (!foo(..., &err)) {
              ...
              error_propagate(errp, err);
              ...
              return ...
          }
      
      to
      
          if (!foo(..., errp)) {
              ...
              ...
              return ...
          }
      
      where nothing else needs @err.  Coccinelle script:
      
          @rule1 forall@
          identifier fun, err, errp, lbl;
          expression list args, args2;
          binary operator op;
          constant c1, c2;
          symbol false;
          @@
               if (
          (
          -        fun(args, &err, args2)
          +        fun(args, errp, args2)
          |
          -        !fun(args, &err, args2)
          +        !fun(args, errp, args2)
          |
          -        fun(args, &err, args2) op c1
          +        fun(args, errp, args2) op c1
          )
                  )
               {
                   ... when != err
                       when != lbl:
                       when strict
          -        error_propagate(errp, err);
                   ... when != err
          (
                   return;
          |
                   return c2;
          |
                   return false;
          )
               }
      
          @rule2 forall@
          identifier fun, err, errp, lbl;
          expression list args, args2;
          expression var;
          binary operator op;
          constant c1, c2;
          symbol false;
          @@
          -    var = fun(args, &err, args2);
          +    var = fun(args, errp, args2);
               ... when != err
               if (
          (
                   var
          |
                   !var
          |
                   var op c1
          )
                  )
               {
                   ... when != err
                       when != lbl:
                       when strict
          -        error_propagate(errp, err);
                   ... when != err
          (
                   return;
          |
                   return c2;
          |
                   return false;
          |
                   return var;
          )
               }
      
          @depends on rule1 || rule2@
          identifier err;
          @@
          -    Error *err = NULL;
               ... when != err
      
      Not exactly elegant, I'm afraid.
      
      The "when != lbl:" is necessary to avoid transforming
      
               if (fun(args, &err)) {
                   goto out
               }
               ...
           out:
               error_propagate(errp, err);
      
      even though other paths to label out still need the error_propagate().
      For an actual example, see sclp_realize().
      
      Without the "when strict", Coccinelle transforms vfio_msix_setup(),
      incorrectly.  I don't know what exactly "when strict" does, only that
      it helps here.
      
      The match of return is narrower than what I want, but I can't figure
      out how to express "return where the operand doesn't use @err".  For
      an example where it's too narrow, see vfio_intx_enable().
      
      Silently fails to convert hw/arm/armsse.c, because Coccinelle gets
      confused by ARMSSE being used both as typedef and function-like macro
      there.  Converted manually.
      
      Line breaks tidied up manually.  One nested declaration of @local_err
      deleted manually.  Preexisting unwanted blank line dropped in
      hw/riscv/sifive_e.c.
      
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: default avatarEric Blake <eblake@redhat.com>
      Message-Id: <20200707160613.848843-35-armbru@redhat.com>
      668f62ec
    • Markus Armbruster's avatar
      error: Avoid unnecessary error_propagate() after error_setg() · dcfe4805
      Markus Armbruster authored
      
      Replace
      
          error_setg(&err, ...);
          error_propagate(errp, err);
      
      by
      
          error_setg(errp, ...);
      
      Related pattern:
      
          if (...) {
              error_setg(&err, ...);
              goto out;
          }
          ...
       out:
          error_propagate(errp, err);
          return;
      
      When all paths to label out are that way, replace by
      
          if (...) {
              error_setg(errp, ...);
              return;
          }
      
      and delete the label along with the error_propagate().
      
      When we have at most one other path that actually needs to propagate,
      and maybe one at the end that where propagation is unnecessary, e.g.
      
          foo(..., &err);
          if (err) {
              goto out;
          }
          ...
          bar(..., &err);
       out:
          error_propagate(errp, err);
          return;
      
      move the error_propagate() to where it's needed, like
      
          if (...) {
              foo(..., &err);
              error_propagate(errp, err);
              return;
          }
          ...
          bar(..., errp);
          return;
      
      and transform the error_setg() as above.
      
      In some places, the transformation results in obviously unnecessary
      error_propagate().  The next few commits will eliminate them.
      
      Bonus: the elimination of gotos will make later patches in this series
      easier to review.
      
      Candidates for conversion tracked down with this Coccinelle script:
      
          @@
          identifier err, errp;
          expression list args;
          @@
          -    error_setg(&err, args);
          +    error_setg(errp, args);
               ... when != err
               error_propagate(errp, err);
      
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: default avatarEric Blake <eblake@redhat.com>
      Message-Id: <20200707160613.848843-34-armbru@redhat.com>
      dcfe4805
    • Markus Armbruster's avatar
      qom: Put name parameter before value / visitor parameter · 5325cc34
      Markus Armbruster authored
      
      The object_property_set_FOO() setters take property name and value in
      an unusual order:
      
          void object_property_set_FOO(Object *obj, FOO_TYPE value,
                                       const char *name, Error **errp)
      
      Having to pass value before name feels grating.  Swap them.
      
      Same for object_property_set(), object_property_get(), and
      object_property_parse().
      
      Convert callers with this Coccinelle script:
      
          @@
          identifier fun = {
              object_property_get, object_property_parse, object_property_set_str,
              object_property_set_link, object_property_set_bool,
              object_property_set_int, object_property_set_uint, object_property_set,
              object_property_set_qobject
          };
          expression obj, v, name, errp;
          @@
          -    fun(obj, v, name, errp)
          +    fun(obj, name, v, errp)
      
      Chokes on hw/arm/musicpal.c's lcd_refresh() with the unhelpful error
      message "no position information".  Convert that one manually.
      
      Fails to convert hw/arm/armsse.c, because Coccinelle gets confused by
      ARMSSE being used both as typedef and function-like macro there.
      Convert manually.
      
      Fails to convert hw/rx/rx-gdbsim.c, because Coccinelle gets confused
      by RXCPU being used both as typedef and function-like macro there.
      Convert manually.  The other files using RXCPU that way don't need
      conversion.
      
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: default avatarEric Blake <eblake@redhat.com>
      Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
      Message-Id: <20200707160613.848843-27-armbru@redhat.com>
      [Straightforwad conflict with commit 2336172d "audio: set default
      value for pcspk.iobase property" resolved]
      5325cc34
    • Markus Armbruster's avatar
      qapi: Use returned bool to check for failure, Coccinelle part · 62a35aaa
      Markus Armbruster authored
      
      The previous commit enables conversion of
      
          visit_foo(..., &err);
          if (err) {
              ...
          }
      
      to
      
          if (!visit_foo(..., errp)) {
              ...
          }
      
      for visitor functions that now return true / false on success / error.
      Coccinelle script:
      
          @@
          identifier fun =~ "check_list|input_type_enum|lv_start_struct|lv_type_bool|lv_type_int64|lv_type_str|lv_type_uint64|output_type_enum|parse_type_bool|parse_type_int64|parse_type_null|parse_type_number|parse_type_size|parse_type_str|parse_type_uint64|print_type_bool|print_type_int64|print_type_null|print_type_number|print_type_size|print_type_str|print_type_uint64|qapi_clone_start_alternate|qapi_clone_start_list|qapi_clone_start_struct|qapi_clone_type_bool|qapi_clone_type_int64|qapi_clone_type_null|qapi_clone_type_number|qapi_clone_type_str|qapi_clone_type_uint64|qapi_dealloc_start_list|qapi_dealloc_start_struct|qapi_dealloc_type_anything|qapi_dealloc_type_bool|qapi_dealloc_type_int64|qapi_dealloc_type_null|qapi_dealloc_type_number|qapi_dealloc_type_str|qapi_dealloc_type_uint64|qobject_input_check_list|qobject_input_check_struct|qobject_input_start_alternate|qobject_input_start_list|qobject_input_start_struct|qobject_input_type_any|qobject_input_type_bool|qobject_input_type_bool_keyval|qobject_input_type_int64|qobject_input_type_int64_keyval|qobject_input_type_null|qobject_input_type_number|qobject_input_type_number_keyval|qobject_input_type_size_keyval|qobject_input_type_str|qobject_input_type_str_keyval|qobject_input_type_uint64|qobject_input_type_uint64_keyval|qobject_output_start_list|qobject_output_start_struct|qobject_output_type_any|qobject_output_type_bool|qobject_output_type_int64|qobject_output_type_null|qobject_output_type_number|qobject_output_type_str|qobject_output_type_uint64|start_list|visit_check_list|visit_check_struct|visit_start_alternate|visit_start_list|visit_start_struct|visit_type_.*";
          expression list args;
          typedef Error;
          Error *err;
          @@
          -    fun(args, &err);
          -    if (err)
          +    if (!fun(args, &err))
               {
                   ...
               }
      
      A few line breaks tidied up manually.
      
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: default avatarEric Blake <eblake@redhat.com>
      Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
      Message-Id: <20200707160613.848843-19-armbru@redhat.com>
      62a35aaa
Loading