From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:35487) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tkrae-0005uv-PG for qemu-devel@nongnu.org; Tue, 18 Dec 2012 02:27:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Tkrad-0005l5-N4 for qemu-devel@nongnu.org; Tue, 18 Dec 2012 02:27:48 -0500 Received: from mail-wi0-f179.google.com ([209.85.212.179]:34311) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tkrad-0005kz-GA for qemu-devel@nongnu.org; Tue, 18 Dec 2012 02:27:47 -0500 Received: by mail-wi0-f179.google.com with SMTP id o1so135018wic.12 for ; Mon, 17 Dec 2012 23:27:46 -0800 (PST) Sender: Paolo Bonzini Message-ID: <50D01AEE.2010508@redhat.com> Date: Tue, 18 Dec 2012 08:27:42 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1355761490-10073-1-git-send-email-pbonzini@redhat.com> <20121217214336.GA11991@redhat.com> In-Reply-To: <20121217214336.GA11991@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 00/15] qdev: make reset semantics more clear and consistent, reset qbuses under virtio devices List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: aliguori@us.ibm.com, qemu-devel@nongnu.org Il 17/12/2012 22:43, Michael S. Tsirkin ha scritto: > On Mon, Dec 17, 2012 at 05:24:35PM +0100, Paolo Bonzini wrote: >> After discussion with mst on the topic of resetting virtio devices, >> here is a series that hopefully clarifies the semantics of bus and >> device resets. >> >> After this series, there are two kinds of resets: > > So just to clarify, what I proposed was this > (on top of my type safety patch). Then > all transports can call virtio_config_reset > when appropriate (e.g. when PA is set to 0). > > Signed-off-by: Michael S. Tsirkin > > diff --git a/hw/virtio.c b/hw/virtio.c > index f40a8c5..e65d7c8 100644 > --- a/hw/virtio.c > +++ b/hw/virtio.c > @@ -554,6 +554,14 @@ void virtio_reset(void *opaque) > } > } > > +/* Device-specific reset through virtio config space. > + * Reset virtio config and backend child devices if any. > + */ > +void virtio_config_reset(VirtIODevice *vdev) > +{ > + qdev_reset_all(vdev->binding_opaque); > +} Yes, I had understood. As I said, this is the wrong direction. Resetting happens from vdev->binding_opaque, it can just do qdev_reset_all(myself). Paolo > uint32_t virtio_config_readb(VirtIODevice *vdev, uint32_t addr) > { > uint8_t val; > diff --git a/hw/virtio.h b/hw/virtio.h > index 7c17f7b..e2e57a4 100644 > --- a/hw/virtio.h > +++ b/hw/virtio.h > @@ -187,11 +187,12 @@ uint16_t virtio_queue_vector(VirtIODevice *vdev, int n); > void virtio_queue_set_vector(VirtIODevice *vdev, int n, uint16_t vector); > void virtio_set_status(VirtIODevice *vdev, uint8_t val); > void virtio_reset(void *opaque); > +void virtio_config_reset(VirtIODevice *vdev); > void virtio_update_irq(VirtIODevice *vdev); > int virtio_set_features(VirtIODevice *vdev, uint32_t val); > > void virtio_bind_device(VirtIODevice *vdev, const VirtIOBindings *binding, > DeviceState *opaque); > > /* Base devices. */ > typedef struct VirtIOBlkConf VirtIOBlkConf; > >