From patchwork Tue Aug 13 15:11:18 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 266865 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (unknown [IPv6:2001:4830:134:3::12]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id C5FAA2C00FF for ; Wed, 14 Aug 2013 01:41:54 +1000 (EST) Received: from localhost ([::1]:45132 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V9GjH-0004r1-OM for incoming@patchwork.ozlabs.org; Tue, 13 Aug 2013 11:41:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32780) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V9GHV-00060i-Pv for qemu-devel@nongnu.org; Tue, 13 Aug 2013 11:13:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V9GHI-0004Hz-Ke for qemu-devel@nongnu.org; Tue, 13 Aug 2013 11:13:09 -0400 Received: from mail-oa0-x233.google.com ([2607:f8b0:4003:c02::233]:48521) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V9GHI-0004Hp-8m; Tue, 13 Aug 2013 11:12:56 -0400 Received: by mail-oa0-f51.google.com with SMTP id h1so11318377oag.24 for ; Tue, 13 Aug 2013 08:12:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=aSruXFdCJ9iYH+j2Jz/8bFX6i+bFAyAaMZ2wYCuE3eo=; b=Z67pQ7mnQkkvV8h9LndbDESKqR3vK0/HG4TUC287Q3t/cwlKmYGTn6bhZh9DA4fZWg DpyealUA+LE/UmgUT5H6Lm0BrNkkCEv3H2GU+q8LFnrI9HFRSpLpyf7bPwc4N89Iewie vu4MMGeMoDwwBG/FM22WOgQ9N/rkJcEmoWooL22MEqoo5MNp3kmUoExoGkC3o1Sa4koq a60aR7gWV+SMLWp9V68OZyfNGDkkdKAZys7V+KBppa1PsuTat+SPk3BHdZBxhKnc7cHk ANshohKff4rija4h9wVunofvu1ciVWok/MOJp8cWgAU+mqvnnAIv4YPxQErxS/gNFnb8 sacw== X-Received: by 10.60.93.105 with SMTP id ct9mr4570712oeb.42.1376406775775; Tue, 13 Aug 2013 08:12:55 -0700 (PDT) Received: from loki.austin.ibm.com ([32.97.110.51]) by mx.google.com with ESMTPSA id uz16sm12947878obc.5.2013.08.13.08.12.54 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 13 Aug 2013 08:12:55 -0700 (PDT) From: Michael Roth To: qemu-devel@nongnu.org Date: Tue, 13 Aug 2013 10:11:18 -0500 Message-Id: <1376406680-16302-55-git-send-email-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1376406680-16302-1-git-send-email-mdroth@linux.vnet.ibm.com> References: <1376406680-16302-1-git-send-email-mdroth@linux.vnet.ibm.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:4003:c02::233 Cc: aliguori@us.ibm.com, qemu-stable@nongnu.org Subject: [Qemu-devel] [PATCH 54/56] dataplane: sync virtio.c and vring.c virtqueue state 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: Stefan Hajnoczi Load the virtio.c state into vring.c when we start dataplane mode and vice versa when stopping dataplane mode. This patch makes it possible to start and stop dataplane any time while the guest is running. This will eventually allow us to go back to QEMU main loop for bdrv_drain_all() and live migration. In the meantime, this patch makes the dataplane lifecycle more robust but should make no visible difference. It may be useful in the virtio-net dataplane effort. Signed-off-by: Stefan Hajnoczi (cherry picked from commit 9154b02c53bb6685797c973fcdbec51c4714777d) Signed-off-by: Michael Roth --- hw/block/dataplane/virtio-blk.c | 2 +- hw/virtio/dataplane/vring.c | 8 +++++--- include/hw/virtio/dataplane/vring.h | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c index a58cc53..fb70645 100644 --- a/hw/block/dataplane/virtio-blk.c +++ b/hw/block/dataplane/virtio-blk.c @@ -545,7 +545,7 @@ void virtio_blk_data_plane_stop(VirtIOBlockDataPlane *s) /* Clean up guest notifier (irq) */ k->set_guest_notifiers(qbus->parent, 1, false); - vring_teardown(&s->vring); + vring_teardown(&s->vring, s->vdev, 0); s->started = false; s->stopping = false; } diff --git a/hw/virtio/dataplane/vring.c b/hw/virtio/dataplane/vring.c index e0d6e83..82cc151 100644 --- a/hw/virtio/dataplane/vring.c +++ b/hw/virtio/dataplane/vring.c @@ -39,8 +39,8 @@ bool vring_setup(Vring *vring, VirtIODevice *vdev, int n) vring_init(&vring->vr, virtio_queue_get_num(vdev, n), vring_ptr, 4096); - vring->last_avail_idx = 0; - vring->last_used_idx = 0; + vring->last_avail_idx = virtio_queue_get_last_avail_idx(vdev, n); + vring->last_used_idx = vring->vr.used->idx; vring->signalled_used = 0; vring->signalled_used_valid = false; @@ -49,8 +49,10 @@ bool vring_setup(Vring *vring, VirtIODevice *vdev, int n) return true; } -void vring_teardown(Vring *vring) +void vring_teardown(Vring *vring, VirtIODevice *vdev, int n) { + virtio_queue_set_last_avail_idx(vdev, n, vring->last_avail_idx); + hostmem_finalize(&vring->hostmem); } diff --git a/include/hw/virtio/dataplane/vring.h b/include/hw/virtio/dataplane/vring.h index 9380cb5..c0b69ff 100644 --- a/include/hw/virtio/dataplane/vring.h +++ b/include/hw/virtio/dataplane/vring.h @@ -50,7 +50,7 @@ static inline void vring_set_broken(Vring *vring) } bool vring_setup(Vring *vring, VirtIODevice *vdev, int n); -void vring_teardown(Vring *vring); +void vring_teardown(Vring *vring, VirtIODevice *vdev, int n); void vring_disable_notification(VirtIODevice *vdev, Vring *vring); bool vring_enable_notification(VirtIODevice *vdev, Vring *vring); bool vring_should_notify(VirtIODevice *vdev, Vring *vring);