From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11020101.outbound.protection.outlook.com [52.101.69.101]) by lore.virtuozzo.com (Postfix) with ESMTPS id BA6A180474 for ; Tue, 27 Oct 2026 11:43:21 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Me4QSVNt296tL2zeDQWCGn6MPjIpdXvgg44XpFTrZsrpwkww6nT5KKVP1QasCF7WmCVxnYNy/K5NngdZ9UQdYYJMmy2cfB8F8lMEefW9A32ICu0wmZUfl6vy/2TD+Sb7/pGRH7onuET63fjVikmXaKDzJD/BSh3heAZvqciDQjXd/4H/Vo6N9Nqk1J5LHDmD6ydD3n3TzkUO40OXFMsJ9Kx7udYPlAjS9xlj4KwhTJsWXtqsWJcdbCfcdOnIQHN+HNpftEMcPXcWrUTn+PWPe9tbpGm2YRAsfw74iJ11e+QS7gG3M9VAYzxzA3HPxYKYWf18QtRl+BGRGH8UgYNxLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7atS5ImAWpUaaVxGY1Eby68GgcNLq3+K0c95xUR8uXU=; b=ZG+FCVlTH8OX4VSx6/65fqM06zHT+vF+U0CfmpZdyeR2/OumFwEhO0CzShAKAZXyoymHNXy16eQZ1Ygj+DGYnMILtl+u2SrNM0tOXSBxWID5HYiRMPiDz738R7r/oHFkFslsNVlZLqvc6Hc1Lg3UdJxpeY4PHTOKRVlaHuw2Omg3YtpdSLN7ntTaMSajgpo9JcsXJlUbM4VHXksVFDN30JnoBt+oDUvS3w0olJOavbAQwwfS7Olyh68fSyLfq7PqIHGc3Ku7irCBpYF6V3reNHq4B0CoKh9rvwrAKLpXY1f8/XhQ9uOjrE6EL5HaeTfbYKwIlBy1Gm31ZhpuMxn48A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 69.169.224.2) smtp.rcpttodomain=virtuozzo.com smtp.mailfrom=eu-central-1.amazonses.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=sashiko.virtuozzo.com; dkim=pass (signature was verified) header.d=sashiko.virtuozzo.com; dkim=pass (signature was verified) header.d=amazonses.com; arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.onmicrosoft.com; s=selector2-virtuozzo-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7atS5ImAWpUaaVxGY1Eby68GgcNLq3+K0c95xUR8uXU=; b=U6ZVAsWKSFKCQ4sPOcps8Vs2sORq6YHbtTqBA54zXplQLIQuL58ruW2a1Fr8VnxYintG4azXmLkzEWy0kpet3tyCbQoiNH+I7NSeh2zQJuTf5YEGf4o3+hMHa3+2jcb75RgFIpq94bMzC0OI2XKStoGcMaAX4rqbXBixWNtJgT0= Received: from DU2PR04CA0184.eurprd04.prod.outlook.com (2603:10a6:10:28d::9) by DB9PR08MB8266.eurprd08.prod.outlook.com (2603:10a6:10:3c6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.22; Tue, 27 Oct 2026 11:43:18 +0000 Received: from DB1PEPF000509EF.eurprd03.prod.outlook.com (2603:10a6:10:28d:cafe::ab) by DU2PR04CA0184.outlook.office365.com (2603:10a6:10:28d::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.546.22 via Frontend Transport; Tue, 27 Oct 2026 11:43:18 +0000 Authentication-Results: mx.microsoft.com 1; spf=pass (sender IP is 69.169.224.2) smtp.mailfrom=eu-central-1.amazonses.com; dkim=pass (signature was verified) header.d=sashiko.virtuozzo.com;dkim=pass (signature was verified) header.d=amazonses.com;dmarc=pass action=none header.from=sashiko.virtuozzo.com; Received-SPF: Pass (protection.outlook.com: domain of eu-central-1.amazonses.com designates 69.169.224.2 as permitted sender) receiver=protection.outlook.com; client-ip=69.169.224.2; helo=b224-2.smtp-out.eu-central-1.amazonses.com; pr=C Received: from b224-2.smtp-out.eu-central-1.amazonses.com (69.169.224.2) by DB1PEPF000509EF.mail.protection.outlook.com (10.167.242.73) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.569.4 via Frontend Transport; Tue, 27 Oct 2026 11:43:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=23yjbh4k34hwzfubhuiim7m4inbd3ick; d=sashiko.virtuozzo.com; t=1793101397; h=Message-ID:From:Subject:To:Cc:In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=B53gBDIWCFTJkLl0n7lk3ttvG86D0ahwV/mBKsvcA38=; b=PPIF9GenyZDqGve9Qu+9BC9FJxgnF6dhucqC9imRH55nSsz8ey24MGbzfNN0TsmC zGn8sPrMuzuK8CqD+ciBV2QthXyYSP9NJu79xAWRRIEo2Xed4PEwRiZDpmiPB38RIP+ pPrcoXK2sppuF/8y4pbcKWXJSYEErlAzEht7EVX9uVUtqy/fj9PpHlOyvhjr4/Q+b2k fj4l90bkagvPSXctz6FZueik/qN+ZoOh8CNrNU7Nvw5HVZ8mGfp+quo/43R/pLFPKfa X+ydzRWS/rKFJb6Tso+kbtpbDWQMnmWi5cmGncTqh+h4Ey5nkA1+n+gsGPEagCNpgRx Werk1NHsZg== DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=qftdzk2dqsatjnlrq4r5brjbihpfcrsh; d=amazonses.com; t=1793101397; h=Message-ID:From:Subject:To:Cc:In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date:Feedback-ID; bh=B53gBDIWCFTJkLl0n7lk3ttvG86D0ahwV/mBKsvcA38=; b=m3OidNV7KbctRw12c7+VbkGEhtrPMMYChjkBQFm5nDbkpoDXC8M6SoukDmBxgkVn Ep4MoLKA1x5iti+PqSrsKDeZc7DDeHPA7y1sCTsjC6WEMLG6Qe84rti8aT5hl3U5m92 mTA5FinOvzH9izF8swvFva4PCiNU3CuDhWvkmXbI= Message-ID: <010701a17d2bfd69-07c611d4-bf3a-47f3-9970-bc829fc0ef42-000000@eu-central-1.amazonses.com> From: no-reply@sashiko.virtuozzo.com Subject: Re: [PATCH hci-8.1 1/2] vhost-blk: create kernel threads with the mainstream worker ioctls To: andrey.zhadchenko@virtuozzo.com, Alexander Ivanov Cc: andrey.drobyshev@virtuozzo.com, svt-core@virtuozzo.com In-Reply-To: <20261027113857.2928048-2-alexander.ivanov@virtuozzo.com> References: <20261027113857.2928048-1-alexander.ivanov@virtuozzo.com> <20261027113857.2928048-2-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Tue, 27 Oct 2026 11:43:17 +0000 Feedback-ID: ::1.eu-central-1.2wRQJBpg9g1fGRYexx3dUuYGS25Bux+2TEOx72/m6U4=:AmazonSES X-SES-Outgoing: 2026.10.27-69.169.224.2 X-EOPAttributedMessage: 0 X-EOPTenantAttributedMessage: 0bc7f26d-0264-416e-a6fc-8352af79c58f:0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB1PEPF000509EF:EE_|DB9PR08MB8266:EE_ MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 66ac6327-71b5-4423-28a4-08df341f7e69 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-AtpMessageProperties: SA List-Id: svt-core@virtuozzo.com X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|704161411799003|376014|9140799003|32142699015|61400799027|48200799018|18092099006|22082099003|6133799003|16102099003|4113699003|18002099003|5113699003|55112099003|261026140227099003|10067099003|13003099007|5063699009|56012099006|4143699003|261021121427099003|261009223027099003|261009221227099003|261022075727099003|261022105027099003|261026121527099003; X-Microsoft-Antispam-Message-Info: +m5tIa1ERHhds3kugKo+QYb/z2dt/gp9qpgzKVmsJ9vXoH75t9V7I8h6llfP5CgJJqMd6qEvIHR51uAuTAqkydb0plV3ZeWfIr2K6VZ0czDqR4R8Gu8c+VFWo/18Stkp/o7j6N/XftYi0HbnYePcjFPm/NPVvOevDqrVtkOsP67ooy4SVqUl78GtbtQ+CxUTLYGHWsUG6IjmgxuubF8I73DSPhD5e54WwDDKPUAPVjPEOo4UHG7B8aHeLBesDIraH/448eeFGg7kaiQTFULjPXN8tCns3cQqoqhUyh3vUkjQ+8BMNWCBrDjbI1KxyXm4hoh+t4S4tmJEVKj/1SohA7g3N3AdjNKZb0BfdNgxeQO+TLh9PKFmLUGcY/h8oRnqXl5JJWLohISpvfw9oIfphiLMy9DoiJIC4KkjeWoc0tuFMK9PrceX81TrBnpvLZ6gl4K9js/CN9CVt48jph+EG6HZzOz5jx+7B1N/KHhEy4jeija4wO/G/nKEXWQgFMLEqeBjy9+9uPLac09lwChqiznPqJoevO6Xh2mtte6Ij1f8efraWBu+4MwfTOvshI5WfBwcMn1VEZXl/NGvjB3RWu59brBlHZx6yW691xg5PJ2kfxQAnssDv88uctYIqpJF0ap17MlYD5Y1kei0uOiMn7S1AbwACNNxSOR+LMF+4sq7F6jWrP9rMGtSHQGE+idEIEWnHCSYSZTKCYJzeXMiowXY1aI2KMSK3AzWReq6ou6eXvXrf2pXnNJS1Zv3oFJtv9eYOSX5hdvHhIh9zPh0GR19R+QZT8Dnhm1n6yFPPvxfGiGtjHsNfbE0Al98oGt59ISfkVMMVGkS5pe2Q81983wM6I5cqtyKx5lDwx4SBaJtSEX8+kwleKxpWrUaU35t2dDSv66bvUzieDjG1hhCA3EUHVpAC3c/EvsZNkHEa1w= X-Forefront-Antispam-Report: CIP:69.169.224.2;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:b224-2.smtp-out.eu-central-1.amazonses.com;PTR:b224-2.smtp-out.eu-central-1.amazonses.com;CAT:NONE;SFS:(13230040)(704161411799003)(376014)(9140799003)(32142699015)(61400799027)(48200799018)(18092099006)(22082099003)(6133799003)(16102099003)(4113699003)(18002099003)(5113699003)(55112099003)(261026140227099003)(10067099003)(13003099007)(5063699009)(56012099006)(4143699003)(261021121427099003)(261009223027099003)(261009221227099003)(261022075727099003)(261022105027099003)(261026121527099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lX+eiOns06OFDcUEpWRrtR5Y38DDVykNow+2q7ZQQ2vVAfXQe1tVeLiOHSSkVyhvIbGQU7JVeBG4wppikPB1UkKN9suXnsyiPwgng276sgvFjwkRMo4HT6UiZq2AW9zbBi5oeDGAERC4fRyvQ3m/K1jh37ePx1O7IqJ1YGbGf8J2UNgXbV2D9b8FBEkzhSi62q9fqM8yS7VBu/ZEs+97+eA9BDa8bGC3iK/RnQwbmofbFnEx/e7Ln1eq9wyK4GCA4vluE16q2IMV/0PvDn8vBKe+z3YSwenvOAsCb0F9mvtaTlRXf13vlCHQLpvYudzXyjuoN9Dzc/zR2lILpDXGM6TEfWpJst7LiHCU5HjWLi+V561NudIYLEFPL0zwjgOs6VX+/f4gX4LiROTSHqzhd2xcMp5OqNeT2m9yCF039ytdfeR+EEyoP21Bh0lTN4Q8 X-ExternalRecipientOutboundConnectors: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2026 11:43:17.8248 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 66ac6327-71b5-4423-28a4-08df341f7e69 X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF000509EF.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8266 Thank you for your contribution! Sashiko AI review found 3 potential issue(= s) to consider: - [High] vhost-blk: ids[] stack overflow in vhost_blk_set_workers() for num= -queues above 32 - [Medium] vhost-blk: ENOTTY from VHOST_SET_FORK_FROM_OWNER wrongly forces = a single thread - [Low] vhost-blk: num-threads 0 and values above nvqs silently clamped in = vhost_blk_start() -- commit 5f90746d5e0757eb9fa0a34f3f44664e746de67b Author: Alexander Ivanov vhost-blk: create kernel threads with the mainstream worker ioctls This commit replaces the VHOST_SET_NWORKERS ioctl with VHOST_NEW_WORKER and VHOST_ATTACH_VRING_WORKER. It spreads the virtqueues round-robin over num-threads workers. It also switches the device to vhost_task mode with VHOST_SET_FORK_FROM_OWNER before VHOST_SET_OWNER. Link: https://virtuozzo.atlassian.net/browse/VSTOR-107537 > diff --git a/hw/block/vhost-blk.c b/hw/block/vhost-blk.c > index abddff02c6d92..99fec9533a9cc 100644 > --- a/hw/block/vhost-blk.c > +++ b/hw/block/vhost-blk.c [ ... ] > +static int vhost_blk_set_workers(VHostBlk *s, int nworkers) > +{ > + uint32_t ids[VHOST_BLK_MAX_QUEUES]; > + struct vhost_worker_state worker; > + struct vhost_vring_worker vq_worker; > + int ret, i; > + > + for (i =3D 1; i < nworkers; i++) { > + memset(&worker, 0, sizeof(worker)); > + if (ioctl(s->vhostfd, VHOST_NEW_WORKER, &worker)) { > + ret =3D -errno; > + if (ret =3D=3D -ENOTTY && i =3D=3D 1) { > + warn_report_once("vhost-blk: kernel does not support wor= ker " > + "ioctls, using a single kernel thread"); > + return 0; > + } > + error_report("vhost-blk: unable to create kernel thread: %s", > + strerror(-ret)); > + return ret; > + } > + ids[i] =3D worker.worker_id; [Severity: High] Can this overflow ids[]? ids[] has VHOST_BLK_MAX_QUEUES (32) entries, but nworkers is bounded only by nvqs. In vhost_blk_start(): nworkers =3D MIN(s->conf.num_threads, s->dev.nvqs); vhost_blk_device_realize() and vhost_blk_pci_realize() clamp num-queues to VHOST_BLK_MAX_QUEUES only when it equals VHOST_BLK_AUTO_NUM_QUEUES: if (conf->num_queues =3D=3D VHOST_BLK_AUTO_NUM_QUEUES) { conf->num_queues =3D MIN(virtio_pci_optimal_num_queues(0), VHOST_BLK_MAX_QUEUES); } An explicit value such as num-queues=3D64 is accepted and becomes s->dev.nvqs. With num-threads=3D64, nworkers is 64. The loop above then writes ids[i] past the end of the stack array for i >=3D 32. > + } > + > + for (i =3D 0; i < s->dev.nvqs; i++) { > + if (i % nworkers =3D=3D 0) { > + continue; > + } > + memset(&vq_worker, 0, sizeof(vq_worker)); > + vq_worker.index =3D i; > + vq_worker.worker_id =3D ids[i % nworkers]; The same configuration also reads ids[i % nworkers] out of bounds when i % nworkers >=3D 32. Should realize reject num-queues above VHOST_BLK_MAX_QUEUES, or should ids[] be sized from nworkers or nvqs? [ ... ] > static int vhost_blk_start(VirtIODevice *vdev) > { [ ... ] > + nworkers =3D MIN(s->conf.num_threads, s->dev.nvqs); > + if (nworkers > 1) { [Severity: Low] Is it intended that num-threads=3D0 and values above nvqs are silently clamped here? vhost_blk_device_realize() validates num-queues but has no equivalent check for num-threads, and the property is an unconstrained uint16: DEFINE_PROP_UINT16("num-threads", VHostBlk, conf.num_threads, 1), With num-threads=3D0, nworkers becomes 0, the nworkers > 1 test is false, and no worker ioctls are issued. Before this patch the old condition was nworkers !=3D 1, so a value of 0 reached VHOST_SET_NWORKERS. Would a realize-time check that rejects 0, or warns when num-threads exceeds num-queues, make the behaviour explicit? The commit message only says that num-threads=3D1 is unchanged. > + /* > + * VHOST_NEW_WORKER works only in vhost_task mode, and > + * VHOST_RESET_OWNER brings the kthread default back. > + */ > + uint8_t fork_owner =3D VHOST_FORK_OWNER_TASK; > + > + if (ioctl(s->vhostfd, VHOST_SET_FORK_FROM_OWNER, &fork_owner)) { > + ret =3D -errno; > + if (ret !=3D -ENOTTY) { > + error_report("vhost-blk: unable to set vhost task mode: = %s", > + strerror(-ret)); > + return ret; > + } > + warn_report_once("vhost-blk: kernel does not support vhost " > + "tasks, using a single kernel thread"); > + nworkers =3D 1; [Severity: Medium] Does this -ENOTTY fallback drop a working multi-thread configuration? linux-headers/linux/vhost.h documents VHOST_SET_FORK_FROM_OWNER as "Only available when CONFIG_VHOST_ENABLE_FORK_OWNER_CONTROL=3Dy". It also documents VHOST_FORK_OWNER_TASK as the "(default value)". A kernel built without that option returns -ENOTTY here. According to the header, such a kernel runs in task mode, which VHOST_NEW_WORKER and VHOST_ATTACH_VRING_WORKER need. In that case nworkers =3D 1 discards a usable setup. The commit message says "the kernel defaults to kthreads", which contradicts the header. I could not check the kernel source for the target kernel, so which one is correct is unverified. vhost_blk_set_workers() already handles -ENOTTY from VHOST_NEW_WORKER when i =3D=3D 1, with its own warning and single-thread fallback. Is the earlier -ENOTTY fallback needed, given that? > + } > + } > + [ ... ] --=20 Sashiko AI review =C2=B7 https://sashiko.vzint.dev/#/patchset/2026102711385= 7.2928048-1-alexander.ivanov@virtuozzo.com?part=3D1