From 02760b1d097711b20088f8431f0a5a17de9b5f7d Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Aug 28 2007 16:39:12 +0000 Subject: CD-ROM emulation fix for bug 253542 --- diff --git a/qemu-0.9.0-atapi-hsm.patch b/qemu-0.9.0-atapi-hsm.patch new file mode 100644 index 0000000..ceae4bd --- /dev/null +++ b/qemu-0.9.0-atapi-hsm.patch @@ -0,0 +1,52 @@ +From: Brandon Philips +Newsgroups: gmane.comp.emulators.qemu +Subject: [PATCH][RFC] Fix bugs in the ATAPI cdrom driver +Date: Fri, 17 Aug 2007 16:43:04 -0700 +Message-ID: <20070817234304.GB10490@ifup.org> +Reply-To: qemu-devel@nongnu.org + +The new libata-eh in the Linux kernel is throwing a fit over the QEMU +cdrom device for two reasons: + +1) DRQ can be set with ERR_STAT set. This is a violation of the ATAPI +state machine. + +2) After a TEST_UNIT_READY ATAPI command is sent ERR_STAT is getting set +which is correct. But, when the OS issues another ATAPI command +ERR_STAT is still set. Which is bad since the next expected command +from the OS is REQUEST_SENSE to find out why ERR_STAT is set. + +bug this fixes: https://bugzilla.novell.com/show_bug.cgi?id=291775 + +Signed-off-by: Brandon Philips + +--- + hw/ide.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +Index: qemu-0.9.0/hw/ide.c +=================================================================== +--- qemu-0.9.0.orig/hw/ide.c ++++ qemu-0.9.0/hw/ide.c +@@ -586,7 +586,9 @@ static void ide_transfer_start(IDEState + s->end_transfer_func = end_transfer_func; + s->data_ptr = buf; + s->data_end = buf + size; +- s->status |= DRQ_STAT; ++ /* don't violate the HSM */ ++ if (!(s->status & ERR_STAT)) ++ s->status |= DRQ_STAT; + } + + static void ide_transfer_stop(IDEState *s) +@@ -1805,6 +1807,7 @@ static void ide_ioport_write(void *opaqu + /* 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, + + +