1. 14 9月, 2016 2 次提交
    • D
      hw: replace most use of qemu_chr_fe_write with qemu_chr_fe_write_all · 6ab3fc32
      Daniel P. Berrange 提交于
      The qemu_chr_fe_write method will return -1 on EAGAIN if the
      chardev backend write would block. Almost no callers of the
      qemu_chr_fe_write() method check the return value, instead
      blindly assuming data was successfully sent. In most cases
      this will lead to silent data loss on interactive consoles,
      but in some cases (eg RNG EGD) it'll just cause corruption
      of the protocol being spoken.
      
      We unfortunately can't fix the virtio-console code, due to
      a bug in the Linux guest drivers, which would cause the
      entire Linux kernel to hang if we delay processing of the
      incoming data in any way. Fixing this requires first fixing
      the guest driver to not hold spinlocks while writing to the
      hvc device backend.
      
      Fixes bug: https://bugs.launchpad.net/qemu/+bug/1586756Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Message-Id: <1473170165-540-4-git-send-email-berrange@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      6ab3fc32
    • D
      sclpconsolelm: remove bogus check for -EAGAIN · 7983e829
      Daniel P. Berrange 提交于
      The write_console_data() method in sclpconsole-lm.c checks
      whether the return value of qemu_chr_fe_write() has the
      value of -EAGAIN and if so then increments the buffer offset
      by the value of EAGAIN. Fortunately qemu_chr_fe_write() will
      never return EAGAIN directly, rather it returns -1 with
      errno set to EAGAIN, so this broken code path was not
      reachable. The behaviour on EAGAIN was stil bad though,
      causing the write_console_data() to busy_wait repeatedly
      calling qemu_chr_fe_write() with no sleep between iters.
      
      Just remove all this loop logic and replace with a call
      to qemu_chr_fe_write_all().
      Acked-by: NCornelia Huck <cornelia.huck@de.ibm.com>
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Message-Id: <1473170165-540-3-git-send-email-berrange@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      7983e829
  2. 08 9月, 2016 1 次提交
  3. 12 8月, 2016 1 次提交
  4. 11 8月, 2016 1 次提交
    • D
      virtio-console: set frontend open permanently for console devs · bce6261e
      Daniel P. Berrange 提交于
      The virtio-console.c file handles both serial consoles
      and interactive consoles, since they're backed by the
      same device model.
      
      Since serial devices are expected to be reliable and
      need to notify the guest when the backend is opened
      or closed, the virtio-console.c file wires up support
      for chardev events. This affects both serial consoles
      and interactive consoles, using a network connection
      based chardev backend such as 'socket', but not when
      using a PTY based backend or plain 'file' backends.
      
      When the host side is not connected the handle_output()
      method in virtio-serial-bus.c will drop any data sent
      by the guest, before it even reaches the virtio-console.c
      code. This means that if the chardev has a logfile
      configured, the data will never get logged.
      
      Consider for example, configuring a x86_64 guest with a
      plain UART serial port
      
        -chardev socket,id=charserial1,host=127.0.0.1,port=9001,server,nowait,logfile=console1.log,logappend=on
        -device isa-serial,chardev=charserial1,id=serial1
      
      vs a s390 guest which has to use the virtio-console port
      
        -chardev socket,id=charconsole1,host=127.0.0.1,port=9000,server,nowait,logfile=console2.log,logappend=on
        -device virtconsole,chardev=charconsole1,id=console1
      
      The isa-serial one gets data written to the log regardless
      of whether a client is connected, while the virtioconsole
      one only gets data written to the log when a client is
      connected.
      
      There is no need for virtio-serial-bus.c to aggressively
      drop the data for console devices, as the chardev code is
      prefectly capable of discarding the data itself.
      
      So this patch changes virtconsole devices so that they
      are always marked as having the host side open. This
      ensures that the guest OS will always send any data it
      has (Linux virtio-console hvc driver actually ignores
      the host open state and sends data regardless, but we
      should not rely on that), and also prevents the
      virtio-serial-bus code prematurely discarding data.
      
      The behaviour of virtserialport devices is *not* changed,
      only virtconsole, because for the former, it is important
      that the guest OSknow exactly when the host side is opened
      / closed so it can do any protocol re-negotiation that may
      be required.
      
      Fixes bug: https://bugs.launchpad.net/qemu/+bug/1599214Acked-by: NCornelia Huck <cornelia.huck@de.ibm.com>
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Message-Id: <1470241360-3574-2-git-send-email-berrange@redhat.com>
      Signed-off-by: NAmit Shah <amit.shah@redhat.com>
      bce6261e
  5. 22 7月, 2016 2 次提交
  6. 12 7月, 2016 1 次提交
  7. 29 6月, 2016 6 次提交
  8. 27 6月, 2016 1 次提交
  9. 21 6月, 2016 2 次提交
  10. 17 6月, 2016 1 次提交
  11. 07 6月, 2016 1 次提交
  12. 06 6月, 2016 5 次提交
  13. 29 5月, 2016 5 次提交
  14. 19 5月, 2016 1 次提交
  15. 18 5月, 2016 1 次提交
  16. 17 5月, 2016 2 次提交
  17. 19 4月, 2016 1 次提交
  18. 23 3月, 2016 3 次提交
    • R
      Replaced get_tick_per_sec() by NANOSECONDS_PER_SECOND · 73bcb24d
      Rutuja Shah 提交于
      This patch replaces get_ticks_per_sec() calls with the macro
      NANOSECONDS_PER_SECOND. Also, as there are no callers, get_ticks_per_sec()
      is then removed.  This replacement improves the readability and
      understandability of code.
      
      For example,
      
          timer_mod(fdctrl->result_timer,
      	      qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + (get_ticks_per_sec() / 50));
      
      NANOSECONDS_PER_SECOND makes it obvious that qemu_clock_get_ns
      matches the unit of the expression on the right side of the plus.
      Signed-off-by: NRutuja Shah <rutu.shah.26@gmail.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      73bcb24d
    • P
      hw: explicitly include qemu-common.h and cpu.h · 4771d756
      Paolo Bonzini 提交于
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      4771d756
    • M
      include/qemu/osdep.h: Don't include qapi/error.h · da34e65c
      Markus Armbruster 提交于
      Commit 57cb38b3 included qapi/error.h into qemu/osdep.h to get the
      Error typedef.  Since then, we've moved to include qemu/osdep.h
      everywhere.  Its file comment explains: "To avoid getting into
      possible circular include dependencies, this file should not include
      any other QEMU headers, with the exceptions of config-host.h,
      compiler.h, os-posix.h and os-win32.h, all of which are doing a
      similar job to this file and are under similar constraints."
      qapi/error.h doesn't do a similar job, and it doesn't adhere to
      similar constraints: it includes qapi-types.h.  That's in excess of
      100KiB of crap most .c files don't actually need.
      
      Add the typedef to qemu/typedefs.h, and include that instead of
      qapi/error.h.  Include qapi/error.h in .c files that need it and don't
      get it now.  Include qapi-types.h in qom/object.h for uint16List.
      
      Update scripts/clean-includes accordingly.  Update it further to match
      reality: replace config.h by config-target.h, add sysemu/os-posix.h,
      sysemu/os-win32.h.  Update the list of includes in the qemu/osdep.h
      comment quoted above similarly.
      
      This reduces the number of objects depending on qapi/error.h from "all
      of them" to less than a third.  Unfortunately, the number depending on
      qapi-types.h shrinks only a little.  More work is needed for that one.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      [Fix compilation without the spice devel packages. - Paolo]
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      da34e65c
  19. 18 3月, 2016 1 次提交
    • E
      qapi: Don't special-case simple union wrappers · 32bafa8f
      Eric Blake 提交于
      Simple unions were carrying a special case that hid their 'data'
      QMP member from the resulting C struct, via the hack method
      QAPISchemaObjectTypeVariant.simple_union_type().  But by using
      the work we started by unboxing flat union and alternate
      branches, coupled with the ability to visit the members of an
      implicit type, we can now expose the simple union's implicit
      type in qapi-types.h:
      
      | struct q_obj_ImageInfoSpecificQCow2_wrapper {
      |     ImageInfoSpecificQCow2 *data;
      | };
      |
      | struct q_obj_ImageInfoSpecificVmdk_wrapper {
      |     ImageInfoSpecificVmdk *data;
      | };
      ...
      | struct ImageInfoSpecific {
      |     ImageInfoSpecificKind type;
      |     union { /* union tag is @type */
      |         void *data;
      |-        ImageInfoSpecificQCow2 *qcow2;
      |-        ImageInfoSpecificVmdk *vmdk;
      |+        q_obj_ImageInfoSpecificQCow2_wrapper qcow2;
      |+        q_obj_ImageInfoSpecificVmdk_wrapper vmdk;
      |     } u;
      | };
      
      Doing this removes asymmetry between QAPI's QMP side and its
      C side (both sides now expose 'data'), and means that the
      treatment of a simple union as sugar for a flat union is now
      equivalent in both languages (previously the two approaches used
      a different layer of dereferencing, where the simple union could
      be converted to a flat union with equivalent C layout but
      different {} on the wire, or to an equivalent QMP wire form
      but with different C representation).  Using the implicit type
      also lets us get rid of the simple_union_type() hack.
      
      Of course, now all clients of simple unions have to adjust from
      using su->u.member to using su->u.member.data; while this touches
      a number of files in the tree, some earlier cleanup patches
      helped minimize the change to the initialization of a temporary
      variable rather than every single member access.  The generated
      qapi-visit.c code is also affected by the layout change:
      
      |@@ -7393,10 +7393,10 @@ void visit_type_ImageInfoSpecific_member
      |     }
      |     switch (obj->type) {
      |     case IMAGE_INFO_SPECIFIC_KIND_QCOW2:
      |-        visit_type_ImageInfoSpecificQCow2(v, "data", &obj->u.qcow2, &err);
      |+        visit_type_q_obj_ImageInfoSpecificQCow2_wrapper_members(v, &obj->u.qcow2, &err);
      |         break;
      |     case IMAGE_INFO_SPECIFIC_KIND_VMDK:
      |-        visit_type_ImageInfoSpecificVmdk(v, "data", &obj->u.vmdk, &err);
      |+        visit_type_q_obj_ImageInfoSpecificVmdk_wrapper_members(v, &obj->u.vmdk, &err);
      |         break;
      |     default:
      |         abort();
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1458254921-17042-13-git-send-email-eblake@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      32bafa8f
  20. 17 3月, 2016 1 次提交
  21. 05 3月, 2016 1 次提交
    • E
      ui: Shorten references into InputEvent · b5a1b443
      Eric Blake 提交于
      An upcoming patch will alter how simple unions, like InputEvent, are
      laid out, which will impact all lines of the form 'evt->u.XXX'
      (expanding it to the longer 'evt->u.XXX.data').  For better
      legibility in that patch, and less need for line wrapping, it's better
      to use a temporary variable to reduce the effect of a layout change to
      just the variable initializations, rather than every reference within
      an InputEvent.
      
      There was one instance in hid.c:hid_pointer_event() where the code
      was referring to evt->u.rel inside the case label where evt->u.abs
      is the correct name; thankfully, both members of the union have the
      same type, so it happened to work, but it is now cleaner.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1457021813-10704-8-git-send-email-eblake@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      b5a1b443