From patchwork Tue May 17 06:47:05 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 95857 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id BD767B6EDF for ; Tue, 17 May 2011 16:49:23 +1000 (EST) Received: from localhost ([::1]:54851 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QME5o-0000v9-Tu for incoming@patchwork.ozlabs.org; Tue, 17 May 2011 02:49:20 -0400 Received: from eggs.gnu.org ([140.186.70.92]:56617) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QME4p-000824-MN for qemu-devel@nongnu.org; Tue, 17 May 2011 02:48:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QME4j-0002CM-PV for qemu-devel@nongnu.org; Tue, 17 May 2011 02:48:19 -0400 Received: from ozlabs.org ([203.10.76.45]:40222) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QME4j-0002Bi-Eh for qemu-devel@nongnu.org; Tue, 17 May 2011 02:48:13 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id A2C471007D7; Tue, 17 May 2011 16:48:08 +1000 (EST) From: David Gibson To: agraf@suse.de, qemu-devel@nongnu.org Date: Tue, 17 May 2011 16:47:05 +1000 Message-Id: <1305614826-1815-3-git-send-email-david@gibson.dropbear.id.au> X-Mailer: git-send-email 1.7.4.4 In-Reply-To: <1305614826-1815-1-git-send-email-david@gibson.dropbear.id.au> References: <1305614826-1815-1-git-send-email-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 203.10.76.45 Cc: aik@ozlabs.ru, paulus@samba.org Subject: [Qemu-devel] [PATCH 2/3] virtio: Added function to calculate number of bytes required to allocate a VRing 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 From: Alexey Kardashevskiy The existing function virtio_queue_get_ring_size returns number of bytes for vring only when it is already initialized. In order to know how much memory new vring requires, new function virtio_queue_get_mem_size has been introduced. It is a copy of the vring_size function from the linux kernel (include/linux/virtio_ring.h). Signed-off-by: Alexey Kardashevskiy Signed-off-by: David Gibson --- hw/virtio.c | 8 ++++++++ hw/virtio.h | 1 + 2 files changed, 9 insertions(+), 0 deletions(-) diff --git a/hw/virtio.c b/hw/virtio.c index 6e8814c..ff05b25 100644 --- a/hw/virtio.c +++ b/hw/virtio.c @@ -574,6 +574,14 @@ int virtio_queue_get_num(VirtIODevice *vdev, int n) return vdev->vq[n].vring.num; } +int virtio_queue_get_mem_size(VirtIODevice *vdev, int n, int align) +{ + int num = virtio_queue_get_num(vdev, n); + return ((sizeof(VRingDesc)*num + sizeof(uint16_t)*(2 + num) + + align - 1) & ~(align - 1)) + + sizeof(uint16_t)*2 + sizeof(VRingUsedElem)*num; +} + void virtio_queue_notify_vq(VirtQueue *vq) { if (vq->vring.desc) { diff --git a/hw/virtio.h b/hw/virtio.h index bc72289..114a877 100644 --- a/hw/virtio.h +++ b/hw/virtio.h @@ -182,6 +182,7 @@ void virtio_config_writel(VirtIODevice *vdev, uint32_t addr, uint32_t data); void virtio_queue_set_addr(VirtIODevice *vdev, int n, target_phys_addr_t addr); target_phys_addr_t virtio_queue_get_addr(VirtIODevice *vdev, int n); int virtio_queue_get_num(VirtIODevice *vdev, int n); +int virtio_queue_get_mem_size(VirtIODevice *vdev, int n, int align); void virtio_queue_notify(VirtIODevice *vdev, int n); uint16_t virtio_queue_vector(VirtIODevice *vdev, int n); void virtio_queue_set_vector(VirtIODevice *vdev, int n, uint16_t vector);