From nobody Sat May 18 18:27:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=1608247794; cv=none; d=zohomail.com; s=zohoarc; b=N1bItUqusH4k9rZWaJlZL8tXW6FrD3IZo+01+jkcoUoXWeBh5F1djoRB5ovS6+cxtOGD5tbpkF9+lMb1I9Lnix12TOmtLqejZ6fxpofpiixHXSsOrFr0XYHa9PLwcspqI3caK5pMmD0YIt65UsvyUJyYDC5QvWBwsv3et/ALOi8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1608247794; h=Content-Type: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; bh=gxMQKtmTiYrrnOK3gDk/IeCeokmQ4smxQbGkg4S2Lbg=; b=MJZML8D17aEzw3pGIB13iRfViaIksM5YA41+DExelb+zRaO3njs4zkMVd5HuwCfZeaVFT3pxm1NWzsb1snFXRvA4qgJJ5hB0UzeCBRfWT9K6b/ym/YVpDcSSycjSUOsHpGMumEScjzmCKTRR60cOj+F/7T3VHflACpXslHs9AvQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.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 1608247794833944.1625380085336; Thu, 17 Dec 2020 15:29:54 -0800 (PST) Received: from localhost ([::1]:46550 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kpvQr-0001Eh-2j for importer@patchew.org; Thu, 17 Dec 2020 10:43:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:34956) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kpumA-0004LW-6Q for qemu-devel@nongnu.org; Thu, 17 Dec 2020 10:01:06 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:40891) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kpulz-0007ra-8i for qemu-devel@nongnu.org; Thu, 17 Dec 2020 10:01:04 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-489-hR3LRnEkMm6XIfax-5vrMA-1; Thu, 17 Dec 2020 10:00:49 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9028A107ACF7; Thu, 17 Dec 2020 15:00:48 +0000 (UTC) Received: from localhost.localdomain (unknown [10.35.206.213]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0535A5D9CD; Thu, 17 Dec 2020 15:00:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1608217251; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gxMQKtmTiYrrnOK3gDk/IeCeokmQ4smxQbGkg4S2Lbg=; b=P8SLBn1o0Pt+pnLj7ZzAoCWEBqvW09//xAKM9Je0hTWREz4Ie1ZlBvohqapdkk3KQUpS8O tmb6kIJdIsb+52VUKGUvfDbDbkxMGf+C7FL8cmNMFCoYkbdUVfl8ooGuBwzRIKpdLH59x8 wT5cy6y+ZOPW9sFViWSjRGyX0myZbWY= X-MC-Unique: hR3LRnEkMm6XIfax-5vrMA-1 From: Maxim Levitsky To: qemu-devel@nongnu.org Subject: [PATCH 1/3] scsi: virtio-scsi: don't process IO on fenced dataplane Date: Thu, 17 Dec 2020 17:00:38 +0200 Message-Id: <20201217150040.906961-2-mlevitsk@redhat.com> In-Reply-To: <20201217150040.906961-1-mlevitsk@redhat.com> References: <20201217150040.906961-1-mlevitsk@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=mlevitsk@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.205.24.124; envelope-from=mlevitsk@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Paolo Bonzini , Maxim Levitsky , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" If virtio_scsi_dataplane_start fails, there is a small window when it drops= the aio lock (in aio_wait_bh_oneshot) and the dataplane's AIO handler can still run during that window. This is done after the dataplane was marked as fenced, thus we use this flag to avoid it doing any IO. Signed-off-by: Maxim Levitsky --- hw/scsi/virtio-scsi-dataplane.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplan= e.c index b995bab3a2..2824a25b65 100644 --- a/hw/scsi/virtio-scsi-dataplane.c +++ b/hw/scsi/virtio-scsi-dataplane.c @@ -56,8 +56,10 @@ static bool virtio_scsi_data_plane_handle_cmd(VirtIODevi= ce *vdev, VirtIOSCSI *s =3D VIRTIO_SCSI(vdev); =20 virtio_scsi_acquire(s); - assert(s->ctx && s->dataplane_started); - progress =3D virtio_scsi_handle_cmd_vq(s, vq); + if (!s->dataplane_fenced) { + assert(s->ctx && s->dataplane_started); + progress =3D virtio_scsi_handle_cmd_vq(s, vq); + } virtio_scsi_release(s); return progress; } @@ -69,8 +71,10 @@ static bool virtio_scsi_data_plane_handle_ctrl(VirtIODev= ice *vdev, VirtIOSCSI *s =3D VIRTIO_SCSI(vdev); =20 virtio_scsi_acquire(s); - assert(s->ctx && s->dataplane_started); - progress =3D virtio_scsi_handle_ctrl_vq(s, vq); + if (!s->dataplane_fenced) { + assert(s->ctx && s->dataplane_started); + progress =3D virtio_scsi_handle_ctrl_vq(s, vq); + } virtio_scsi_release(s); return progress; } @@ -82,8 +86,10 @@ static bool virtio_scsi_data_plane_handle_event(VirtIODe= vice *vdev, VirtIOSCSI *s =3D VIRTIO_SCSI(vdev); =20 virtio_scsi_acquire(s); - assert(s->ctx && s->dataplane_started); - progress =3D virtio_scsi_handle_event_vq(s, vq); + if (!s->dataplane_fenced) { + assert(s->ctx && s->dataplane_started); + progress =3D virtio_scsi_handle_event_vq(s, vq); + } virtio_scsi_release(s); return progress; } --=20 2.26.2 From nobody Sat May 18 18:27:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=1608247815; cv=none; d=zohomail.com; s=zohoarc; b=aQ73TGZ7A/+0EP1HqfJSreYIuGihbLfr4PbNeBme1Kd+b/UfZIhgZzJzap+bEUi2Tz+41gJlVBzsz/45NP4V45uA7J+q5KmnafQ/8JE21FNlZO8V9X+PndtY9QCzppRIKRfLHpsjaFSp8RB63u5Z9W7ztlrcSGHqlbvu9Lm4KzY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1608247815; h=Content-Type: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; bh=I1Wf6LxNX59oifmSq/DRgXmalRIrEoTC3b8aEtFycaQ=; b=M0x/5JTyikA0nAHzE9cI6HVi8Hpln/Sf2QH62gaM6Yvc88kmeo2zps5WET5mcsSBT7qem5Oo+TBU/wMFwItn/CG7UOT4J1ohfV4yuirekqBdWyiNq3gBHPpBxl37duMfPeXKzisXT0muzrXqMbeZGEmmEzf5b6/7+ym9flF9pwc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.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 1608247815606628.9359565973729; Thu, 17 Dec 2020 15:30:15 -0800 (PST) Received: from localhost ([::1]:40992 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kpuzr-0008OL-PD for importer@patchew.org; Thu, 17 Dec 2020 10:15:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35006) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kpumJ-0004O5-ST for qemu-devel@nongnu.org; Thu, 17 Dec 2020 10:01:15 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:49315) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kpum2-0007vd-TL for qemu-devel@nongnu.org; Thu, 17 Dec 2020 10:01:15 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-346-l57V8H3_MteDh4QUpzZk8g-1; Thu, 17 Dec 2020 10:00:51 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8DC3259; Thu, 17 Dec 2020 15:00:50 +0000 (UTC) Received: from localhost.localdomain (unknown [10.35.206.213]) by smtp.corp.redhat.com (Postfix) with ESMTP id 038DA5D9CD; Thu, 17 Dec 2020 15:00:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1608217257; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=I1Wf6LxNX59oifmSq/DRgXmalRIrEoTC3b8aEtFycaQ=; b=a3zu+aG9ijzCBOlDQ5EHxdy/nlgmRunYsaNuDxNuEqyMp9x+WricF2hIXRqQdsvYwSOQ9z zyK25t0ZSTJsn0F78Ragqg//iYzpPLF480m800wuT4TJW59VfyyQaiSH59vKAEMFEXTpEQ Dhbg6SiOdj7NA5bXulNcKdB8f/O88aY= X-MC-Unique: l57V8H3_MteDh4QUpzZk8g-1 From: Maxim Levitsky To: qemu-devel@nongnu.org Subject: [PATCH 2/3] virtio-scsi: don't uninitialize queues that we didn't initialize Date: Thu, 17 Dec 2020 17:00:39 +0200 Message-Id: <20201217150040.906961-3-mlevitsk@redhat.com> In-Reply-To: <20201217150040.906961-1-mlevitsk@redhat.com> References: <20201217150040.906961-1-mlevitsk@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=mlevitsk@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=63.128.21.124; envelope-from=mlevitsk@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Paolo Bonzini , Maxim Levitsky , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Count number of queues that we initialized and only deinitialize these that= we initialized successfully. Signed-off-by: Maxim Levitsky --- hw/scsi/virtio-scsi-dataplane.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplan= e.c index 2824a25b65..cd1e72d3f8 100644 --- a/hw/scsi/virtio-scsi-dataplane.c +++ b/hw/scsi/virtio-scsi-dataplane.c @@ -132,6 +132,7 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev) { int i; int rc; + int vq_init_count =3D 0; BusState *qbus =3D qdev_get_parent_bus(DEVICE(vdev)); VirtioBusClass *k =3D VIRTIO_BUS_GET_CLASS(qbus); VirtIOSCSICommon *vs =3D VIRTIO_SCSI_COMMON(vdev); @@ -159,17 +160,22 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev) if (rc) { goto fail_vrings; } + + vq_init_count++; rc =3D virtio_scsi_vring_init(s, vs->event_vq, 1, virtio_scsi_data_plane_handle_event); if (rc) { goto fail_vrings; } + + vq_init_count++; for (i =3D 0; i < vs->conf.num_queues; i++) { rc =3D virtio_scsi_vring_init(s, vs->cmd_vqs[i], i + 2, virtio_scsi_data_plane_handle_cmd); if (rc) { goto fail_vrings; } + vq_init_count++; } =20 s->dataplane_starting =3D false; @@ -180,7 +186,7 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev) fail_vrings: aio_wait_bh_oneshot(s->ctx, virtio_scsi_dataplane_stop_bh, s); aio_context_release(s->ctx); - for (i =3D 0; i < vs->conf.num_queues + 2; i++) { + for (i =3D 0; i < vq_init_count; i++) { virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); } --=20 2.26.2 From nobody Sat May 18 18:27:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=1608248128; cv=none; d=zohomail.com; s=zohoarc; b=l7vHf/rlN5A42dKAVT1nUVgzr4+5QQZVg3UK3dZMkrtze2ezxC1r8YdBi1m1i8yNPKlIvz9mafK8u9rFR88WAH15vtMyi3Pl0c/QVOSp3fDMlCgy3cDIYZhyOyWMkJXfN+Iz4gisH0pDHg3CHBiseKbnpbQIlR8IqsfYzAzOYDw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1608248128; h=Content-Type: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; bh=VK6nSYcyxlQ99/4gk2RQCa/LpwqjxsuqtL5MgNzEcLI=; b=i8ZWxx1v5eUaBXjoDHDHX28M+ujVMsLkQiDgXzZVQOuKxVB5pDfC6OyAEzVN77dH3yBROevfJCn3AMYT4dZcWjVC7WYmdM7KkokOG9UyPloKqv3S41icv3vB0qBC7+/hglOUYb3ed6FJW9qRGdU0Fa15GEDGNa8L8Rrw3VqC2s8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.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 1608248128514443.9652965368433; Thu, 17 Dec 2020 15:35:28 -0800 (PST) Received: from localhost ([::1]:32894 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kpuwX-0004uY-Fq for importer@patchew.org; Thu, 17 Dec 2020 10:11:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:34964) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kpumC-0004N9-Kr for qemu-devel@nongnu.org; Thu, 17 Dec 2020 10:01:09 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:53916) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kpum1-0007tO-Lq for qemu-devel@nongnu.org; Thu, 17 Dec 2020 10:01:08 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-283-f2gNOmDuNaiJvpewevI7ug-1; Thu, 17 Dec 2020 10:00:53 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B8D54107ACF6; Thu, 17 Dec 2020 15:00:52 +0000 (UTC) Received: from localhost.localdomain (unknown [10.35.206.213]) by smtp.corp.redhat.com (Postfix) with ESMTP id 00EA55D9D5; Thu, 17 Dec 2020 15:00:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1608217255; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VK6nSYcyxlQ99/4gk2RQCa/LpwqjxsuqtL5MgNzEcLI=; b=PBQ/OmdzRH2didGMWldSe7cveQwfqyw7MmrvZztikvxgHIFliPPceI6lQGCY7ewuqaBBEg hSguRvC9/mFPYMT97HRJjARnh1hqsa25ht8YZsDis4pXoqvHfPMCp/9GyH3CmUUyK1FrID i23hdhBVJ4i+cWg07WuraJeP3ALmMFQ= X-MC-Unique: f2gNOmDuNaiJvpewevI7ug-1 From: Maxim Levitsky To: qemu-devel@nongnu.org Subject: [PATCH 3/3] event_notifier: handle initialization failure better Date: Thu, 17 Dec 2020 17:00:40 +0200 Message-Id: <20201217150040.906961-4-mlevitsk@redhat.com> In-Reply-To: <20201217150040.906961-1-mlevitsk@redhat.com> References: <20201217150040.906961-1-mlevitsk@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=mlevitsk@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.205.24.124; envelope-from=mlevitsk@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Paolo Bonzini , Maxim Levitsky , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add 'initialized' field and use it to avoid touching event notifiers which = are either not initialized or if their initialization failed. This is somewhat a hack, but it seems the less intrusive way to make virtio code deal with event notifiers that failed initialization. Signed-off-by: Maxim Levitsky --- include/qemu/event_notifier.h | 1 + util/event_notifier-posix.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/include/qemu/event_notifier.h b/include/qemu/event_notifier.h index 3380b662f3..b79add035d 100644 --- a/include/qemu/event_notifier.h +++ b/include/qemu/event_notifier.h @@ -24,6 +24,7 @@ struct EventNotifier { #else int rfd; int wfd; + bool initialized; #endif }; =20 diff --git a/util/event_notifier-posix.c b/util/event_notifier-posix.c index 00d93204f9..5b2110e861 100644 --- a/util/event_notifier-posix.c +++ b/util/event_notifier-posix.c @@ -29,6 +29,7 @@ void event_notifier_init_fd(EventNotifier *e, int fd) { e->rfd =3D fd; e->wfd =3D fd; + e->initialized =3D true; } #endif =20 @@ -68,6 +69,7 @@ int event_notifier_init(EventNotifier *e, int active) if (active) { event_notifier_set(e); } + e->initialized =3D true; return 0; =20 fail: @@ -78,12 +80,18 @@ fail: =20 void event_notifier_cleanup(EventNotifier *e) { + if (!e->initialized) { + return; + } + if (e->rfd !=3D e->wfd) { close(e->rfd); } + e->rfd =3D -1; close(e->wfd); e->wfd =3D -1; + e->initialized =3D false; } =20 int event_notifier_get_fd(const EventNotifier *e) @@ -96,6 +104,10 @@ int event_notifier_set(EventNotifier *e) static const uint64_t value =3D 1; ssize_t ret; =20 + if (!e->initialized) { + return -1; + } + do { ret =3D write(e->wfd, &value, sizeof(value)); } while (ret < 0 && errno =3D=3D EINTR); @@ -113,6 +125,10 @@ int event_notifier_test_and_clear(EventNotifier *e) ssize_t len; char buffer[512]; =20 + if (!e->initialized) { + return 0; + } + /* Drain the notify pipe. For eventfd, only 8 bytes will be read. */ value =3D 0; do { --=20 2.26.2