From nobody Mon Feb 9 12:26:02 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1558619896; cv=none; d=zoho.com; s=zohoarc; b=UGf5nUABFQJjRVBDhuyEXWGdvIqaBAMTsCJkoLSs3RKdL/nlvYBB8wgjRcwjjbtP61wjUDxJFn8VAXd/KoIueUkwKGBJBzNC1oCJKiD69AbOAkfoy10/dTSrGZXSzsDHacFyn5HQIIJ+UWeni1xaDT+7oWRX9bPn02Rvf4Dnrtk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558619896; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=43tb5F2j/EbMgo5WzG56pm9DozAz2a3I28GGxOLs3AA=; b=HR7EMVfbvEbzrQTlX6bT8KI0WMoL4IJnzkt3COKQkLDEgeye4MVmvI30Q1V3UlXDi8Smb0KSRWS/842HroVHs2I4bXLAMmKrhHgcQMdbPBGUdTyK69c6do0j8vI+SmZ24zouRlthnjJY1Y660n5Dalyag0g7fnvOYuhWE4HiCLM= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558619896597994.9795563651459; Thu, 23 May 2019 06:58:16 -0700 (PDT) Received: from localhost ([127.0.0.1]:36879 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hToEQ-0003sd-E7 for importer@patchew.org; Thu, 23 May 2019 09:58:06 -0400 Received: from eggs.gnu.org ([209.51.188.92]:42448) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTo1k-0002vl-KA for qemu-devel@nongnu.org; Thu, 23 May 2019 09:45:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTo1i-00068g-Ft for qemu-devel@nongnu.org; Thu, 23 May 2019 09:45:00 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45492) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hTo1i-0005eL-8h for qemu-devel@nongnu.org; Thu, 23 May 2019 09:44:58 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6AB84C004BEB; Thu, 23 May 2019 13:44:40 +0000 (UTC) Received: from localhost (ovpn-116-196.ams2.redhat.com [10.36.116.196]) by smtp.corp.redhat.com (Postfix) with ESMTP id 76E185D707; Thu, 23 May 2019 13:44:35 +0000 (UTC) From: Stefan Hajnoczi To: Date: Thu, 23 May 2019 14:44:09 +0100 Message-Id: <20190523134409.18673-4-stefanha@redhat.com> In-Reply-To: <20190523134409.18673-1-stefanha@redhat.com> References: <20190523134409.18673-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Thu, 23 May 2019 13:44:40 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [RFC v2 3/3] virtio-scsi: fix iothread deadlock on 'cont' X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Paolo Bonzini , Fam Zheng , Stefan Hajnoczi , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" When the 'cont' command resumes guest execution the vm change state handlers are invoked. Unfortunately there is no explicit ordering between vm change state handlers. When two layers of code both use vm change state handlers, we don't control which handler runs first. virtio-scsi with iothreads hits a deadlock when a failed SCSI command is restarted and completes before the iothread is re-initialized. This patch makes sure that DMA restart happens after the iothread has been started again. Signed-off-by: Stefan Hajnoczi --- hw/scsi/virtio-scsi.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index 839f120256..236a0ee873 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -846,12 +846,28 @@ static void virtio_scsi_hotunplug(HotplugHandler *hot= plug_dev, DeviceState *dev, qdev_simple_device_unplug_cb(hotplug_dev, dev, errp); } =20 +static void virtio_scsi_vmstate_change(VirtIODevice *vdev, bool running) +{ + VirtIOSCSI *s =3D VIRTIO_SCSI(vdev); + + if (running) { + scsi_bus_dma_restart(&s->bus); + } +} + static struct SCSIBusInfo virtio_scsi_scsi_info =3D { .tcq =3D true, .max_channel =3D VIRTIO_SCSI_MAX_CHANNEL, .max_target =3D VIRTIO_SCSI_MAX_TARGET, .max_lun =3D VIRTIO_SCSI_MAX_LUN, =20 + /* We call scsi_bus_dma_restart() ourselves to control the ordering be= tween + * ->start_ioeventfd() and DMA restart. Do it in + * virtio_scsi_vmstate_change(), which is called by the core virtio co= de + * after ->start_ioeventfd(). + */ + .custom_dma_restart =3D true, + .complete =3D virtio_scsi_command_complete, .cancel =3D virtio_scsi_request_cancelled, .change =3D virtio_scsi_change, @@ -986,6 +1002,7 @@ static void virtio_scsi_class_init(ObjectClass *klass,= void *data) vdc->reset =3D virtio_scsi_reset; vdc->start_ioeventfd =3D virtio_scsi_dataplane_start; vdc->stop_ioeventfd =3D virtio_scsi_dataplane_stop; + vdc->vmstate_change =3D virtio_scsi_vmstate_change; hc->plug =3D virtio_scsi_hotplug; hc->unplug =3D virtio_scsi_hotunplug; } --=20 2.21.0