qemu/hw
Alexander Graf 8464b273d6 ahci: fix win7 hang on boot
When AHCI executes an asynchronous IDE command, it checked DRDY without
checking either DRQ or BSY.  This sometimes caused interrupt to be sent
before command is actually completed.

This resulted in a race condition: if guest then managed to access the
device before command has completed, it would hang waiting for an
interrupt.
This was observed with windows 7 guests.

To fix, check for DRQ or BSY in additiona to DRDY, if set,
the command is asynchronous so delay the interrupt until
asynchronous done callback is invoked.

Reported-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Tested-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2013-10-29 13:06:39 +01:00
..
9pfs hw/9pfs: Fix errno value for xattr functions 2013-10-05 13:05:28 +04:00
acpi pc,pci,virtio fixes and cleanups 2013-09-30 17:15:01 -05:00
alpha hw/alpha: Fix compiler warning (integer constant is too large) 2013-10-02 22:55:28 +04:00
arm QOM CPUState refactorings / X86CPU 2013-09-03 12:33:32 -05:00
audio audio: remove CONFIG_MIXEMU configure option 2013-09-24 10:29:34 +02:00
block virtio: Remove unneeded memcpy 2013-10-18 13:02:57 +02:00
bt Preparation for usb-bt-dongle conditional build 2013-09-10 11:14:41 +02:00
char sh4: Fix serial line access for Linux kernels later than 3.2 2013-10-02 22:55:28 +04:00
core pc,pci,virtio fixes and cleanups 2013-09-03 12:31:07 -05:00
cpu QOM CPUState refactorings / X86CPU 2013-09-03 12:33:32 -05:00
cris hw: Clean up bogus default boot order 2013-08-28 10:16:47 +03:00
display Merge remote-tracking branch 'bonzini/iommu-for-anthony' into staging 2013-10-18 10:01:49 -07:00
dma qom: Pass available size to object_initialize() 2013-08-30 21:15:44 +02:00
gpio gpio/zaurus: QOM cast cleanup 2013-07-29 21:06:57 +02:00
i2c exynos4210_i2c: QOM cast cleanup 2013-07-29 21:07:02 +02:00
i386 kvmvapic: Prevent reading beyond the end of guest RAM 2013-10-04 13:13:16 +03:00
ide ahci: fix win7 hang on boot 2013-10-29 13:06:39 +01:00
input aio / timers: Switch entire codebase to the new timer API 2013-08-22 19:14:24 +02:00
intc QOM device refactorings 2013-09-03 12:30:51 -05:00
isa i82378: Cleanup implementation 2013-07-31 23:25:41 +02:00
lm32 hw: Clean up bogus default boot order 2013-08-28 10:16:47 +03:00
m68k hw: Clean up bogus default boot order 2013-08-28 10:16:47 +03:00
microblaze hw: Clean up bogus default boot order 2013-08-28 10:16:47 +03:00
mips mips_malta: support up to 2GiB RAM 2013-09-09 18:42:22 +02:00
misc vfio-pci: Fix endian issues in vfio_pci_size_rom() 2013-10-04 12:50:51 -06:00
moxie memory: add owner argument to initialization functions 2013-07-04 17:42:44 +02:00
net net/rtl8139: update network information when macaddr is changed in guest 2013-10-18 13:28:09 +02:00
nvram fw_cfg: the I/O port variant expects little-endian 2013-08-07 12:48:15 -05:00
openrisc pc,pci,virtio fixes and cleanups 2013-09-03 12:31:07 -05:00
pci Makefile.target: CONFIG_NO_* variables removed 2013-10-16 18:21:00 +02:00
pci-bridge i82801b11: Fix i82801b11 PCI host bridge config space 2013-08-12 12:07:12 +03:00
pci-host pc,pci,virtio fixes and cleanups 2013-09-30 17:15:01 -05:00
ppc QOM CPUState refactorings / X86CPU 2013-09-03 12:33:32 -05:00
s390x s390/eventfacility: allow childs to handle more than 1 event type 2013-09-20 13:55:30 +02:00
scsi scsi: Allocate SCSITargetReq r->buf dynamically [CVE-2013-4344] 2013-10-09 17:24:18 +02:00
sd sd: Avoid access to NULL BlockDriverState 2013-10-17 10:15:18 +02:00
sh4 hw: Clean up bogus default boot order 2013-08-28 10:16:47 +03:00
sparc hw: Clean up bogus default boot order 2013-08-28 10:16:47 +03:00
sparc64 pc,pci,virtio fixes and cleanups 2013-09-03 12:31:07 -05:00
ssi xilinx_spi: QOM cast cleanup 2013-07-29 21:07:01 +02:00
timer misc: Fix some typos in names and comments 2013-09-01 18:59:24 +04:00
tpm aio / timers: Untangle include files 2013-08-22 19:10:27 +02:00
unicore32 hw: Clean up bogus default boot order 2013-08-28 10:16:47 +03:00
usb pci-ohci: Add missing 'break' in ohci_service_td 2013-10-02 22:55:28 +04:00
virtio pc,pci,virtio fixes and cleanups 2013-09-03 12:31:07 -05:00
watchdog aio / timers: Switch entire codebase to the new timer API 2013-08-22 19:14:24 +02:00
xen qemu/xen: make use of xenstore relative paths 2013-10-10 14:25:52 +00:00
xtensa pc,pci,virtio fixes and cleanups 2013-09-03 12:31:07 -05:00
Makefile.objs virtio: simplify Makefile conditionals 2013-04-19 16:18:11 +02:00