From nobody Sun Feb 8 15:02:51 2026 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=1619111077; cv=none; d=zohomail.com; s=zohoarc; b=RnriW5D5idH+qSoU6SQBPa7N/VSS9JtnfkYE0BgPOKvZzAfIdBzMrMiPXqqYYkipOS6kQ6eKDacea0nJhmKkk80fvCUVO8Ph1OyMATgzV6GEmPgzavBDgj8wUmTfX3DAkMN4xljKU675YpgxDlJCGxW8lcd2BYW5q/4NhMYyjKc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619111077; 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=IPD31XnZ9G33rCybkYQO+KLen7znIUc8+9TP9VT9BcQ=; b=Pq7d1DRSYCw21VBNuxJT8BTyRh1fTcOKKRhwMe8kUy2WMyke80vC5wIMdn2BaBl/AvXDuh2DSyOqYtVHfPk6Vdl+3A+AoUJmziV9g44hcTS9x3XtPyptSKaHpxE03WAn7P9qDIwNWnxWa0wr18H2+v8gq+ZRkMLtVJxI0o37OGg= 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 1619111077645586.484237248662; Thu, 22 Apr 2021 10:04:37 -0700 (PDT) Received: from localhost ([::1]:42210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lZckm-0003vQ-5S for importer@patchew.org; Thu, 22 Apr 2021 13:04:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35040) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lZcj6-00027F-MR for qemu-devel@nongnu.org; Thu, 22 Apr 2021 13:02:52 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:28675) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lZcj4-0001Su-6k for qemu-devel@nongnu.org; Thu, 22 Apr 2021 13:02:52 -0400 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-492-OhAOIsQBP-GATP3CiYRICw-1; Thu, 22 Apr 2021 13:02:40 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 391D818397A4; Thu, 22 Apr 2021 17:02:39 +0000 (UTC) Received: from merkur.fritz.box (ovpn-112-159.ams2.redhat.com [10.36.112.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id E50B019C59; Thu, 22 Apr 2021 17:02:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1619110969; 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=IPD31XnZ9G33rCybkYQO+KLen7znIUc8+9TP9VT9BcQ=; b=OYIGsSd4nfJwuy06lvd52eoZahFcAwgrAGFbDxnKx6Y1jwCEoO+6npOQ5cR7hqk1ReKMWh NLdmXP1ADaLGklbwLUnu8x8xyihqnTux0burJGSviEA/vSZMXjpNCcgZtDoDrSA2O+vujH GuobXn7TU6QOcIKVsbCrztXt+P34JHA= X-MC-Unique: OhAOIsQBP-GATP3CiYRICw-1 From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 1/5] vhost-user-blk: Don't reconnect during initialisation Date: Thu, 22 Apr 2021 19:02:17 +0200 Message-Id: <20210422170221.285006-2-kwolf@redhat.com> In-Reply-To: <20210422170221.285006-1-kwolf@redhat.com> References: <20210422170221.285006-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kwolf@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=170.10.133.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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: kwolf@redhat.com, den-plotnikov@yandex-team.ru, mst@redhat.com, qemu-devel@nongnu.org, raphael.norwitz@nutanix.com 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" This is a partial revert of commits 77542d43149 and bc79c87bcde. Usually, an error during initialisation means that the configuration was wrong. Reconnecting won't make the error go away, but just turn the error condition into an endless loop. Avoid this and return errors again. Additionally, calling vhost_user_blk_disconnect() from the chardev event handler could result in use-after-free because none of the initialisation code expects that the device could just go away in the middle. So removing the call fixes crashes in several places. For example, using a num-queues setting that is incompatible with the backend would result in a crash like this (dereferencing dev->opaque, which is already NULL): #0 0x0000555555d0a4bd in vhost_user_read_cb (source=3D0x5555568f4690, con= dition=3D(G_IO_IN | G_IO_HUP), opaque=3D0x7fffffffcbf0) at ../hw/virtio/vho= st-user.c:313 #1 0x0000555555d950d3 in qio_channel_fd_source_dispatch (source=3D0x55555= 7c3f750, callback=3D0x555555d0a478 , user_data=3D0x7fff= ffffcbf0) at ../io/channel-watch.c:84 #2 0x00007ffff7b32a9f in g_main_context_dispatch () at /lib64/libglib-2.0= .so.0 #3 0x00007ffff7b84a98 in g_main_context_iterate.constprop () at /lib64/li= bglib-2.0.so.0 #4 0x00007ffff7b32163 in g_main_loop_run () at /lib64/libglib-2.0.so.0 #5 0x0000555555d0a724 in vhost_user_read (dev=3D0x555557bc62f8, msg=3D0x7= fffffffcc50) at ../hw/virtio/vhost-user.c:402 #6 0x0000555555d0ee6b in vhost_user_get_config (dev=3D0x555557bc62f8, con= fig=3D0x555557bc62ac "", config_len=3D60) at ../hw/virtio/vhost-user.c:2133 #7 0x0000555555d56d46 in vhost_dev_get_config (hdev=3D0x555557bc62f8, con= fig=3D0x555557bc62ac "", config_len=3D60) at ../hw/virtio/vhost.c:1566 #8 0x0000555555cdd150 in vhost_user_blk_device_realize (dev=3D0x555557bc6= 0b0, errp=3D0x7fffffffcf90) at ../hw/block/vhost-user-blk.c:510 #9 0x0000555555d08f6d in virtio_device_realize (dev=3D0x555557bc60b0, err= p=3D0x7fffffffcff0) at ../hw/virtio/virtio.c:3660 Signed-off-by: Kevin Wolf Reviewed-by: Denis Plotnikov --- hw/block/vhost-user-blk.c | 54 ++++++++++----------------------------- 1 file changed, 13 insertions(+), 41 deletions(-) diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index f5e9682703..e824b0a759 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -50,6 +50,8 @@ static const int user_feature_bits[] =3D { VHOST_INVALID_FEATURE_BIT }; =20 +static void vhost_user_blk_event(void *opaque, QEMUChrEvent event); + static void vhost_user_blk_update_config(VirtIODevice *vdev, uint8_t *conf= ig) { VHostUserBlk *s =3D VHOST_USER_BLK(vdev); @@ -362,19 +364,6 @@ static void vhost_user_blk_disconnect(DeviceState *dev) vhost_dev_cleanup(&s->dev); } =20 -static void vhost_user_blk_event(void *opaque, QEMUChrEvent event, - bool realized); - -static void vhost_user_blk_event_realize(void *opaque, QEMUChrEvent event) -{ - vhost_user_blk_event(opaque, event, false); -} - -static void vhost_user_blk_event_oper(void *opaque, QEMUChrEvent event) -{ - vhost_user_blk_event(opaque, event, true); -} - static void vhost_user_blk_chr_closed_bh(void *opaque) { DeviceState *dev =3D opaque; @@ -382,12 +371,11 @@ static void vhost_user_blk_chr_closed_bh(void *opaque) VHostUserBlk *s =3D VHOST_USER_BLK(vdev); =20 vhost_user_blk_disconnect(dev); - qemu_chr_fe_set_handlers(&s->chardev, NULL, NULL, - vhost_user_blk_event_oper, NULL, opaque, NULL, true); + qemu_chr_fe_set_handlers(&s->chardev, NULL, NULL, vhost_user_blk_event, + NULL, opaque, NULL, true); } =20 -static void vhost_user_blk_event(void *opaque, QEMUChrEvent event, - bool realized) +static void vhost_user_blk_event(void *opaque, QEMUChrEvent event) { DeviceState *dev =3D opaque; VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); @@ -401,17 +389,7 @@ static void vhost_user_blk_event(void *opaque, QEMUChr= Event event, } break; case CHR_EVENT_CLOSED: - /* - * Closing the connection should happen differently on device - * initialization and operation stages. - * On initalization, we want to re-start vhost_dev initialization - * from the very beginning right away when the connection is close= d, - * so we clean up vhost_dev on each connection closing. - * On operation, we want to postpone vhost_dev cleanup to let the - * other code perform its own cleanup sequence using vhost_dev data - * (e.g. vhost_dev_set_log). - */ - if (realized && !runstate_check(RUN_STATE_SHUTDOWN)) { + if (!runstate_check(RUN_STATE_SHUTDOWN)) { /* * A close event may happen during a read/write, but vhost * code assumes the vhost_dev remains setup, so delay the @@ -431,8 +409,6 @@ static void vhost_user_blk_event(void *opaque, QEMUChrE= vent event, * knowing its type (in this case vhost-user). */ s->dev.started =3D false; - } else { - vhost_user_blk_disconnect(dev); } break; case CHR_EVENT_BREAK: @@ -490,31 +466,27 @@ static void vhost_user_blk_device_realize(DeviceState= *dev, Error **errp) s->vhost_vqs =3D g_new0(struct vhost_virtqueue, s->num_queues); s->connected =3D false; =20 - qemu_chr_fe_set_handlers(&s->chardev, NULL, NULL, - vhost_user_blk_event_realize, NULL, (void *)d= ev, - NULL, true); - -reconnect: if (qemu_chr_fe_wait_connected(&s->chardev, &err) < 0) { error_report_err(err); goto virtio_err; } =20 - /* check whether vhost_user_blk_connect() failed or not */ - if (!s->connected) { - goto reconnect; + if (vhost_user_blk_connect(dev) < 0) { + qemu_chr_fe_disconnect(&s->chardev); + goto virtio_err; } + assert(s->connected); =20 ret =3D vhost_dev_get_config(&s->dev, (uint8_t *)&s->blkcfg, sizeof(struct virtio_blk_config)); if (ret < 0) { error_report("vhost-user-blk: get block config failed"); - goto reconnect; + goto virtio_err; } =20 - /* we're fully initialized, now we can operate, so change the handler = */ + /* we're fully initialized, now we can operate, so add the handler */ qemu_chr_fe_set_handlers(&s->chardev, NULL, NULL, - vhost_user_blk_event_oper, NULL, (void *)dev, + vhost_user_blk_event, NULL, (void *)dev, NULL, true); return; =20 --=20 2.30.2 From nobody Sun Feb 8 15:02:51 2026 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=1619111079; cv=none; d=zohomail.com; s=zohoarc; b=MauxqJbkO140a4raew69HxZkbypdznLw/Ug36hkEu1xHetOf9ghN5anYHUeSN6g064Ew9fGlZZFOcwX7uQjiFmVs2ORL7I8+hhXEfrojeSN28L4v9j3SFyEK79wDbYNYSWfT6QYFlvMl1DHremEVhUUfQBnFN3ndynblwNbIjqo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619111079; 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=qvvvm1DLQfQY2HB7/05dSUPKs9vhVP50ZFC/Yz784qU=; b=layrKt/7XSs+7PA+Zza8TsOdP2DM99LEVDKFAPaeicBWmtJ1/cIuJeBacmCeyHcAnYf7anrleWe8bkxe9l8hkO6VXVBmDp4JoWuFK15rQe1tsy3irKYa6troLjiivHywfy7Qvuu74Gni1jCg3i6QTpk1x2HALGf+oF465QFecaE= 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 1619111079973643.2284085872335; Thu, 22 Apr 2021 10:04:39 -0700 (PDT) Received: from localhost ([::1]:42540 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lZcko-00043k-FA for importer@patchew.org; Thu, 22 Apr 2021 13:04:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lZcj4-000251-Mb for qemu-devel@nongnu.org; Thu, 22 Apr 2021 13:02:50 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:52834) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lZciz-0001SF-8Z for qemu-devel@nongnu.org; Thu, 22 Apr 2021 13:02:50 -0400 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-503-2LryIS5WOaS6yanXsKeT-g-1; Thu, 22 Apr 2021 13:02:42 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CA88187504E; Thu, 22 Apr 2021 17:02:40 +0000 (UTC) Received: from merkur.fritz.box (ovpn-112-159.ams2.redhat.com [10.36.112.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id 85BE719C45; Thu, 22 Apr 2021 17:02:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1619110964; 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=qvvvm1DLQfQY2HB7/05dSUPKs9vhVP50ZFC/Yz784qU=; b=b69uFDhYH299QMwBq7R5NswwPLqr3xkir4N4jSwrranHOO/kPKEnDWiBvWHZfI5Ra60755 my7o+5ATWbqF2rLQ+jAKrRJ+4JGz4t8PBtG60Lxc85pJ/v3Gnx6x/QGrqyc9C9Mnz/BcN/ 1UuHwbzfISuhMDC6ZXOXBcAQ+GPy9PQ= X-MC-Unique: 2LryIS5WOaS6yanXsKeT-g-1 From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 2/5] vhost-user-blk: Use Error more consistently Date: Thu, 22 Apr 2021 19:02:18 +0200 Message-Id: <20210422170221.285006-3-kwolf@redhat.com> In-Reply-To: <20210422170221.285006-1-kwolf@redhat.com> References: <20210422170221.285006-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kwolf@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=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, 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: kwolf@redhat.com, den-plotnikov@yandex-team.ru, mst@redhat.com, qemu-devel@nongnu.org, raphael.norwitz@nutanix.com 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" Now that vhost_user_blk_connect() is not called from an event handler any more, but directly from vhost_user_blk_device_realize(), we don't have to resort to error_report() any more, but can use Error again. With Error, the callers are responsible for adding context if necessary (such as the "-device" option the error refers to). Additional prefixes are redundant and better omitted. Signed-off-by: Kevin Wolf Acked-by: Raphael Norwitz --- hw/block/vhost-user-blk.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index e824b0a759..8422a29470 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -311,7 +311,7 @@ static void vhost_user_blk_reset(VirtIODevice *vdev) vhost_dev_free_inflight(s->inflight); } =20 -static int vhost_user_blk_connect(DeviceState *dev) +static int vhost_user_blk_connect(DeviceState *dev, Error **errp) { VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); VHostUserBlk *s =3D VHOST_USER_BLK(vdev); @@ -331,8 +331,7 @@ static int vhost_user_blk_connect(DeviceState *dev) =20 ret =3D vhost_dev_init(&s->dev, &s->vhost_user, VHOST_BACKEND_TYPE_USE= R, 0); if (ret < 0) { - error_report("vhost-user-blk: vhost initialization failed: %s", - strerror(-ret)); + error_setg_errno(errp, -ret, "vhost initialization failed"); return ret; } =20 @@ -340,8 +339,7 @@ static int vhost_user_blk_connect(DeviceState *dev) if (virtio_device_started(vdev, vdev->status)) { ret =3D vhost_user_blk_start(vdev); if (ret < 0) { - error_report("vhost-user-blk: vhost start failed: %s", - strerror(-ret)); + error_setg_errno(errp, -ret, "vhost start failed"); return ret; } } @@ -380,10 +378,12 @@ static void vhost_user_blk_event(void *opaque, QEMUCh= rEvent event) DeviceState *dev =3D opaque; VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); VHostUserBlk *s =3D VHOST_USER_BLK(vdev); + Error *local_err =3D NULL; =20 switch (event) { case CHR_EVENT_OPENED: - if (vhost_user_blk_connect(dev) < 0) { + if (vhost_user_blk_connect(dev, &local_err) < 0) { + error_report_err(local_err); qemu_chr_fe_disconnect(&s->chardev); return; } @@ -427,7 +427,7 @@ static void vhost_user_blk_device_realize(DeviceState *= dev, Error **errp) int i, ret; =20 if (!s->chardev.chr) { - error_setg(errp, "vhost-user-blk: chardev is mandatory"); + error_setg(errp, "chardev is mandatory"); return; } =20 @@ -435,16 +435,16 @@ static void vhost_user_blk_device_realize(DeviceState= *dev, Error **errp) s->num_queues =3D 1; } if (!s->num_queues || s->num_queues > VIRTIO_QUEUE_MAX) { - error_setg(errp, "vhost-user-blk: invalid number of IO queues"); + error_setg(errp, "invalid number of IO queues"); return; } =20 if (!s->queue_size) { - error_setg(errp, "vhost-user-blk: queue size must be non-zero"); + error_setg(errp, "queue size must be non-zero"); return; } if (s->queue_size > VIRTQUEUE_MAX_SIZE) { - error_setg(errp, "vhost-user-blk: queue size must not exceed %d", + error_setg(errp, "queue size must not exceed %d", VIRTQUEUE_MAX_SIZE); return; } @@ -471,7 +471,7 @@ static void vhost_user_blk_device_realize(DeviceState *= dev, Error **errp) goto virtio_err; } =20 - if (vhost_user_blk_connect(dev) < 0) { + if (vhost_user_blk_connect(dev, errp) < 0) { qemu_chr_fe_disconnect(&s->chardev); goto virtio_err; } --=20 2.30.2 From nobody Sun Feb 8 15:02:51 2026 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=1619111281; cv=none; d=zohomail.com; s=zohoarc; b=CJHIgxiKHJNKQcm/4rsJ0XVPz120C+8JYfmcQhaqluJIkM2DYclk9bjPchPM9XKSSuG2ZIbhNMYTPO7o/YSJVg3XQBNAtHRUiIDgOd8WdoMRkc4JPjLvrBhIfIhvLTqNUoui/vX1itzA6p7UowPIcRvR/2dbztHGAT1pRMc8tbA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619111281; 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=azROM+Yi54G3ysoape1uBhgGCHuAZtcNYGXzA67aclA=; b=hY7M4nTMACFRizNxZCbqBOsuO9ftyDolFNJ5ILa2sBsuK3fDrNBSPEkAqo+arLUYOvB0n+i7zqtNKQrR2xc5GeNn1CO193JNKUT8J3kwh2IPCttMbKR8h7/bjgz9SkyL9Qv7sZZ4k86zcKI+MC5hn4UJONqLl/hl+R0Z0KtUZDc= 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 1619111281724864.3400814921968; Thu, 22 Apr 2021 10:08:01 -0700 (PDT) Received: from localhost ([::1]:50140 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lZco4-0007OX-Cn for importer@patchew.org; Thu, 22 Apr 2021 13:08:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35076) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lZcj8-0002Ar-Rb for qemu-devel@nongnu.org; Thu, 22 Apr 2021 13:02:54 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:36427) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lZcj4-0001T6-Uq for qemu-devel@nongnu.org; Thu, 22 Apr 2021 13:02:54 -0400 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-564-ssGZjwFfPueXCLVyLArqYA-1; Thu, 22 Apr 2021 13:02:43 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6691018397AD; Thu, 22 Apr 2021 17:02:42 +0000 (UTC) Received: from merkur.fritz.box (ovpn-112-159.ams2.redhat.com [10.36.112.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1D55C19C45; Thu, 22 Apr 2021 17:02:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1619110970; 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=azROM+Yi54G3ysoape1uBhgGCHuAZtcNYGXzA67aclA=; b=F7gfIjl5COCTnnvV01rsr9B/wGlXMXMvbewkK2NppbHFdoeA2lxm1zfi+A1NFcmxpZC4eb TBWLOpYd0Q1vYq5W4jbb1rzj3lhk3NSulLTPi8UMiN8vkg1hW9OhkITw8beJZSoJSxLEm/ ijNTPKy939ZSi6dy0debo3sFVuGV2cY= X-MC-Unique: ssGZjwFfPueXCLVyLArqYA-1 From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 3/5] vhost-user-blk: Get more feature flags from vhost device Date: Thu, 22 Apr 2021 19:02:19 +0200 Message-Id: <20210422170221.285006-4-kwolf@redhat.com> In-Reply-To: <20210422170221.285006-1-kwolf@redhat.com> References: <20210422170221.285006-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kwolf@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=170.10.133.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, 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: kwolf@redhat.com, den-plotnikov@yandex-team.ru, mst@redhat.com, qemu-devel@nongnu.org, raphael.norwitz@nutanix.com 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" VIRTIO_F_RING_PACKED and VIRTIO_F_IOMMU_PLATFORM need to be supported by the vhost device, otherwise advertising it to the guest doesn't result in a working configuration. They are currently not supported by the vhost-user-blk export in QEMU. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=3D1935020 Signed-off-by: Kevin Wolf Acked-by: Raphael Norwitz --- hw/block/vhost-user-blk.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index 8422a29470..b6f4bb3f6f 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -47,6 +47,8 @@ static const int user_feature_bits[] =3D { VIRTIO_RING_F_INDIRECT_DESC, VIRTIO_RING_F_EVENT_IDX, VIRTIO_F_NOTIFY_ON_EMPTY, + VIRTIO_F_RING_PACKED, + VIRTIO_F_IOMMU_PLATFORM, VHOST_INVALID_FEATURE_BIT }; =20 --=20 2.30.2 From nobody Sun Feb 8 15:02:51 2026 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=1619111086; cv=none; d=zohomail.com; s=zohoarc; b=BFigskWyvlNb3q9eGvL0UB5ahJH5VmVg90R9mGh6N30AM8oBd49edDGzSmLB4sNeVaVm0/1rHaYlZh8g/Ez0Y5CnMhX9tvsM2kVJ6xI7tNIYt2PxsFAZZ8HpSyVPgQyrftCvISPg5+Pkhbio6e1M5gkwcq4wc+WP5pVHx5k2q/Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619111086; 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=tBTunmYUPmhoQEETSdHOriWz4Jo2IUZZNQG1FfaSS6Y=; b=PTqb4rB8ZZ8I9Hmr9ZjkPuRLY10ilRinVwsnktpWqVQCoR4LmIDubiXXWDK2ftkKTlbx+FIiOShzxxTXxlFnrHhCspDLiaJmHXyX8pQKQegcwhhyumMssgscONWVoIJOJzJjFRYmVQ4Dasl0zoOj6UaLRgl6wteqzh2pFtElVrc= 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 1619111086205759.5674146749902; Thu, 22 Apr 2021 10:04:46 -0700 (PDT) Received: from localhost ([::1]:42790 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lZcku-00049s-JY for importer@patchew.org; Thu, 22 Apr 2021 13:04:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35032) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lZcj6-000278-9w for qemu-devel@nongnu.org; Thu, 22 Apr 2021 13:02:52 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:38440) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lZcj4-0001Sf-5l for qemu-devel@nongnu.org; Thu, 22 Apr 2021 13:02:52 -0400 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-208-oC3NqdriPsWTKSHD5ER1OQ-1; Thu, 22 Apr 2021 13:02:44 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0316F107ACC7; Thu, 22 Apr 2021 17:02:44 +0000 (UTC) Received: from merkur.fritz.box (ovpn-112-159.ams2.redhat.com [10.36.112.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id B026C19C45; Thu, 22 Apr 2021 17:02:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1619110967; 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=tBTunmYUPmhoQEETSdHOriWz4Jo2IUZZNQG1FfaSS6Y=; b=BdA1MaRv9MkkxZrs8HbloxyRzusLx2PtZzq8TOCAIWLKiLCi2l+xREcRkWiY9Vth2/15OO FrSMO34rxPd3uexLf0kcHsIFlMW9ozBR4c8W5mnyqdihXs1buX/bLy313ob3mJCMNCLcs2 slXL7vhirxuYBY3GZF/EU2sCiiT0WSU= X-MC-Unique: oC3NqdriPsWTKSHD5ER1OQ-1 From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 4/5] virtio: Fail if iommu_platform is requested, but unsupported Date: Thu, 22 Apr 2021 19:02:20 +0200 Message-Id: <20210422170221.285006-5-kwolf@redhat.com> In-Reply-To: <20210422170221.285006-1-kwolf@redhat.com> References: <20210422170221.285006-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kwolf@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=170.10.133.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, 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: kwolf@redhat.com, den-plotnikov@yandex-team.ru, mst@redhat.com, qemu-devel@nongnu.org, raphael.norwitz@nutanix.com 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" Commit 2943b53f6 (' virtio: force VIRTIO_F_IOMMU_PLATFORM') made sure that vhost can't just reject VIRTIO_F_IOMMU_PLATFORM when it was requested. However, just adding it back to the negotiated flags isn't right either because it promises support to the guest that the device actually doesn't support. One example of a vhost-user device that doesn't have support for the flag is the vhost-user-blk export of QEMU. Instead of successfully creating a device that doesn't work, just fail to plug the device when it doesn't support the feature, but it was requested. This results in much clearer error messages. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=3D1935019 Signed-off-by: Kevin Wolf Reviewed-by: Raphael Norwitz --- hw/virtio/virtio-bus.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c index d6332d45c3..859978d248 100644 --- a/hw/virtio/virtio-bus.c +++ b/hw/virtio/virtio-bus.c @@ -69,6 +69,11 @@ void virtio_bus_device_plugged(VirtIODevice *vdev, Error= **errp) return; } =20 + if (has_iommu && !virtio_host_has_feature(vdev, VIRTIO_F_IOMMU_PLATFOR= M)) { + error_setg(errp, "iommu_platform=3Dtrue is not supported by the de= vice"); + return; + } + if (klass->device_plugged !=3D NULL) { klass->device_plugged(qbus->parent, &local_err); } --=20 2.30.2 From nobody Sun Feb 8 15:02:51 2026 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=1619111363; cv=none; d=zohomail.com; s=zohoarc; b=egIKUnYk0H4kyUFed+gPqPgl3vQxC3Ae5sUv5eb7Vr0NP7zs9PmBci+Poqnaoz8DBtsbyg+fXwYvQzOyodurfhN9+piY4nrTrtw4kQWdZSUErmZjyGXI0aEU0kIicaf1u/ykqYPgfqcHZkD4aLSpJLXg/U7qBNmzw+AiH+3MZE4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619111363; 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=MAl/5TCbQnwizQB/o9I+kcj9jxgu9hsf+LwrPPSO7XY=; b=WokJTyIWhIIhy50XBGPsUh3jjN4RzrkfsDq3KGufNPRky556VOpZek9YCm9NZPYR/j1hPhqAFbQTHafyHwd+DorV9XMZonTjDlirmcOhli5E1rvvRKTBFBR5rMzlzznhg4yN156lUROT4wEhs+CNECx1jXElGVLRVR25C5yQSLI= 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 1619111363585927.651324374463; Thu, 22 Apr 2021 10:09:23 -0700 (PDT) Received: from localhost ([::1]:51782 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lZcpO-00086b-F4 for importer@patchew.org; Thu, 22 Apr 2021 13:09:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35074) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lZcj8-0002A0-FJ for qemu-devel@nongnu.org; Thu, 22 Apr 2021 13:02:54 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:20988) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lZcj5-0001UC-9V for qemu-devel@nongnu.org; Thu, 22 Apr 2021 13:02:54 -0400 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-93-pIyXhYJWP8CGRXZKQls7wQ-1; Thu, 22 Apr 2021 13:02:47 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A50F5343A4; Thu, 22 Apr 2021 17:02:45 +0000 (UTC) Received: from merkur.fritz.box (ovpn-112-159.ams2.redhat.com [10.36.112.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4F07B19C45; Thu, 22 Apr 2021 17:02:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1619110970; 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=MAl/5TCbQnwizQB/o9I+kcj9jxgu9hsf+LwrPPSO7XY=; b=Xy5fgZH+h34w/DLXYMXngIDMk4ijGTio9NCOagFtfSFu1K3Ggxn9ZP09u2ibzOnYXLdLHK UoJPYFuAklD6Pex0hrqXghm4UCDhtr/ZkR/Aqof3RdRG9RuhAy8wMFxL7YXm8ybP9EgYwr xR3MqjAmoWzocEBXjEPzairBGsawhwI= X-MC-Unique: pIyXhYJWP8CGRXZKQls7wQ-1 From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 5/5] vhost-user-blk: Check that num-queues is supported by backend Date: Thu, 22 Apr 2021 19:02:21 +0200 Message-Id: <20210422170221.285006-6-kwolf@redhat.com> In-Reply-To: <20210422170221.285006-1-kwolf@redhat.com> References: <20210422170221.285006-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kwolf@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=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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: kwolf@redhat.com, den-plotnikov@yandex-team.ru, mst@redhat.com, qemu-devel@nongnu.org, raphael.norwitz@nutanix.com 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" Creating a device with a number of queues that isn't supported by the backend is pointless, the device won't work properly and the error messages are rather confusing. Just fail to create the device if num-queues is higher than what the backend supports. Since the relationship between num-queues and the number of virtqueues depends on the specific device, this is an additional value that needs to be initialised by the device. For convenience, allow leaving it 0 if the check should be skipped. This makes sense for vhost-user-net where separate vhost devices are used for the queues and custom initialisation code is needed to perform the check. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=3D1935031 Signed-off-by: Kevin Wolf Reviewed-by: Raphael Norwitz --- include/hw/virtio/vhost.h | 2 ++ hw/block/vhost-user-blk.c | 1 + hw/virtio/vhost-user.c | 5 +++++ 3 files changed, 8 insertions(+) diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 4a8bc75415..21a9a52088 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -74,6 +74,8 @@ struct vhost_dev { int nvqs; /* the first virtqueue which would be used by this vhost dev */ int vq_index; + /* if non-zero, minimum required value for max_queues */ + int num_queues; uint64_t features; uint64_t acked_features; uint64_t backend_features; diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index b6f4bb3f6f..ac2193abef 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -324,6 +324,7 @@ static int vhost_user_blk_connect(DeviceState *dev, Err= or **errp) } s->connected =3D true; =20 + s->dev.num_queues =3D s->num_queues; s->dev.nvqs =3D s->num_queues; s->dev.vqs =3D s->vhost_vqs; s->dev.vq_index =3D 0; diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index ded0c10453..ee57abe045 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -1909,6 +1909,11 @@ static int vhost_user_backend_init(struct vhost_dev = *dev, void *opaque) return err; } } + if (dev->num_queues && dev->max_queues < dev->num_queues) { + error_report("The maximum number of queues supported by the " + "backend is %" PRIu64, dev->max_queues); + return -EINVAL; + } =20 if (virtio_has_feature(features, VIRTIO_F_IOMMU_PLATFORM) && !(virtio_has_feature(dev->protocol_features, --=20 2.30.2