diff options
author | S.Çağlar Onur <caglar@pardus.org.tr> | 2007-09-23 12:12:38 +0300 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2007-09-23 11:23:55 +0200 |
commit | 0cd48ef8c0e138cfb5ee3d72e3f7402a2de625be (patch) | |
tree | 044b153f21b141a5667ae0121d6730021f5fb5ab | |
parent | ad9b8007cbefeaef7693a85dba7b2a12f93cba17 (diff) |
Fix ide emulation bugkvm-44
With very recent kernels libata throws lots of errors while booting and it
makes booting really really slow, while searching the solution i found
following bug reports [1],[2] and following commit [3].
Following diff against kvm-userspace HEAD solves this issue for kvm. This
chunk of code is directly copied from qemu CVS so according to CVS logs
credit belongs to Brandon Philips.
[1] https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.22/+bug/120316
[2] https://bugzilla.novell.com/show_bug.cgi?id=291775
[3] http://cvs.savannah.gnu.org/viewvc/qemu/hw/ide.c?root=qemu&r1=1.63&r2=1.64
Signed-off-by: Avi Kivity <avi@qumranet.com>
-rw-r--r-- | hw/ide.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -586,7 +586,8 @@ static void ide_transfer_start(IDEState *s, uint8_t *buf, int size, s->end_transfer_func = end_transfer_func; s->data_ptr = buf; s->data_end = buf + size; - s->status |= DRQ_STAT; + if (!(s->status & ERR_STAT)) + s->status |= DRQ_STAT; } static void ide_transfer_stop(IDEState *s) @@ -1805,6 +1806,7 @@ static void ide_ioport_write(void *opaque, uint32_t addr, uint32_t val) /* overlapping commands not supported */ if (s->feature & 0x02) goto abort_cmd; + s->status = READY_STAT; s->atapi_dma = s->feature & 1; s->nsector = 1; ide_transfer_start(s, s->io_buffer, ATAPI_PACKET_SIZE, |