From patchwork Tue Jul 1 11:24:34 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Dovgalyuk X-Patchwork-Id: 366052 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 28A8614007C for ; Tue, 1 Jul 2014 21:26:15 +1000 (EST) Received: from localhost ([::1]:46255 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1wCT-0004gC-8x for incoming@patchwork.ozlabs.org; Tue, 01 Jul 2014 07:26:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58171) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1wAz-0002Op-SM for qemu-devel@nongnu.org; Tue, 01 Jul 2014 07:24:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X1wAs-0001Hn-C4 for qemu-devel@nongnu.org; Tue, 01 Jul 2014 07:24:41 -0400 Received: from mail.ispras.ru ([83.149.199.45]:33180) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1wAr-0001Hd-Mt for qemu-devel@nongnu.org; Tue, 01 Jul 2014 07:24:34 -0400 Received: from PASHAISP (unknown [80.250.189.177]) by mail.ispras.ru (Postfix) with ESMTPSA id 0CE73540157 for ; Tue, 1 Jul 2014 15:24:33 +0400 (MSK) From: "Pavel Dovgaluk" To: "'QEMU Developers'" Date: Tue, 1 Jul 2014 15:24:34 +0400 Message-ID: <007d01cf951f$0935cf80$1ba16e80$@Dovgaluk@ispras.ru> MIME-Version: 1.0 X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: Ac+VHwjqpF8bAOzuSJyARCU4MCiwVg== Content-Language: ru X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [RFC PATCH 09/22] IDE replay X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org These patches add replaces calls of bdrv functions by calls of their replay versions. Signed-off-by: Pavel Dovgalyuk 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 @@ -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),