[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 09/22] IDE replay
From: |
Pavel Dovgaluk |
Subject: |
[Qemu-devel] [RFC PATCH 09/22] IDE replay |
Date: |
Tue, 1 Jul 2014 15:24:34 +0400 |
These patches add replaces calls of bdrv functions by calls of their replay
versions.
Signed-off-by: Pavel Dovgalyuk <address@hidden>
---
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index f7d2009..0614102 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -25,6 +25,7 @@
#include "hw/ide/internal.h"
#include "hw/scsi/scsi.h"
+#include "replay/replay.h"
static void ide_atapi_cmd_read_dma_cb(void *opaque, int ret);
@@ -348,8 +349,10 @@ static void ide_atapi_cmd_read_dma_cb(void *opaque, int
ret)
s->bus->dma->iov.iov_base = (void *)(s->io_buffer + data_offset);
s->bus->dma->iov.iov_len = n * 4 * 512;
qemu_iovec_init_external(&s->bus->dma->qiov, &s->bus->dma->iov, 1);
+ s->bus->dma->qiov.replay = true;
+ s->bus->dma->qiov.replay_step = replay_get_current_step();
- s->bus->dma->aiocb = bdrv_aio_readv(s->bs, (int64_t)s->lba << 2,
+ s->bus->dma->aiocb = bdrv_aio_readv_replay(s->bs, (int64_t)s->lba << 2,
&s->bus->dma->qiov, n * 4,
ide_atapi_cmd_read_dma_cb, s);
return;
diff --git a/hw/ide/core.c b/hw/ide/core.c
index 3a38f1e..d69cc0f 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -32,6 +32,8 @@
#include "sysemu/dma.h"
#include "hw/block/block.h"
#include "sysemu/blockdev.h"
+#include "replay/replay.h"
+#include "qemu/log.h"
#include <hw/ide/internal.h>
@@ -82,8 +84,8 @@ static void ide_identify(IDEState *s)
IDEDevice *dev = s->unit ? s->bus->slave : s->bus->master;
if (s->identify_set) {
- memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
- return;
+ memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
+ return;
}
memset(s->io_buffer, 0, 512);
@@ -409,7 +411,7 @@ BlockDriverAIOCB *ide_issue_trim(BlockDriverState *bs,
TrimAIOCB *iocb;
iocb = qemu_aio_get(&trim_aiocb_info, bs, cb, opaque);
- iocb->bh = qemu_bh_new(ide_trim_bh_cb, iocb);
+ iocb->bh = qemu_bh_new_replay(ide_trim_bh_cb, iocb,
replay_get_current_step());
iocb->ret = 0;
iocb->qiov = qiov;
iocb->i = -1;
@@ -557,9 +559,11 @@ void ide_sector_read(IDEState *s)
s->iov.iov_base = s->io_buffer;
s->iov.iov_len = n * BDRV_SECTOR_SIZE;
qemu_iovec_init_external(&s->qiov, &s->iov, 1);
+ s->qiov.replay = true;
+ s->qiov.replay_step = replay_get_current_step();
bdrv_acct_start(s->bs, &s->acct, n * BDRV_SECTOR_SIZE, BDRV_ACCT_READ);
- s->pio_aiocb = bdrv_aio_readv(s->bs, sector_num, &s->qiov, n,
+ s->pio_aiocb = bdrv_aio_readv_replay(s->bs, sector_num, &s->qiov, n,
ide_sector_read_cb, s);
}
@@ -793,9 +797,11 @@ void ide_sector_write(IDEState *s)
s->iov.iov_base = s->io_buffer;
s->iov.iov_len = n * BDRV_SECTOR_SIZE;
qemu_iovec_init_external(&s->qiov, &s->iov, 1);
+ s->qiov.replay = true;
+ s->qiov.replay_step = replay_get_current_step();
bdrv_acct_start(s->bs, &s->acct, n * BDRV_SECTOR_SIZE, BDRV_ACCT_READ);
- s->pio_aiocb = bdrv_aio_writev(s->bs, sector_num, &s->qiov, n,
+ s->pio_aiocb = bdrv_aio_writev_replay(s->bs, sector_num, &s->qiov, n,
ide_sector_write_cb, s);
}
@@ -825,7 +831,7 @@ void ide_flush_cache(IDEState *s)
s->status |= BUSY_STAT;
bdrv_acct_start(s->bs, &s->acct, 0, BDRV_ACCT_FLUSH);
- bdrv_aio_flush(s->bs, ide_flush_cb, s);
+ bdrv_aio_flush_replay(s->bs, ide_flush_cb, s);
}
static void ide_cfata_metadata_inquiry(IDEState *s)
@@ -2124,6 +2130,7 @@ int ide_init_drive(IDEState *s, BlockDriverState *bs,
IDEDriveKind kind,
if (model) {
pstrcpy(s->drive_model_str, sizeof(s->drive_model_str), model);
} else {
+ char *str;
switch (kind) {
case IDE_CD:
strcpy(s->drive_model_str, "QEMU DVD-ROM");
diff --git a/hw/ide/pci.c b/hw/ide/pci.c
index 6257a21..47ab24d
--- a/hw/ide/pci.c
+++ b/hw/ide/pci.c
@@ -382,6 +382,15 @@ static bool ide_bmdma_status_needed(void *opaque)
return ((bm->status & abused_bits) != 0);
}
+static int ide_bmdma_pre_load(void *opaque)
+{
+ BMDMAState *bm = opaque;
+ /* Reset is not performed in replay mode,
+ so reset status manually to allow ide_bmdma_post_load function
initialize it. */
+ bm->status = 0;
+ return 0;
+}
+
static void ide_bmdma_pre_save(void *opaque)
{
BMDMAState *bm = opaque;
@@ -434,6 +443,7 @@ static const VMStateDescription vmstate_bmdma = {
.name = "ide bmdma",
.version_id = 3,
.minimum_version_id = 0,
+ .pre_load = ide_bmdma_pre_load,
.pre_save = ide_bmdma_pre_save,
.fields = (VMStateField[]) {
VMSTATE_UINT8(cmd, BMDMAState),
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [RFC PATCH 09/22] IDE replay,
Pavel Dovgaluk <=