From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41961) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XoFFK-0006cE-NS for qemu-devel@nongnu.org; Tue, 11 Nov 2014 12:28:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XoFFE-0001v1-AO for qemu-devel@nongnu.org; Tue, 11 Nov 2014 12:28:50 -0500 Received: from mx1.redhat.com ([209.132.183.28]:37996) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XoFFE-0001uX-21 for qemu-devel@nongnu.org; Tue, 11 Nov 2014 12:28:44 -0500 Date: Tue, 11 Nov 2014 17:28:37 +0000 From: Stefan Hajnoczi Message-ID: <20141111172837.GB22150@stefanha-thinkpad.redhat.com> References: <1415668630-30073-1-git-send-email-ming.lei@canonical.com> <1415668630-30073-3-git-send-email-ming.lei@canonical.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="FkmkrVfFsRoUs1wW" Content-Disposition: inline In-Reply-To: <1415668630-30073-3-git-send-email-ming.lei@canonical.com> Subject: Re: [Qemu-devel] [PATCH v1 2/2] virtio-scsi: dataplane: notify guest as batch List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Ming Lei Cc: Kevin Wolf , Fam Zheng , "Michael S. Tsirkin" , qemu-devel@nongnu.org, Anthony Liguori , Paolo Bonzini --FkmkrVfFsRoUs1wW Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Nov 11, 2014 at 09:17:10AM +0800, Ming Lei wrote: > +static void notify_guest_bh(void *opaque) > +{ > + VirtIOSCSI *s =3D opaque; > + unsigned int qid; > + uint64_t pending =3D s->pending_guest_notify; > + > + s->pending_guest_notify =3D 0; > + > + while ((qid =3D ffsl(pending))) { > + qid--; > + event_notifier_set(&s->cmd_vrings[qid]->guest_notifier); > + pending &=3D ~(1 << qid); > + } > +} Looks like we're not honoring virtio's usual interrupt mitigation mechanism (e.g. EVENT_IDX) for virtio-scsi. Why is vring_should_notify() not used? > + > static void virtio_scsi_bad_req(void) > { > error_report("wrong size for virtio-scsi headers"); > @@ -824,7 +839,12 @@ void virtio_scsi_common_realize(DeviceState *dev, Er= ror **errp, > } > =20 > if (s->conf.iothread) { > - virtio_scsi_set_iothread(VIRTIO_SCSI(s), s->conf.iothread); > + VirtIOSCSI *vis =3D VIRTIO_SCSI(s); > + > + QEMU_BUILD_BUG_ON(VIRTIO_PCI_QUEUE_MAX > 64); > + virtio_scsi_set_iothread(vis, s->conf.iothread); > + vis->pending_guest_notify =3D 0; > + vis->guest_notify_bh =3D aio_bh_new(vis->ctx, notify_guest_bh, v= is); Have you checked state transitions like PCI or virtio reset? They need to cancel the BH and clear ->pending_guest_notify. There is also a transition from dataplane to non-dataplane mode for live migration. Please make sure no interrupts are dropped or stale data is kept across these transitions. --FkmkrVfFsRoUs1wW Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJUYkdFAAoJEJykq7OBq3PIP7gH/16AEjdaY5ptXqr8phBzC0g8 s818hb4aphGzi+yvq3YZFpgClI6GjCFBSjLvmTcjwsnBu189HPlbKwH/T5Ws20vA HHt+SoID51WXtD+zYyDIAdDFYL6iczXMrYPZqd350POtbJGRmmw2HwRgLbze3n+j K9QBSbNvohJ+kSLKIl39Q57+faol+F0+r9MYt7hadhAvxapcl5Gh1JXhxVSIhssS DqsG7CXmvu5VD2CPTd3LJmocFYllVKAne09TnWU+wlvJKHibdfUFchd6kt3CjH9m 9HOoKcAGLgUl6+yQTBXCqIPPbm/+vy8kUjRO5XWKFvRBZXsOCuBcnWqInZo3Ny4= =xolM -----END PGP SIGNATURE----- --FkmkrVfFsRoUs1wW--