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>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: [Qemu-devel] [PULL 43/69] ide: replace set_unit callback with more IDEBus state
Date: Fri, 27 Feb 2015 18:18:41 +0000	[thread overview]
Message-ID: <1425061147-1411-44-git-send-email-stefanha@redhat.com> (raw)
In-Reply-To: <1425061147-1411-1-git-send-email-stefanha@redhat.com>

From: Paolo Bonzini <pbonzini@redhat.com>

Start moving the initial state of the current request to IDEBus, so that
AHCI can use it.  The set_unit callback is not used anymore once this is
done.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 1424708286-16483-9-git-send-email-jsnow@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 hw/ide/ahci.c     |  7 -------
 hw/ide/core.c     |  6 ++++--
 hw/ide/internal.h |  2 +-
 hw/ide/macio.c    |  1 -
 hw/ide/pci.c      | 19 ++++++-------------
 hw/ide/pci.h      |  6 ++++--
 6 files changed, 15 insertions(+), 26 deletions(-)

diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index 3892025..bc6d5ce 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -1226,12 +1226,6 @@ static int ahci_dma_rw_buf(IDEDMA *dma, int is_write)
     return 1;
 }
 
-static int ahci_dma_set_unit(IDEDMA *dma, int unit)
-{
-    /* only a single unit per link */
-    return 0;
-}
-
 static void ahci_cmd_done(IDEDMA *dma)
 {
     AHCIDevice *ad = DO_UPCAST(AHCIDevice, dma, dma);
@@ -1258,7 +1252,6 @@ static const IDEDMAOps ahci_dma_ops = {
     .prepare_buf = ahci_dma_prepare_buf,
     .commit_buf = ahci_commit_buf,
     .rw_buf = ahci_dma_rw_buf,
-    .set_unit = ahci_dma_set_unit,
     .cmd_done = ahci_cmd_done,
 };
 
diff --git a/hw/ide/core.c b/hw/ide/core.c
index 0a3d244..7607d03 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -646,6 +646,7 @@ static void dma_buf_commit(IDEState *s, uint32_t tx_bytes)
 void ide_set_inactive(IDEState *s, bool more)
 {
     s->bus->dma->aiocb = NULL;
+    s->bus->retry_unit = -1;
     if (s->bus->dma->ops->set_inactive) {
         s->bus->dma->ops->set_inactive(s->bus->dma, more);
     }
@@ -666,7 +667,7 @@ static int ide_handle_rw_error(IDEState *s, int error, int op)
     BlockErrorAction action = blk_get_error_action(s->blk, is_read, error);
 
     if (action == BLOCK_ERROR_ACTION_STOP) {
-        s->bus->dma->ops->set_unit(s->bus->dma, s->unit);
+        assert(s->bus->retry_unit == s->unit);
         s->bus->error_status = op;
     } else if (action == BLOCK_ERROR_ACTION_REPORT) {
         if (op & IDE_RETRY_DMA) {
@@ -799,6 +800,7 @@ static void ide_sector_start_dma(IDEState *s, enum ide_dma_cmd dma_cmd)
 
 void ide_start_dma(IDEState *s, BlockCompletionFunc *cb)
 {
+    s->bus->retry_unit = s->unit;
     if (s->bus->dma->ops->start_dma) {
         s->bus->dma->ops->start_dma(s->bus->dma, s, cb);
     }
@@ -2327,11 +2329,11 @@ static const IDEDMAOps ide_dma_nop_ops = {
     .prepare_buf    = ide_nop_int32,
     .restart_dma    = ide_nop,
     .rw_buf         = ide_nop_int,
-    .set_unit       = ide_nop_int,
 };
 
 static void ide_restart_dma(IDEState *s, enum ide_dma_cmd dma_cmd)
 {
+    s->unit = s->bus->retry_unit;
     s->bus->dma->ops->restart_dma(s->bus->dma);
     s->io_buffer_index = 0;
     s->io_buffer_size = 0;
diff --git a/hw/ide/internal.h b/hw/ide/internal.h
index 44cce5b..9630f61 100644
--- a/hw/ide/internal.h
+++ b/hw/ide/internal.h
@@ -436,7 +436,6 @@ struct IDEDMAOps {
     DMAInt32Func *prepare_buf;
     DMAu32Func *commit_buf;
     DMAIntFunc *rw_buf;
-    DMAIntFunc *set_unit;
     DMAVoidFunc *restart_dma;
     DMAStopFunc *set_inactive;
     DMAVoidFunc *cmd_done;
@@ -465,6 +464,7 @@ struct IDEBus {
     qemu_irq irq;
 
     int error_status;
+    uint8_t retry_unit;
 };
 
 #define TYPE_IDE_DEVICE "ide-device"
diff --git a/hw/ide/macio.c b/hw/ide/macio.c
index e7a5c99..a009674 100644
--- a/hw/ide/macio.c
+++ b/hw/ide/macio.c
@@ -572,7 +572,6 @@ static const IDEDMAOps dbdma_ops = {
     .start_dma      = ide_dbdma_start,
     .prepare_buf    = ide_nop_int32,
     .rw_buf         = ide_nop_int,
-    .set_unit       = ide_nop_int,
 };
 
 static void macio_ide_realizefn(DeviceState *dev, Error **errp)
diff --git a/hw/ide/pci.c b/hw/ide/pci.c
index cd1bbb0..2b0e886 100644
--- a/hw/ide/pci.c
+++ b/hw/ide/pci.c
@@ -42,7 +42,6 @@ static void bmdma_start_dma(IDEDMA *dma, IDEState *s,
 {
     BMDMAState *bm = DO_UPCAST(BMDMAState, dma, dma);
 
-    bm->unit = s->unit;
     bm->dma_cb = dma_cb;
     bm->cur_prd_last = 0;
     bm->cur_prd_addr = 0;
@@ -163,20 +162,11 @@ static int bmdma_rw_buf(IDEDMA *dma, int is_write)
     return 1;
 }
 
-static int bmdma_set_unit(IDEDMA *dma, int unit)
-{
-    BMDMAState *bm = DO_UPCAST(BMDMAState, dma, dma);
-    bm->unit = unit;
-
-    return 0;
-}
-
 static void bmdma_set_inactive(IDEDMA *dma, bool more)
 {
     BMDMAState *bm = DO_UPCAST(BMDMAState, dma, dma);
 
     bm->dma_cb = NULL;
-    bm->unit = -1;
     if (more) {
         bm->status |= BM_STATUS_DMAING;
     } else {
@@ -335,6 +325,7 @@ static void ide_bmdma_pre_save(void *opaque)
     BMDMAState *bm = opaque;
     uint8_t abused_bits = BM_MIGRATION_COMPAT_STATUS_BITS;
 
+    bm->migration_retry_unit = bm->bus->retry_unit;
     bm->migration_compat_status =
         (bm->status & ~abused_bits) | (bm->bus->error_status & abused_bits);
 }
@@ -351,6 +342,9 @@ static int ide_bmdma_post_load(void *opaque, int version_id)
         bm->status = bm->migration_compat_status & ~abused_bits;
         bm->bus->error_status |= bm->migration_compat_status & abused_bits;
     }
+    if (bm->bus->error_status) {
+        bm->bus->retry_unit = bm->migration_retry_unit;
+    }
 
     return 0;
 }
@@ -389,7 +383,7 @@ static const VMStateDescription vmstate_bmdma = {
         VMSTATE_UINT32(addr, BMDMAState),
         VMSTATE_INT64(sector_num, BMDMAState),
         VMSTATE_UINT32(nsector, BMDMAState),
-        VMSTATE_UINT8(unit, BMDMAState),
+        VMSTATE_UINT8(migration_retry_unit, BMDMAState),
         VMSTATE_END_OF_LIST()
     },
     .subsections = (VMStateSubsection []) {
@@ -413,7 +407,7 @@ static int ide_pci_post_load(void *opaque, int version_id)
     for(i = 0; i < 2; i++) {
         /* current versions always store 0/1, but older version
            stored bigger values. We only need last bit */
-        d->bmdma[i].unit &= 1;
+        d->bmdma[i].migration_retry_unit &= 1;
         ide_bmdma_post_load(&d->bmdma[i], -1);
     }
 
@@ -454,7 +448,6 @@ static const struct IDEDMAOps bmdma_ops = {
     .start_dma = bmdma_start_dma,
     .prepare_buf = bmdma_prepare_buf,
     .rw_buf = bmdma_rw_buf,
-    .set_unit = bmdma_set_unit,
     .restart_dma = bmdma_restart_dma,
     .set_inactive = bmdma_set_inactive,
     .reset = bmdma_reset,
diff --git a/hw/ide/pci.h b/hw/ide/pci.h
index ea4e051..222a163 100644
--- a/hw/ide/pci.h
+++ b/hw/ide/pci.h
@@ -33,6 +33,8 @@ typedef struct BMDMAState {
     /* Bit 0-2 and 7:   BM status register
      * Bit 3-6:         bus->error_status */
     uint8_t migration_compat_status;
+    uint8_t migration_retry_unit;
+
     struct PCIIDEState *pci_dev;
 } BMDMAState;
 
@@ -61,8 +63,8 @@ typedef struct PCIIDEState {
 
 static inline IDEState *bmdma_active_if(BMDMAState *bmdma)
 {
-    assert(bmdma->unit != (uint8_t)-1);
-    return bmdma->bus->ifs + bmdma->unit;
+    assert(bmdma->bus->retry_unit != (uint8_t)-1);
+    return bmdma->bus->ifs + bmdma->bus->retry_unit;
 }
 
 
-- 
2.1.0

  parent reply	other threads:[~2015-02-27 18:20 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-27 18:17 [Qemu-devel] [PULL 00/69] Block patches Stefan Hajnoczi
2015-02-27 18:17 ` [Qemu-devel] [PULL 01/69] coroutine: Fix use after free with qemu_coroutine_yield() Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 02/69] coroutine: Clean up qemu_coroutine_enter() Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 03/69] test-coroutine: Regression test for yield bug Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 04/69] vpc: Fix size in fixed image creation Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 05/69] vpc: Implement bdrv_co_get_block_status() Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 06/69] sheepdog: selectable object size support Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 07/69] block/raw-posix: fix compilation warning on OSX Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 08/69] qcow2: Remove unused struct QCowCreateState Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 09/69] virtio-blk: Check return value of blk_aio_ioctl Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 10/69] libqos: Change use of pointers to uint64_t in virtio Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 11/69] tests: Prepare virtio-blk-test for multi-arch implementation Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 12/69] libqos: Remove PCI assumptions in constants of virtio driver Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 13/69] libqos: Add malloc generic Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 14/69] libqos: Add virtio MMIO support Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 15/69] qcow2: Add two new fields to BDRVQcowState Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 16/69] qcow2: Add refcount_bits to format-specific info Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 17/69] qcow2: Do not return new value after refcount update Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 18/69] qcow2: Only return status from qcow2_get_refcount Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 19/69] qcow2: Use unsigned addend for update_refcount() Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 20/69] qcow2: Use 64 bits for refcount values Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 21/69] qcow2: Helper for refcount array reallocation Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 22/69] qcow2: Helper function for refcount modification Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 23/69] qcow2: More helpers " Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 24/69] qcow2: Open images with refcount order != 4 Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 25/69] qcow2: refcount_order parameter for qcow2_create2 Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 26/69] qcow2: Use symbolic macros in qcow2_amend_options Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 27/69] iotests: Prepare for refcount_bits option Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 28/69] qcow2: Allow creation with refcount order != 4 Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 29/69] iotests: Add test for different refcount widths Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 30/69] blkdebug: fix "once" rule Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 31/69] block: add bdrv functions for geometry and blocksize Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 32/69] raw-posix: Factor block size detection out of raw_probe_alignment() Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 33/69] block: Add driver methods to probe blocksizes and geometry Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 34/69] block-backend: Add wrappers for blocksizes and geometry probing Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 35/69] BlockConf: Call backend functions to detect geometry and blocksizes Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 36/69] ide: start extracting ide_restart_dma out of bmdma_restart_dma Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 37/69] ide: prepare to move restart to common code Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 38/69] ide: introduce ide_register_restart_cb Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 39/69] ide: do not use BMDMA in restart callback Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 40/69] ide: pass IDEBus to the restart_cb Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 41/69] ide: move restart callback to common code Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 42/69] ide: remove restart_cb callback Stefan Hajnoczi
2015-02-27 18:18 ` Stefan Hajnoczi [this message]
2015-02-27 18:18 ` [Qemu-devel] [PULL 44/69] ide: place initial state of the current request to IDEBus Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 45/69] ide: migrate initial request state via IDEBus Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 46/69] ide: commonize io_buffer_index initialization Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 47/69] ide: make more functions static Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 48/69] ide: support PIO restart for the ISA controller Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 49/69] ahci: Migrate IDEStatus Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 50/69] ahci: add support for restarting non-queued commands Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 51/69] ahci: Recompute cur_cmd on migrate post load Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 52/69] qtest/ide: Test flush / retry for ISA and PCI Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 53/69] libqos/ahci: Zero-fill AHCI headers Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 54/69] qtest/ahci: Add a macro bootup routine Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 55/69] libqos/ahci: add ahci command helpers Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 56/69] qtest/ahci: Add DMA test variants Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 57/69] qtest/ahci: Add PIO and LBA48 tests Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 58/69] qtest/ahci: add fragmented dma test Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 59/69] qtest/ahci: add qcow2 support to ahci-test Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 60/69] qtest/ahci: test different disk sectors Stefan Hajnoczi
2015-02-27 18:18 ` [Qemu-devel] [PULL 61/69] qtest/ahci: Add simple flush test Stefan Hajnoczi
2015-02-27 18:19 ` [Qemu-devel] [PULL 62/69] qtest/ahci: Allow override of default CLI options Stefan Hajnoczi
2015-02-27 18:19 ` [Qemu-devel] [PULL 63/69] libqtest: add qmp_eventwait Stefan Hajnoczi
2015-02-27 18:19 ` [Qemu-devel] [PULL 64/69] libqtest: add qmp_async Stefan Hajnoczi
2015-02-27 18:19 ` [Qemu-devel] [PULL 65/69] libqos: add blkdebug_prepare_script Stefan Hajnoczi
2015-02-27 18:19 ` [Qemu-devel] [PULL 66/69] qtest/ahci: add flush retry test Stefan Hajnoczi
2015-02-27 18:19 ` [Qemu-devel] [PULL 67/69] sheepdog: fix confused return values Stefan Hajnoczi
2015-02-27 18:19 ` [Qemu-devel] [PULL 68/69] libqos: Solve bug in interrupt checking when using MSIX in virtio-pci.c Stefan Hajnoczi
2015-02-27 18:19 ` [Qemu-devel] [PULL 69/69] tests: Check QVIRTIO_F_ANY_LAYOUT flag in virtio-blk test Stefan Hajnoczi
2015-02-27 18:57 ` [Qemu-devel] [PULL 00/69] Block patches Stefan Hajnoczi
2015-03-03 14:52   ` Peter Maydell
2015-03-03 17:29     ` Christian Borntraeger
2015-03-03 17:33       ` Max Reitz
2015-03-04  8:28         ` Christian Borntraeger
2015-03-04 12:03           ` Kevin Wolf
2015-03-04 16:32     ` Stefan Hajnoczi
2015-03-08  8:49 ` 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=1425061147-1411-44-git-send-email-stefanha@redhat.com \
    --to=stefanha@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=pbonzini@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).