1. 18 7月, 2014 11 次提交
  2. 17 7月, 2014 3 次提交
  3. 16 7月, 2014 4 次提交
  4. 15 7月, 2014 18 次提交
  5. 14 7月, 2014 4 次提交
    • P
      serial-pci: remove memory regions from BAR before destroying them · 7497bce6
      Paolo Bonzini 提交于
      Otherwise, hot-unplug of pci-serial-2x trips the assertion
      in memory_region_destroy:
      
          (qemu) device_del gg
          (qemu) qemu-system-x86_64: /work/armbru/tmp/qemu/memory.c:1021: memory_region_destroy: Assertion `((&mr->subregions)->tqh_first == ((void *)0))' failed.
          Aborted (core dumped)
      Reported-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      7497bce6
    • P
      virtio-scsi: fix with -M pc-i440fx-2.0 · 1f4e6a06
      Paolo Bonzini 提交于
      Right now starting a machine with virtio-scsi and a <= 2.0 machine type
      fails with:
      
          qemu-system-x86_64: -device virtio-scsi-pci: Property .any_layout not found
      
      This is because the any_layout bit was actually never set after
      virtio-scsi was changed to support arbitrary layout for virtio buffers.
      
      (This was just a cleanup and a preparation for virtio 1.0; no guest
      actually checks the bit, but the new request parsing algorithms are
      tested even with old guest).
      Reported-by: NDavid Gilbert <dgilbert@redhat.com>
      Reviewed-by: NDavid Gilbert <dgilbert@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      1f4e6a06
    • K
      serial: change retry logic to avoid concurrency · f702e62a
      Kirill Batuzov 提交于
      Whenever serial_xmit fails to transmit a byte it adds a watch that would
      call it again when the "line" becomes ready. This results in a retry
      chain:
        serial_xmit -> add_watch -> serial_xmit
      Each chain is able to transmit one character, and for every character
      passed to serial by the guest driver a new chain is spawned.
      
      The problem lays with the fact that a new chain is spawned even when
      there is one already waiting on the watch. So there can be several retry
      chains waiting concurrently on one "line". Every chain tries to transmit
      current character, so character order is not messed up. But also every
      chain increases retry counter (tsr_retry). If there are enough
      concurrent chains this counter will hit MAX_XMIT_RETRY value and
      the character will be dropped.
      
      To reproduce this bug you need to feed serial output to some program
      consuming it slowly enough. A python script from bug #1335444
      description is an example of such program.
      
      This commit changes retry logic in the following way to avoid
      concurrency: instead of spawning a new chain for each character being
      transmitted spawn only one and make it transmit characters until FIFO is
      empty.
      
      The change consists of two parts:
       - add a do {} while () loop in serial_xmit (diff is a bit erratic
         for this part, diff -w will show actual change),
       - do not call serial_xmit from serial_ioport_write if there is one
         waiting on the watch already.
      
      This should fix another issue causing bug #1335444.
      Signed-off-by: NKirill Batuzov <batuzovk@ispras.ru>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      f702e62a
    • P
      qemu-char: fix deadlock with "-monitor pty" · 7b3621f4
      Paolo Bonzini 提交于
      qemu_chr_be_generic_open cannot be called with the write lock taken,
      because it calls client code that may call qemu_chr_fe_write.  This
      actually happens for the monitor:
      
          0x00007ffff27dbf79 in __GI_raise (sig=sig@entry=6)
          0x00007ffff27df388 in __GI_abort ()
          0x00005555555ef489 in error_exit (err=<optimized out>, msg=msg@entry=0x5555559796d0 <__func__.5959> "qemu_mutex_lock")
          0x00005555558f9080 in qemu_mutex_lock (mutex=mutex@entry=0x555556248a30)
          0x0000555555713936 in qemu_chr_fe_write (s=0x555556248a30, buf=buf@entry=0x5555563d8870 "QEMU 2.0.90 monitor - type 'help' for more information\r\n", len=56)
          0x00005555556217fd in monitor_flush_locked (mon=mon@entry=0x555556251fd0)
          0x0000555555621a12 in monitor_flush_locked (mon=0x555556251fd0)
          monitor_puts (mon=mon@entry=0x555556251fd0, str=0x55555634bfa7 "", str@entry=0x55555634bf70 "QEMU 2.0.90 monitor - type 'help' for more information\n")
          0x0000555555624359 in monitor_vprintf (mon=0x555556251fd0, fmt=<optimized out>, ap=<optimized out>)
          0x0000555555624414 in monitor_printf (mon=<optimized out>, fmt=fmt@entry=0x5555559105a0 "QEMU %s monitor - type 'help' for more information\n")
          0x0000555555629806 in monitor_event (opaque=0x555556251fd0, event=<optimized out>)
          0x000055555571343c in qemu_chr_be_generic_open (s=0x555556248a30)
      
      To avoid this, defer the call to an idle callback, which will be
      called as soon as the main loop is re-entered.  In order to simplify
      the cleanup and do it in one place only, change pty_chr_close to
      call pty_chr_state.
      
      To reproduce, run with "-monitor pty", then try to read from the
      slave /dev/pts/FOO that it creates.
      
      Fixes: 9005b2a7Reported-by: NLi Liang <liangx.z.li@intel.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      7b3621f4