qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/4] Ide patches
@ 2018-01-19 22:31 John Snow
  2018-01-19 22:31 ` [Qemu-devel] [PULL 1/4] ide: pass IDEState to trim AIO callback John Snow
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: John Snow @ 2018-01-19 22:31 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, jsnow

The following changes since commit b384cd95eb9c6f73ad84ed1bb0717a26e29cc78f:

  Merge remote-tracking branch 'remotes/ehabkost/tags/machine-next-pull-request' into staging (2018-01-19 16:35:25 +0000)

are available in the Git repository at:

  https://github.com/jnsnow/qemu.git tags/ide-pull-request

for you to fetch changes up to 3161906df88a471b09c38fff9a618ff83beea0c3:

  hw/ide: Remove duplicated definitions from ahci_internal.h (2018-01-19 16:04:57 -0500)

----------------------------------------------------------------

----------------------------------------------------------------

Anton Nefedov (3):
  ide: pass IDEState to trim AIO callback
  ide: move ide_sect_range_ok() up
  ide: abort TRIM operation for invalid range

John Snow (1):
  hw/ide: Remove duplicated definitions from ahci_internal.h

 hw/ide/ahci_internal.h |  4 ----
 hw/ide/core.c          | 53 +++++++++++++++++++++++++++++++-------------------
 include/hw/ide/ahci.h  |  6 ------
 3 files changed, 33 insertions(+), 30 deletions(-)

-- 
2.14.3

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PULL 1/4] ide: pass IDEState to trim AIO callback
  2018-01-19 22:31 [Qemu-devel] [PULL 0/4] Ide patches John Snow
@ 2018-01-19 22:31 ` John Snow
  2018-01-19 22:31 ` [Qemu-devel] [PULL 2/4] ide: move ide_sect_range_ok() up John Snow
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: John Snow @ 2018-01-19 22:31 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, jsnow, Anton Nefedov

From: Anton Nefedov <anton.nefedov@virtuozzo.com>

It will be needed to handle invalid requests

Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
Message-id: 1512735034-35327-2-git-send-email-anton.nefedov@virtuozzo.com
Signed-off-by: John Snow <jsnow@redhat.com>
---
 hw/ide/core.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/hw/ide/core.c b/hw/ide/core.c
index 1ea5812b7e..875f7b442d 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -382,7 +382,7 @@ static void ide_set_signature(IDEState *s)
 
 typedef struct TrimAIOCB {
     BlockAIOCB common;
-    BlockBackend *blk;
+    IDEState *s;
     QEMUBH *bh;
     int ret;
     QEMUIOVector *qiov;
@@ -425,6 +425,8 @@ static void ide_trim_bh_cb(void *opaque)
 static void ide_issue_trim_cb(void *opaque, int ret)
 {
     TrimAIOCB *iocb = opaque;
+    IDEState *s = iocb->s;
+
     if (ret >= 0) {
         while (iocb->j < iocb->qiov->niov) {
             int j = iocb->j;
@@ -442,7 +444,7 @@ static void ide_issue_trim_cb(void *opaque, int ret)
                 }
 
                 /* Got an entry! Submit and exit.  */
-                iocb->aiocb = blk_aio_pdiscard(iocb->blk,
+                iocb->aiocb = blk_aio_pdiscard(s->blk,
                                                sector << BDRV_SECTOR_BITS,
                                                count << BDRV_SECTOR_BITS,
                                                ide_issue_trim_cb, opaque);
@@ -466,11 +468,11 @@ BlockAIOCB *ide_issue_trim(
         int64_t offset, QEMUIOVector *qiov,
         BlockCompletionFunc *cb, void *cb_opaque, void *opaque)
 {
-    BlockBackend *blk = opaque;
+    IDEState *s = opaque;
     TrimAIOCB *iocb;
 
-    iocb = blk_aio_get(&trim_aiocb_info, blk, cb, cb_opaque);
-    iocb->blk = blk;
+    iocb = blk_aio_get(&trim_aiocb_info, s->blk, cb, cb_opaque);
+    iocb->s = s;
     iocb->bh = qemu_bh_new(ide_trim_bh_cb, iocb);
     iocb->ret = 0;
     iocb->qiov = qiov;
@@ -900,7 +902,7 @@ static void ide_dma_cb(void *opaque, int ret)
     case IDE_DMA_TRIM:
         s->bus->dma->aiocb = dma_blk_io(blk_get_aio_context(s->blk),
                                         &s->sg, offset, BDRV_SECTOR_SIZE,
-                                        ide_issue_trim, s->blk, ide_dma_cb, s,
+                                        ide_issue_trim, s, ide_dma_cb, s,
                                         DMA_DIRECTION_TO_DEVICE);
         break;
     default:
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PULL 2/4] ide: move ide_sect_range_ok() up
  2018-01-19 22:31 [Qemu-devel] [PULL 0/4] Ide patches John Snow
  2018-01-19 22:31 ` [Qemu-devel] [PULL 1/4] ide: pass IDEState to trim AIO callback John Snow
@ 2018-01-19 22:31 ` John Snow
  2018-01-19 22:31 ` [Qemu-devel] [PULL 3/4] ide: abort TRIM operation for invalid range John Snow
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: John Snow @ 2018-01-19 22:31 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, jsnow, Anton Nefedov

From: Anton Nefedov <anton.nefedov@virtuozzo.com>

to use it without a forward declaration in the commit to follow

Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
Message-id: 1512735034-35327-3-git-send-email-anton.nefedov@virtuozzo.com
Signed-off-by: John Snow <jsnow@redhat.com>
---
 hw/ide/core.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/hw/ide/core.c b/hw/ide/core.c
index 875f7b442d..27226bfd51 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -380,6 +380,18 @@ static void ide_set_signature(IDEState *s)
     }
 }
 
+static bool ide_sect_range_ok(IDEState *s,
+                              uint64_t sector, uint64_t nb_sectors)
+{
+    uint64_t total_sectors;
+
+    blk_get_geometry(s->blk, &total_sectors);
+    if (sector > total_sectors || nb_sectors > total_sectors - sector) {
+        return false;
+    }
+    return true;
+}
+
 typedef struct TrimAIOCB {
     BlockAIOCB common;
     IDEState *s;
@@ -603,18 +615,6 @@ static void ide_rw_error(IDEState *s) {
     ide_set_irq(s->bus);
 }
 
-static bool ide_sect_range_ok(IDEState *s,
-                              uint64_t sector, uint64_t nb_sectors)
-{
-    uint64_t total_sectors;
-
-    blk_get_geometry(s->blk, &total_sectors);
-    if (sector > total_sectors || nb_sectors > total_sectors - sector) {
-        return false;
-    }
-    return true;
-}
-
 static void ide_buffered_readv_cb(void *opaque, int ret)
 {
     IDEBufferedRequest *req = opaque;
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PULL 3/4] ide: abort TRIM operation for invalid range
  2018-01-19 22:31 [Qemu-devel] [PULL 0/4] Ide patches John Snow
  2018-01-19 22:31 ` [Qemu-devel] [PULL 1/4] ide: pass IDEState to trim AIO callback John Snow
  2018-01-19 22:31 ` [Qemu-devel] [PULL 2/4] ide: move ide_sect_range_ok() up John Snow
@ 2018-01-19 22:31 ` John Snow
  2018-01-19 22:31 ` [Qemu-devel] [PULL 4/4] hw/ide: Remove duplicated definitions from ahci_internal.h John Snow
  2018-01-22 11:37 ` [Qemu-devel] [PULL 0/4] Ide patches Peter Maydell
  4 siblings, 0 replies; 6+ messages in thread
From: John Snow @ 2018-01-19 22:31 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, jsnow, Anton Nefedov

From: Anton Nefedov <anton.nefedov@virtuozzo.com>

ATA8-ACS3, 7.9 DATA SET MANAGEMENT - 06h, DMA

    7.9.5 Error Outputs
    If the Trim bit is set to one and:
      a) the device detects an invalid LBA Range Entry; or
      b) count is greater than IDENTIFY DEVICE data word 105
         (see 7.16.7.55),
    then the device shall return command aborted.
    A device may trim one or more LBA Range Entries before it returns
    command aborted. See table 209.

This check is not in the common ide_dma_cb() as the range for TRIM
is harder to reach: it is not in LBA/count registers and the buffer has
to be parsed first.

Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
Message-id: 1512735034-35327-4-git-send-email-anton.nefedov@virtuozzo.com
Signed-off-by: John Snow <jsnow@redhat.com>
---
 hw/ide/core.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/hw/ide/core.c b/hw/ide/core.c
index 27226bfd51..5be72d41dc 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -400,6 +400,7 @@ typedef struct TrimAIOCB {
     QEMUIOVector *qiov;
     BlockAIOCB *aiocb;
     int i, j;
+    bool is_invalid;
 } TrimAIOCB;
 
 static void trim_aio_cancel(BlockAIOCB *acb)
@@ -427,8 +428,11 @@ static void ide_trim_bh_cb(void *opaque)
 {
     TrimAIOCB *iocb = opaque;
 
-    iocb->common.cb(iocb->common.opaque, iocb->ret);
-
+    if (iocb->is_invalid) {
+        ide_dma_error(iocb->s);
+    } else {
+        iocb->common.cb(iocb->common.opaque, iocb->ret);
+    }
     qemu_bh_delete(iocb->bh);
     iocb->bh = NULL;
     qemu_aio_unref(iocb);
@@ -455,6 +459,11 @@ static void ide_issue_trim_cb(void *opaque, int ret)
                     continue;
                 }
 
+                if (!ide_sect_range_ok(s, sector, count)) {
+                    iocb->is_invalid = true;
+                    goto done;
+                }
+
                 /* Got an entry! Submit and exit.  */
                 iocb->aiocb = blk_aio_pdiscard(s->blk,
                                                sector << BDRV_SECTOR_BITS,
@@ -470,6 +479,7 @@ static void ide_issue_trim_cb(void *opaque, int ret)
         iocb->ret = ret;
     }
 
+done:
     iocb->aiocb = NULL;
     if (iocb->bh) {
         qemu_bh_schedule(iocb->bh);
@@ -490,6 +500,7 @@ BlockAIOCB *ide_issue_trim(
     iocb->qiov = qiov;
     iocb->i = -1;
     iocb->j = 0;
+    iocb->is_invalid = false;
     ide_issue_trim_cb(iocb, 0);
     return &iocb->common;
 }
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PULL 4/4] hw/ide: Remove duplicated definitions from ahci_internal.h
  2018-01-19 22:31 [Qemu-devel] [PULL 0/4] Ide patches John Snow
                   ` (2 preceding siblings ...)
  2018-01-19 22:31 ` [Qemu-devel] [PULL 3/4] ide: abort TRIM operation for invalid range John Snow
@ 2018-01-19 22:31 ` John Snow
  2018-01-22 11:37 ` [Qemu-devel] [PULL 0/4] Ide patches Peter Maydell
  4 siblings, 0 replies; 6+ messages in thread
From: John Snow @ 2018-01-19 22:31 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, jsnow, Thomas Huth

The same definitions can also be found in include/hw/ide/ahci.h
so let's remove these #defines from ahci_internal.h.

Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-id: 1512457825-3847-1-git-send-email-thuth@redhat.com
[Maintainer edit: publicize object names, privatize object macros.]
Signed-off-by: John Snow <jsnow@redhat.com>
---
 hw/ide/ahci_internal.h | 4 ----
 include/hw/ide/ahci.h  | 6 ------
 2 files changed, 10 deletions(-)

diff --git a/hw/ide/ahci_internal.h b/hw/ide/ahci_internal.h
index ce2e818c8c..8c755d4ca1 100644
--- a/hw/ide/ahci_internal.h
+++ b/hw/ide/ahci_internal.h
@@ -311,8 +311,6 @@ struct AHCIPCIState {
     AHCIState ahci;
 };
 
-#define TYPE_ICH9_AHCI "ich9-ahci"
-
 #define ICH_AHCI(obj) \
     OBJECT_CHECK(AHCIPCIState, (obj), TYPE_ICH9_AHCI)
 
@@ -375,10 +373,8 @@ void ahci_uninit(AHCIState *s);
 
 void ahci_reset(AHCIState *s);
 
-#define TYPE_SYSBUS_AHCI "sysbus-ahci"
 #define SYSBUS_AHCI(obj) OBJECT_CHECK(SysbusAHCIState, (obj), TYPE_SYSBUS_AHCI)
 
-#define TYPE_ALLWINNER_AHCI "allwinner-ahci"
 #define ALLWINNER_AHCI(obj) OBJECT_CHECK(AllwinnerAHCIState, (obj), \
                        TYPE_ALLWINNER_AHCI)
 
diff --git a/include/hw/ide/ahci.h b/include/hw/ide/ahci.h
index 5a06537e6b..b7bb2b02d6 100644
--- a/include/hw/ide/ahci.h
+++ b/include/hw/ide/ahci.h
@@ -54,14 +54,10 @@ typedef struct AHCIPCIState AHCIPCIState;
 
 #define TYPE_ICH9_AHCI "ich9-ahci"
 
-#define ICH_AHCI(obj) \
-    OBJECT_CHECK(AHCIPCIState, (obj), TYPE_ICH9_AHCI)
-
 int32_t ahci_get_num_ports(PCIDevice *dev);
 void ahci_ide_create_devs(PCIDevice *dev, DriveInfo **hd);
 
 #define TYPE_SYSBUS_AHCI "sysbus-ahci"
-#define SYSBUS_AHCI(obj) OBJECT_CHECK(SysbusAHCIState, (obj), TYPE_SYSBUS_AHCI)
 
 typedef struct SysbusAHCIState {
     /*< private >*/
@@ -73,8 +69,6 @@ typedef struct SysbusAHCIState {
 } SysbusAHCIState;
 
 #define TYPE_ALLWINNER_AHCI "allwinner-ahci"
-#define ALLWINNER_AHCI(obj) OBJECT_CHECK(AllwinnerAHCIState, (obj), \
-                       TYPE_ALLWINNER_AHCI)
 
 #define ALLWINNER_AHCI_MMIO_OFF  0x80
 #define ALLWINNER_AHCI_MMIO_SIZE 0x80
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PULL 0/4] Ide patches
  2018-01-19 22:31 [Qemu-devel] [PULL 0/4] Ide patches John Snow
                   ` (3 preceding siblings ...)
  2018-01-19 22:31 ` [Qemu-devel] [PULL 4/4] hw/ide: Remove duplicated definitions from ahci_internal.h John Snow
@ 2018-01-22 11:37 ` Peter Maydell
  4 siblings, 0 replies; 6+ messages in thread
From: Peter Maydell @ 2018-01-22 11:37 UTC (permalink / raw)
  To: John Snow; +Cc: QEMU Developers

On 19 January 2018 at 22:31, John Snow <jsnow@redhat.com> wrote:
> The following changes since commit b384cd95eb9c6f73ad84ed1bb0717a26e29cc78f:
>
>   Merge remote-tracking branch 'remotes/ehabkost/tags/machine-next-pull-request' into staging (2018-01-19 16:35:25 +0000)
>
> are available in the Git repository at:
>
>   https://github.com/jnsnow/qemu.git tags/ide-pull-request
>
> for you to fetch changes up to 3161906df88a471b09c38fff9a618ff83beea0c3:
>
>   hw/ide: Remove duplicated definitions from ahci_internal.h (2018-01-19 16:04:57 -0500)
>
> ----------------------------------------------------------------
>
> --------------------------------------------------------------

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-01-22 11:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-19 22:31 [Qemu-devel] [PULL 0/4] Ide patches John Snow
2018-01-19 22:31 ` [Qemu-devel] [PULL 1/4] ide: pass IDEState to trim AIO callback John Snow
2018-01-19 22:31 ` [Qemu-devel] [PULL 2/4] ide: move ide_sect_range_ok() up John Snow
2018-01-19 22:31 ` [Qemu-devel] [PULL 3/4] ide: abort TRIM operation for invalid range John Snow
2018-01-19 22:31 ` [Qemu-devel] [PULL 4/4] hw/ide: Remove duplicated definitions from ahci_internal.h John Snow
2018-01-22 11:37 ` [Qemu-devel] [PULL 0/4] Ide patches Peter Maydell

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).