1. 31 Jan, 2011 6 commits
  2. 24 Jan, 2011 4 commits
  3. 17 Dec, 2010 2 commits
  4. 24 Nov, 2010 1 commit
    • Ryan Harper's avatar
      Implement drive_del to decouple block removal from device removal · 9063f814
      Ryan Harper authored
      
      
      Currently device hotplug removal code is tied to device removal via
      ACPI.  All pci devices that are removable via device_del() require the
      guest to respond to the request.  In some cases the guest may not
      respond leaving the device still accessible to the guest.  The management
      layer doesn't currently have a reliable way to revoke access to host
      resource in the presence of an uncooperative guest.
      
      This patch implements a new monitor command, drive_del, which
      provides an explicit command to revoke access to a host block device.
      
      drive_del first quiesces the block device (qemu_aio_flush;
      bdrv_flush() and bdrv_close()).  This prevents further IO from being
      submitted against the host device.  Finally, drive_del cleans up
      pointers between the drive object (host resource) and the device
      object (guest resource).
      
      Signed-off-by: default avatarRyan Harper <ryanh@us.ibm.com>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      9063f814
  5. 04 Nov, 2010 1 commit
  6. 22 Aug, 2010 1 commit
  7. 26 Jul, 2010 1 commit
  8. 06 Jul, 2010 1 commit
  9. 02 Jul, 2010 4 commits
  10. 01 Jul, 2010 1 commit
    • Luiz Capitulino's avatar
      Monitor: handle optional '-' arg as a bool · eb159d13
      Luiz Capitulino authored
      
      
      Historically, user monitor arguments beginning with '-' (eg. '-f')
      were passed as integers down to handlers.
      
      I've maintained this behavior in the new monitor because we didn't
      have a boolean type at the very beginning of QMP. Today we have it
      and this behavior is causing trouble to QMP's argument checker.
      
      This commit fixes the problem by doing the following changes:
      
      1. User Monitor
      
         Before: the optional arg was represented as a QInt, we'd pass 1
                 down to handlers if the user specified the argument or
                 0 otherwise
      
         This commit: the optional arg is represented as a QBool, we pass
                      true down to handlers if the user specified the
                      argument, otherwise _nothing_ is passed
      
      2. QMP
      
         Before: the client was required to pass the arg as QBool, but we'd
                 convert it to QInt internally. If the argument wasn't passed,
                 we'd pass 0 down
      
         This commit: still require a QBool, but doesn't do any conversion and
                      doesn't pass any default value
      
      3. Convert existing handlers (do_eject()/do_migrate()) to the new way
      
         Before: Both handlers would expect a QInt value, either 0 or 1
      
         This commit: Change the handlers to accept a QBool, they handle the
                      following cases:
      
                         A) true is passed: the option is enabled
                         B) false is passed: the option is disabled
                         C) nothing is passed: option not specified, use
                                               default behavior
      
      Signed-off-by: default avatarLuiz Capitulino <lcapitulino@redhat.com>
      eb159d13
  11. 22 Jun, 2010 1 commit
    • Eduardo Habkost's avatar
      monitor: allow device to be ejected if no disk is inserted · 3b5276b5
      Eduardo Habkost authored
      
      
      This changes the monitor eject_device() function to not check for
      bdrv_is_inserted().
      
      Example run where the bug manifests itself:
      
      (output of 'info block' is stripped to include only the CD-ROM device)
      
        (qemu) info block
        ide1-cd0: type=cdrom removable=1 locked=0 [not inserted]
        (qemu) change ide1-cd0 /dev/cdrom host_cdrom
        (qemu) info block
        ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/cdrom ro=1 drv=host_cdrom encrypted=0
        (qemu) eject ide1-cd0
        (qemu) info block
        ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/cdrom ro=1 drv=host_cdrom encrypted=0
      
        # at this point, a disk was inserted on the host CD-ROM drive
      
        (qemu) info block
        ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/cdrom ro=1 drv=host_cdrom encrypted=0
        (qemu) eject ide1-cd0
        (qemu) info block
        ide1-cd0: type=cdrom removable=1 locked=0 [not inserted]
        (qemu)
      
      The first eject command didn't work because the is_inserted() check
      failed.
      
      I have no clue why the code had the is_inserted() check, as it doesn't matter
      if there is a disk present at the host drive, when the user wants the virtual
      device to be disconnected from the host device.
      
      The is_inserted() check has another side effect: a memory leak if the "change"
      command is used multiple times, as do_change() calls eject_device() before
      re-opening the block device, but bdrv_close() is never called.
      
      Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      3b5276b5
  12. 15 Jun, 2010 5 commits
  13. 04 Jun, 2010 2 commits