From patchwork Mon Nov 27 00:28:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 1868594 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=VpRLXkFE; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=mCLDZckw; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Sdmgh6TWgz1yRy for ; Mon, 27 Nov 2023 11:29:52 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r7PUp-00077x-3Q; Sun, 26 Nov 2023 19:29:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r7PUl-000777-Nn for qemu-devel@nongnu.org; Sun, 26 Nov 2023 19:29:03 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r7PUj-0001Ha-W1 for qemu-devel@nongnu.org; Sun, 26 Nov 2023 19:29:03 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AQNnuvU025412; Mon, 27 Nov 2023 00:28:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=g7jhaoxx5+XFdL07NL9vjufvwtMVG3ZjGk+HdbxAgng=; b=VpRLXkFEFJOUAZ4pLd/3v6UBq9iZfuA9Xi/t4ofwWO3MOudo3hANcSpTC0j9UAhCXIVl XOW4Qm4kNoXI3YUBKwvUVYWVnCPnC+fQxWgVT83+Hi3o4VIDxCEMvYoQmEiat+Lj7/3z VCvaLF8Sktvb3LwPVqfjDp6kn9vTOglo6ZTRb/tPyZe6qtYnfyL69Fd9JYRXGD8yHf8o aGipJYrLq3KQ2KuIdQgtGMVZPzH2lJ0W6jpseqJ76tVdvROHiF6P7WBdSHG31rU1KoOw kLjOPQT63aUFlGQoPFCQUWlPQ8UWJK4YDjJGj+Yxy/OeF1vVhs3dEuUaO+z7W/VmNjeh 2A== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3uk7q41sm5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Nov 2023 00:28:56 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 3AQKSNrU012597; Mon, 27 Nov 2023 00:28:55 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2100.outbound.protection.outlook.com [104.47.58.100]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3uk7c4vpn1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Nov 2023 00:28:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=byocDRSLbkTZyDi89zQlewbvrCbhl+yPoswAxhaT3aGv8bzsrQoT3u9BHLMzRjE+FD+LIxjEY5COVMTTKBW2QWoIw9eYWOHrTA9mx3RmYAnGVK6/TpXvjw5ZNtoJ16vuhUhjzlfJlOM4P6pFABBMAUgCSVqMhaSAggugVkPpO7doksJX6LcWLnGuW1WSLTWwE1f+qKAKhAfe2KPcuoUMklKN63Tx1d5U6al/AaoBxDq2H2+X7+V7sYDtFYJMykjA8ukpoR57deFC0YEL1Gj93+wJ8+MsRWvyRJREoOvG4Lc17u7qMJyEnySV29kN7ghk7M1HkOVXezfZxQWiCNO4Dg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=g7jhaoxx5+XFdL07NL9vjufvwtMVG3ZjGk+HdbxAgng=; b=UGdbVt2KjjrOUtQrbLQgk5uoPNiGbbr1qRJRJc4ETnBAqbxTgIC9Dt4s+4d12xTtCPlzYccR4UA0o6I4zQg9sqv3yaqffvX8emhK3vVHBlXHr3Fj9FAfqF3NdrHJ7UFI3L4oHjLr5etp+c2Ag9ABJSoPIGyUirdPYRGCb1FdMqCgVF2T4NZgzWBYGjTR0UtG1DcLpXChNqQZC5L7HJAIC/sVhchq494oymAtkiXfAxwJVb2l20suku6porq4M1rOC6BUZZnE2nzY6xhrD2NgjDnFNRN2arvGhrQc8c8/HLaiBz4wB6Epc9W7gGNU2a/yGs6WjHFL33cUPYoW/0khNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g7jhaoxx5+XFdL07NL9vjufvwtMVG3ZjGk+HdbxAgng=; b=mCLDZckw7G1dcEODhdVHEO6wmFf8Hkv7t1bN3CDWhfRUYn47Ete3FQim7Z2vvzKXVSuGc/XNVdiWOB8NxXJxGBea6xFfX/kJ+TIMFvCayK5zlGyBOVQHNH4GF1GA92Qjw7WSlhc7i1Yzl15uAlykrF8RO41mPLNpJNEdxm1BFUU= Received: from CY8PR10MB7243.namprd10.prod.outlook.com (2603:10b6:930:7c::10) by DM4PR10MB6863.namprd10.prod.outlook.com (2603:10b6:8:104::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7025.27; Mon, 27 Nov 2023 00:28:48 +0000 Received: from CY8PR10MB7243.namprd10.prod.outlook.com ([fe80::449f:4fd9:2d3e]) by CY8PR10MB7243.namprd10.prod.outlook.com ([fe80::449f:4fd9:2d3e%4]) with mapi id 15.20.7025.022; Mon, 27 Nov 2023 00:28:48 +0000 From: Mike Christie To: fam@euphon.net, stefanha@redhat.com, jasowang@redhat.com, mst@redhat.com, sgarzare@redhat.com, pbonzini@redhat.com, qemu-devel@nongnu.org Cc: Mike Christie Subject: [PATCH v2 1/2] vhost: Add worker backend callouts Date: Sun, 26 Nov 2023 18:28:33 -0600 Message-Id: <20231127002834.8670-2-michael.christie@oracle.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231127002834.8670-1-michael.christie@oracle.com> References: <20231127002834.8670-1-michael.christie@oracle.com> X-ClientProxiedBy: DS7PR03CA0252.namprd03.prod.outlook.com (2603:10b6:5:3b3::17) To CY8PR10MB7243.namprd10.prod.outlook.com (2603:10b6:930:7c::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY8PR10MB7243:EE_|DM4PR10MB6863:EE_ X-MS-Office365-Filtering-Correlation-Id: 609ebffd-4c9c-4b97-19d8-08dbeedfd2e7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9sS0qTErcWjiBPel3G8+GehYUjVPM4FwMAqgzkMpbDO1IwOywhFABz75WnruE0boBmBkzy3AmHibfmJIG6IH2ePg8mrDWFHnNFYju9xAxhYnH+k7OsYwiV6JcLKelhcDeRan+hEi0/JU1zneYXwTpou/2sWzatsTRj1QVOqWo4pbWruUwxdQySTXYGhcL/6NJoV/QdoBJVYLYFC3372nXpEiIiDyv+55DWnWSUaKsksSRna7vjVgKzBJJAJNNm2v9/7hzlG+r5zc/FOtmkG+zAMkEHy4mLSaec/g8eIbGol0KxgoyMTkHE+mmGiE/+wDHFIGn/OQpDapptvK/BWxO3bT9GYHoaR+unXnE6V7+SoRZo3uq9KG8kRWEpdsjaL0n4qE7OYcNG2rvBgDmi/kw/juyuIJggWijQ2waervjB8NqF3THE+zobEVX7/9Q2iJcbb8GH92OePPxlSwcElma7GXXw+QLxSnmwmuHn0Cc08ZTNCjBYqUKQuRAuOrTN0r3uk7/fxcGnDxIzV9ByumSNrM+TZqKITDGcO9epsEGy6qyhkWaBTpZLz6qnbr6XKp X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY8PR10MB7243.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(346002)(396003)(136003)(39860400002)(366004)(376002)(230922051799003)(186009)(451199024)(1800799012)(64100799003)(4326008)(5660300002)(41300700001)(1076003)(26005)(8936002)(8676002)(2906002)(478600001)(6666004)(6506007)(6512007)(107886003)(2616005)(38100700002)(316002)(66946007)(66556008)(66476007)(6486002)(86362001)(36756003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: MIXP4egln7AkEvdBgFUiQcvpbpCPvhJG/UFvCjvZNbQ+Qarl6o94dTvNRNxaHrRfNtwew3VRP77FSONZHY2kr97wUJwzn2NWzn0GyoornTdQM7wHeXmPkNRIxfpeeUPoP5ixtHV9iR0l6Y1ne/MRVw7owpCMBPbABPocAKhrNM7OTKXj3AGtmffDNEP6A0DveZJ7p872QfF516NriwxWnAm/wBZOkFx0mb8Je/xK/SF3AuvSAdwF2LvBUbaFZ0ZNEDP0sI867E6YuFRlEn4TL/NfiGgUkCTJ/HgLQ+m4qhdTDjMtHKeYYYgAwuTHtjagQEGJZ6r/9zKnHRYx+PiGtEt7suWe0qJdR18sFbc58SC4OXeH5nNSmBEnOLxmB2WN+KPmCpYoAAucXK9dBtEHmS2qtp+ahofIB5+bHZqnCbTraZtIZL4VMXykEqPgPyoxtRGxzmkWf8RLh5D54jm3TA20QZkf/Oit/Kvy3r9SCp8yiJX7RZa26JkcqVKTr9qsDF1ieKw+Khs5jnhUTiKcCUcUW2br8K8a5Ozv7hNCjWfEuUmFRLnW+SAtkxmGqpv77Rt0WLv194Iz8rbYhbWnSn1QjZQstOf6u6pvUT0N6ABEPk2poHAsCzJHZ4m1RrxEGq+by3B2Dase9ddo8MDwATZXokz46c6+/nQgQG6q2t5J49apUEi3xf3gaIIQ5VByELcIViFCOb9uGE3HKf2DZ0DPem92X9OohUSmu+U0rdT1ZpPZPk/np7+X6aPWTxgruEsBYyk77dJzhGTL+58A3FXl59pHdx0is/GbKB8sPU7MOxU5Gg+hPuwb8rBwn4IZoRQTTJDj4QrD0ErWnq6XwKGU+UL8RloLPudUrsgb3VUVfd7/zurIPQ8rnJjfD0xmVmKZ1/+p4IlN+uFNVBMxuTW1N0Q25iKEg6afCwQMHxqEoUfCtxiUgRhatA0kCDzjMeZos8gYvRl4lOxtOBK0hqyC7UmRo4OtvmRM3qPbqak+wR6LHmnd2NcmNQ/0O/hcdFO+EqJU8zEgi+L82pZ8NVlZ+7ehL9f+tw34tG6mAAICInCNKz6SUrM7LjuCfNqf3rJW1S1Wo/f6ijpJCkkDx3/w9Z+arXWN8oK6QqoHT2e0Rt/ylhhASJEOlwt7Zpeo3ghf+qp19XmWHiJ6ork7c12ulRYcjf9SisKCu62V7ioUDnXccajnR54DnytPWpqbpHK/7sUyvgYuxjxQNJ9faJ9lkU3M7kC0upr38GHyWMQG/cylfyDwEnSpeRP7ZuYpB5EzstvRlmQFWA9euMjFDYY58c7iw+bACgGeKdQAmgP/qj68XC8I1cZR93KV5x8+UjCzf+JSsFytu7qd3C2oq74cUjgovPHsy1Z2jGp3S/1D43tenJnfr+RqfQorFriXGKr3CHzlcE/z4LguBqK3JYt5tettdJPf1AgrOxPThYR6yAd0S5S12BA4v0+alF0Fim7M/DQ1GUKoC0Uyyb9zRR0bT/LJbeaWSxqmLiUNL8pCuPCTx/wvbU44w8KpwaEqJcVFGtmOynFMNrUDNOpUWZhtw2mV1nKq/1I/kdw6Wib7qD/VVEMDtJ4KNBSEx85GJzIpFm3GRRZnho2/nvJYRQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 3JSXjuWNbyEjDqMy28T4F/XmKy4ooTh4cfnGlqYaVHrwEhFCN57K9DqDSSm17gBUwduaCW2gdRD6ixXzdva10fKxqi4o0zpqfIpTgPbH/sIrCRmsHEJYPaUThMyQnaKn4zQyJN9HvjajOWst/aqKU1Lc/zNoA3yo70979Wq9f9YHvLDtmpAllzV3bHX8wsaze64hOc2sCWSU0M+n36FWYCflVA3ybULOZBn1hIrp64jF5OOJcqqrrDCP0t8ZJhn7Gf8FI8lCu9ko8XQY73SlXqXaKNJuntJCYwaPlkSN2SRYw+Aj3YG769ixcJITmLB4xHizNzrA5D1RMGdnvFieseBdCbcE7BRdbjrSOlbetoSpP2eV5XQCls+CJjWUTitnRciJcZv0BxbDxKuImgPw8hVUUbd7DmgYpj5h/QvuTcMqq6xTgxoTxrs1GBNqhhL+5Sz79SBzxoE01Ud1QdN095vmt+Qg6Dmj6/gEvVI1V7kpm0De7JdMCGjhTskW6DfMaEPMMCLQSZnn6PKV4LaJ/7/LNfarGkmKU+ZzTq21NqeSb74ziMaklrVHFZlG44dJeKNdVwVMehRLgSgPiZgU70nKZSn/vEU/Nk1Z/yQJNa7pReYNfykn4qP6/obm679tBUFRvkF/9924uqIHE4rWaeixoGehmnn3Xx5xwZRA6G2Typqp2z2y+/vO8TlQDL41r7c7Uo8aXRadrDjgDbFieN0f/M3LmPjbr9vKY/zM0qhROL1dEe/kRzML0I4dQRvclB3E3abJvAfRXW76mQTlcfyYs6oZ6eJY0rFuRd/oxtk92Yles0mYI22tOYk3bWz3 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 609ebffd-4c9c-4b97-19d8-08dbeedfd2e7 X-MS-Exchange-CrossTenant-AuthSource: CY8PR10MB7243.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2023 00:28:48.7594 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Pw5/6aHQVKQvL3DyjfokCH+WDJ3p5CRkOISPmVz04Ah7JCN019QCNDkrLZIdKERQNbfTdI2VKoL81DhX4QkeSsVhaGwsrV3IbowbJwUsxG0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR10MB6863 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-26_25,2023-11-22_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 bulkscore=0 suspectscore=0 mlxscore=0 spamscore=0 adultscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311270002 X-Proofpoint-ORIG-GUID: ClQBdNoVK4oR12xfZw-9_8o5fjujhleQ X-Proofpoint-GUID: ClQBdNoVK4oR12xfZw-9_8o5fjujhleQ Received-SPF: pass client-ip=205.220.177.32; envelope-from=michael.christie@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, 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_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This adds the vhost backend callouts for the worker ioctls added in the 6.4 linux kernel commit: c1ecd8e95007 ("vhost: allow userspace to create workers") Signed-off-by: Mike Christie Reviewed-by: Stefano Garzarella --- hw/virtio/vhost-backend.c | 28 ++++++++++++++++++++++++++++ include/hw/virtio/vhost-backend.h | 14 ++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/hw/virtio/vhost-backend.c b/hw/virtio/vhost-backend.c index 17f3fc6a0823..833804dd40f2 100644 --- a/hw/virtio/vhost-backend.c +++ b/hw/virtio/vhost-backend.c @@ -158,6 +158,30 @@ static int vhost_kernel_set_vring_busyloop_timeout(struct vhost_dev *dev, return vhost_kernel_call(dev, VHOST_SET_VRING_BUSYLOOP_TIMEOUT, s); } +static int vhost_kernel_new_worker(struct vhost_dev *dev, + struct vhost_worker_state *worker) +{ + return vhost_kernel_call(dev, VHOST_NEW_WORKER, worker); +} + +static int vhost_kernel_free_worker(struct vhost_dev *dev, + struct vhost_worker_state *worker) +{ + return vhost_kernel_call(dev, VHOST_FREE_WORKER, worker); +} + +static int vhost_kernel_attach_vring_worker(struct vhost_dev *dev, + struct vhost_vring_worker *worker) +{ + return vhost_kernel_call(dev, VHOST_ATTACH_VRING_WORKER, worker); +} + +static int vhost_kernel_get_vring_worker(struct vhost_dev *dev, + struct vhost_vring_worker *worker) +{ + return vhost_kernel_call(dev, VHOST_GET_VRING_WORKER, worker); +} + static int vhost_kernel_set_features(struct vhost_dev *dev, uint64_t features) { @@ -313,6 +337,10 @@ const VhostOps kernel_ops = { .vhost_set_vring_err = vhost_kernel_set_vring_err, .vhost_set_vring_busyloop_timeout = vhost_kernel_set_vring_busyloop_timeout, + .vhost_get_vring_worker = vhost_kernel_get_vring_worker, + .vhost_attach_vring_worker = vhost_kernel_attach_vring_worker, + .vhost_new_worker = vhost_kernel_new_worker, + .vhost_free_worker = vhost_kernel_free_worker, .vhost_set_features = vhost_kernel_set_features, .vhost_get_features = vhost_kernel_get_features, .vhost_set_backend_cap = vhost_kernel_set_backend_cap, diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-backend.h index 96ccc18cd33b..9f16d0884e8f 100644 --- a/include/hw/virtio/vhost-backend.h +++ b/include/hw/virtio/vhost-backend.h @@ -33,6 +33,8 @@ struct vhost_memory; struct vhost_vring_file; struct vhost_vring_state; struct vhost_vring_addr; +struct vhost_vring_worker; +struct vhost_worker_state; struct vhost_scsi_target; struct vhost_iotlb_msg; struct vhost_virtqueue; @@ -73,6 +75,14 @@ typedef int (*vhost_set_vring_err_op)(struct vhost_dev *dev, struct vhost_vring_file *file); typedef int (*vhost_set_vring_busyloop_timeout_op)(struct vhost_dev *dev, struct vhost_vring_state *r); +typedef int (*vhost_attach_vring_worker_op)(struct vhost_dev *dev, + struct vhost_vring_worker *worker); +typedef int (*vhost_get_vring_worker_op)(struct vhost_dev *dev, + struct vhost_vring_worker *worker); +typedef int (*vhost_new_worker_op)(struct vhost_dev *dev, + struct vhost_worker_state *worker); +typedef int (*vhost_free_worker_op)(struct vhost_dev *dev, + struct vhost_worker_state *worker); typedef int (*vhost_set_features_op)(struct vhost_dev *dev, uint64_t features); typedef int (*vhost_get_features_op)(struct vhost_dev *dev, @@ -151,6 +161,10 @@ typedef struct VhostOps { vhost_set_vring_call_op vhost_set_vring_call; vhost_set_vring_err_op vhost_set_vring_err; vhost_set_vring_busyloop_timeout_op vhost_set_vring_busyloop_timeout; + vhost_new_worker_op vhost_new_worker; + vhost_free_worker_op vhost_free_worker; + vhost_get_vring_worker_op vhost_get_vring_worker; + vhost_attach_vring_worker_op vhost_attach_vring_worker; vhost_set_features_op vhost_set_features; vhost_get_features_op vhost_get_features; vhost_set_backend_cap_op vhost_set_backend_cap; From patchwork Mon Nov 27 00:28:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 1868593 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=TYNyr92j; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=zNZz6aro; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SdmgS6N9bz1yRy for ; Mon, 27 Nov 2023 11:29:40 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r7PUm-00077H-0x; Sun, 26 Nov 2023 19:29:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r7PUk-00076Y-Js for qemu-devel@nongnu.org; Sun, 26 Nov 2023 19:29:02 -0500 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r7PUi-0001HS-P2 for qemu-devel@nongnu.org; Sun, 26 Nov 2023 19:29:02 -0500 Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AQN0RtW022013; Mon, 27 Nov 2023 00:28:57 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=Jgk8p9v6vkAXpcLfp+zGWwoj2p/KKJ7B9XKDSSlYvSE=; b=TYNyr92jasyDly/yYxP7HE2Rje4fKB0wCWRGVHBaQXSkEkWV4peZ2s2vhSH0SV7Gq62+ IZzAaK09qxzd8fyO/OooBs+yONkCx1ZCLVjqIMwCnoXjBg098Um5qQG+oXOvNch9ST3y KpGOgCrYsSe77pIzqnJ0XV1eYIsHuCHa83tbbvBGOKvHvi/n5pN2j8j7zn4nt8JsDFSH VCiF9JpXVluj6XehQjNW2W8Vk8qE7aZe7+SLLjZu/jfBzom6J2guG5dYBEoYFwa0LP3q FztfEXJ4d6YfEMZoRmMKp+mKcWzH/7E0gZutZ0EBd8QH2jGs+tLkkW6Az84jTahoKo+S bg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3uk7uchtbm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Nov 2023 00:28:56 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 3AQKSNrV012597; Mon, 27 Nov 2023 00:28:56 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2100.outbound.protection.outlook.com [104.47.58.100]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3uk7c4vpn1-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Nov 2023 00:28:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VU5EHTkJmsX5gpArFxEUmSJ6scxWdNq9dpAeTidGUcTHBTIr4Kvu48zLtdsfc1tj8xmBRI7wygoZ3L7BqT521+z1u39kCnaRYP3NGdQc+Dmmpmj6ClLzATvuV5shH9LmJQ8eOF0qdWxR0Xs23nhqKzjNhzZaAf+E2mfOAkunIMEaqtGoRWkvYnAhVW3jWvV/H/N6DZLX6sUeMenGn7J13o0E+kvyjlHDvt25R+fsVIxMU1a4N4+7FbV3YSJpsj8mQLiC81N/HaC77wf8bX6DcSZ7fhW9yHgJ9OQy4lMvTn//8wtDZ7+s/R7YtheP6rAnSFTQ93oP3qQpjhh7Tco/gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=Jgk8p9v6vkAXpcLfp+zGWwoj2p/KKJ7B9XKDSSlYvSE=; b=Ibv9Xr2LAY4JwNlwI6DVNjFG7X15sbVO53tibCXuMIX2WpNGW0m2f94baAWc0I75/rAT+AZiKM4d6f9+o4/BRsvk6E1jyEBugrYUZCdikdrzZXYNPEHT6UnNDEYLmSzXwOGIklE7Niusjaf5kyDVRLiyk5CvuthnXDIR53hmlT0dXGSvt+rLZTztgt4L2BsUpg+1iafy05WRNbcCDrn1N0eXGGM35FDrkbXIMdnSY1egLnNp4DDTwBJzABO2CAgj4Qtb1NzIR4j8yF+bBoubjkYgFGTGa4wWkLO6MEsI+7dXU69mZOt4Kx9I5NJBINiuu40f2y9KWxD7GcBxHc0r0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Jgk8p9v6vkAXpcLfp+zGWwoj2p/KKJ7B9XKDSSlYvSE=; b=zNZz6aro9yoLgjpmQ0LLIlfkjMqEkgYps/a7vd9aRhsNbZ5UcF72HOjZy0NUxB0pXWmzBFoCer5bQd9dCx7Zxm02RzUA5nFXjKJhZ5flso1bfCGQxeHMSGMXwsWDO51WXAPbnGta4JDs9dKf4nBaG//Bywm/AyndpJM33bwHkNQ= Received: from CY8PR10MB7243.namprd10.prod.outlook.com (2603:10b6:930:7c::10) by DM4PR10MB6863.namprd10.prod.outlook.com (2603:10b6:8:104::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7025.27; Mon, 27 Nov 2023 00:28:50 +0000 Received: from CY8PR10MB7243.namprd10.prod.outlook.com ([fe80::449f:4fd9:2d3e]) by CY8PR10MB7243.namprd10.prod.outlook.com ([fe80::449f:4fd9:2d3e%4]) with mapi id 15.20.7025.022; Mon, 27 Nov 2023 00:28:50 +0000 From: Mike Christie To: fam@euphon.net, stefanha@redhat.com, jasowang@redhat.com, mst@redhat.com, sgarzare@redhat.com, pbonzini@redhat.com, qemu-devel@nongnu.org Cc: Mike Christie Subject: [PATCH v2 2/2] vhost-scsi: Add support for a worker thread per virtqueue Date: Sun, 26 Nov 2023 18:28:34 -0600 Message-Id: <20231127002834.8670-3-michael.christie@oracle.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231127002834.8670-1-michael.christie@oracle.com> References: <20231127002834.8670-1-michael.christie@oracle.com> X-ClientProxiedBy: DS7PR03CA0082.namprd03.prod.outlook.com (2603:10b6:5:3bb::27) To CY8PR10MB7243.namprd10.prod.outlook.com (2603:10b6:930:7c::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY8PR10MB7243:EE_|DM4PR10MB6863:EE_ X-MS-Office365-Filtering-Correlation-Id: d2e7c327-832c-4f66-1651-08dbeedfd3c0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jkQS2rl98lN6bdLYSQxhTZk1DFTz6DF+gWPOCTBxkUNWIuz1nSBdgwupExk2ASRa14r+B3AWK0+gC6500jKYCGKBFmRWLzKuM58cFxBtpafKsH4NLruIijoOVeBCCLicG0okMcGMiqZGBBuS/ZAbR3E5PkV8NpFDA9gUSaWNaMKxcWPYhbFgdFh0+vwOD1uNYfaZAs8SaCIIf3H4Rm2vNm6dJ6AEA7JWv6Ygq1ScErokpvfz572yVciHpIw8WJetnfa38gC1J/ItncDXXl4rbih4T+ar103VSCeCx5A4iKml4fteWb4pVhUrjJUGrYkrTFOBKccemjW+YnGJ7s0Hp7tSHijArd2MyvnVCE7NIc7460mHlHpOqjnulIEDBJd972L1WtAqQwz9IKrUeUEAUcRCc+XxAOCLAKqkSM2yHyssIXze4cTBIic4ZIfjb7j8dvGy1gKnhUGtsC6UOHN68IXRtdQT+nyGcO110D0WHzPuoXvyRED6I5JepLMuzul5R23qm/jFzrheIblbp0Q+oek94gKH2G7qLyfGjlJnhVXJyv5zMA5t1n3hu0Iur/uk X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY8PR10MB7243.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(346002)(396003)(136003)(39860400002)(366004)(376002)(230922051799003)(186009)(451199024)(1800799012)(64100799003)(4326008)(5660300002)(41300700001)(1076003)(26005)(8936002)(8676002)(2906002)(478600001)(6666004)(6506007)(6512007)(107886003)(2616005)(38100700002)(316002)(66946007)(66556008)(66476007)(6486002)(86362001)(36756003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Saaano0JpD25AuEds/ChCblzbZkANVwLqFthTu6+mKOnMudvou+gqCTBJJj6OCdx0uxMg6Pb/GuQ+qZIvMcwjsESKnQK1Erdyh6CkGL97/HAqzjHXKJIwIIxGCOtI/GTXl8PpeQkC+QGkIOzm5mVB5Er+Aoq8vTbTnChPLJVmc6y8FHZ5ZtC3DZEJmp/scNur0bPwryFGF5DAZyH93WWOS3QPJzEZ3wl2yiyFkECnwgZOGt3HitiUvbBrHsDSDgYSoXjidUYwvgRV+5dKlO843oF8IZgrEHKQKNCBrkNyfhNf9VJbRlzPZgpIO8lInUZkQ0MtQ4ER1LZho/vvSW3DXkWHSThyeo4okcjEU2O1K31oNWXxxBkzQcclWUK0iXti0HB8V2MOj7N74tDMt29vOpnAq//CZLLrPkPcbtU+OFNGFGuYI+ERtWYPiKWyBPxep0TxO4nhIA0KhjPB8QFs0O9rzECEDOAMSj/Pvd+XOQyBg1dMFSnbdZ8CTF9B4JwLH2eA8wjRFXXCz/vQg9TFZ/d7E88dBRTrt19+Fty5U6bxNwtRrBlOZDG4McdBJke6xAQ+j2d27MCps8qQjckcvoS7ZASLAFqFPo6ZVz+LlYbtiotPs845QFhZEM9NpNwzsn08n7JNqrNMvgboVKZqaw7+fASeAYnwZeoPs+BLgtWIfooBhXRX2t6qi5ow5R2ucXCDbjxPcgsT1J/DgupXxO5iJhzD/X5t8wBo08s/26mQW38mgCf/jdVrw88xK2dmYVtvj6v08Pa3Tna03NLarlboovfZSc0RJJocG3YW7eCpIScCERUJNNyAIt2s8wed9ptVuro/RLEw+4YTRVMP929u1hyEMYuiGokwFYZ4SAYdNqCX+OPQq1S7KfOavxVqQ9H2KvM+CqnxugzLLuElSOLC8wVBjptMynH1wQVnQwNuEjXEZXFmSJNYLb7dEpKf8+mW19JuKKqBlbcX4Kw5SqnOvHacfK9+uDKDdZ16O2vanwFLI4x0euBmEsCK2qwQhBgRiKZR40PJncpXxgcVoVIpCeNQxMEGKNEX2SbJGNuCdc/4egetz5Qa5d6OPTi6WYKZlEvUuVfesYm5XTp0OPJk/yCqJIRUwZqJG+TD9Jv3exZbYkblRlt52KeIrfnwZtSD7hhdCZ8mjxzPUr4GP6jdg0Vp4/gKaiph3NZ3c+pgnjdSvy0ElPegU834UPkAfD3hUEAry7k8jYpqJx8sjTiWPW8Z9bmhxCl+s9oz74GnE14j7KTIeO1uoCVGkefluE9gMwIEpfg1gxOu6OFZ9hoNhY8OchSDOobuk1xsvmDGoODABwmthYhE8rKBUwSXHg3YHN16KIqKAzLEz2m0WML+1GPaOLM+1+Et6fVRQSAVx6nDmjLvhGj8RFZXq7SZ4cEfXr8oi86DAYGqcFKG8G3A1rfXl/R/zy6CDhKy1eto7MVu9DRMt0ruiCqVyuvLQ6xaUX1nKVhsHeXorOXDAEppvbP8LW46lI64cGNuzoEoGDPjkrzRTRgFC+2LODCdBkZ0yKtEEwivgbygxi3j5JOpNwjJhbEnsIYQivPcHasPpFoSWGVhrCy/D7q/cENgmvc6sxey3eNwuvQokOL8A== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 1dQkjkYJxkNv+XpXXdAiYnWBr2mov2Xt2urSDWeEel+jWfStnh4Xp3JmjguFPvzlaSULCrzXcGnCRzxCxprJEta7PPzeJeXSs6qxQlIsmb/KGNK8MS18QLR8Nbf37enqZPKoAKricmjUPzHy4SvMKLSfF4+wDSE0uwyoRrY1Riz53ePeb41rhfB7t/2Q4t7mTLAWo+VeVCWHqRzFO0EgyFebnE8+j/Gjo0+F0VEe6TVMVNXvNLGIapKWljJlgAqk1gdprPbnJicMl4QoAJkxHv/JQFhj2RNJaX/C8mFUNtEKu7mNnfLnueyauGj7iEzjlr54vvrOsvP6Hj+evSQVHdm77d8JV8f5C+2ekp3Sqs/v8+u9y9ZZeeuvdz7bprU8N3dla7sDDx/W8yyQ9fBmX4W5oXC0IxNQEbpuEdrM8guhQffO3PkS1mFcIDVaageavKRefUcM0455kpjUIW9lyaOK9ATxXf+R7KsOmea2I1FiXAmmhKSbK3FcNG5H7FOGtXQoT8uyVilucbnOunmZ13qKtfNE/zvvrdxsbd3PkEMmKpvHftWqzyt9MliPJB8HLB/9K+j2cQ8fMZ1PfRGMeQytnSDlxqW4qndYnoCGAUWN5ZPjd+iMtg8DM6cssD9zoEAPIiLBWbA7pYjSeG+JT0PXUXsevdIUcZ6am4yI0EjCj62sLWR7BpAR2so2KrG2OdPDSlEeSJHAf/wzY3ftmgn7V6RhUxcMaPusTR8JuDpStGW495/qzW/kLdR5iQjM2UkNWuHcV86wCy74V0yd1G6x4jpMfx7onVAojkVybMbYVRQ0NhlaeIP2iEkPuvKe X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d2e7c327-832c-4f66-1651-08dbeedfd3c0 X-MS-Exchange-CrossTenant-AuthSource: CY8PR10MB7243.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2023 00:28:50.1647 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ZJ5lMvh6jTRfb+laryB/xWRWgqCMAPQNBvERDR0w7ZZAehkfwawLvnc9UCoqD2ORL3vGYch4K3bDIgaZF26sjdGiaRe9sFB4mGR5JAdy9dQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR10MB6863 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-26_25,2023-11-22_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 bulkscore=0 suspectscore=0 mlxscore=0 spamscore=0 adultscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311270002 X-Proofpoint-GUID: xIGmbUT2IQ_iZpKIOM4pHwDZglerixNX X-Proofpoint-ORIG-GUID: xIGmbUT2IQ_iZpKIOM4pHwDZglerixNX Received-SPF: pass client-ip=205.220.165.32; envelope-from=michael.christie@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, 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_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This adds support for vhost-scsi to be able to create a worker thread per virtqueue. Right now for vhost-net we get a worker thread per tx/rx virtqueue pair which scales nicely as we add more virtqueues and CPUs, but for scsi we get the single worker thread that's shared by all virtqueues. When trying to send IO to more than 2 virtqueues the single thread becomes a bottlneck. This patch adds a new setting, workers_per_virtqueue, which can be set to: false: Existing behavior where we get the single worker thread. true: Create a worker per IO virtqueue. Signed-off-by: Mike Christie --- hw/scsi/vhost-scsi.c | 60 +++++++++++++++++++++++++++++++++ include/hw/virtio/virtio-scsi.h | 1 + 2 files changed, 61 insertions(+) diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index 3126df9e1d9d..77eef9474c23 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -165,6 +165,57 @@ static const VMStateDescription vmstate_virtio_vhost_scsi = { .pre_save = vhost_scsi_pre_save, }; +static int vhost_scsi_set_workers(VHostSCSICommon *vsc, bool per_virtqueue) +{ + struct vhost_dev *dev = &vsc->dev; + struct vhost_vring_worker vq_worker; + struct vhost_worker_state worker; + int i, ret; + + /* Use default worker */ + if (!per_virtqueue || dev->nvqs == VHOST_SCSI_VQ_NUM_FIXED + 1) { + return 0; + } + + /* + * ctl/evt share the first worker since it will be rare for them + * to send cmds while IO is running. + */ + for (i = VHOST_SCSI_VQ_NUM_FIXED + 1; i < dev->nvqs; i++) { + memset(&worker, 0, sizeof(worker)); + + ret = dev->vhost_ops->vhost_new_worker(dev, &worker); + if (ret == -ENOTTY) { + /* + * worker ioctls are not implemented so just ignore and + * and continue device setup. + */ + ret = 0; + break; + } else if (ret) { + break; + } + + memset(&vq_worker, 0, sizeof(vq_worker)); + vq_worker.worker_id = worker.worker_id; + vq_worker.index = i; + + ret = dev->vhost_ops->vhost_attach_vring_worker(dev, &vq_worker); + if (ret == -ENOTTY) { + /* + * It's a bug for the kernel to have supported the worker creation + * ioctl but not attach. + */ + dev->vhost_ops->vhost_free_worker(dev, &worker); + break; + } else if (ret) { + break; + } + } + + return ret; +} + static void vhost_scsi_realize(DeviceState *dev, Error **errp) { VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(dev); @@ -232,6 +283,13 @@ static void vhost_scsi_realize(DeviceState *dev, Error **errp) goto free_vqs; } + ret = vhost_scsi_set_workers(vsc, vs->conf.worker_per_virtqueue); + if (ret < 0) { + error_setg(errp, "vhost-scsi: vhost worker setup failed: %s", + strerror(-ret)); + goto free_vqs; + } + /* At present, channel and lun both are 0 for bootable vhost-scsi disk */ vsc->channel = 0; vsc->lun = 0; @@ -297,6 +355,8 @@ static Property vhost_scsi_properties[] = { VIRTIO_SCSI_F_T10_PI, false), DEFINE_PROP_BOOL("migratable", VHostSCSICommon, migratable, false), + DEFINE_PROP_BOOL("worker_per_virtqueue", VirtIOSCSICommon, + conf.worker_per_virtqueue, false), DEFINE_PROP_END_OF_LIST(), }; diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h index 779568ab5d28..0e9a1867665e 100644 --- a/include/hw/virtio/virtio-scsi.h +++ b/include/hw/virtio/virtio-scsi.h @@ -51,6 +51,7 @@ typedef struct virtio_scsi_config VirtIOSCSIConfig; struct VirtIOSCSIConf { uint32_t num_queues; uint32_t virtqueue_size; + bool worker_per_virtqueue; bool seg_max_adjust; uint32_t max_sectors; uint32_t cmd_per_lun;