From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:53355) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uapu6-0007eR-Jj for qemu-devel@nongnu.org; Fri, 10 May 2013 12:10:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uapu4-0006Jn-7Z for qemu-devel@nongnu.org; Fri, 10 May 2013 12:10:42 -0400 Received: from mail-la0-x22c.google.com ([2a00:1450:4010:c03::22c]:57156) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uapu3-0006Jb-Vv for qemu-devel@nongnu.org; Fri, 10 May 2013 12:10:40 -0400 Received: by mail-la0-f44.google.com with SMTP id ed20so4158724lab.3 for ; Fri, 10 May 2013 09:10:39 -0700 (PDT) From: Igor Mitsyanko Date: Fri, 10 May 2013 20:10:19 +0400 Message-Id: <1368202225-45798-2-git-send-email-i.mitsyanko@gmail.com> In-Reply-To: <1368202225-45798-1-git-send-email-i.mitsyanko@gmail.com> References: <1368202225-45798-1-git-send-email-i.mitsyanko@gmail.com> Subject: [Qemu-devel] [RFC 1/7] sd.c: introduce AIO related members in SD state List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, aliguori@us.ibm.com, i.mitsyanko@gmail.com, sw@weilnetz.de, peter.crosthwaite@xilinx.com, blauwirbel@gmail.com, paul@codesourcery.com, stefanha@redhat.com, pbonzini@redhat.com, afaerber@suse.de New state members will be used for async IO implementation later. Signed-off-by: Igor Mitsyanko --- hw/sd/sd.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 2e0ef3e..1dd1331 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -112,6 +112,10 @@ struct SDState { uint8_t *buf; bool enable; + + QEMUIOVector qiov; + struct iovec iov; + BlockDriverAIOCB *aiocb; }; static void sd_set_mode(SDState *sd) @@ -403,6 +407,11 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv) uint64_t size; uint64_t sect; + if (sd->aiocb) { + bdrv_aio_cancel(sd->aiocb); + sd->aiocb = NULL; + } + if (bdrv) { bdrv_get_geometry(bdrv, §); } else { @@ -496,11 +505,15 @@ SDState *sd_init(BlockDriverState *bs, bool is_spi) sd->buf = qemu_blockalign(bs, 512); sd->spi = is_spi; sd->enable = true; + sd->aiocb = NULL; + sd->iov.iov_base = NULL; + sd->iov.iov_len = BDRV_SECTOR_SIZE; sd_reset(sd, bs); if (sd->bdrv) { bdrv_attach_dev_nofail(sd->bdrv, sd); bdrv_set_dev_ops(sd->bdrv, &sd_block_ops, sd); } + qemu_iovec_init_external(&sd->qiov, &sd->iov, 1); vmstate_register(NULL, -1, &sd_vmstate, sd); return sd; } -- 1.8.1.4