From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:43283) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R37zT-0003F2-Pc for qemu-devel@nongnu.org; Mon, 12 Sep 2011 11:00:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R37zS-0000XW-7k for qemu-devel@nongnu.org; Mon, 12 Sep 2011 11:00:07 -0400 Received: from mail-vw0-f45.google.com ([209.85.212.45]:51878) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R37zS-0000X7-11 for qemu-devel@nongnu.org; Mon, 12 Sep 2011 11:00:06 -0400 Received: by vws17 with SMTP id 17so3907933vws.4 for ; Mon, 12 Sep 2011 08:00:05 -0700 (PDT) From: Devin Nakamura Date: Mon, 12 Sep 2011 11:00:10 -0400 Message-Id: <1315839610-14429-1-git-send-email-devin122@gmail.com> Subject: [Qemu-devel] [PATCH 4/6] qed: add qed_bdrv_get_mapping() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, Devin Nakamura Signed-off-by: Devin Nakamura --- block/qed.c | 29 +++++++++++++++++++++++++++++ 1 files changed, 29 insertions(+), 0 deletions(-) diff --git a/block/qed.c b/block/qed.c index 93827db..4cde2fd 100644 --- a/block/qed.c +++ b/block/qed.c @@ -1512,6 +1512,34 @@ static int bdrv_qed_open_conversion_target(BlockDriverState *bs, return 0; } +static int bdrv_qed_get_mapping(BlockDriverState *bs, uint64_t guest_offset, + uint64_t *host_offset, + uint64_t *contiguous_bytes) +{ + BDRVQEDState *s = bs->opaque; + size_t l2_size = s->header.cluster_size * s->table_nelems; + uint64_t pos = guest_offset; + uint64_t offset; + size_t len = 0; + QEDRequest req = {.l2_table = NULL}; + int ret; + + if (pos >= s->header.image_size) { + *contiguous_bytes = 0; + return 0; + } + + ret = qed_find_cluster_sync(s, &req, guest_offset, l2_size, &offset, &len); + qed_unref_l2_cache_entry(req.l2_table); + + *host_offset = offset; + *contiguous_bytes = len; + if (ret != QED_CLUSTER_FOUND) { + return 1; + } + return 0; +} + static QEMUOptionParameter qed_create_options[] = { { .name = BLOCK_OPT_SIZE, @@ -1560,6 +1588,7 @@ static BlockDriver bdrv_qed = { .bdrv_check = bdrv_qed_check, .bdrv_get_conversion_options = bdrv_qed_get_conversion_options, .bdrv_open_conversion_target = bdrv_qed_open_conversion_target, + .bdrv_get_mapping = bdrv_qed_get_mapping, }; static void bdrv_qed_init(void) -- 1.7.6.rc1