From mboxrd@z Thu Jan 1 00:00:00 1970 From: Prasad Joshi Subject: [PATCH 2/4] kvm tool: avoid byte-order conversion during each read operation Date: Fri, 15 Apr 2011 15:18:56 +0100 Message-ID: <1302877138-6695-2-git-send-email-prasadjoshi124@gmail.com> References: <1302877138-6695-1-git-send-email-prasadjoshi124@gmail.com> Cc: mingo@elte.hu, kvm@vger.kernel.org, penberg@kernel.org, asias.hejun@gmail.com, gorcunov@gmail.com, levinsasha928@gmail.com, kwolf@redhat.com, stefanha@linux.vnet.ibm.com, chaitanyakulkarni15@gmail.com To: prasadjoshi124@gmail.com Return-path: Received: from mail-ww0-f44.google.com ([74.125.82.44]:42222 "EHLO mail-ww0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753964Ab1DOOSv (ORCPT ); Fri, 15 Apr 2011 10:18:51 -0400 Received: by wwa36 with SMTP id 36so3269202wwa.1 for ; Fri, 15 Apr 2011 07:18:50 -0700 (PDT) In-Reply-To: <1302877138-6695-1-git-send-email-prasadjoshi124@gmail.com> Sender: kvm-owner@vger.kernel.org List-ID: Signed-off-by: Prasad Joshi --- tools/kvm/qcow.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-) diff --git a/tools/kvm/qcow.c b/tools/kvm/qcow.c index 219fd6b..243bfa8 100644 --- a/tools/kvm/qcow.c +++ b/tools/kvm/qcow.c @@ -58,7 +58,7 @@ static int qcow1_read_sector(struct disk_image *self, uint64_t sector, void *dst if (l1_idx >= q->table.table_size) goto out_error; - l2_table_offset = be64_to_cpu(q->table.l1_table[l1_idx]); + l2_table_offset = q->table.l1_table[l1_idx]; if (!l2_table_offset) goto zero_sector; @@ -128,16 +128,23 @@ struct disk_image_operations qcow1_disk_ops = { static int qcow_read_l1_table(struct qcow *q) { struct qcow1_header *header = q->header; + struct qcow_table *table = &q->table; + u64 i; - q->table.table_size = header->size / ((1 << header->l2_bits) * (1 << header->cluster_bits)); + table->table_size = header->size / ((1 << header->l2_bits) * + (1 << header->cluster_bits)); - q->table.l1_table = calloc(q->table.table_size, sizeof(uint64_t)); - if (!q->table.l1_table) + table->l1_table = calloc(table->table_size, sizeof(u64)); + if (!table->l1_table) return -1; - if (pread_in_full(q->fd, q->table.l1_table, sizeof(uint64_t) * q->table.table_size, header->l1_table_offset) < 0) + if (pread_in_full(q->fd, table->l1_table, sizeof(u64) * + table->table_size, header->l1_table_offset) < 0) return -1; + for (i = 0; i < table->table_size; i++) + be64_to_cpus(&table->l1_table[i]); + return 0; } -- 1.7.1