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 <brandon@ifup.org>
+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 <bphilips@suse.de>
+
+---
+ 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, 
+
+
+