1. 12 7月, 2010 3 次提交
    • I
      pci: don't overwrite multi functio bit in pci header type. · b80d4a98
      Isaku Yamahata 提交于
      Don't overwrite pci header type.
      Otherwise, multi function bit which pci_init_header_type() sets
      appropriately is lost.
      Anyway PCI_HEADER_TYPE_NORMAL is zero, so it is unnecessary to zero
      which is already zero cleared.
      
      how to test:
      run qemu and issue info pci to see whether a device in question is
      normal device, not pci-to-pci bridge.
      This is handy because guest os isn't required.
      
      tested changes:
      The following files are covered by using following commands.
      sparc64-softmmu
        apb_pci.c, vga-pci.c, cmd646.c, ne2k_pci.c, sun4u.c
      ppc-softmmu
        grackle_pci.c, cmd646.c, ne2k_pci.c, vga-pci.c, macio.c
      ppc-softmmu -M mac99
        unin_pci.c(uni-north, uni-north-agp)
      ppc64-softmmu
        pci-ohci, ne2k_pci, vga-pci, unin_pci.c(u3-agp)
      x86_64-softmmu
        acpi_piix4.c, ide/piix.c, piix_pci.c
        -vga vmware vmware_vga.c
        -watchdog i6300esb wdt_i6300esb.c
        -usb usb-uhci.c
        -sound ac97 ac97.c
        -nic model=rtl8139 rtl8139.c
        -nic model=pcnet pcnet.c
        -balloon virtio virtio-pci.c:
      
      untested changes:
      The following changes aren't tested.
      prep_pci.c: ppc-softmmu -M prep should cover, but core dumped.
      unin_pci.c(uni-north-pci): the caller is commented out.
      openpic.c: the caller is commented out in ppc_prep.c
      Signed-off-by: NIsaku Yamahata <yamahata@valinux.co.jp>
      Signed-off-by: NBlue Swirl <blauwirbel@gmail.com>
      b80d4a98
    • I
      pci: insert assert that auto-assigned-address function is single function device. · 6fa84913
      Isaku Yamahata 提交于
      Auto-assigned-address pci function (passing devfn = -1) is always
      single function.
      This patch adds assert() to guarantee that auto-assigned-address function
      is always single function device at function = 0.
      Signed-off-by: NIsaku Yamahata <yamahata@valinux.co.jp>
      Signed-off-by: NBlue Swirl <blauwirbel@gmail.com>
      6fa84913
    • I
      pci: use PCI_DEVFN() where appropriate. · 520128bd
      Isaku Yamahata 提交于
      Use PCI_DEVFN() and PCI_FUNC_MAX where appropriate.
      This patch make it clear that func = 0.
      
      test:
      The following object files with/without this patch are stripped and compared.
      They remains same.
        arm-softmmu/versatile_pci.o
        libhw32/ppce500_pci.o
        libhw32/unin_pci.o
        libhw64/ppce500_pci.o
        libhw64/unin_pci.o
        mips-softmmu/gt64xxx.o
        mips64-softmmu/gt64xxx.o
        mips64el-softmmu/gt64xxx.o
        mipsel-softmmu/gt64xxx.o
      
      Cc: Aurelien Jarno <aurelien@aurel32.net>
      Cc: Yu Liu <yu.liu@freescale.com>
      Cc: Paul Brook <paul@codesourcery.com>
      Signed-off-by: NIsaku Yamahata <yamahata@valinux.co.jp>
      Signed-off-by: NBlue Swirl <blauwirbel@gmail.com>
      520128bd
  2. 06 7月, 2010 20 次提交
  3. 03 7月, 2010 1 次提交
  4. 02 7月, 2010 8 次提交
    • M
      pc: Fix CMOS info for drives defined with -device · c0897e0c
      Markus Armbruster 提交于
      Drives defined with -drive if=ide get get created along with the IDE
      controller, inside machine->init().  That's before cmos_init().
      Drives defined with -device get created during generic device init.
      That's after cmos_init().  Because of that, CMOS has no information on
      them (type, geometry, translation).  Older versions of Windows such as
      XP reportedly choke on that.
      
      Split off the part of CMOS initialization that needs to know about
      -device devices, and turn it into a reset handler, so it runs after
      device creation.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      c0897e0c
    • M
    • M
      block: Fix virtual media change for if=none · 7d0d6950
      Markus Armbruster 提交于
      BlockDriverState member removable controls whether virtual media
      change (monitor commands change, eject) is allowed.  It is set when
      the "type hint" is BDRV_TYPE_CDROM or BDRV_TYPE_FLOPPY.
      
      The type hint is only set by drive_init().  It sets BDRV_TYPE_FLOPPY
      for if=floppy.  It sets BDRV_TYPE_CDROM for media=cdrom and if=ide,
      scsi, xen, or none.
      
      if=ide and if=scsi work, because the type hint makes it a CD-ROM.
      if=xen likewise, I think.
      
      For the same reason, if=none works when it's used by ide-drive or
      scsi-disk.  For other guest devices, there are problems:
      
      * fdc: you can't change virtual media
      
          $ qemu [...] -drive if=none,id=foo,... -global isa-fdc.driveA=foo
          QEMU 0.12.50 monitor - type 'help' for more information
          (qemu) eject foo
          Device 'foo' is not removable
      
        unless you add media=cdrom, but that makes it readonly.
      
      * virtio: if you add media=cdrom, you can change virtual media.  If
        you eject, the guest gets I/O errors.  If you change, the guest sees
        the drive's contents suddenly change.
      
      * scsi-generic: if you add media=cdrom, you can change virtual media.
        I didn't test what that does to the guest or the physical device,
        but it can't be pretty.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      7d0d6950
    • M
      block: Catch attempt to attach multiple devices to a blockdev · 18846dee
      Markus Armbruster 提交于
      For instance, -device scsi-disk,drive=foo -device scsi-disk,drive=foo
      happily creates two SCSI disks connected to the same block device.
      It's all downhill from there.
      
      Device usb-storage deliberately attaches twice to the same blockdev,
      which fails with the fix in place.  Detach before the second attach
      there.
      
      Also catch attempt to delete while a guest device model is attached.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      18846dee
    • M
      qdev: Decouple qdev_prop_drive from DriveInfo · f8b6cc00
      Markus Armbruster 提交于
      Make the property point to BlockDriverState, cutting out the DriveInfo
      middleman.  This prepares the ground for block devices that don't have
      a DriveInfo.
      
      Currently all user-defined ones have a DriveInfo, because the only way
      to define one is -drive & friends (they go through drive_init()).
      DriveInfo is closely tied to -drive, and like -drive, it mixes
      information about host and guest part of the block device.  I'm
      working towards a new way to define block devices, with clean
      host/guest separation, and I need to get DriveInfo out of the way for
      that.
      
      Fortunately, the device models are perfectly happy with
      BlockDriverState, except for two places: ide_drive_initfn() and
      scsi_disk_initfn() need to check the DriveInfo for a serial number set
      with legacy -drive serial=...  Use drive_get_by_blockdev() there.
      
      Device model code should now use DriveInfo only when explicitly
      dealing with drives defined the old way, i.e. without -device.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      f8b6cc00
    • M
      blockdev: Clean up automatic drive deletion · 14bafc54
      Markus Armbruster 提交于
      We automatically delete blockdev host parts on unplug of the guest
      device.  Too much magic, but we can't change that now.
      
      The delete happens early in the guest device teardown, before the
      connection to the host part is severed.  Thus, the guest part's
      pointer to the host part dangles for a brief time.  No actual harm
      comes from this, but we'll catch such dangling pointers a few commits
      down the road.  Clean up the dangling pointers by delaying the
      automatic deletion until the guest part's pointer is gone.
      
      Device usb-storage deliberately makes two qdev properties refer to the
      same drive, because it automatically creates a second device.  Again,
      too much magic we can't change now.  Multiple references worked okay
      before, but now free_drive() dies for the second one.  Zap the extra
      reference.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      14bafc54
    • M
      ide: Make it explicit that ide_create_drive() can't fail · fa12fbbe
      Markus Armbruster 提交于
      All callers of ide_create_drive() ignore its value.  Currently
      harmless, because it fails only when qdev_init() fails, which fails
      only when ide_drive_initfn() fails, which never fails.
      
      Brittle.  Change it to die instead of silently ignoring failure.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      fa12fbbe
    • M
      scsi: scsi_bus_legacy_handle_cmdline() can fail, fix callers · fa66b909
      Markus Armbruster 提交于
      None of its callers checks for failure.  scsi_hot_add() can crash
      because of that:
      
      (qemu) drive_add 4 if=scsi,format=host_device,file=/dev/sg1
      scsi-generic: scsi generic interface too old
      Segmentation fault (core dumped)
      
      Fix all callers, not just scsi_hot_add().
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      fa66b909
  5. 01 7月, 2010 8 次提交