From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55857) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1dJK-00018H-2i for qemu-devel@nongnu.org; Mon, 30 Jun 2014 11:16:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X1dJA-0002FW-VK for qemu-devel@nongnu.org; Mon, 30 Jun 2014 11:16:02 -0400 Received: from mail-we0-x232.google.com ([2a00:1450:400c:c03::232]:34685) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1dJA-0002FJ-Ns for qemu-devel@nongnu.org; Mon, 30 Jun 2014 11:15:52 -0400 Received: by mail-we0-f178.google.com with SMTP id x48so8312819wes.23 for ; Mon, 30 Jun 2014 08:15:51 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <53B17F23.9040200@redhat.com> Date: Mon, 30 Jun 2014 17:15:47 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <20140630150813.6266.18168.stgit@bahia.local> In-Reply-To: <20140630150813.6266.18168.stgit@bahia.local> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] virtio-scsi: virtio_scsi_push_event() lacks VirtIOSCSIReq parsing List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Greg Kurz , "Michael S. Tsirkin" Cc: qemu-devel@nongnu.org Il 30/06/2014 17:09, Greg Kurz ha scritto: > Hotplug of a virtio scsi disk is currently broken: no disk appears in the > guest (verified with a fedora 20 host running a fedora 20 guest with KVM). > Bisect leeds to Paolo's patches to support any_layout, especially this > commit: > > commit 36b15c79aa1bef5fe7543f9f2629b6413720bbfb > Author: Paolo Bonzini > Date: Tue Jun 10 16:21:18 2014 +0200 > > virtio-scsi: start preparing for any_layout > > It modifies virtio_scsi_pop_req() so that it is up to the callers to parse > the virtio scsi request. It seems that virtio_scsi_push_event() was not > modified accordingly... > > This patch adds a call to virtio_scsi_parse_req(). It also drops the in size > sanity check since it is already done by virtio_scsi_parse_req(). This is > enough to have hotplug working again. > > Signed-off-by: Greg Kurz > --- > > I guess the following check could also be handled by virtio_scsi_parse_req() > as it does not allow both in and out at the same time, but I am not sure: > > if (req->elem.out_num) { > virtio_scsi_bad_req(); > } > > Thoughts ? > > -- > Greg > > hw/scsi/virtio-scsi.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c > index 04ecfa7..0b0a331 100644 > --- a/hw/scsi/virtio-scsi.c > +++ b/hw/scsi/virtio-scsi.c > @@ -565,7 +565,6 @@ static void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, > VirtIOSCSIReq *req; > VirtIOSCSIEvent *evt; > VirtIODevice *vdev = VIRTIO_DEVICE(s); > - int in_size; > > if (!(vdev->status & VIRTIO_CONFIG_S_DRIVER_OK)) { > return; > @@ -586,8 +585,7 @@ static void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, > s->events_dropped = false; > } > > - in_size = iov_size(req->elem.in_sg, req->elem.in_num); > - if (in_size < sizeof(VirtIOSCSIEvent)) { > + if (virtio_scsi_parse_req(req, 0, sizeof(VirtIOSCSIEvent))) { > virtio_scsi_bad_req(); > } > > > > Looks good. I'll queue the fix. Paolo