From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:54247) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TvsoG-0000RC-Ms for qemu-devel@nongnu.org; Thu, 17 Jan 2013 11:59:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Tvso9-0007lI-IZ for qemu-devel@nongnu.org; Thu, 17 Jan 2013 11:59:24 -0500 Received: from mx1.redhat.com ([209.132.183.28]:37400) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tvso9-0007l6-BI for qemu-devel@nongnu.org; Thu, 17 Jan 2013 11:59:17 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r0HGxGBR011052 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 17 Jan 2013 11:59:16 -0500 Date: Thu, 17 Jan 2013 17:59:14 +0100 From: Stefan Hajnoczi Message-ID: <20130117165914.GA2647@stefanha-thinkpad.redhat.com> References: <1358437614-14968-1-git-send-email-stefanha@redhat.com> <20130117155917.GA18801@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130117155917.GA18801@redhat.com> Subject: Re: [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: Kevin Wolf , qemu-devel@nongnu.org, vrozenfe@redhat.com On Thu, Jan 17, 2013 at 05:59:17PM +0200, Michael S. Tsirkin wrote: > On Thu, Jan 17, 2013 at 04:46:54PM +0100, Stefan Hajnoczi wrote: > > The viostor virtio-blk driver for Windows does not use the > > VIRTIO_CONFIG_S_DRIVER bit. It only sets the VIRTIO_CONFIG_S_DRIVER_OK > > bit. > > > > The viostor driver refreshes the virtio-pci status byte sometimes while > > the guest is running. We misinterpret 0x4 (VIRTIO_CONFIG_S_DRIVER_OK) > > as an indication that virtio-blk-data-plane should be stopped since 0x2 > > (VIRTIO_CONFIG_S_DRIVER) is missing. The result is that the device > > becomes unresponsive. > > > > Signed-off-by: Stefan Hajnoczi > > I think you actually want > > if (s->dataplane && !(status & VIRTIO_CONFIG_S_DRIVER_OK))) > > so stop on any error. > > This is also consistent with what vhost-net does. We can't do that because of the Linux virtio quirk where it begins using virtqueues before VIRTIO_CONFIG_S_DRIVER_OK. I original checked VIRTIO_CONFIG_S_DRIVER_OK but I'm pretty sure I hit a situation where the status would still be set ~DRIVER_OK after the first kick - this would stop data plane and the vring last indices would no longer be in sync when it started again. So I think it's most robust to check both DRIVER and DRIVER_OK. Stefan