From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:43939) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMCwV-0003sr-2i for qemu-devel@nongnu.org; Sun, 31 Mar 2013 03:44:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UMCwQ-0005Tr-QU for qemu-devel@nongnu.org; Sun, 31 Mar 2013 03:44:43 -0400 Received: from mx1.redhat.com ([209.132.183.28]:14581) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMCwQ-0005SL-IR for qemu-devel@nongnu.org; Sun, 31 Mar 2013 03:44:38 -0400 Date: Sun, 31 Mar 2013 10:45:16 +0300 From: "Michael S. Tsirkin" Message-ID: <20130331074516.GC23484@redhat.com> References: <1364531592-8368-1-git-send-email-nab@linux-iscsi.org> <1364531592-8368-4-git-send-email-nab@linux-iscsi.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1364531592-8368-4-git-send-email-nab@linux-iscsi.org> Subject: Re: [Qemu-devel] [PATCH 3/3] vhost: Check+skip uninitialized VQs in vhost_verify_ring_mappings List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Nicholas A. Bellinger" Cc: kvm-devel , qemu-devel , lf-virt , Anthony Liguori , target-devel , Stefan Hajnoczi , Paolo Bonzini , Asias He On Fri, Mar 29, 2013 at 04:33:12AM +0000, Nicholas A. Bellinger wrote: > From: Nicholas Bellinger > > With the virtio_queue_valid() checks in place to skip uninitialized VQs > within virtio-pci code, go ahead and skip the same uninitialized VQs > during vhost_verify_ring_mappings(). > > Note this patch does not prevent vhost_virtqueue_start() from executing > by checking virtio_queue_valid(), as other logic during seabios -> > virtio-scsi LLD guest hand-off appears to depend upon this execution. Weird. cpu_physical_memory_map only succeeds for PA==0 by chance, we really should not depend on this. So the right thing really should be to skip vhost_virtqueue_start IMHO, maybe add an explicit valid flag in vhost_virtqueue so vhost_verify_ring_mappings can check it. What exactly does it do that is needed? > > Cc: Michael S. Tsirkin > Cc: Asias He > Cc: Paolo Bonzini > Signed-off-by: Nicholas Bellinger > --- > hw/vhost.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/hw/vhost.c b/hw/vhost.c > index 4d6aee3..3a71aee 100644 > --- a/hw/vhost.c > +++ b/hw/vhost.c > @@ -314,6 +314,9 @@ static int vhost_verify_ring_mappings(struct vhost_dev *dev, > hwaddr l; > void *p; > > + if (!vq->ring_phys || !vq->ring_size) { > + continue; > + } > if (!ranges_overlap(start_addr, size, vq->ring_phys, vq->ring_size)) { > continue; > } > -- > 1.7.2.5