qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	John Snow <jsnow@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: [Qemu-devel] [PULL v2 02/59] ide/atapi: Mark non-data commands as complete
Date: Mon, 22 Sep 2014 12:41:33 +0100	[thread overview]
Message-ID: <1411386150-24003-3-git-send-email-stefanha@redhat.com> (raw)
In-Reply-To: <1411386150-24003-1-git-send-email-stefanha@redhat.com>

From: John Snow <jsnow@redhat.com>

When the command completion code in IDE and AHCI
was unified to put all command completion inside
of a callback, "cmd_done," we neglected to
ensure that all AHCI/ATAPI command paths would
eventually register as finished. for the PCI
interface to IDE this is not a problem because
cmd_done is a nop, but the AHCI implementation
needs to send a D2H_REG_FIS and interrupt back
to the guest to inform of completion.

This patch adds calls to ide_stop_transfer,
which calls ide_cmd_done, inside of
ide_atapi_cmd_ok and ide_atapi_cmd_error.

This fixes regressions observed by trying to boot QEMU
with a Fedora 20 live CD under Q35/AHCI, which uses
ATAPI command 0x00, which is a status check that may
cause a hang because we never complete, and ATAPI
command 0x56, which is unsupported by our current
implementation and results in an error that we never
report back to the guest.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 hw/ide/atapi.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index 6d52cda..10218df 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -136,6 +136,7 @@ void ide_atapi_cmd_ok(IDEState *s)
     s->error = 0;
     s->status = READY_STAT | SEEK_STAT;
     s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO | ATAPI_INT_REASON_CD;
+    ide_transfer_stop(s);
     ide_set_irq(s->bus);
 }
 
@@ -149,6 +150,7 @@ void ide_atapi_cmd_error(IDEState *s, int sense_key, int asc)
     s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO | ATAPI_INT_REASON_CD;
     s->sense_key = sense_key;
     s->asc = asc;
+    ide_transfer_stop(s);
     ide_set_irq(s->bus);
 }
 
@@ -176,9 +178,7 @@ void ide_atapi_cmd_reply_end(IDEState *s)
 #endif
     if (s->packet_transfer_size <= 0) {
         /* end of transfer */
-        s->status = READY_STAT | SEEK_STAT;
-        s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO | ATAPI_INT_REASON_CD;
-        ide_transfer_stop(s);
+        ide_atapi_cmd_ok(s);
         ide_set_irq(s->bus);
 #ifdef DEBUG_IDE_ATAPI
         printf("status=0x%x\n", s->status);
@@ -188,7 +188,6 @@ void ide_atapi_cmd_reply_end(IDEState *s)
         if (s->lba != -1 && s->io_buffer_index >= s->cd_sector_size) {
             ret = cd_read_sector(s, s->lba, s->io_buffer, s->cd_sector_size);
             if (ret < 0) {
-                ide_transfer_stop(s);
                 ide_atapi_io_error(s, ret);
                 return;
             }
-- 
1.9.3

  parent reply	other threads:[~2014-09-22 11:43 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-22 11:41 [Qemu-devel] [PULL v2 00/59] Block patches Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 01/59] block/vhdx.c: Mark parent_vhdx_guid variable as unused Stefan Hajnoczi
2014-09-22 11:41 ` Stefan Hajnoczi [this message]
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 03/59] aio-win32: fix uninitialized use of have_select_revents Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 04/59] ide/ahci: Check for -ECANCELED in aio callbacks Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 05/59] block: Add refcnt in BlockDriverAIOCB Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 06/59] block: Add bdrv_aio_cancel_async Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 07/59] block: Drop bdrv_em_co_aiocb_info.cancel Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 08/59] block: Drop bdrv_em_aiocb_info.cancel Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 09/59] thread-pool: Convert thread_pool_aiocb_info.cancel to cancel_async Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 10/59] linux-aio: Convert laio_aiocb_info.cancel to .cancel_async Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 11/59] dma: Convert dma_aiocb_info.cancel " Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 12/59] iscsi: Convert iscsi_aiocb_info.cancel " Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 13/59] archipelago: Drop archipelago_aiocb_info.cancel Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 14/59] blkdebug: Drop blkdebug_aiocb_info.cancel Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 15/59] blkverify: Drop blkverify_aiocb_info.cancel Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 16/59] curl: Drop curl_aiocb_info.cancel Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 17/59] qed: Drop qed_aiocb_info.cancel Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 18/59] quorum: fix quorum_aio_cancel() Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 19/59] quorum: Convert quorum_aiocb_info.cancel to .cancel_async Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 20/59] rbd: Drop rbd_aiocb_info.cancel Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 21/59] sheepdog: Convert sd_aiocb_info.cancel to .cancel_async Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 22/59] win32-aio: Drop win32_aiocb_info.cancel Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 23/59] ide: Convert trim_aiocb_info.cancel to .cancel_async Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 24/59] block: Drop AIOCBInfo.cancel Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 25/59] block: Rename qemu_aio_release -> qemu_aio_unref Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 26/59] qdev-monitor: fix segmentation fault on qdev_device_help() Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 27/59] aio-win32: avoid out-of-bounds access to the events array Stefan Hajnoczi
2014-09-22 11:41 ` [Qemu-devel] [PULL v2 28/59] block: Introduce "null" drivers Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 29/59] qapi: Sort BlockdevDriver enum data list Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 30/59] qapi: Sort items in BlockdevOptions definition Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 31/59] qapi/block: Add "fatal" to BLOCK_IMAGE_CORRUPTED Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 32/59] qcow2: Add qcow2_signal_corruption() Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 33/59] qcow2: Use qcow2_signal_corruption() for overlaps Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 34/59] qcow2: Check L1/L2/reftable entries for alignment Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 35/59] iotests: Add more tests for qcow2 corruption Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 36/59] image-fuzzer: Trivial readability and formatting improvements Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 37/59] hmp: fix memory leak at hmp_info_block_jobs() Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 38/59] qcow2: Fix leak of QemuOpts in qcow2_open() Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 39/59] qapi: Allow enums in anonymous unions Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 40/59] qcow2: Add overlap-check.template option Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 41/59] qapi/block-core: Add "new" qcow2 options Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 42/59] docs: List all image elements currently supported by the fuzzer Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 43/59] fuzz: Add fuzzing functions for entries of refcount table and blocks Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 44/59] layout: Add generators for " Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 45/59] ahci: Adding basic functionality qtest Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 46/59] ahci: MSI capability should be at 0x80, not 0x50 Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 47/59] ahci: Add test_pci_spec to ahci-test Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 48/59] ahci: add test_pci_enable " Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 49/59] ahci: properly shadow the TFD register Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 50/59] ahci: Add test_hba_spec to ahci-test Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 51/59] ahci: Add test_hba_enable " Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 52/59] ahci: Add test_identify case " Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 53/59] block/archipelago: Fix typo in qemu_archipelago_truncate() Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 54/59] block: delete cow block driver Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 55/59] block: vhdx - fix reading beyond pointer during image creation Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 56/59] async: aio_context_new(): Handle event_notifier_init failure Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 57/59] virtio: Import virtio_vring.h Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 58/59] vring: Better error handling if num is too large Stefan Hajnoczi
2014-09-22 11:42 ` [Qemu-devel] [PULL v2 59/59] block: Always compile virtio-blk dataplane Stefan Hajnoczi
2014-09-23 12:23 ` [Qemu-devel] [PULL v2 00/59] Block patches Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1411386150-24003-3-git-send-email-stefanha@redhat.com \
    --to=stefanha@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).