From nobody Sun Jul 26 11:51:04 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1782492462; cv=pass; d=zohomail.com; s=zohoarc; b=Jp+yh1pmp4lygwORUbuBrld8hbbn6Dy3bBrvenn9zDC8y9pEPOxt94XwfXbgP4S98Nyo/JY34yVpw0k0fcvJPF5Fu24KL9pZtfEZ8sNaB/6ctzhUhxRYkIhGOWZ6aWlglNY3HvE4hOCDvUSFRyBG7taDW+dcdyXKJ0R+3rHTwy0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782492462; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=npRP9gTgJjV9KV93DFJ3LdmwFuvgUWpk6hh4lgfcpQ0=; b=mOvkWyPNSDfi9UBaAeeliNb3mR41xi3joDvLptrhZGGht/Lr2bmYVnrq4wgESL52i56/HQRywEtd+9YkUsPlfY3Uw1N1Urbn4sika8/vOi4XCdaw7J8r/OW8UzbwTX3M/Nf+2QJVyjMM/sQvofFb1g7BeaTUJLegvaYww5ZfpdI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782492462615717.744451713628; Fri, 26 Jun 2026 09:47:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wd9hy-0001ON-5Q; Fri, 26 Jun 2026 12:47:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9hw-0001OB-AC for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:12 -0400 Received: from mail-northeuropeazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c200::5] helo=DUZPR83CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9hu-0007dq-96 for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:11 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB6347.eurprd08.prod.outlook.com (2603:10a6:10:253::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.17; Fri, 26 Jun 2026 16:47:02 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%5]) with mapi id 15.21.0159.013; Fri, 26 Jun 2026 16:47:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OyTOepvSl5B6t5Pf/oMf9QLpwUumV3nRYaJJJ7B68wDmdhT9wCUO2C+uZ2rvXYMcdBgJuwixHfxyB5O9JmM5oCtZYwmoyYeDvjR5Jps9jzjQSdAC3H1EJVkXfB4Pwd6kbTrhV92Vg3iTdJ0YDQ/K/v0O0i2nhhOCC9lyyUjVj6hmFMldeh4Yq3z2w8vMogKXGEmY/mGNro2NTS2Wt70zTRUcSWBy1icipy6AH6WiSlaS/HEksYMUXZLvsfgQUtmrfq9baT+XiJUWxBDYemc2TPmy3jV/33z2ldQeDKCUQQdS0l1ftD8BupluEvdmxCxlI/LXReZrkSOMOY9wQzTgDQ== 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=npRP9gTgJjV9KV93DFJ3LdmwFuvgUWpk6hh4lgfcpQ0=; b=cT30607mc9usICFXePWlxTN9XVi7TZNZDeR+j1MPE4luSpiNpiyRcvziYOP5fp84JxcFXQZe1WuQzYauDkp8/YD20r+a00C/S6khWokHxb1LtT8nbmEqLMdwviCS8qER1d+0eeQdcAruEtr8eZ3toHgMasKFK1cBJjgxCacef4yd94q8blMrBBvD10Jddxy/yszo3I1Q6alMNrdK5ZpJFTWBMUiH98nGXaUceErVVAdLNCPneflon1LeN+43rYtv0jX8hSvKLK5qhU34C8kAqqS+ZOtk8zq6AUaJg7njOrX1U/16RqcboYgVdz/JhwuH2RYfXPKtcCc2I7aZ/ILf0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=npRP9gTgJjV9KV93DFJ3LdmwFuvgUWpk6hh4lgfcpQ0=; b=McmGYf9n8lzMLQ5Cxd800R1X7rVbeEBZz4ZEFGF9xKCVNZ4qsg/a0ANx7zHRBxW4PE7+YsL4PBgZycxHMPr/eUx4aOzsg/1TMkgFrRtrXBw2DZpwsQqOk8y8iJJnXnxHRVweeznKkXalfBqA64awrs97E2gv3ucvQkuqysU3t8fUvJ9KfMqpIEg3vEBZIP3U2hLQh+4iBFIHGdKpWZriaHnvZmNTSNjxbQvJbbPYi/PepDLngSM53F4mY0DSBxSb4xIXZGC5S3uxb5+0/S0sw9bsVzQYhsmyjV55DPIsxeZvCBNkeRjJfQFiNpKthWnkn0FCSMr/O87bOqG1ClPIow== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev To: qemu-devel@nongnu.org Cc: mst@redhat.com, sgarzare@redhat.com, farosas@suse.de, peterx@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v3 1/7] vhost: add vhost_reset_owner op Date: Fri, 26 Jun 2026 19:46:37 +0300 Message-ID: <20260626164643.2526-2-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> References: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIUP296CA0088.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35c::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB6347:EE_ X-MS-Office365-Filtering-Correlation-Id: 271e0f5e-2fd6-4b23-b137-08ded3a28bd8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|7416014|366016|52116014|23010399003|376014|38350700014|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: vhbCo9eyHsPw/As+jB6uCeZJy297VvY7vUevAK0bxwjpt60obXQoRjGtbl0kLPiOrXUZWs9PhT8w7NCbEGBvUdoJgMUoqUonkm1gEnG4EU38aVWV7dvnQyo2If2Ypvb3vwtEKs4p2eO6t8DcCN2CfJRkngxaEP97YPnACsJUh3fLs6fpv731HnxEmwqbOgwbDkK3Nj3Gp2md/93FqPi2zpQFoXcbL67qWPPFkA7V0AWnk0usH/yKJYw0QKKRoLJ2VQFHICT6iw65p85CzA3C9C/A4jtcPrCM001Ass7nT3ebC107B0GcNxOjyeQZ+JokiYmMt4mIHgkI85sCwcAnhH4SB3PxII6Jui1RsXK2WM2xlX9lUbJUwwyl3VWGY0sHiegVjckHaquBKiMXo3ND3GxkmYb93z6e14dl+FfmRvzo1PzxoOFfVQGlx1eBGPYMuxKh4Agi6jxRa8kg9MMoccV7mhTJ5KMF3/st2Z+qERyP5mkkYnPbj8dJmE1/NQ/uOu2F3X26UUgAwF6v97tChm3GwPW0CyW0UrSHnoSSdRzElSnGrzqYd8rhkuI5CsUgMDg0AG1CBLSTF/fEP7wNch0JAvC/17nSXQlRqTPgIJT88OvxXLnWFxgoTgYfPnvJ/p6TB8t86ORWLCrPrizaGe4Usz1aorR5ZCqe1Tl43ND8yIbT9a8vRc/1b5fYKh3qnhwcPoc5GEOxYl6oAC/ryw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(366016)(52116014)(23010399003)(376014)(38350700014)(22082099003)(18002099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6qQLSKqpBTBVs2RdK5fUTJ4Ctuu5KBN20FsQGsptSpCw6gmBu+Nt1aDHIYeg?= =?us-ascii?Q?2VK9DFfSeIMoTqkCDcw4pwAc97oqLnuTC3gj6KbqecwvixCod5jgOcENNbT/?= =?us-ascii?Q?GCVLapBHk1QZ+LhhP9RyMvPAhwYbH0TwKfcXTzP3GNN7cUMF1avsQIqj3Yis?= =?us-ascii?Q?Cb9M/9+qCIsRb19bE/75GUfq+Hb7FARHttkhKCEwLHCRyjvMFI2KKtex87ao?= =?us-ascii?Q?bix1vIufUPwvLiYvD7cZQ5DXfwK3L4K9Ch4bn21/OtyHkjcSOpQ/+qa9c59Y?= =?us-ascii?Q?pfjSMk1gLW5EiQE3n0ML17OIyz9FvUaoEF7myD7/khe3PNZ2qY5x4MZ+oALI?= =?us-ascii?Q?XyR0cSf5MRjvAAob68bufsWnaYeXPsX2fGPoxBzY5Eou/xl4QUs8Fg59K4zA?= =?us-ascii?Q?lcE50Na6qZFmNuKoW/Luv3u3aiqyGk9lVT/EJ4Hspo5kapGLBWTtpkXns2qv?= =?us-ascii?Q?uudh3I8zauMi7XQZtlvE62p5MdbS3N5/hyZBKFpAfRfFcGg69Tf2seXod4ph?= =?us-ascii?Q?jj7t2qvh+H8UAzfl4gTXw2KAd8PyWhukZ7xI2uLF5dF5QQusav258zugOjOc?= =?us-ascii?Q?4rvjegTxIF9qbigsCUdakYhTfP9ud9Mqul/sy0b+96FhbGr7Nhw09H4Iymco?= =?us-ascii?Q?QZk5accNgEwayXlqMlHot5McRCEUt38hF+MX21a0ImHac40rYT4D70zbL7VL?= =?us-ascii?Q?B907JMHXxNXfX+dDjWmR1/xcSrzNU8LP6qNWNqGiBMxVOPRqM4LQEiqlNEBV?= =?us-ascii?Q?j0MOga/VVZmDtrK4nAREI8nTf+SYRUg2Wxr/oBYbbHJQSUF3yj/yG2tMgLMA?= =?us-ascii?Q?WU0WUmfzrh4mN9e/lWXtjpzA0c8VF1m//WrFjcAd/1g73Xw/630hN1I7I2n2?= =?us-ascii?Q?MejP8oOVfajB3I/vz2V9nDRMtvbimrN6DhFBqgKsab72a78+UYccoIkUk47s?= =?us-ascii?Q?l2frzBC9ReBabB+wkzlVBxhVUOsqUY6wfz0U0RZvzrDA/bWXT7857wWlCKKv?= =?us-ascii?Q?QfRXRgiYTw+dlul7z8WcKX0ID433RYLN395zCTLphSGCoZa5HwvuAyPKS+lE?= =?us-ascii?Q?Kmtnl500yoVcRDTeuzKKbtLw5wykdXYGFgvIX6MqKqWWOi34BXgAY82V2ppK?= =?us-ascii?Q?wLOjiZhUOwptnuaNhUS4/lSM5GeL4ytFqyk4ttS8BRiSnkAPv3PFfxCpcMPq?= =?us-ascii?Q?Sgr/8AagvLhwjFT+4ZVSRq1kbCP7nwANRunVBKEF+ed0zEQPp4A9en2sQheU?= =?us-ascii?Q?7qr6GvoVzq6VJ5zUdRpS0GmWw531i8v4+bArXbQne+dsEtYBeWqxu2QFYZo9?= =?us-ascii?Q?A3KWgQQp3zrGhvRuKwJbt8TxzzMTKnOdJDaSLl3+O9p8PQ8bxmyavn5YQCTN?= =?us-ascii?Q?WUQqr8klOSU+kiFy8GZ9nJEUrTPVVmm94nu+uZKNUR3j3ngIGpFO2lhgslvJ?= =?us-ascii?Q?qK8gUUdgMc6EalEKHvPMwdA5aq8QiPiCyYtqfbCgMkkXWWGRoBDhWEvzI5nf?= =?us-ascii?Q?ITm96MnWx27AC9xqT5bnXsJJBZqn0s63pf6waeMu/fHhZ/I+94c3Iu1OXgek?= =?us-ascii?Q?TIL5dYo6m37TILLmStKCS3YMU6GgwSibLhUdoSueXvA6ilPIMJoHQx5UEnfB?= =?us-ascii?Q?fAH59+NkhLpgZeZ6kFq+m5+V9JsvQZtfVipRwFutghP5eDIYdPyv5lV0cwRE?= =?us-ascii?Q?MSt0SzB2Lo4gLySnPq1HF95k6rVEnL+4vkvtEL4Xn2yhNMIwN+Cq7HBrSxXq?= =?us-ascii?Q?QxcyrGfyYIgVBL497WIbBcNJnRRVzvg=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 271e0f5e-2fd6-4b23-b137-08ded3a28bd8 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jun 2026 16:47:01.8838 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iVfwMi5plium/3rqGSZ+cWVsMx5d3rRSMvVMumsvPJEL4BfnfoN0TqUBvWnml/t7yAlHwol9NbgJU2b75Hp9oBkPyzVveDeolPAZ3ceGpJU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6347 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c200::5; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DUZPR83CU001.outbound.protection.outlook.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1782492464685158500 Content-Type: text/plain; charset="utf-8" Add a VhostOps callback issuing VHOST_RESET_OWNER, wired up for the kernel backend. The CPR (checkpoint-restore) path uses it to release device ownership on the source so the destination can reclaim it later with VHOST_SET_OWNER. Originally-by: Mark Kanda Originally-by: Steve Sistare Originally-by: Ben Chaney Signed-off-by: Andrey Drobyshev Acked-by: Maciej S. Szmigiero # for CPR --- hw/virtio/vhost-kernel.c | 6 ++++++ include/hw/virtio/vhost-backend.h | 1 + 2 files changed, 7 insertions(+) diff --git a/hw/virtio/vhost-kernel.c b/hw/virtio/vhost-kernel.c index 3390b48c6f1..55d316b88e9 100644 --- a/hw/virtio/vhost-kernel.c +++ b/hw/virtio/vhost-kernel.c @@ -261,6 +261,11 @@ static int vhost_kernel_set_owner(struct vhost_dev *de= v) return vhost_kernel_call(dev, VHOST_SET_OWNER, NULL); } =20 +static int vhost_kernel_reset_owner(struct vhost_dev *dev) +{ + return vhost_kernel_call(dev, VHOST_RESET_OWNER, NULL); +} + static int vhost_kernel_get_vq_index(struct vhost_dev *dev, int idx) { assert(idx >=3D dev->vq_index && idx < dev->vq_index + dev->nvqs); @@ -385,6 +390,7 @@ const VhostOps kernel_ops =3D { .vhost_get_features_ex =3D vhost_kernel_get_features, .vhost_set_backend_cap =3D vhost_kernel_set_backend_cap, .vhost_set_owner =3D vhost_kernel_set_owner, + .vhost_reset_owner =3D vhost_kernel_reset_owner, .vhost_get_vq_index =3D vhost_kernel_get_vq_index, .vhost_vsock_set_guest_cid =3D vhost_kernel_vsock_set_guest_cid, .vhost_vsock_set_running =3D vhost_kernel_vsock_set_running, diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-ba= ckend.h index d878d7b733a..6c949e6a38d 100644 --- a/include/hw/virtio/vhost-backend.h +++ b/include/hw/virtio/vhost-backend.h @@ -204,6 +204,7 @@ typedef struct VhostOps { vhost_get_features_op vhost_get_features; vhost_set_backend_cap_op vhost_set_backend_cap; vhost_set_owner_op vhost_set_owner; + vhost_set_owner_op vhost_reset_owner; vhost_reset_device_op vhost_reset_device; vhost_get_vq_index_op vhost_get_vq_index; vhost_set_vring_enable_op vhost_set_vring_enable; --=20 2.47.1 From nobody Sun Jul 26 11:51:04 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1782492470; cv=pass; d=zohomail.com; s=zohoarc; b=DWF+MUi18dxju1Z1lJWosiKyEl5AC+eokzAVKXyxp/CDVwHZriCTOGNwD4ahIBxEt9x823VePTPtoGzNcGDxEX7F3GSipdrGZ83yu0rcaV023s8lWZwlx66XH253x4lsBTo4o3zdop9dO3/CpkljDsmg1npA7NmyrwJr4LraS08= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782492470; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vo1RST5p98XYTNeKj7dqkBfNk3/RdmsWpteWXRjOsmQ=; b=EkorYKq7AzSXaa62w8vd4eu4cGhc1nwQnBnvByo0R2L9NPa6V0jLjtH/AQmUKJn4wRD7MMCAdiY46YUy/8IDCpuYdKqRhp6IwagLI0I72hyRJAD2sOBufo6DB3NU+M1X1NJDgi1HlV1BcxJdlRKarGbeltETQi5Cc7pe7mh1crA= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782492470396141.64869223420442; Fri, 26 Jun 2026 09:47:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wd9i9-0001Px-3p; Fri, 26 Jun 2026 12:47:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9hz-0001Oq-Hu for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:21 -0400 Received: from mail-northeuropeazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c200::5] helo=DUZPR83CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9hw-0007dq-S1 for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:14 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB6347.eurprd08.prod.outlook.com (2603:10a6:10:253::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.17; Fri, 26 Jun 2026 16:47:02 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%5]) with mapi id 15.21.0159.013; Fri, 26 Jun 2026 16:47:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TOsfNB8Gnu+anBntxLgZXJm31P+NyyrPZnPAllyTTXDVJAgAd7SYFlBtPoB6hYzY0/EupDKwNbjbd1J6bCSGCcJQgSOTzwWkX7AkswUcIwtpJ6CRf8FiLYo9RSULSLgfwui9+2yh/K4jcI5xAvt/f9foHYT5AnjEotdKGjSmqnmQn7g2n7WiBfOwYBEzKVRk1QjIcovFfHw20agGq7cLc671B+5ePAZxXHQxi57T7d4QFgViOzu20RWGFy6pC+1gKX8K9qjqJrB+7R9zkNlM87rIDkG69wtNWfEnMRE5/UX7N+0dB/0RIKbNlR6bwvDDkoRL43UsHv7Icm6iJW46WQ== 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=vo1RST5p98XYTNeKj7dqkBfNk3/RdmsWpteWXRjOsmQ=; b=H/97AnF3CDCty4e5KiWU7aJSnUgAtm5fA4uYRQnNH2QWXemtLWZ6UBv1k7eVsGGvtmyTsI7Oi0a1x9xoAKkbd1avSYVi6r6lJbxjiMWGzxipYSn64JnLef4E2IgPKFdOztiU2GRoZDElffC4lPfpciySZL4dwJJppeaDkEOaSrsOpNlBI71r9qASVV5msqnZYwcdcjzQBWb7nQmI3Lr4Og5G1uFwbaEBk0c/fb3au3eTSm5ANpNZHWmTJrA8J+/9y1tiS6BDLY8ke1vYIxhU/3QrJhOQPlKZZaDRTUb8sL1j48ns16BaTKVPYrJBTej8Bg7JAQisBM0emnOfvVBogg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vo1RST5p98XYTNeKj7dqkBfNk3/RdmsWpteWXRjOsmQ=; b=haxySnVTYq60iJaF23cVSzvJesrE1+uKYaw3HaG2NfeUiJKanMYnE2Q9KHjKNz+x5DJ6p10ENFXg1pcSCyW3wzGEt5TClZAOwyMdVxtF+n/IHIsAwnqbcceaFLvDeEOf+CLQcc3WBOnGEyiuQO4kChlCB5+J7SBlgCNUnSrJOBiFJeUd7yu9jLhlO9GfPZq70K0ML9Zy+roel65UGAZ9gesARLZhebRv9db6fiF+Xbl3UHv7AACn1yQVCMXf0BRBQJoxW/O5mJ4FH7B9QBPsoDVUUOmVEvohYUeGWU85iAOmraiDozJE5L/S5FiaowR8doXrf/710E+ec+7tr5Ibsw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev To: qemu-devel@nongnu.org Cc: mst@redhat.com, sgarzare@redhat.com, farosas@suse.de, peterx@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v3 2/7] vhost-vsock: don't reset connections during CPR Date: Fri, 26 Jun 2026 19:46:38 +0300 Message-ID: <20260626164643.2526-3-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> References: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIUP296CA0088.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35c::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB6347:EE_ X-MS-Office365-Filtering-Correlation-Id: 6c9beeb1-c541-47f1-3b66-08ded3a28c2a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|7416014|366016|52116014|23010399003|376014|38350700014|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: sAXJvPNOHmdrE0M7S/yUw+owavPJEi8bDdDwpTdB3GEihmqioubhQkJCHu6QfGC3jEBWA2YCt62Gj4LleVNGLdgHLVjshAjLpLwA4LYLNa7e8VetgDIyCWpssjtaa22RBQIou1Vaf458i+2r9tWeq2YgMZjmfnw4oHRtucULemvN38l8THjSHNOE+jAAP5kWRVAifssLQU47HTJGOkjN8hi2lKnqkMqA7jRdfdBtWNQmBmNz0U7UKM5es4PtXHkPO+Wfmgbc90oPM53rP3bin/mmAwylGlJgnJKoGF4BInzdh8zK76LcrwXxQA5IBrBB9oW2YZiVX5nFS57bsWTCkVJnevOZ69O08yRmEcNn6k5Yn6hL9rVKYbu6530uLhogkCBcGS25oqBLwoLH0eLEbmu79LRGQVDHhjUHUHIzc8mocrDqSckvboN+X6EERs+4LilyEcmNUtEE4TaHLV8LJD7470/BTVaT1V6LXzxuCO13ZLV2oCvp55vhmxW3egzRkLSDErite7euBro9CAxkQx2v8hLaL9m9ZyE6Z49l4/V4jn94JVAoiquGTsoylOwsBGYuwH5icQtU0VQ8Iioif9xBVq3A5Zq8VsiSX5xrZzeIDqfC5xanQAuoDi8Q91WI4cyYZGbvKyuuDMLKHKY4mil/od4lJ0nN7C8FkEshYOZ8vb13tazEFr4tKRUfcIM5/VGwA2M9xoYdZfgrjeLf7r8UkAirwQKIoqu9cCe+Dfo= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(366016)(52116014)(23010399003)(376014)(38350700014)(22082099003)(18002099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?LJouuFiHLeKrhGSSABVTv/b2HK5a/rD22s+E8F3p1Rkf/bCoOwK26qfdmeC0?= =?us-ascii?Q?HcxkSHmDRHXgoVwbIn+dULH7D2Nk6tChbVweEWQ8D6CTXQTkGT/iz5H4/F3I?= =?us-ascii?Q?f++X2nBlcitXRTPuEMa77s7y44zA6gn+RXk5V9HKrrFJU3Wf9ErNzAexJBsm?= =?us-ascii?Q?YHPserMlOhyVEER4yGD+kOmHht9hlBqOIu10ZGfastMumbgkeFRdgRcaOFot?= =?us-ascii?Q?LIUy2zd+UJZvV+I1DmI4vnfpfP3TPjqA7wneNEtbDCmnHLbOV4qFVqbMnHlr?= =?us-ascii?Q?PJ7tMo6JEmfPTNojP8Ush/T7kEo6OYMDNh9myV/hDiS+OqNqGbhtcuTD6ZO9?= =?us-ascii?Q?YkaJudVE0wkLWQseDnCNlJFPEke28Va6Ji/GIfiwdQPWNnA0hb470AJ4vDPo?= =?us-ascii?Q?UH/RREzDSrNHAefSyKtoF23MkRigcCRJFIDlUCCEZvKj0skxHgFmENi6nhcf?= =?us-ascii?Q?68yqk04g/vXPJecSzdoc79E9YTjbNByf2Al4LL+BtpXOPtG8owWysJ11xMQ2?= =?us-ascii?Q?P7+RtPQVVdMyTLrSrtbhI/CNqrBKE/UiJBD7xBdR0tvTuU0D0vpGCAZTeA1h?= =?us-ascii?Q?4Uz0uzr+p3L1R9fpm4VUV9V8TyDiDO6AVf6tAe8NVRtzNNKkFhZEOSZUe5+b?= =?us-ascii?Q?ucsELxyOLqHP7DmNIPUSqabvMOEwOUAEm0fdaSUcfvQNK+H5LEmo7gmbXCrL?= =?us-ascii?Q?+o3EhipHWU+ttioLjeQIVcganUc+P0mQMJJx6YIvmae/7pg1tNuzpdwYCrBa?= =?us-ascii?Q?6UtbMGI5g2khyxzr33fooajgHuKJ0OxdLoCGowxigsxENVvaWu33+Tx/z+5L?= =?us-ascii?Q?zjvsvnrwzpa8VVgFOhgG/FGoUS81+VXUoihF2uVx7g3E8i44d8REt1Yitut4?= =?us-ascii?Q?ZUvck0ElaC2hc4iSxkF30HFSFJY1eM/K3JWfLZHy25orSwxidkyGwFMUf/62?= =?us-ascii?Q?e/QafqVvuslgU5PCDXG1L7W70CoW51osrcej3ksgcGR73aIJmnQTHno8SiCc?= =?us-ascii?Q?1pGQa4KgcaV4Fgl3Ukqxj6zWMY9L9pe1whUUV/zqRZdfd1LW+iLQBFRmp0Om?= =?us-ascii?Q?lunTDMc1xja3lzuSMMJLBpBxHI/48t4r1Jr1TXu3b7anSX6nxxqMDnREl8iv?= =?us-ascii?Q?b/bss9Da5u//3lbCGYHKS0cOZkNsggFQMYSx7NeWsBD4YCh8wWGo7TevN8xW?= =?us-ascii?Q?uaYM/CrH6rKSmZIknmk1sEEMmh61EJnb6kJUlNQF+GSwSAX4/kx54nLsphgj?= =?us-ascii?Q?qtVe81bMkhxnPHVSGnYvzYFk+UVo2oYZ5CDC/nMGoHaFMtyRVmlnBE03XhSh?= =?us-ascii?Q?AqBnzaDHrqno30n8X4CyjOjnVHg9KSnbfpfom8ZpZRzMfz4rPRnR7win+rzK?= =?us-ascii?Q?QmoJSWUeWVxzDLj3ynv/9WtrcMI8CN/M2HMxitKdOf519MCI1C8X9qm5Maw3?= =?us-ascii?Q?1gKZtcDkloYVQ1AGasdR60JBlk/qRB2DLXfyAmeM56c9f+du2/Xb400NMp9q?= =?us-ascii?Q?36NIbkw+22+moyGQN4Mh1nsuvl4Ub3aUuZel5U05Lqcf6i/f1Vz1A0jxuMzL?= =?us-ascii?Q?tZl5G+ejuHazBFhzmbcknA2D0u7cPYhI9uhAovkvIBQInY32h1alktgsav9G?= =?us-ascii?Q?VffCWrdzt89pG2OJd3fU/Bxf+nKvfQqqdeQoXlgxRCbmp4dZUdlS6BiWwwQD?= =?us-ascii?Q?PkvddtT0U09bladVs7QFEHxp3fIl1K+Q8qMNPRhrSEWmNux9w/sJbIM6YJzM?= =?us-ascii?Q?PxD1v3Z30CIjbsevszAdWMZ/TyhjiXw=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c9beeb1-c541-47f1-3b66-08ded3a28c2a X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jun 2026 16:47:02.4834 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yw4jTYaIYf6NtPdQ9GpH1/yZHGiqUn2RqcpJUXEP9hPKRZo3y1K3SLAQBLTOEU55CjZQ9+7H8h5kJP2KkrzGjS4qJSImf++7SW/zKOi/RwA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6347 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c200::5; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DUZPR83CU001.outbound.protection.outlook.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1782492472473158500 Content-Type: text/plain; charset="utf-8" Migration target with a vhost-vsock device in the .post_load() hook issues VIRTIO_VSOCK_EVENT_TRANSPORT_RESET event to the guest. This results into the guest tearing down all its vsock connections. That reset exists because after a normal migration the cid may change. However it's not true for CPR-style migration. In this case cid remains the same, and we want the connections to persist. Thus, let's customize the .post_load() hook to skip the common transport reset part in this case. Signed-off-by: Andrey Drobyshev Acked-by: Maciej S. Szmigiero # for CPR --- hw/virtio/vhost-vsock.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index da244eb1657..cdc58d58790 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -20,6 +20,7 @@ #include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-vsock.h" #include "monitor/monitor.h" +#include "migration/cpr.h" =20 static void vhost_vsock_get_config(VirtIODevice *vdev, uint8_t *config) { @@ -108,6 +109,20 @@ static uint64_t vhost_vsock_get_features(VirtIODevice = *vdev, return vhost_vsock_common_get_features(vdev, requested_features, errp); } =20 +static int vhost_vsock_post_load(void *opaque, int version_id) +{ + /* + * Only reset vsock connections for non-CPR migration. For CPR the + * guest cid is unchanged, and the cid-change reset would otherwise + * tear the vsock connections down. + */ + if (cpr_is_incoming()) { + return 0; + } + + return vhost_vsock_common_post_load(opaque, version_id); +} + static const VMStateDescription vmstate_virtio_vhost_vsock =3D { .name =3D "virtio-vhost_vsock", .minimum_version_id =3D VHOST_VSOCK_SAVEVM_VERSION, @@ -117,7 +132,7 @@ static const VMStateDescription vmstate_virtio_vhost_vs= ock =3D { VMSTATE_END_OF_LIST() }, .pre_save =3D vhost_vsock_common_pre_save, - .post_load =3D vhost_vsock_common_post_load, + .post_load =3D vhost_vsock_post_load, }; =20 static void vhost_vsock_device_realize(DeviceState *dev, Error **errp) --=20 2.47.1 From nobody Sun Jul 26 11:51:04 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1782492504; cv=pass; d=zohomail.com; s=zohoarc; b=ifDCEtQ33dudEyWOCsV18n4GfoFt6Cj24ycoTt83ENIhjKc3xEQSI0EsNPSzAA9qbiUkYWJIwXfmGH6mKJ85wbB2rqDsCxlEjLzvrXYxGa8/ZDIYyy31TmkdvXof8ocS5uJCVAnnNeCQSaXSw8ZYvLWLXpH1fqRFm85mrYG0o0s= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782492504; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lJ480zU0ZphDstoKuzFbXxrVFFUrGm2MG9Rkglgk9QU=; b=HFy+GpPVT6ruwAYMwwMCz+FqjI1TsK8k5qGl0egVJRgdl8xEyIHa4A9TnMaKPstHrUl5kpVDvJB620Z/inbH/lhQ4tdjVVVLKbv1U7O2OhSmnOcJwyTOdAISD+vKxBq8yv420cgaaDlnywmEh/IhuX3NnxGecndu64x+d1Wejcc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782492504688258.327897681032; Fri, 26 Jun 2026 09:48:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wd9i6-0001PW-CU; Fri, 26 Jun 2026 12:47:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9i1-0001Or-4Q for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:21 -0400 Received: from mail-northeuropeazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c200::5] helo=DUZPR83CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9hz-0007dq-Hw for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:16 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB6347.eurprd08.prod.outlook.com (2603:10a6:10:253::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.17; Fri, 26 Jun 2026 16:47:03 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%5]) with mapi id 15.21.0159.013; Fri, 26 Jun 2026 16:47:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AIFFoBtNB6Vzh5sl3nS34WbHf8K8p2UGpOejbfA/Ahp1rnTgXHVuOkVM4FqcoFTN77u55b0za6YO+iynTbqwtqjaTpM7y0Uyak9vLa9ABwWK6F96saDvWcYn6qY8aoHGHoL202PvOTLSQtnxnuQN61039kN192A+hNZ6oOq/AKFua2fRRDX4xXkZwjhouHDkBCuX53jD20M05gczxFdr9cvYTBFCzL17jQqEuXXVb1BrPQHeLuN0JpHQlOqtpGVhmr+WLEvUp2QeWHwGotsEtEGBAfwOyqwh7E6LhiCQEK/TcEHLnd0Dbg1JJaIjfMWRtCvf1r/v8e2vA0ZlUJWq1w== 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=lJ480zU0ZphDstoKuzFbXxrVFFUrGm2MG9Rkglgk9QU=; b=TKVqr2OJ46tTZlOTCQ9ZPrc5dd9CCMPvlYIunatwGtGIdTao0EeRWK6+66iIB9aqB50TShaTMEbMuq1Ur2HQv4qRZOyJSUYRmPFKPCzcJ6Fx35Dp5PzrqKuMdZGpTzSDWQo6vwCI1mABLsN4w0dKGra1gLhk2/xwtYpssVV2Azl3LHhd7ojY+qEYfiEnldz31euWZ+EyLwX5WtDmbfHxVyD/N+scUJmDRwWmoBmucYa1aFsAVnJLFWPvyBSqJ0trhrmR2NGvRizN7t5jnMXNXVsuzjmSDXVMUs3FyGeM8VzR7re42RPq8SzzBotbM9CaaQA/RFgaqpuFGvtiqEB/Uw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lJ480zU0ZphDstoKuzFbXxrVFFUrGm2MG9Rkglgk9QU=; b=QuiLxMjELtxgzZV1fewq+onm4FQ8kjcmERgoPRQ7Ro1XkrXTN5dH3kIpfqKzpVe4tQd3xj1egvvqyxaezW9eKwHPco9paeaL8CwGczl471AuKRRbtgZqNCQ6Ky2qrMVHQ70NJCY0eJwcHHntXlgmuW7teNLVLv13ncDjiTeRg81oAwtyJC2rnWltIo4gna0qX05O92hidMhb7mvl5gFyDRqVfRx17TcGmZTjVzq2RO4oRtY9iRTJckSK4F6YtQoHUPjtK6kFkC6Nk3UfLmvZA8+Pw286vCyXwCqtkV5rajrcAz3OyYKT9S0X1/GO6j1d1xt4HF5vfsOimMb0OXorTw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev To: qemu-devel@nongnu.org Cc: mst@redhat.com, sgarzare@redhat.com, farosas@suse.de, peterx@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v3 3/7] vhost-vsock: fix FD leak in realize() Date: Fri, 26 Jun 2026 19:46:39 +0300 Message-ID: <20260626164643.2526-4-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> References: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIUP296CA0088.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35c::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB6347:EE_ X-MS-Office365-Filtering-Correlation-Id: cf1b8535-98e0-4ab8-10c2-08ded3a28c85 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|7416014|366016|52116014|23010399003|376014|38350700014|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: AnNvjvDBhqTdj+EMCJs2mrGlvZz3WwDzUxRjwRH6lftD+mWa3OnTciugbc4aWIZOweUYWZpiYwMme1t5wJIaIymC28QNxG0N4c4u3Gq3a9MmklAIMYaE42f9s/PgfNDI7fPD2Su+efrhxvnDKnwLOw0pQRNUqwaRoDBxsHNRQDCjfMConjM+k2kwMiY4ahrUSBjwQhhLcevfk4200lyeYbJuoP288YvKb15VyFXn1ASM6/FGjcCXUowfTs8m/zCvAKiooYellVpAR0aZw9o16emSbIjVKgkOTjgTg+HHzt5PzSo2SRNsx/xsMyHaN7gMEw+qHw2SBLNa5OaPVgVVkVN+ywQgYL0tLPB0sOleo19kcfo+XznaOciRVBhT4K9AJNsKRKBR3MvbIuSjCm4RlO4Kg7478IIHzHcgr8mpQhiGWv6hyOdBopIf98N6JRJruR172IQZnCHQb2kq0h8nDYdUb+HfTM/KdiBnz85Dd3aT/l9Mp9lriku8mXxYdGqWiZ4MG0nbPa5ctIzq371JkLtTjg8UVO5hSH0wHOoyJYL0u86Rzjba2GtOPxfjc9v5vyKJbNUJLJDfKDi06OYbCQ7Ef7hRuNz35Ut43wJwuASfnA4qsUrXbtR5Cru3LaAbgkiPa3ukzM+BoU0vWOB06nuJuRL3NxdOnSENM91dcY5FxGRInZulUc6naSm+JDg8DTaIZf/Vpr+ILej93ywFaftqHM2qInKJ6NKrFUH9Efg= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(366016)(52116014)(23010399003)(376014)(38350700014)(22082099003)(18002099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?uKHZd5SiuvYbiDgcnKF2RiPWdWW4Egc4/KIX8c05ueeNrRqF3rP1NAc+Ylzd?= =?us-ascii?Q?TLxLtszAplspLczQa89nXI0Q8Ottox/weUouPj7VR4Q66Tou1eOoT1/EBF0z?= =?us-ascii?Q?llt2UdmrQJeVGiNKi5Wdxez7P7rKYba3GMc1Id0pWOpYqlT64QqqVQuzVLp0?= =?us-ascii?Q?BgOmQIxeOb22jQeflAcxnoGsWc61JInRgNSELoRKu4rrvmtZ5guefXBR7le4?= =?us-ascii?Q?y5YLJX8m1cGIUMJ4sI3oa077FYmpzq4R8RrlXG9BVOADv9++Hd2S8J87ixhl?= =?us-ascii?Q?UgVL2Hph5f8qiCyfreE5RQm15ej+c9AN9cq7ItApM/D2SVft36tC4o+Egqjm?= =?us-ascii?Q?oWAbfTBcGD37nACdcREhINEFCH9vWXizblzsbdkTgBMiPJz5QqTqSl5TZRkl?= =?us-ascii?Q?oimSz2B2AAbR6lEZ2Sid3mPVMTbrG8QBg8l5Ln6/wA0eqY0qNVshdDRYZISi?= =?us-ascii?Q?+GT392zFg/KJcsj/xgbia1KPY5nlA61B1BIm+qk40My2DTFYW7eQpO9tMhgU?= =?us-ascii?Q?SjmnvkMNkIApV5xDdeWPTNbV49DvyMQAqmp1GYCvDLTIWV/6Dm9VhViCGa7M?= =?us-ascii?Q?yEOOVcaB5qr1XrTfF6/HcY8gM2yGM+TlnE0yQKXrAAaIflD9rtxWcrh8zscB?= =?us-ascii?Q?IWdhh1US2n3iRFtcX6kW2FjAsxhxvfqntyLTe4z9qDfG+Gk53GXLhiF2ZHoK?= =?us-ascii?Q?sPuxlkvRPenHeQXn/eLcLQ+L+Bm+aktdlhXS0wR+ulB2Rx8VcWGaiMLA8LE1?= =?us-ascii?Q?95ablFZKLmL2XZuccDclKdd7StRsBKbzkxgS+JCv26YluJheYhfpk0Sgxg3A?= =?us-ascii?Q?Sc8YofUxapGD+4BmDkeU0BRc77TFxJKA1lZEWlmiQ7VKf98iuoHEnNQQTAEV?= =?us-ascii?Q?mTGuf3cQ+FdXw3UgfFdsgB8TyNgsdnmfU+ufeG/CLzg+w5XfgyM9KowB4lYL?= =?us-ascii?Q?2rGGXWCVZtSIQ+UZdKB/OKZfG9jdYA3PFQ0KwKq8gYvu9AuprnKpze/joz+A?= =?us-ascii?Q?exm3GyToBY2UwDhmtrx3fZN2+u2H4LCrmRSoppWoghy94j+eRSmvoZ7J3rfM?= =?us-ascii?Q?v4SMsINWZlV87ss8jCARIOq67wcUU1v4YO4fvgF4knp24VGxaLpfxVidypA8?= =?us-ascii?Q?tnwXkjUPG+TPF2PV/cqWiLWXdHGrka78A3vLrfWSYMqwvPk1bc30iauKWuKP?= =?us-ascii?Q?FgV7e4odz3p+dt98mq5JRwK2OQufDnvop3/Bz1TzDnuGVF85O2rZ3Jk3JiB9?= =?us-ascii?Q?E9e++0aY3I5gg76ykCVWEnN2g4HnGreuTU1Ho3JiKAOC3VrlUxwERpEuwqAy?= =?us-ascii?Q?j27TzW+mXz9KP4qQ1wyuaG1kEteKrcxzTGTKTrUa4+nCiJ9fBI9sL/ZoYAQ0?= =?us-ascii?Q?hOZRrj9AsAnJtZS8RCO8G6ssyQLcNfCUQkwBtDhUtTO4lAJJ0Gjn0zAXBA8N?= =?us-ascii?Q?u2/yd0CgAXd9jaIHUjixYSE43E3rfs+AC9Tho900CldlJfArm3fpXEUT5/u8?= =?us-ascii?Q?87BPGiMqjo0eqA+MI4EaShJ8FFWtxQDMp7E2I5v9Vdk5kzNXX4QA1q4gpijA?= =?us-ascii?Q?z0txQLETqHnE+HLmsHwt9IAKsBuQ0YlEHo2GxfwBfloD5RrNcdbnATpI4YU3?= =?us-ascii?Q?QwiMLjuwPwZZlsHy9NjRg9cAqEB7Gci31W23IIEvKJMy0Ez8iuqEECprfMM/?= =?us-ascii?Q?k6WYOxh0kQycSzcBf5PTFfp/gNl3ldJtA9lW8OMtZdt7ZE7xckMEZ3k625a0?= =?us-ascii?Q?YPWSNRALoLRNg1IWU9JMPYwdmRQTClM=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: cf1b8535-98e0-4ab8-10c2-08ded3a28c85 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jun 2026 16:47:02.9952 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qoFaXGJgbfKs1lWLVtV5RYw6j2Qcp8uvi/VgRzOOGEbbfzfM5WH2Y6BwZuSw0Qxj2j/PTu+fQzApnVhbz/i7+iqezxbEIFeHXqmda827Mu4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6347 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c200::5; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DUZPR83CU001.outbound.protection.outlook.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1782492507108158500 Content-Type: text/plain; charset="utf-8" In vhost_vsock_device_realize(), after unsuccessful call to qemu_set_blocking(vhostfd, false), vhostfd gets leaked. Let's close it explicitly in this case. CPR-saved FDs don't get automatically closed, thus it is safe both for vhostfd obtained from cpr_find_fd() and from open(/dev/vhost-vsock). Signed-off-by: Andrey Drobyshev Acked-by: Maciej S. Szmigiero # for CPR --- hw/virtio/vhost-vsock.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index cdc58d58790..fd7ffa88990 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -161,20 +161,17 @@ static void vhost_vsock_device_realize(DeviceState *d= ev, Error **errp) error_prepend(errp, "vhost-vsock: unable to parse vhostfd: "); return; } - - if (!qemu_set_blocking(vhostfd, false, errp)) { - return; - } } else { vhostfd =3D open("/dev/vhost-vsock", O_RDWR); if (vhostfd < 0) { error_setg_file_open(errp, errno, "/dev/vhost-vsock"); return; } + } =20 - if (!qemu_set_blocking(vhostfd, false, errp)) { - return; - } + if (!qemu_set_blocking(vhostfd, false, errp)) { + close(vhostfd); + return; } =20 vhost_vsock_common_realize(vdev); --=20 2.47.1 From nobody Sun Jul 26 11:51:04 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1782492492; cv=pass; d=zohomail.com; s=zohoarc; b=ck4uv9CnbHkDqXk/WLVy0bB7I0BpK05VwqAUFjZwyY5b28Qiz80SJWP8nKwEovYyvxQ2KgUwOc46IzuzFq+WtuLMw94FQip6J9vPhFsfG3KTyivQp607tRqBV4xawoRjj5UFXiRCo0Ck2z1JS40gUSA3PuW3PHdBa6PwWz3q/HI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782492492; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FUC6D+LgkBC0rkJ+yCa8sXMN3VYrvbVXc7tbsMkaYNI=; b=VyFQp1DYsY7H5g2YIkqFbQp2wI2DPSL365dyV3eZUzXBRFVSThG+JiUnWLGEKaFhxMLVNpIvT0cP6ShXHmRj5rBLItZAxeAnG9IGy9dRiKLKw9VxQEbUypA7Pt89Z7915UJBNuHVF2WkhY6i5ey+BRsbNN3UBzMp3daMIF6hEmM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782492492403109.8991450939809; Fri, 26 Jun 2026 09:48:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wd9iA-0001Q7-4b; Fri, 26 Jun 2026 12:47:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9i5-0001PK-K5 for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:21 -0400 Received: from mail-northeuropeazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c200::5] helo=DUZPR83CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9i3-0007dq-Pq for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:21 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB6347.eurprd08.prod.outlook.com (2603:10a6:10:253::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.17; Fri, 26 Jun 2026 16:47:03 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%5]) with mapi id 15.21.0159.013; Fri, 26 Jun 2026 16:47:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YX7rC6NBrbKrwkiAn6gEDDAfi1FxE2cYA/SwWltwL5nhKLvMPLH+UX+xdcBpj8rUNcdvjvoPjYu0YkA8QVGcwLS2rdQy5lel5WrH7g7ppfS9uqmq6TR+mkf7xkt3RPUm82b/hiOI7BoGYEnzG/Ybp0xWJCClPvg+EKs4mCuHfhXmcINdjLnkuSOUNn2XfnAKxHVA5XQKc++yW1AyGz925jLQrekBjMs/a4dV78TXBBzqtIruryRK0S5dxwWYbIx+zg5hwT5SDOjTmX0GDQo1TMU8zULyLo13VJpyyzE2TM8UyfK9UGToAe01HTOJK4MDnynQLi8drjbvlM+exPeLXg== 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=FUC6D+LgkBC0rkJ+yCa8sXMN3VYrvbVXc7tbsMkaYNI=; b=hAjsazQoAU2DWoPKyeNXDTjFHHrPuK46WfgHrR1fOHRVSaUcFPAgCRja8QVeJweoH4EJXqmkpH9J9g+wzNSCamtpuiH5G1ZjbpWZgIYBRY3paC77vOjBPWl98qtYE0k1wVUOGxkylX/ctFQfMnUPwSVlD8iw1HwTspu1LvTHxomXvXSZ2qsUGaJsOqS+CT0oJsgNOS7Qjrt1eroLX4q1KuoF488im5teU69Um8g5hL/WUrnoxqfCN37hzR3UBxvCsdKaDxn1aSB4wrY+7bcdpyNtaeX6pkrNcozNgOvkgKjjxG10ORoQsZ9YeGwcdpi5GoFF13IaCBSja7JisfBMhA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FUC6D+LgkBC0rkJ+yCa8sXMN3VYrvbVXc7tbsMkaYNI=; b=oBD3oMYG9HgSCMG2+qIP8Yw90zBtqkWw08PzBlmNmEKfGOy/Dv4wMmGlbrM07Xe9WiGzxpG6ZK5ce68j31vWLNcLs+DxjwYzsB65Y0BqN2xmXx3ixLhjhi0JIS8Lws1Dqdppt8KDZcDAHz4XNL4cMM7FZxqhsMYglEFeIhWNhT+26a32JjSLRpHco6BX2nGsIiLInaZGgg/wGFbOQPyo/4t3YZZ5972taM5CJFAIbri2aDXaPmo5uHBKAekY3FP++8EAYTQECWazZaY55M8Qo1rncE9BWaOtPsvSSALwFnXtDQiv/Xf2uEvAO+UDlsO8MCBDx+TELvB/n3ASpDSi7g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev To: qemu-devel@nongnu.org Cc: mst@redhat.com, sgarzare@redhat.com, farosas@suse.de, peterx@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v3 4/7] vhost-vsock: preserve vhost FD during CPR Date: Fri, 26 Jun 2026 19:46:40 +0300 Message-ID: <20260626164643.2526-5-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> References: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIUP296CA0088.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35c::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB6347:EE_ X-MS-Office365-Filtering-Correlation-Id: 89900135-f04c-42ae-2425-08ded3a28cd9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|7416014|366016|52116014|23010399003|376014|38350700014|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: 4QyDps7oJLt9kcNAS5zPH54FVV91wDoPoHhciTjnt4ZISk0xHACmhNn1PYl7yP/mXA2sle3f9aSoGofu3ahxCpQVlqjwT40orVTgTe2rh/S8lZPBPyB6ipiPUQ2r1fj98xx/Ahjvm9nlEiwZ0q72t4gIaXPQvk3f7z3716KHZruX0IzsDzxQdEho94WqiBEQSpki5fCzoiniSArWLVRa577qtStCzV3DgGQ25b5oburDTmJQwbahuLTVDTxtauj7VK15HhQCbJrGi0nm8qzwbcR2wB9oaSXgGaizj1qiWfMcjFGEkjQG+0xbcqqhw5VXCj2+7GNs6vUMzQzS3UpZdgCtcYGErHuiFFDhTBh5+uA+2TSGS9PiIuF5dYH7+HcHzGBBE8uOCdwTzqU7S5Do3lG1sDs8TE9LAZMykvrrkpcPKdTQT54wKX4WVq3UnfU31v4f5RjoFqdm7gWM0vrIkdXGvRCgmvofkyUkF5eTj80OC+mGy3bq/3dU7svmYXl6w6UwGYELQqO9p9Rb9DpQP2X4HZa4nHpNMGzDQavdfo9VuDA6/59uzErNSMne2oc78dzirSan0fe1SyeZZoqUJYJ9Ezl/xvPy0r+wruktK6WWGf9pe/9Rchw3ZJBmxIdUjiYbOx3n6AVZmdAE4g/IpEHvj+0Jk9ltgi3MUyOygxepN+TQApKzLRQSav9PuXsDthXE0rWHr3pem7gVRquQXIAuJ2/FuNNa+tDNPTACK9k= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(366016)(52116014)(23010399003)(376014)(38350700014)(22082099003)(18002099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VYQPy7PwDE6PqC6TIdTvoKA16Xw1b+DnamGmfaNuGrgMweX38joBoyPxeNTv?= =?us-ascii?Q?szKP1aSPo8Kj8WxelD8Tpd0hcMw/m4gPZ33OdJLp+LoRHXqriqm5Fq6x6YOD?= =?us-ascii?Q?ORUXAZlX45ou42yNBu6RGgU9LsM2VmsqtK9goDkeMgaQaKWLA7NVql62f4Hy?= =?us-ascii?Q?tk+7wYuhKPXDpDVQqHu8AFmJf0X0cshuYA6BNEdfPGHxdOMs/GK0ouRJj+b8?= =?us-ascii?Q?SviWfYJMnKjhM1bUUstqpBlidiJTqran9sBzud3Kg17j7ZKwxqH/K8595V49?= =?us-ascii?Q?iAQE5yEXJedbxCl+5loiMEVj2LQTziOxLbSTBlW6Ooaw8UxT5YUOmH2Eu5Vl?= =?us-ascii?Q?ouX4mhEH/PgUUZuUmeSnfhXvnnfYhzhR659NB/+2xWLQ02OC033137HT5wZn?= =?us-ascii?Q?vZpO1JayRROiKV7/Q9nLpDABC8hpA7/DjrnZ1mc5UoPiXo+OW8YnElhw3/Ki?= =?us-ascii?Q?dV32SMnpe4T/K5NzUrlxgTauUK1reIqUkdVpwJOlmR1zoSqzfcCmWq5lbSGz?= =?us-ascii?Q?/zLNpwdv2wb3h43vj3wrw3F7rUosm3SEVIb8FEsmZa3jcjo4PjHec3SYmRP/?= =?us-ascii?Q?nd+XQ6HWtB28LFh/qZv1t8JkqxD3tGh+y0mjMbuk7QX+UO/gjbgesmx/omJd?= =?us-ascii?Q?nxXDv/4LvfSMfeHFuRhLe5Js2o4WeD0NQZBz/SLGX8gxhYdNoYMvfj/VxQoI?= =?us-ascii?Q?Kb6/zEQBpGAmeYl0b34rbIpdVPtAG5ZkPv9RuHl4JRIDp8NmUFGatqXEJ3hw?= =?us-ascii?Q?0xSAREujDsRhLwdZ3Z+0/D86q6/yqV9m+51+77LuqZ/tcdTktKxnOizER5sx?= =?us-ascii?Q?ZRwrLg2l3/KhuYpIFVx76d7pWoOC5qeM7Q0fe+LL8bNxACAsy3OafFXy4T9c?= =?us-ascii?Q?4ySBAQQ7wC5/q3d668n21Owi7eXVizV/ElguKvb7B3SzEOTkzuBGu1DQLlCd?= =?us-ascii?Q?1lsaQyPC5IZ3CEiQa0sR+O/G5jZpCEs90Aa7LpbhAS7sioUSR3h5nYUYoV5a?= =?us-ascii?Q?1/dn2LqElJm8gaSztpJ7yGPpH4uBr5918temiaqu8wtd9fI0tkbIoMstUGpu?= =?us-ascii?Q?aXezixBW2HzxOd8pqUI1Uyzj1DPc4cpixrT+XEbbT6ztnzbtJ+NaO8AQqCBl?= =?us-ascii?Q?vC30CgkQX0dgLbYo33CO6QrVcr7yJuaLhGpT6pDN1n5+qE1kUxIs4AK23Z61?= =?us-ascii?Q?Rk8+bGtn8BseAvhhs3R9QcFfFPOuQcE5Evte2BMXwL5snYzik30ILfdiCPeD?= =?us-ascii?Q?OUkortf7ada3X96Od3N2xAhshrz5zy+DvXN/U0I3Uvxin50/JlsMG4ZRimZl?= =?us-ascii?Q?PhPuJTI5p808ZjIE/orRr0th1upzOTleESg3q07lxqZfyGu9YsH3vT6rEx31?= =?us-ascii?Q?apQljnujrljjA6ErNjvsX2K774FfLAZd6rCZbvY7On7w6o396XMTpAZN2BT+?= =?us-ascii?Q?sVSrV4x5NA0dJIVYtgf2Chyy3+8MFuwItdK66k+2VPLs4SjyQezLVCaQbDU0?= =?us-ascii?Q?O279uYxjO7wytcN2YsebL5Xf81Rf2ISmh7+2F54MXgdCaSbjzWuVJj6XLzM6?= =?us-ascii?Q?wmWwmGqFQgecsx1PkTM93KmeuI8KrQRumlF9j0JT0kgx+PgUnGATGt7mwlqJ?= =?us-ascii?Q?roTUAwR4JVfXG/RnYOjGR8Vp7kzDzGcKr4LKiHu51Fji5EJQIaZzIl1T7VAT?= =?us-ascii?Q?TKIqrG+CFpmi1tR8/HzcDeIhoyF2a4VWKb54lbgE6TNMCvUz5uD1D9FChpAU?= =?us-ascii?Q?u+gPubhGSY/7DwkuxlksKO3iNieCQ1o=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 89900135-f04c-42ae-2425-08ded3a28cd9 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jun 2026 16:47:03.5655 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TTpeWqW6ZR4AQyNfTZf7FEnPQXmzokbpzOP5jChmu0U4drYqUAkgF+HrYZf1OGO9IYV0oIdTeqjpdXYZ0fi+l6oCDTmx7rzE/dPytt9eaTk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6347 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c200::5; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DUZPR83CU001.outbound.protection.outlook.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1782492494784158500 Content-Type: text/plain; charset="utf-8" During CPR (checkpoint-restore) migration the guest keeps running on the same host, so instead of reopening /dev/vhost-vsock on the destination, we should reuse the FD from the source. The FD is saved in the CPR namespace (hash table) with cpr_save_fd() and then reclaimed on the target via cpr_find_fd(). Since the key in CPR hash table is device ID, CPR needs a unique ID. Rather than make it mandatory for every vhost-vsock device, we add CPR migration blocker which only fires once we attempt CPR with ID-less vhost-vsock. vhost_dev_init() (and thus VHOST_SET_OWNER) still runs in realize() here. Deferring the ownership handoff to pre_save/post_load is done in a following patch. Signed-off-by: Andrey Drobyshev Acked-by: Maciej S. Szmigiero # for CPR --- hw/virtio/vhost-vsock.c | 50 ++++++++++++++++++++++++++++++--- include/hw/virtio/vhost-vsock.h | 1 + 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index fd7ffa88990..7eacb608d07 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -21,6 +21,8 @@ #include "hw/virtio/vhost-vsock.h" #include "monitor/monitor.h" #include "migration/cpr.h" +#include "migration/blocker.h" +#include "migration/misc.h" =20 static void vhost_vsock_get_config(VirtIODevice *vdev, uint8_t *config) { @@ -141,6 +143,7 @@ static void vhost_vsock_device_realize(DeviceState *dev= , Error **errp) VHostVSockCommon *vvc =3D VHOST_VSOCK_COMMON(dev); VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); VHostVSock *vsock =3D VHOST_VSOCK(dev); + DeviceState *proxy =3D qdev_get_parent_bus(DEVICE(vsock))->parent; int vhostfd; int ret; =20 @@ -155,23 +158,49 @@ static void vhost_vsock_device_realize(DeviceState *d= ev, Error **errp) return; } =20 - if (vsock->conf.vhostfd) { + /* + * Having a unique ID is mandatory for FD preservation during CPR + * migration, thus we add migration blockers for CPR modes. + */ + if (!proxy->id) { + error_setg(&vsock->migration_blocker, + "vhost-vsock: device ID is required for CPR migration"); + if (migrate_add_blocker_modes(&vsock->migration_blocker, + BIT(MIG_MODE_CPR_TRANSFER) | + BIT(MIG_MODE_CPR_EXEC), errp) < 0) { + return; + } + } + + if (cpr_is_incoming()) { + /* Reuse the fd handed over from the source QEMU. */ + if (!proxy->id) { + error_setg(errp, "vhost-vsock: device ID is required for " + "CPR migration"); + goto err_blocker; + } + vhostfd =3D cpr_find_fd(proxy->id, 0); + if (vhostfd < 0) { + error_setg(errp, "vhost-vsock: could not find restored vhost F= D"); + goto err_blocker; + } + } else if (vsock->conf.vhostfd) { vhostfd =3D monitor_fd_param(monitor_cur(), vsock->conf.vhostfd, e= rrp); if (vhostfd =3D=3D -1) { error_prepend(errp, "vhost-vsock: unable to parse vhostfd: "); - return; + goto err_blocker; } } else { vhostfd =3D open("/dev/vhost-vsock", O_RDWR); if (vhostfd < 0) { error_setg_file_open(errp, errno, "/dev/vhost-vsock"); - return; + goto err_blocker; } } =20 if (!qemu_set_blocking(vhostfd, false, errp)) { close(vhostfd); - return; + goto err_blocker; } =20 vhost_vsock_common_realize(vdev); @@ -192,6 +221,11 @@ static void vhost_vsock_device_realize(DeviceState *de= v, Error **errp) goto err_vhost_dev; } =20 + /* Register the fd for a future CPR after a fully successful realize */ + if (proxy->id) { + cpr_save_fd(proxy->id, 0, vhostfd); + } + return; =20 err_vhost_dev: @@ -199,16 +233,24 @@ err_vhost_dev: vhost_dev_cleanup(&vvc->vhost_dev); err_virtio: vhost_vsock_common_unrealize(vdev); +err_blocker: + migrate_del_blocker(&vsock->migration_blocker); } =20 static void vhost_vsock_device_unrealize(DeviceState *dev) { VHostVSockCommon *vvc =3D VHOST_VSOCK_COMMON(dev); VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); + VHostVSock *vsock =3D VHOST_VSOCK(dev); + DeviceState *proxy =3D qdev_get_parent_bus(dev)->parent; =20 /* This will stop vhost backend if appropriate. */ vhost_vsock_set_status(vdev, 0); =20 + if (proxy->id) { + cpr_delete_fd(proxy->id, 0); + } + migrate_del_blocker(&vsock->migration_blocker); vhost_dev_cleanup(&vvc->vhost_dev); vhost_vsock_common_unrealize(vdev); } diff --git a/include/hw/virtio/vhost-vsock.h b/include/hw/virtio/vhost-vsoc= k.h index 84f4e727c70..5ebc63afc5a 100644 --- a/include/hw/virtio/vhost-vsock.h +++ b/include/hw/virtio/vhost-vsock.h @@ -29,6 +29,7 @@ struct VHostVSock { /*< private >*/ VHostVSockCommon parent; VHostVSockConf conf; + Error *migration_blocker; /* set when the device has no ID */ =20 /*< public >*/ }; --=20 2.47.1 From nobody Sun Jul 26 11:51:04 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1782492464; cv=pass; d=zohomail.com; s=zohoarc; b=ZS4F/mhRs45CgEpebj+ZzyZkOZ64El6NlsZkkMiyShYMGLIhkPnr70fqTKUj1UBeE1HbfQGo3COAW+D/7soqlbpG3UxmaO2WQENmGKpfXhzhetgDiZ/v2DOEhX5CF4RCrACqqEu/bfS7f3lkDP2GvoKWyY0+Fa2SyccwwP6DJfk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782492464; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=W08jAF0pKJhrQ+4ppVNjAlJR1Ujw9iR5wxfeUtV5aEg=; b=EJ6EIR88dKkOs14BYc88a+AGtWT6oeJ7tAD0QPZJBw7BnqgjiJax3OhwwWjhK+VrWSkva2JlTnGLkbwLi/Sc6PDshyOzKt4HPd9URnEgb3hCQ1htiELgOEZX0iNCM6KI5HjDEZwi7MZH8vRZZr53oeHIOzCWSWgspo82WFDv1Qs= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782492464599695.4846806870974; Fri, 26 Jun 2026 09:47:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wd9iB-0001Qe-W6; Fri, 26 Jun 2026 12:47:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9i7-0001Pn-N3 for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:23 -0400 Received: from mail-northeuropeazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c200::5] helo=DUZPR83CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9i6-0007dq-4l for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:23 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB6347.eurprd08.prod.outlook.com (2603:10a6:10:253::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.17; Fri, 26 Jun 2026 16:47:04 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%5]) with mapi id 15.21.0159.013; Fri, 26 Jun 2026 16:47:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DTy5I6WAeXsoKe5Ns5x3B8gj7lK5sTQM8qPZqkYp+hL5k+mRwJftRztdGr0nhDugqtknOCEg/tDF/KVMT21IpJ94y32oh+eETjjcGTm0xhJsWUIozQti5e6Hd4ANUdQ86VamilbtlApxE0gyhK2P/PG9diyjI4UuD+440W7Ia+kKrlkshgMaHAQWFBNIzgCS5JuD5fF9rpv+dpicBFl6BIzsMM2D22GfIOSpXY0Nl3toNdRkww1IqrNNaRNy6r3YnRXsFxoJmAhXv1XhzeV1q5adrST4XIndnXBJJtYQ2c/xsDWY/OQ/r8pXSv1ibX4yOdPCVCQc3hgknaTJyd4C9w== 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=W08jAF0pKJhrQ+4ppVNjAlJR1Ujw9iR5wxfeUtV5aEg=; b=wfFlidcrD8rDJXdMITbIelJCmksKUWtXLh6zUAEB9Dnr4QKYk9RZ1L/BHa0Ltn9MGXdz1HNaBxxrqgWaKdo8EpvyK/H8/JYCaVUaCqa2Qx6bizuVf35f+E6zXzsxIoE2WPj3iqqMpvaP6Yoi8UpLpnE+FG6TYKJRCaEWL5j7aZ6K2th8zuNix8mmXLUOcRup9XK5GLV1pqYUb8cq/aCwU1kwla3oG+dR+Wl0NIzuAYnn+wQ49hHgK8XCbJepG7hnNaGWleil9xkdr/WLGlBznJL6ycMGR7khDpXngoYbTxm5lu6lbxbV4voUqpTLTYOdzFxhYBjyOp3IzUyN2hftGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W08jAF0pKJhrQ+4ppVNjAlJR1Ujw9iR5wxfeUtV5aEg=; b=AyNOm+Iz7zo0b1ambCyT+lfbSFHiSe2GNw4pfPxkBNbAKLgOHhBxa6IraG/WBfvApBBf4vWQXOrmnEjIw4Mh0l7uKW5+S6IUdaP/IVuyJDgI4QQGFoJjCrasc0DuIfyOYALE9DU9tQIk8Rih/EqhKeHCVMuSJu4V0IuDt9WfHRMrhc2gh+ISmh21aJ8mjwLB6i1vsT4eBy8xxz4IAWaAdbKwomsCwdEywHgbHlSgp3/emkyr+ITfqyvDQIbrOvfNyYDQlY5atpYZ7DN0pZys82nJC3Bn4AJRlCVwmrxSwveZCB+VsEmqwx90VDvCnpZ624Z+xmYXeb2Tm8hEob0HSw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev To: qemu-devel@nongnu.org Cc: mst@redhat.com, sgarzare@redhat.com, farosas@suse.de, peterx@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v3 5/7] vhost: factor out vhost_dev_init_backend() Date: Fri, 26 Jun 2026 19:46:41 +0300 Message-ID: <20260626164643.2526-6-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> References: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIUP296CA0088.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35c::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB6347:EE_ X-MS-Office365-Filtering-Correlation-Id: d106941b-681d-4203-e87e-08ded3a28d29 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|7416014|366016|52116014|23010399003|376014|38350700014|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: oW5JIwdBoLwIbG5//qyDs7wUZoXmz8MauGbU4gmI+/2V5WLmnmfUoos+5bg/UOVMT+Wr0YoiW4iP/JQhqKVYfx6ov2DHwvz/rJA+1LjxbcRtGrYPJ33pDDU/yst0G9wIIGPLHxT8Ev3dO+NArltCLzchAuLcBC1v1ozcN8PiHaBg8RP5V6NfszMvhNOY97E4gR8sccrYo5RXU8/IfqbdJNXvAXCWrGSRwxLREZqWXUKWou1CEGuNKRz2oKXAG3FqgRFm+GzGAySiTU6jVY+Ez97w+tu+SDnH1IyAz0/z747CBf1So+XybGPmSZxaLdnlY6Gf1udAjHNtOQXQRW8MSEYxa4JnTgQH0ssShhbRMOoxOicbtmNE3iaEMSesYFeCCEX0YoatHpdVoKjs4g+8a7NZYV0HlfPrpZ5RwBEmGF1UEI8yta0MIrUUn2O2JRs1qP658Nig2Dwt3IGRehvWolap1IZc/xZ4enzJz9TScsDNndJR/c05zun3inTr9tpEK+AYUBDpB6e791PPMiVTzByNTDMxjgw32W/ydR3hhZd93S/qHud9AI5cRLwwtNsnRN9D9lVLN6xgt2bYo9zdIRkWryureUoa3r3hmTMZc3tghx464GVG6EKjOeOKgGo75ei3O6LEniWdaMaBD/5A8KsmmRSt3AkFKvtHRbaT6+z8mGm7P/yUh+jNcO6bpfORlntbR2tqtWN870ky32mNaHdYgST0hJJzURTg5VkxFHI= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(366016)(52116014)(23010399003)(376014)(38350700014)(22082099003)(18002099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?HZs5t1diNmGL5hw7kMzjESgA6vRwY0Bp3NSR1R/5TeSq8XOCuYDvpYIjEMwM?= =?us-ascii?Q?c17HMbSl9PbPZFXUKuBnJGflCoQzFTf/f4o2TFwQVUvGkF2r+smJnVmbtVpf?= =?us-ascii?Q?xZlkCTTqAvweeG0rv5yytLbtLjpq3nranu81jqw0nzrFikyyMjlCAjEMT17P?= =?us-ascii?Q?P1em6/lgvucMeA8XZ0XJQaifh7MnFznaBfm/3JAgvsRmyWLi6GetYja9tYaM?= =?us-ascii?Q?2OXROGFEQVTAD315957eh8tlU794H9t0ZAah42UlQTomMadNgJ3/HeTx+W1G?= =?us-ascii?Q?cBHflEqf+fPOD9IjxNfb8mwkie281j8axpWmB/xsdkgq4QVAHCV4pbcyJZxU?= =?us-ascii?Q?7KI7I8mwhZiu2Zckmi1BxfvXKOURUrxUuf8GzEWy7kNhp0geJ5bGgghmPnex?= =?us-ascii?Q?3slQjEHhWKcHErXu3vABvKO8ObIO36zXzQZ7GF9mUJKO5wunf9bXpdXVJQJJ?= =?us-ascii?Q?coU0iq0RSHpQNycqZVWInAiXoUBaG52kPrdAnn3hdRkxglQWhSUhIhhd+zpO?= =?us-ascii?Q?1+r6DD4gEw4trO4IeNmUK93pTrqIBg2y++sGM5LoNXuAVcinGRR1e4YlN1eq?= =?us-ascii?Q?Tp2KE2/kg19q8sqqVJ+agk/snQrqb1/ZCUowsZwdvUWnZ6PBl7A99SKt1rxH?= =?us-ascii?Q?eKl6q4xBP63CY37H2voIDi8lDRSy607M04OwHejcOpbiUAVQYRSi06OuIAwO?= =?us-ascii?Q?m8yKpFNZFcUoxfG7gheeMBQRn7Q9Ul97r3edt1M9NHL4aHg6aH6xO2XHTsCz?= =?us-ascii?Q?cCMbB+P324UKBoF+ZhaP9QUFF+UNI7y6VAxqLTSAzMFtymGmSUL8anhTA3MD?= =?us-ascii?Q?8ju5+sOqJw+vKf5EBRc84qX42N+quhSCYuMB7Caev5byui/zvOjFDDUQ9nGF?= =?us-ascii?Q?Zb6VOiMOq+CbHwv9Si0vm4pTBPgIx7OrY7mNc0nOKllNqoveqOtqCp7NwhBm?= =?us-ascii?Q?9nxr8ejDIaiQI+pNIDYFK9N6lX7TQnlZibqTTmSDAYI3uvDehlLlszIxCMDE?= =?us-ascii?Q?UBC9Bakvenh8kQ9PHbr+leysX9vp6vETjGTldAHqbyMVcDXnwsNChqEbe4Aq?= =?us-ascii?Q?RJ4eotFzuzuF/8FqkFGK6YCfdpSBUVynnazaFJdVD4kaQ1w4TsoUxzaFR3t+?= =?us-ascii?Q?z2eH8SbluHK52AYxJnfgOI7hcwbNVbu9vUvjV2cglVWxgY/36dqug89zggwY?= =?us-ascii?Q?u00EfS4P7ZqVW1z3L5tohROdBNXICEM/SFem7uMoZkqA+p4Vy/2aqiVf4IVg?= =?us-ascii?Q?DPumDLD5PcRI1W7gSsmVihI5q3Aa9OkxuudwCwKJ6XuH2w1KGE9/JcrkNTr4?= =?us-ascii?Q?WiMSKCZjwj3eozNBNK1tdZ6AgrdVxiUHbcHinTIwx3iF2A1/8sJ37B4vG6lz?= =?us-ascii?Q?XdOUcq3pauhPMOFgTnPzuG+Dl4+CBe4PVf/1pcXN/UB7t9gURPlpExb+7mM1?= =?us-ascii?Q?8ldb7+cead9Z17ji7ILyvyeHIA4kv2P55NOINCCVTFjszUJUFM5rnmDIlCpc?= =?us-ascii?Q?+DE/IQwTUwFZm5yN/ZNfS3wfGWhkYmj1svKozByTdg5yeSJjx5G7cAZoHaIa?= =?us-ascii?Q?Tbi0qRk04ZnLiRAe35w2BfrkQocO3YrGiQDPiBIf8DNQHTuY2bOchzH+hh2i?= =?us-ascii?Q?FIILfXI5QQMx49S1smKq5aPLzc9A/js9YZQfxa4h4wzPB9VbP9pWEM7UqdfF?= =?us-ascii?Q?o5PZlozvslf+qjH5XUmmN23Vs86NkGsB9+7jNlb/SWREKJF/m30toS0LYdZK?= =?us-ascii?Q?5OMz7702UuAoQjb3bOmBmfBM6i3MZhA=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d106941b-681d-4203-e87e-08ded3a28d29 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jun 2026 16:47:04.1523 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GNyA0jcW9qLj85gh1w3wGCnoq7d5bbpVGhvUgmsbXos8nscSz8EbebiaHl43bEksTbfiqL3/CLXPChFmrdW51NEYfKsPqxTj+f86U8Amuaw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6347 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c200::5; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DUZPR83CU001.outbound.protection.outlook.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1782492466139158500 Content-Type: text/plain; charset="utf-8" Split the first part of vhost_dev_init(): selecting the backend, calling its .vhost_init() and reading the supported features - into a new vhost_dev_init_backend() helper, and call it from vhost_dev_init(). This is in preparation for CPR restore of vhost-vsock, which needs to learn the backend's features at realize time to negotiate them when loading the incoming virtio state, but also must defer taking ownership of the device to post_load. vhost_dev_init_backend() does exactly the pre-ownership part. As a result VHOST_SET_OWNER now follows the feature query rather than precedes it. This should be safe, as no backend requires ownership before VHOST_GET_FEATURES - the kernel and vdpa backends do not check ownership for it, and vhost-user already does query features from its .vhost_init() before set_owner(). Signed-off-by: Andrey Drobyshev Acked-by: Maciej S. Szmigiero # for CPR --- hw/virtio/vhost.c | 33 +++++++++++++++++++++++---------- include/hw/virtio/vhost.h | 19 +++++++++++++++++++ 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index af41841b529..f11588cc51a 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1667,6 +1667,28 @@ static int vhost_dev_init_features(struct vhost_dev = *hdev) return r; } =20 +int vhost_dev_init_backend(struct vhost_dev *hdev, void *opaque, + VhostBackendType backend_type, Error **errp) +{ + int r; + + r =3D vhost_set_backend_type(hdev, backend_type); + assert(r >=3D 0); + + r =3D hdev->vhost_ops->vhost_init(hdev, opaque, errp); + if (r < 0) { + return r; + } + + r =3D vhost_dev_init_features(hdev); + if (r < 0) { + error_setg_errno(errp, -r, "vhost_init_features failed"); + return r; + } + + return 0; +} + int vhost_dev_init(struct vhost_dev *hdev, void *opaque, VhostBackendType backend_type, uint32_t busyloop_timeou= t, Error **errp) @@ -1679,10 +1701,7 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opa= que, hdev->vdev =3D NULL; hdev->migration_blocker =3D NULL; =20 - r =3D vhost_set_backend_type(hdev, backend_type); - assert(r >=3D 0); - - r =3D hdev->vhost_ops->vhost_init(hdev, opaque, errp); + r =3D vhost_dev_init_backend(hdev, opaque, backend_type, errp); if (r < 0) { goto fail; } @@ -1693,12 +1712,6 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opa= que, goto fail; } =20 - r =3D vhost_dev_init_features(hdev); - if (r < 0) { - error_setg_errno(errp, -r, "vhost_init_features failed"); - goto fail; - } - limit =3D hdev->vhost_ops->vhost_memslots_limit(hdev); if (limit < MEMORY_DEVICES_SAFE_MAX_MEMSLOTS && memory_devices_memslot_auto_decision_active()) { diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 684bafcaadd..bc81e09663e 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -156,6 +156,25 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaqu= e, VhostBackendType backend_type, uint32_t busyloop_timeout, Error **errp); =20 +/** + * vhost_dev_init_backend() - set up the backend and query its features + * @hdev: the common vhost_dev structure + * @opaque: opaque ptr passed to backend (vhost/vhost-user/vdpa) + * @backend_type: type of backend + * @errp: error handle + * + * Select the backend, initialise the backend instance and read its suppor= ted + * features into @hdev, without issuing VHOST_SET_OWNER, setting up the + * virtqueues or registering the memory listener. This is the part of + * vhost_dev_init() that precedes taking ownership; it can be used on its = own + * so feature negotiation can happen before ownership is acquired (e.g. by= CPR + * restore). + * + * Return: 0 on success, non-zero on error while setting errp. + */ +int vhost_dev_init_backend(struct vhost_dev *hdev, void *opaque, + VhostBackendType backend_type, Error **errp); + /** * vhost_dev_cleanup() - tear down and cleanup vhost interface * @hdev: the common vhost_dev structure --=20 2.47.1 From nobody Sun Jul 26 11:51:04 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1782492462; cv=pass; d=zohomail.com; s=zohoarc; b=WARxs0T2R8DYcqXQwPa7rrW6jac4zNtiCnGbfLGAPj8FPWRMJ+bsZ1fA1YIQr7pB+keC+tMmdqFSuOO2ogodA1UH9J2YRrD05Vw17X72eMP37VqiMT2eB2FMnNH8HaOs6HuDhXvVYD0nCZU0zCeqQWdItH74zDdrijxrpccVBt4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782492462; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aWjLJ/q9dFHjP0mairF30QN8tLMnE6pjHjyFGjiaNPw=; b=axFYf/jkc7fxbz1quTannW0Mut95qZFovTAlSjhJyApqZSH+k40SlWQtC53b/AlBuV5ETCwR9Xhlta7ev5phiRUBGomkZo6MyKFtQ2ZPRPl40xEgoVIjhxKWZ+tJq6FoyqTr5V4l5SRibnmrso464QbZoHPm6SnToAZnsTXlZyY= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782492462583663.5558948255222; Fri, 26 Jun 2026 09:47:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wd9iB-0001Qg-WC; Fri, 26 Jun 2026 12:47:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9iA-0001QD-17 for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:26 -0400 Received: from mail-northeuropeazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c200::5] helo=DUZPR83CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9i8-0007dq-6I for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:25 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB6347.eurprd08.prod.outlook.com (2603:10a6:10:253::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.17; Fri, 26 Jun 2026 16:47:04 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%5]) with mapi id 15.21.0159.013; Fri, 26 Jun 2026 16:47:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=voyx+SagNpvnurCM0+2XxoCToR25zDuMvPsMzPvoDAMnRMDVrmjTzwvUtRUiMycFvwD5eO1K5i7DA26MURcCk0R5mth8X0f+eyDWEgi8TMJUT+b7Pq+7F021UttcM+So+DEajxiPjU8CgJ5DFrlUpkQR5zUPAmRIoRAuQU4aH0Bf9BbZifn6A34T83kLY26/z6e0yQq0WkX/ggx2L+0TeR5X+zYTIlS3I0cRKHJvZFmlMHrlphM9NPkAwlPKx1vGXF/dqZed3yiUadhjij64Kvozh7OwnteiQKBxQuNKwHyf0Ks0TUUU1sEGpZpvWLtF+1CiatE3hheqnLuZzVuS9A== 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=aWjLJ/q9dFHjP0mairF30QN8tLMnE6pjHjyFGjiaNPw=; b=UWMYZNGX/9qfiyEP4aoYoaPICK7k7OqI4QLvo2UluZwALQEjmXWYt1uM3USF6LVxmeNTaXF4aGvkvZLt1VqjWhL58pMVfFU/qvyXoXB2GfDlQ+bOEkpjFx6BXDvfjWQMHvKJfTRq37JAQsoaXG5ShZl46ShKCpK8yiKC1dqgxHmXgVobH+r0/0UkV9xhbryKYlsqFvtlWKobZ/sG4dKT2X4xqJKh8yzq1ak0/1NOnE0I6lRzv/Qwpr6o9e4eh/DMT4a78+KWPDmHf8NMw/SFgRtRDR62a9hM6Y2CpaG+s/JOA8HFzNobmayKEfCTTbr/a4oxjZ1UNxG5LiqKLOFlcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aWjLJ/q9dFHjP0mairF30QN8tLMnE6pjHjyFGjiaNPw=; b=yNqTTteuamDSkTdWinMzMKo3nfgrmTwQz6hzPZmrfdOVZwmODtInUj7+LQzMVecgkOiL+isjkIhiq/HeL96Yt5yLqZL4XONrMixOMxlKxdqHn3RiMeGgJPP5yc2Lj4KZ3isE+La/AmZ4CkpQXUV5gFqEnBCEyEF/y0YfpL6f4Y1upJsFcn3aSxd7YxPIBguyB+LCE+408UN8Z+qlC3htLjuosaJRmkUBFmKkMNlF5MxBNvMurYL9FfQH4i6/LfFzdTq1bMynU6impqGWlmelToQLe9V6guJG8nqaiO7RIuRzOpSHPCvOoUzUSCVhYvVf+GL7upZzmxeS1FqDM+xEAQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev To: qemu-devel@nongnu.org Cc: mst@redhat.com, sgarzare@redhat.com, farosas@suse.de, peterx@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v3 6/7] vhost: add vhost_dev_set_owner() / vhost_dev_reset_owner() helpers Date: Fri, 26 Jun 2026 19:46:42 +0300 Message-ID: <20260626164643.2526-7-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> References: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIUP296CA0088.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35c::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB6347:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ab22af1-2245-48b9-6ce0-08ded3a28d8a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|7416014|366016|52116014|23010399003|376014|38350700014|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: x7IUrF16e/yFg7mhKJVzPa0CjIK7fBkFgfnHXZamWMTHPMQmFDGtrgx+W+dAs0eLm3b7Ece5m2INOfMinUAzRD3WzFRktuiYpsjh2Mh9VPsDF+m51YC59ZiyU7bs+JElMgQJng6LIyIlG3+xN1zRCBlhb1BOOCv8GMx02jOzP8dpomZKQMhCOkTpl8NwTuET4Srn7B8Xyz7tFlbm390wkznhi6J0vi1PdQKfp3CMY/FSqfGZwsylaP3bvff70KHt9BQ7w9WSEZwdYVnps8fQ7/nWUbf+eva6QDxujEBhpI7ZXN6vCdHpjWnch6B/hHFz19S0F64wv7E6CwNhFbFSDVf+z+dqTZi4i5B/OM65NEUlQP+20uDBn2ELe9e740XC1FdprWuliNb24VlCQH4TFDjrM5FDC8AsRx20oEtmJvsCaYQ+VzXaCBeYqhfwDIaFLKJWadzxvF557VIj0h263/1UP88al2uN6R9CNm0R5fXYCnuOwbMj/N0GWpMHzLU3oWe0ltpszM97HjVgDuu7XG22JgnjbKv1TPnUCOCfKGSRHopBgXHWS5oieeMrpZ1iOvfL044uEvsdWaOdHv9wfZX6g7BfjyBY+ECrFoTnL6MS9ldsE4dGTkNcikmbxiSSTCYw8P+1yE/c17b+k6b6fCSFo/tcFRVwUeQb/JI+FHPSS4ZhtW2HonVbw+R/JfiimlDsficeVVUD0q1M7x8sKK3DnobqHlVQI0KPHZmDCdc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(366016)(52116014)(23010399003)(376014)(38350700014)(22082099003)(18002099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ZLG9PcTeg2JCYHxgWIdLQ9urBLeqTjuL+/ukim/soAqJ6PZqqdUvDQ8UGwcC?= =?us-ascii?Q?gTqz7sDrIrj+8Y4EmP422xBhkXqBd5Rx7WWP7MAESu/pb6E/h0NFKdw5aDMv?= =?us-ascii?Q?EaHkNIWCCt9kN6/OR44EmRQMrvG6w/piMHPT1+Hb9kdg4bGs02I6oBaaqXpK?= =?us-ascii?Q?GmSVO0UHYRw6/W1mQvOHBA5v4PadH3WU940hrLTL2dyve5LlSgqrOIEk75RI?= =?us-ascii?Q?/5jzYXPPa44yd4LAibUXFVA14TfFTri7pVETK7UxV+Q27VMfnLKrRQKxLo3V?= =?us-ascii?Q?iD6c6VSFcvXdJZsZAf6ln8oRCd+5JL2AVesQF4m0rbzB2iEOYpwpFDqD2nDr?= =?us-ascii?Q?cfX/pL4etzdmU5tV7yTotXgk8/JfT2J0/MkPQkgybfdvHOZTQRZeo+3ZPuds?= =?us-ascii?Q?pqdUj/jKfgL/RA0MdL4dKPpAXdFyKUAdN5uSeEqfKEpDyvG2EBh0I4qY7i5Z?= =?us-ascii?Q?om81aycHrybkIISJY5Lu4qLgoZG2ncxyYN2HqetDde0YEBLDV1dpOtUSpTXD?= =?us-ascii?Q?zgW/K5otVGSrmJnsRuEn7X61RdyLnoTBmrfpX/OaSJIvrpzDbjch5dRpf1p2?= =?us-ascii?Q?12N3OTSsOXaqvbi1NCVnq308XZnfugqwCCKE5Ia15Yyd3RLUe+6usMohdcnd?= =?us-ascii?Q?BGJodFWJfJE6qYjdOnIcNymIKSYb8NFrnZUMsQSN7RYpARfQ458m738bx8OV?= =?us-ascii?Q?q6599khVZJWelF443ofZ7rtc1jGQSSMNTgSP8An77NPkcCtC9qQrxky3C2ax?= =?us-ascii?Q?S/bW22q1x6JsdzWEOEE0kWiUUILZUQGSBrrUgZQOMEVK9BSpk413zahC329V?= =?us-ascii?Q?l05IPDfQv0oh6Ogvop7YIYDADR9R25ySwGJKYAxpgl2mQwcNizh+p6w54OVG?= =?us-ascii?Q?JOXyi8IO+ZGWQKFwiEYTTfGyJZm/W7tZvzzQEqR1v4vJNcTZOwEdZHQYCD7/?= =?us-ascii?Q?75qX/UEVuC3YWG7kZDl7N48GTpSi5M4ttW6AMf/fIjZm1FFwdruiW3sS1sFT?= =?us-ascii?Q?KHFY2txUZyS6b8JE36qsj77h7wW6QdC5WIrmaOHzlorklshzMPEBT01XSt4Q?= =?us-ascii?Q?4U/QYZYplzN7tux4E0VuqzGR9SgSNxNsjURqmOzW/n74vMs3XoLP5pj0KEWU?= =?us-ascii?Q?BcRenz2D0ucwthKpp8pmffggpG9bspUKPlYc+16mvlXcXGxzogmhpOeMqoHE?= =?us-ascii?Q?0QwQ4jx+IyEXI0TN542oTs3p0Mhg5TAFVhGtyhRBJV2LR0sVELpB8FuqWzIR?= =?us-ascii?Q?thXAzAuGNw1VnatC9PLgequCBPOXdP4eI687X+g+61AJypnptsDFFmhaARbi?= =?us-ascii?Q?1Z10OxVDy0rFo+Q2EirEekOTUdp1Xx9aWQRUslUNdQW+zkBfrI4R4QCOpuoZ?= =?us-ascii?Q?gU8jcXe6+bLn6K62IAQ/wUUr0Q+NHeUyTwdj0lbeNWNuM98AKijw1JcxPUsW?= =?us-ascii?Q?OrogqkyU1KRipP6eoij4M56g7Klhv+J5J+QnlHfRM4K6YRx3n+UO1P2gv1Pz?= =?us-ascii?Q?0am/uuvH1R1fmgMfBgOd9LPvSBaW9ulTlUhqP7XyHT6iqJwPhOW5/5pFg6vZ?= =?us-ascii?Q?GVQPS06pQoAjUzf3nrASpjA0Vt8SeCvisrPnA6GVq8iday0Fc8ctZcMAzylU?= =?us-ascii?Q?NWqVhi8JS3pKmeUJ7+Bqc3YxB9OPCrmn7R+4ASHH5Yfw/8NuOEp5mxrE2iUh?= =?us-ascii?Q?B0q8xUr/TbKbWkjhNYx9/RzfNdAoyMLT294WcuvXEOUq3D0XUB7dbhZ7CtJK?= =?us-ascii?Q?CX8C04/PirrWDmyaYHfPPgiy5rwet70=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ab22af1-2245-48b9-6ce0-08ded3a28d8a X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jun 2026 16:47:04.6976 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: AzeH3lT6QoGl137OX4wxqeePkK4Q00dw9x/Ktdu/67Nsap+DDv1UwQQjGVkNlUNj/zuC2EbdzzfmTSZYPbo6yjnVXJZGZrez7RmNOzT6hXE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6347 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c200::5; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DUZPR83CU001.outbound.protection.outlook.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1782492464690158500 Content-Type: text/plain; charset="utf-8" Wrap the set_owner/reset_owner backend ops in dev-level helpers, matching other vhost_dev_* wrappers, so device code can take or release ownership without reaching into vhost_ops directly. vhost_dev_init() now uses vhost_dev_set_owner(). Both return -ENOSYS if the backend has no such op. No functional change. These are used by the following vhost-vsock patch to hand a device between owners during CPR. Signed-off-by: Andrey Drobyshev Acked-by: Maciej S. Szmigiero # for CPR --- hw/virtio/vhost.c | 20 +++++++++++++++++++- include/hw/virtio/vhost.h | 13 +++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index f11588cc51a..7ae2abe33cd 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1689,6 +1689,24 @@ int vhost_dev_init_backend(struct vhost_dev *hdev, v= oid *opaque, return 0; } =20 +int vhost_dev_set_owner(struct vhost_dev *hdev) +{ + assert(hdev->vhost_ops); + if (!hdev->vhost_ops->vhost_set_owner) { + return -ENOSYS; + } + return hdev->vhost_ops->vhost_set_owner(hdev); +} + +int vhost_dev_reset_owner(struct vhost_dev *hdev) +{ + assert(hdev->vhost_ops); + if (!hdev->vhost_ops->vhost_reset_owner) { + return -ENOSYS; + } + return hdev->vhost_ops->vhost_reset_owner(hdev); +} + int vhost_dev_init(struct vhost_dev *hdev, void *opaque, VhostBackendType backend_type, uint32_t busyloop_timeou= t, Error **errp) @@ -1706,7 +1724,7 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaq= ue, goto fail; } =20 - r =3D hdev->vhost_ops->vhost_set_owner(hdev); + r =3D vhost_dev_set_owner(hdev); if (r < 0) { error_setg_errno(errp, -r, "vhost_set_owner failed"); goto fail; diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index bc81e09663e..a56a2b66bd5 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -175,6 +175,19 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaqu= e, int vhost_dev_init_backend(struct vhost_dev *hdev, void *opaque, VhostBackendType backend_type, Error **errp); =20 +/** + * vhost_dev_set_owner() / vhost_dev_reset_owner() - take / release owners= hip + * @hdev: the common vhost_dev structure + * + * Take (VHOST_SET_OWNER) or release (VHOST_RESET_OWNER) ownership of a + * device that has already been set up. Used to hand a device over during + * CPR. Returns -ENOSYS if the backend has no such op. + * + * Return: 0 on success, negative errno on failure. + */ +int vhost_dev_set_owner(struct vhost_dev *hdev); +int vhost_dev_reset_owner(struct vhost_dev *hdev); + /** * vhost_dev_cleanup() - tear down and cleanup vhost interface * @hdev: the common vhost_dev structure --=20 2.47.1 From nobody Sun Jul 26 11:51:04 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1782492492; cv=pass; d=zohomail.com; s=zohoarc; b=E7tNqrtMSdBf5pYRAT8PvMl7rJoAAoJutX7LOupiHqJSUZD0CnoGxI1OjO0SqKSlYdilAMtnfdebHMlaQQONbhTUVdxbsCqsWf4evhZE2Kdkg/iFLpN92mAfUQgRCDN/qGCbtz2eEBnfYEolqCpw0qllzzTT2HiYKKW1B+2BDas= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782492492; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xof2VDEtBz2bmBuMETloPnrQZJmaKtafo9dLFC9qPgM=; b=CvQZCZJlu3dtP8i16EVnVPUqgDxWuxieDhU7RJhhQRBuSSm0bN62uTgrF44szE1AxNUdQzZoBsEuM04ZwNh3Q0pQHySBTtN+z461J64ctzMG4REb8HmZ/3TvgGIXAlBd/CpyYNVQnldozKBRLKYB45VXInRza7iPkVLFiXgemKc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782492492760137.50995403624677; Fri, 26 Jun 2026 09:48:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wd9iI-0001SA-6W; Fri, 26 Jun 2026 12:47:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9iC-0001RV-UJ for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:28 -0400 Received: from mail-northeuropeazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c200::5] helo=DUZPR83CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wd9iA-0007dq-Or for qemu-devel@nongnu.org; Fri, 26 Jun 2026 12:47:28 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB6347.eurprd08.prod.outlook.com (2603:10a6:10:253::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.17; Fri, 26 Jun 2026 16:47:05 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%5]) with mapi id 15.21.0159.013; Fri, 26 Jun 2026 16:47:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ggqANCVBsCJ2MpyAES2erCClu3mE+H8cmb8lUSGzlGQz/1eHr4ZWjN1ujwohb2ovxO8mR5F5idnuSEMHD441DXvwShxi5paNJVT8t/OCX3t6jjU/RYwBOsaLNWoKb9qLcal1RA1UjizXBM4FvG7oNioh9vyejIZDxCMKPK51wbdfSSsLozALqQN9YMrPJHT5y8eegWmXU6PH2fCDeuWei/YLCH7PwbjXvt4FQlOqdOIMvTAOfD9VRpwsNECvjRa9BgTBSRvOyuyBf1cHHXwCh39wrK5cL6fGE7KHSG/LmdQLPKV7UfJUg0L/oPH+Vw+289ESRgfme8ZH0/RLVDrGiA== 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=xof2VDEtBz2bmBuMETloPnrQZJmaKtafo9dLFC9qPgM=; b=nhyCW7KMz2SkzbAZVCWZV2Dx5iFaCdbXlOjNuKnW9covDA45YSyunej6YbLoAN8S91VRbMw3qVU8WmcSD4kbL05AAWRunIK4MedcNHuEWIkstbDJGAMiv8P8HxBMFuyNPGJhU6MlxeNiwIr4Unx8+HIgZSKNTyEmQlmocJAbhWFiPn3MR86y7NcLspnlNqyvg3HHfatLaGDjccWxAN6FGoD+6dzCYdrdclt04kNsGNZg7zK6kqOoXOSNjQrfNl44IZTP+XTyupkZAtjxLr9lrnQXiwNRcfGMxxhHPYbpgcDf6fBybwf8cd+BoxIVPmABlXWreGjTGXylRLZvd1/qLA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xof2VDEtBz2bmBuMETloPnrQZJmaKtafo9dLFC9qPgM=; b=kYnTxf9h2WathhpLLZ8B0QGBMS8o7Vtzexozh6VBQ0mGqas420/tzkJGqEjgIXpqTNFxdO/Br1D7qWH2sS2ow1cJ3J7XUCLrUXyBKPFBg5OUu0LMpK5qrI9qTdhTZi8zDIhdJ6uBvFCNIXns1uguCm7a37HE3fAXhSHDHtfrUNFRMbCpXk05dA/IizB1UH8s/kVyKe/bQPMpsrnKFifOKGDnIHvh2v++Uz3xTPA5XMxr3fCskRGCEM8ELowLDCfHsCXTD9GKN0wDV8syaU6pjQjsMCaNeBqLV2xAJYr1RZI5ZrdiWCFdG1sycBKuh20MjDfEhEL84YZmJjFEXMHRyw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev To: qemu-devel@nongnu.org Cc: mst@redhat.com, sgarzare@redhat.com, farosas@suse.de, peterx@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v3 7/7] vhost-vsock: hand off device ownership across CPR Date: Fri, 26 Jun 2026 19:46:43 +0300 Message-ID: <20260626164643.2526-8-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> References: <20260626164643.2526-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIUP296CA0088.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35c::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB6347:EE_ X-MS-Office365-Filtering-Correlation-Id: b093abdd-6634-469d-4336-08ded3a28dd5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|7416014|366016|52116014|23010399003|376014|38350700014|22082099003|18002099003|6133799003|56012099006; X-Microsoft-Antispam-Message-Info: rCYBgOowk0akoQ9AozCq2xMf+bbLy4hTkplxZcavrmU7hfR0IJKfW2CJmtDJ6ibcQ7FLM/x+fQ0x0+btqg2NLZgYy2g8vpVG+h5qXiU9fnzb2jmX2alg7h7IRInAkvFm07ja3nDI9Wuc/o4ZmhCU3SN+AiwKwMxQu6TkuG44M48DwnTcs1GQTZGYvY5HsQ/UIeNqBvPHAV8mCHNYOoPfhJVLFfb3GKNjgV1LhLYDgTsvCXoB1U96aysLm+/vb5krwAqnni3CGN+ImZG1C4M11bSxbRzUphQ8svHn59RdstEo2THePR9FayTxKYeMFYLlWL2V031Qh1QZCZnmTpubO7clyu+loJiW3AiUqhXNkuNcXQdp15epNLUnseb36+ZnvDLJjmzuXGqFm+ecxYwyhV18YJoNAC6UQcHHxFl2BQxOJpkOUyDaCSC1HWl5Hg05jf8SE2oYHmXaSDeT/m+JqzRnX3xV71FmX976bOq1kXhdxRF76w3oQWV3mqeaNagWcVa+v6D3CHEbK2TUO3sjur1Pysmyf7QcRz2CPMi8Xw/vDw8g0VZ44VJLrLdFVlVGRrhFZ4xtC1FKt9ElYxXuB+VXWXZz26t8n5UbVQBsZU1JB7FOSzCOM3+/hisWmHPbJ6fgbtYjZq2XxuJc4wHUdr9RQC4Zjl1eyqHKiRpXbUZYhAhvcwwaDTOX5L6QeBn4gdJ8U7cu1ncFGZreO2oQDUuMjDPYTbZPG5dK2gEmaSc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(366016)(52116014)(23010399003)(376014)(38350700014)(22082099003)(18002099003)(6133799003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ERQnaA8VcCzDZ+eqGqLSWXUckyv7DXbOl+WDx6MTUk010EDQwUyQKkykrDgG?= =?us-ascii?Q?xj0vF07bqASVaRPszkcD5CFOdEiaIDKqK9lIy9RP8iocMrN/A7UOfDa3HMd8?= =?us-ascii?Q?TVm4h5Zss7g4QSRV+r1uULxzIUAoHJC3ARlJ/VDDUjAibs+WoO2A7q3ruXmC?= =?us-ascii?Q?6qbLP4lJ0iLTJobEah5A7Cw3RNObH1anyFAWVYbUnyzY5cIdbSmJpRYAWmPO?= =?us-ascii?Q?JH3fWco0zy9IHvGejk6ZQEVnshDJDmKSzY6wwqrgO4oyoYY54+YZzx/dpzXf?= =?us-ascii?Q?PVeqaA9AtXITr496iFN/4XWpKbHiPgDdVNqnpmHlAHiMHnF1OGOlqjq9SSjS?= =?us-ascii?Q?JdWjWFHuvO0vxD5hPrZ8MqyyLDMUqNisBhfrnbfanjSPSVx9w9xfRrVyLU3c?= =?us-ascii?Q?MBIirZGixT4Vhc44J3CkIrSgevKmU1OjHK/Pf8N8roQjP8tjNW49aC1KAtSV?= =?us-ascii?Q?Ry4tZ0JID8V87E9nwSho0/2J/9zZTADIDTdp1iRU69d4YhmKrxAmQEaPEuhv?= =?us-ascii?Q?Fn2BMhhfWdAn4ogPAsuEJsr+Uc3bxyPWIQCJtBlwjy6BalbpiQL3MqVaZcam?= =?us-ascii?Q?P/yokrVPh6EYjQsm9cEpvgmLOYGeSNtZaucVXaRckW61hkGu15CPuWBa3KTd?= =?us-ascii?Q?+aozfpHdwLlrVajAnDBv3mlpBWT/8WVZPo4at0tF+PT1bzZJcMlGuQwyYeOK?= =?us-ascii?Q?gUjfyDQxBSoxyHCSxz2JNY3kjq7Mz4mFVB7M0CZrm+lsxnplZV6fHcfaVXT3?= =?us-ascii?Q?NpPpGIhbgv8/m6n06DhbRxxB9+BbQobw3Qgi3az1rdaq1WAB3QWGrgSN+NCL?= =?us-ascii?Q?RMH5rkzUKE9AsOP5YQ9FPw2wAubo8rjFUY/efYTvwaLcJh2o5L8dji6M6KwT?= =?us-ascii?Q?wnxZYeyRxTyTq6/bQ8m47O592iNdl6yaNloAjKvuj648OV7HVjjMZ+rvJ52G?= =?us-ascii?Q?O3s9lfcAHi5QuLwo4LniR2drYiiVhE1xAOb7a8GHtUztWkpPK0dW2cFX2DwW?= =?us-ascii?Q?4bMPyPwLFPqjwSk5wAeIpbiNnIQwxIfXJEE1T4l8IjPfmELJEviRBVaxorK+?= =?us-ascii?Q?TICcNxk0jmYBmu7EwnhK0T4Pvi0x5CMhxmqZBtDni6jF3+1ZzDg2Om1xsCcJ?= =?us-ascii?Q?lHDjNJjYKXD0oiuaR4pb12KbBMK1nb1KynXL2blLJs8B0M5HxN2xRU7fqQKg?= =?us-ascii?Q?SliOArNRsrW0SqJf+ykbi0CZIYxB0Qd0NVbGiXL2lQ9FW5JKzq6o4Ro8lFUU?= =?us-ascii?Q?zqeF3SPGCucVnjZDi+em8ksmnkNb11NB7SfovcEJWCzBSs22B7sNqSJU5709?= =?us-ascii?Q?z2UPHBycgNp09qsGEGjj3hUReTuLryx44QMhvLghlt5JWMsp45S6tseuQ+EG?= =?us-ascii?Q?CeohdQKpD0eBOZDQDtjzW0WnOXO9Z7QD9MIRafGGMQ9v06KYc/CR+eaBCzyg?= =?us-ascii?Q?+94ZNjCNKWRsF/U5k4AQDiVTfmLN1269tzykgffiSu/x1PxFcgewqHIsi2fE?= =?us-ascii?Q?mjIQRzoOUPV0NeG3LOPntvuKxYyyq6TTRXzWNn8V9XI0JlOg/PF1qwqzyNy/?= =?us-ascii?Q?Ep1lely/2JJGMuJT7eX/kFOUfQUhmGU/hhGzXAGqKHQ1usAQuTLm+SnOgSC2?= =?us-ascii?Q?F9fbtElWX5P000A/3qO1UlcrvRWYbuvENMNjynGMFQdik+eYXEGrOMaMFWPi?= =?us-ascii?Q?vzArJlWi1n7rNCqlgQzpvlniSpdOcZ2pRu6mLnrNcd/TLFFbTgKL2if3l7cj?= =?us-ascii?Q?s3OUSgbDCxdYgjbwit/aXUrHvHdCaew=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b093abdd-6634-469d-4336-08ded3a28dd5 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jun 2026 16:47:05.2098 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Z5bnheJ/e1tsSMs8g6ZrQhp5vpfkcKDoGtJdiPXxnO5538T9wbXEapRXnGfMwxPsL/pbAf32+is8V1KXlJ5Q0SBPVInL1s93QcWvWBpMGjs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6347 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c200::5; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DUZPR83CU001.outbound.protection.outlook.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1782492494834158500 Content-Type: text/plain; charset="utf-8" The previous patches reuse the source vhost FD on the destination, however both source and targe still call vhost_dev_init() (VHOST_SET_OWNER) in realize(). For cpr-transfer the destination realizes while the source still owns the shared FD, so its SET_OWNER would fail - ownership has to be handed over explicitly. Do this through the device's CPR vmstate hooks. Namely, release device ownership in pre_save, reclaim in post_load, re-acquire on failure: - .pre_save() releases ownership on the source (VHOST_RESET_OWNER) once the VM is stopped, for the FD-preserving CPR modes (cpr-transfer and cpr-exec). - .realize(), for an incoming CPR, only sets up the virtio device and queries the backend features by calling vhost_dev_init_backend(). It doesn't take device ownership and doesn't touch the VQs which still-running source might use. The full init is deferred to .post_load(). - .post_load() reclaims it on the destination: the full vhost_dev_init() (VHOST_SET_OWNER) on the preserved FD, plus sets the guest cid, before the device is started at vm_start. - A MIG_EVENT_FAILED notifier re-acquires ownership if the migration fails after pre_save released it and the source VM is resumed. Also harden vhost_virtqueue_cleanup() against a NULL vq->dev which can now happen if an incoming CPR is aborted after realize set up the backend but before post_load initialised the VQs. Suggested-by: Dongli Zhang Signed-off-by: Andrey Drobyshev Acked-by: Maciej S. Szmigiero # for CPR --- hw/virtio/vhost-vsock.c | 147 +++++++++++++++++++++++++++++--- hw/virtio/vhost.c | 2 +- include/hw/virtio/vhost-vsock.h | 3 + 3 files changed, 140 insertions(+), 12 deletions(-) diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index 7eacb608d07..b02b3f9cc03 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -76,6 +76,17 @@ static int vhost_vsock_set_status(VirtIODevice *vdev, ui= nt8_t status) bool should_start =3D virtio_device_should_start(vdev, status); int ret; =20 + /* + * On an incoming CPR the full vhost_dev_init() is deferred to post_lo= ad + * (realize only ran vhost_dev_init_backend()). hdev->mem is set only= by + * the full init, so refuse to start a device whose handoff never + * completed rather than dereference a half-initialised vhost_dev. + */ + if (should_start && !vvc->vhost_dev.mem) { + error_report("vhost-vsock: refusing to start, device init incomple= te"); + return 0; + } + if (vhost_dev_is_started(&vvc->vhost_dev) =3D=3D should_start) { return 0; } @@ -111,18 +122,102 @@ static uint64_t vhost_vsock_get_features(VirtIODevic= e *vdev, return vhost_vsock_common_get_features(vdev, requested_features, errp); } =20 +/* + * Re-acquire device ownership if a CPR migration that released it (in + * vhost_vsock_cpr_pre_save()) failed and the source VM is about to resume. + * This runs before vm_start(), so the device is owned again before it is + * restarted. + */ +static int vhost_vsock_cpr_notifier(NotifierWithReturn *notifier, + MigrationEvent *e, Error **errp) +{ + VHostVSock *vsock =3D container_of(notifier, VHostVSock, cpr_notifier); + VHostVSockCommon *vvc =3D VHOST_VSOCK_COMMON(vsock); + int ret; + + if (e->type =3D=3D MIG_EVENT_FAILED && vsock->owner_reset) { + ret =3D vhost_dev_set_owner(&vvc->vhost_dev); + if (ret < 0) { + error_report("vhost-vsock: failed to re-acquire owner: %d", re= t); + } else { + vsock->owner_reset =3D false; + } + } + + return 0; +} + +static int vhost_vsock_pre_save(void *opaque) +{ + VHostVSockCommon *vvc =3D VHOST_VSOCK_COMMON(opaque); + VHostVSock *vsock =3D VHOST_VSOCK(opaque); + int ret; + + ret =3D vhost_vsock_common_pre_save(opaque); + if (ret) { + return ret; + } + + /* + * Release the device ownership now for CPR migration. The device is + * already stopped at pre_save, and destination reclaims it by calling + * VHOST_SET_OWNER in post_load. + */ + if (cpr_incoming_needed(NULL)) { + ret =3D vhost_dev_reset_owner(&vvc->vhost_dev); + if (ret < 0) { + error_report("vhost-vsock: vhost_reset_owner failed: %d", ret); + return ret; + } + vsock->owner_reset =3D true; + } + + return 0; +} + static int vhost_vsock_post_load(void *opaque, int version_id) { + VHostVSockCommon *vvc =3D VHOST_VSOCK_COMMON(opaque); + VirtIODevice *vdev =3D VIRTIO_DEVICE(opaque); + DeviceState *proxy =3D qdev_get_parent_bus(DEVICE(vdev))->parent; + Error *local_err =3D NULL; + int vhostfd, ret; + /* * Only reset vsock connections for non-CPR migration. For CPR the * guest cid is unchanged, and the cid-change reset would otherwise * tear the vsock connections down. */ - if (cpr_is_incoming()) { - return 0; + if (!cpr_is_incoming()) { + return vhost_vsock_common_post_load(opaque, version_id); + } + + /* + * CPR restore case. The source released device ownership in its + * pre_save. Complete the handoff here, before the device is started + * at vm_start. Init vhost device on preserved FD, issue + * VHOST_SET_OWNER on it, and restore the guest cid. + */ + vhostfd =3D cpr_find_fd(proxy->id, 0); + if (vhostfd < 0) { + error_report("vhost-vsock: could not find restored vhost FD"); + return -1; } =20 - return vhost_vsock_common_post_load(opaque, version_id); + ret =3D vhost_dev_init(&vvc->vhost_dev, (void *)(uintptr_t)vhostfd, + VHOST_BACKEND_TYPE_KERNEL, 0, &local_err); + if (ret < 0) { + error_report_err(local_err); + return ret; + } + + ret =3D vhost_vsock_set_guest_cid(vdev); + if (ret < 0) { + error_report("vhost-vsock: unable to set guest cid: %d", ret); + return ret; + } + + return 0; } =20 static const VMStateDescription vmstate_virtio_vhost_vsock =3D { @@ -133,7 +228,7 @@ static const VMStateDescription vmstate_virtio_vhost_vs= ock =3D { VMSTATE_VIRTIO_DEVICE, VMSTATE_END_OF_LIST() }, - .pre_save =3D vhost_vsock_common_pre_save, + .pre_save =3D vhost_vsock_pre_save, .post_load =3D vhost_vsock_post_load, }; =20 @@ -144,6 +239,7 @@ static void vhost_vsock_device_realize(DeviceState *dev= , Error **errp) VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); VHostVSock *vsock =3D VHOST_VSOCK(dev); DeviceState *proxy =3D qdev_get_parent_bus(DEVICE(vsock))->parent; + bool cpr_incoming =3D cpr_is_incoming(); int vhostfd; int ret; =20 @@ -172,7 +268,16 @@ static void vhost_vsock_device_realize(DeviceState *de= v, Error **errp) } } =20 - if (cpr_is_incoming()) { + /* + * Re-acquire ownership if a CPR migration releases it (in pre_save) b= ut + * then fails. + */ + migration_add_notifier_modes(&vsock->cpr_notifier, + vhost_vsock_cpr_notifier, + BIT(MIG_MODE_CPR_TRANSFER) | + BIT(MIG_MODE_CPR_EXEC)); + + if (cpr_incoming) { /* Reuse the fd handed over from the source QEMU. */ if (!proxy->id) { error_setg(errp, "vhost-vsock: device ID is required for " @@ -205,14 +310,32 @@ static void vhost_vsock_device_realize(DeviceState *d= ev, Error **errp) =20 vhost_vsock_common_realize(vdev); =20 - ret =3D vhost_dev_init(&vvc->vhost_dev, (void *)(uintptr_t)vhostfd, - VHOST_BACKEND_TYPE_KERNEL, 0, errp); - if (ret < 0) { + if (!cpr_incoming) { + ret =3D vhost_dev_init(&vvc->vhost_dev, (void *)(uintptr_t)vhostfd, + VHOST_BACKEND_TYPE_KERNEL, 0, errp); + if (ret < 0) { + /* + * vhostfd is closed by vhost_dev_cleanup, which is called + * by vhost_dev_init on initialization error. + */ + goto err_virtio; + } + } else { /* - * vhostfd is closed by vhost_dev_cleanup, which is called - * by vhost_dev_init on initialization error. + * CPR restore case: only learn the backend feature set now, but + * defer taking ownership or touching VQs (the still-running source + * might be using them). The full vhost_dev_init()/VHOST_SET_OWNER + * is done later in post_load. */ - goto err_virtio; + ret =3D vhost_dev_init_backend(&vvc->vhost_dev, + (void *)(uintptr_t)vhostfd, + VHOST_BACKEND_TYPE_KERNEL, errp); + if (ret < 0) { + /* vhost_dev_init_backend() does not close the fd on error */ + goto err_vhost_dev; + } + + return; } =20 ret =3D vhost_vsock_set_guest_cid(vdev); @@ -234,6 +357,7 @@ err_vhost_dev: err_virtio: vhost_vsock_common_unrealize(vdev); err_blocker: + migration_remove_notifier(&vsock->cpr_notifier); migrate_del_blocker(&vsock->migration_blocker); } =20 @@ -250,6 +374,7 @@ static void vhost_vsock_device_unrealize(DeviceState *d= ev) if (proxy->id) { cpr_delete_fd(proxy->id, 0); } + migration_remove_notifier(&vsock->cpr_notifier); migrate_del_blocker(&vsock->migration_blocker); vhost_dev_cleanup(&vvc->vhost_dev); vhost_vsock_common_unrealize(vdev); diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 7ae2abe33cd..3734e3f20b5 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1647,7 +1647,7 @@ fail_call: static void vhost_virtqueue_cleanup(struct vhost_virtqueue *vq) { event_notifier_cleanup(&vq->masked_notifier); - if (vq->dev->vhost_ops->vhost_set_vring_err) { + if (vq->dev && vq->dev->vhost_ops->vhost_set_vring_err) { event_notifier_set_handler(&vq->error_notifier, NULL); event_notifier_cleanup(&vq->error_notifier); } diff --git a/include/hw/virtio/vhost-vsock.h b/include/hw/virtio/vhost-vsoc= k.h index 5ebc63afc5a..6d0cff4fb93 100644 --- a/include/hw/virtio/vhost-vsock.h +++ b/include/hw/virtio/vhost-vsock.h @@ -15,6 +15,7 @@ #define QEMU_VHOST_VSOCK_H =20 #include "hw/virtio/vhost-vsock-common.h" +#include "qemu/notify.h" #include "qom/object.h" =20 #define TYPE_VHOST_VSOCK "vhost-vsock-device" @@ -30,6 +31,8 @@ struct VHostVSock { VHostVSockCommon parent; VHostVSockConf conf; Error *migration_blocker; /* set when the device has no ID */ + bool owner_reset; /* CPR released ownership; needs re-acquir= e */ + NotifierWithReturn cpr_notifier; /* re-acquires ownership if CPR fai= ls */ =20 /*< public >*/ }; --=20 2.47.1