From nobody Sun Jul 26 12:42:15 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=1781866569; cv=pass; d=zohomail.com; s=zohoarc; b=BZj56BHU2smxuXVNsAE0nJowAFI7H3Nut+Ec5rANnerWQHQNU1dj8CZ5vxJSQ0qVmfuT96tCs8AqICVa5tOQq7TbFn8RRl1zeuAiHKZBa3CXJ/1aLH7rvPXBJ8g7v349A1Duv0rdmbEZfWytIx0GBzctYZDxFuiRBUUbg/PI3ik= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781866569; 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=WtWc0sD33i3nyv2i0nmxUFZDE06JDErH+p3msnaWq8w=; b=OpJx1vvatHSJjeB5Cp2+rnVBbdvqlzsGKlVeZmsWwTRukd1lkWpZM0Q3tRvU6n8MVS9YPQ7R4MGgaFX8R4wYkcufLVSNAFRqrTxJY5fANSvXySN2KOfftWoHkjCJ7ke1PvwxUp3jr1AlJDGiiB5KxE8Oa5nSYFX5PiFaGQCwmMI= 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 1781866569065688.0158242709066; Fri, 19 Jun 2026 03:56:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waWsl-0007kI-1X; Fri, 19 Jun 2026 06:55:31 -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 1waWsj-0007k3-Ss for qemu-devel@nongnu.org; Fri, 19 Jun 2026 06:55:29 -0400 Received: from mail-northeuropeazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c200::1] helo=DB3PR0202CU003.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 1waWsh-0003Ts-Tm for qemu-devel@nongnu.org; Fri, 19 Jun 2026 06:55:29 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by PAXPR08MB6576.eurprd08.prod.outlook.com (2603:10a6:102:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.11; Fri, 19 Jun 2026 10:55:23 +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.0139.011; Fri, 19 Jun 2026 10:55:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MTzMpo5Qr+aN5kn1VhS2vEzW0ByMP5bFMFp/ryXnXopzhgM/oniu92359A1sTHZTcxtVXxw8r2DwKkQbP89i72I7bdkfXgOlIh3u+XCznpfc1km9HYKsHGevx7Mj080cRutTg4PvpBpdbE50FuQLAZmyoinHaxmaRIHGdfzc025uRcXIcWqoa9R6obbU/KOXOgh0zOU56d0Rs7qi1MyPrbf58AunerO9LhDdorm6jeVoy5TDUuzUKa+M8FT+r0lPfwbKKsM2e6MVzfkU9nmqW0nK5i7KDQ7Yv0soyQOY8TLEce1ZhT8j9MYhwfZIqnKpP0ecP6Jp2XQ30zZdVTKJGA== 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=WtWc0sD33i3nyv2i0nmxUFZDE06JDErH+p3msnaWq8w=; b=E5OMTuwLLw72v3uW7siE4okxITjsF8nx2OPUalb6hjoDAV5UIWmC3qO0sk67ht2Q9oSaZHVNfaAQ8rcO4eXTWRtZmG6G67bseesSuHtFMsZ7bZhNFd5Id6OO3rdL7wVYQRWxMpMiGFg+llYv1Ec3XedUGsH1yrHAJnWgyb3AoBCh0Lx0M303Z3IF1hq3+Xy8T03kVeOfX15Gps+oDgtdq+UqxkCeO/knI1T71tT6+6ByQi/gRwbTnB/Kb41Uv4TfyMYYPdbB90/G6uORJXvXAmWcQzdKMCE8HbuJeqPToxGBGGN6e8zBFO2l4wZrIA1cw1o0xkpi6Yj0+NpBXDTZSA== 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=WtWc0sD33i3nyv2i0nmxUFZDE06JDErH+p3msnaWq8w=; b=kkRtAciAIEQg8gku3TddW1me8LG5XpmlTJOshpTfl0YU2VllgWAXyTxUmoAVnTI8q/LDgmEq9XwC5WNSfLkfyEihQ7t6wuKip/XcqPdewZodq8MX7g/xHvaXd5NBAqSSdMmxqeWW03aEeJUieY8mze3OypISxwWLgvrw6nVp1TMc/QSV5MYrPMXYHHyZNdhMcqrtS8etb8Qh3s7V7ZBTbKayGXkZqSr33aa7SUZ7Q4RYVBQ2bdK1/VyuoT3KDKchszEfVQqQhTlWnUPapYIuFitvIO9mUTtWVKeEp3MHsB9XnqnmWIEh2ff/5bJwu6F6vbRUox88IOiYP3F19DBJ7w== 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 v2 1/5] migration: emit SETUP notification before CPR Date: Fri, 19 Jun 2026 13:55:10 +0300 Message-ID: <20260619105514.128812-2-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260619105514.128812-1-andrey.drobyshev@virtuozzo.com> References: <20260619105514.128812-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIVP296CA0089.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35b::8) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PAXPR08MB6576:EE_ X-MS-Office365-Filtering-Correlation-Id: 49cb91da-252f-433c-ce54-08decdf1434b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|23010399003|52116014|376014|7416014|22082099003|56012099006|18002099003|6133799003|38350700014; X-Microsoft-Antispam-Message-Info: hARlm8zCh9LhkhkxhUgaM1+UvsS9uYkUwpuCASgWTWKgCPoWtJxzIMp0BbVOijAjlcAOW8IP0o7vj4ixWUyTJAB0LzrAkqkID85CSjfLTY2mrSKR4+y8pbuLosy8QICXchkBPx0BijuGPChHGQ4aVURhjFYFVJGT3pO9In8v9zZL1Or/6W2zx31hfAI7vDc/yTsBgDGwO8P12xf1vNcUcB+SEPD8E4xfirP1RgrutmnyJVhI9RF7l8FlOlRxaIg8UoBwavH8+qYj+98/z+0g3oeVonHHlZW8HghELzk1c49M90mI+w8GHEEuDqlJuX/Un8Dyg6pDhtKHE3YLEzZysMTa+T8e/dNPUSPZG9E8sGYCyY5XSAj4qQKnQKQysZ3lzrGeysKpr2jyDZSOjjcwyk2WO/PUodYIqswQ5XGoA7rxatxXWaxjay7FIgo+8a0BkNJJnxY1VJ9NJeGfj1OelEpxC7/T6W9W2/uHEonE5uaWqczf+z/8wHk6HrvOSVqPLBxt2iTV5OLyFyA70VAnsW2bVlkKcnWs0g3oQPMO1mHyFXka5O+UQRAG+IiDihRek0V2S3dpBdcdampmOYJBDyuJYj3AOCzd55bNOEaeSVPBcSvN3e2mw/tNLDrMMb7PnJg01kqQQp7QImh2H/q4gXOMAn5Myi5AhRKR0G3aRyLwrbPbryu5x8HI6RMncrfPKFWjPo31ByYg/9lbQbQwWtLlhgvc5ZujF5/AF2Uz8l4= 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)(366016)(1800799024)(23010399003)(52116014)(376014)(7416014)(22082099003)(56012099006)(18002099003)(6133799003)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dA/AMutrZLdyMy8r8pXVgET+vZENz2PlE7QkmsGTkpBh5cppHbnSBFQhFZC/?= =?us-ascii?Q?rguyAjkh5q6TXhcXj7FaiRpz8t5adAAnUQoEmXxuche05dArJIV01ys/SSfF?= =?us-ascii?Q?gEFrSQDpiTUyUbnVzBNV/V+XtG6HriUawu7P/zBN7LfH2z/oyfTZ+z6XMvP/?= =?us-ascii?Q?9GoY2l4zikBmsux2zmZhkOdnO7tHijVdvDVOQ9CwSM7Wsn2VEXewPsUz6tCr?= =?us-ascii?Q?9ZXwjeQFHS+FJVFFVdj+SPgnXvDs+LJp0tR6NS0JJSw+c776w7YAR+lG7eax?= =?us-ascii?Q?kN1aGqMvfHmuzrZSb26p5StoMclAlvGa6zrDc3tiKBzB3L4gM2tfZ42c+ZDM?= =?us-ascii?Q?TbqBHp1OufoYE5hcVQr1uP6rgLVCQLYkmmiZ2UuHIkJ0ZoBt4XX6OzjbQx5o?= =?us-ascii?Q?RURJnPjX76I/fuGfr0mcjnRCjfW5MS+1GhbL1NHlCdfyFTRZt9VxzB2fFHqh?= =?us-ascii?Q?Djch6ntgb8VyxEJkLAMrdC0X1xoUYx0uGv4oZ0uhZVJIPKjf2g3qtq3wNXOG?= =?us-ascii?Q?vz99v9m9MdohJAT9bOFfNkTLoAE9BflZH1TKr6/Si3ixs4uFI0xABSvGJ7Bh?= =?us-ascii?Q?TS91JoXmuTRgOtkbC72G14LB+c3YuawjUJry58WjYe3B3aC6T36P56RMBC+v?= =?us-ascii?Q?zmlyJFKiynGcrYhqU3NmirXeQDsrguZck/At+GgkjnDExH0Mi8Fa2lTXb9B9?= =?us-ascii?Q?pz6P4MS3wn7wf00apSc3RAgNau8skQUYfPtcn5OfFiYJAjPZyTMQc3zKfvhy?= =?us-ascii?Q?YK1jz+M/GukNn3Nu0a8baXs2FejwJHNMZzawxenO2bW8w/8C1CWP5EgxYnXX?= =?us-ascii?Q?hMxxr3Y39RMPlUYguNA3X3c9+1Yj0cPKK1000ZRwRW8Wwqusj9FHQLzuPFaN?= =?us-ascii?Q?cu6kPMg920OdYiFYBvMgc8GjTzSAWQ+DqX1kT8ZEpaVtDevl8UUFyYoUqD1+?= =?us-ascii?Q?eAzhTjvNJQVmJBnAp/sYIyBLaNEInqL0+aIJp0dQq5JGN/QdhViO4Dk7CIGv?= =?us-ascii?Q?gcyY3poP4zI07FYtqSYEt8iDxOSDpRySI2Z1rWzO/8pj9387SMDdZZj3penx?= =?us-ascii?Q?EnzhkmCkXb5n+uc+IjMwEY0w68Ge3FrMJccPQ14D0WViqYL5flg3ymvnwD2y?= =?us-ascii?Q?6D3uEYawdSWpfetIi6vzKn/pakJRZsGWsFwm5jAb7uvd89dv/Emz8G2GceeC?= =?us-ascii?Q?QGMS+fmbV2gUgyHR3ZXSAwe33SS4IbDk+7F144NhP/3Nz5bjQrA8uWWYS1zg?= =?us-ascii?Q?9mP8s/iZx1g+NkDcy9XV2DHdUvGu35iatar58dnYKJlXDdSI4mMrCUpBbDTI?= =?us-ascii?Q?AIgwtEuWFuqTaya46uHeUTykSUvG4kRQGfCIS+V4u+Q39rUd7dMEYLF1Kq5C?= =?us-ascii?Q?CoWyiFYi0QmsqWogFcFF77lKjRjZl/VwMWRnCDNA2ZClIwIQbFGI0dEbjfni?= =?us-ascii?Q?zi2OawjWLQpjvnvTTFvyFVsaR6zJlAOSMyDIAmkkl9ZUlJJuylkBe8Vmkk/1?= =?us-ascii?Q?ugbfpWS7rIzefZ8WtaQx3KstMFTcPbQ9+IeLMn5X6D7RtZ9G9a0VOltNUzHH?= =?us-ascii?Q?aBwW320W8oxAJ28LlP5l3ViZELYcYhifuQGBc2A+LahO0X3CNZ8QwEp3M1YG?= =?us-ascii?Q?uwU6pCF+/njzskxvqKOaufP4Ms6TvIiIrBfUZ+xEUfgKVDkjKGVyzJtnyxQK?= =?us-ascii?Q?pMLinHlwdJTlwdmZrTa56+2hIqgKb6D9NZ78XlQrCmGIg8D2UCPbMBSwX4OA?= =?us-ascii?Q?zjwFUi1xyGAPTbhSIp72NdHciCXfjyM=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 49cb91da-252f-433c-ce54-08decdf1434b X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jun 2026 10:55:23.4092 (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: FN0eKoxwSw+SLkOPZPZzF0GZklhzzpIaYSPRnaY4RUgFLGl8yWv0KWBvrlw864K+V8Co9G1Qpf9yg/JR91JRz8TJ7tYhjbtZZbVBSuSNxK0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6576 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::1; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DB3PR0202CU003.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: 1781866570708158500 Content-Type: text/plain; charset="utf-8" Devices register their own callbacks to MIG_EVENT_* notifications and process them accordingly. But some devices, especially during CPR-style migration, might need to be aware and process SETUP event earlier on. One such example is vhost-based devs, as they need to call RESET_OWNER ioctl before the target (in the cpr-transfer case) tries to call SET_OWNER. Let's move SETUP notification to an earlier place in qmp_migrate(). Before this change, SETUP was firing shortly before migration thread creation, and FAILED notification balancing it was only fired from migration_iteration_finish() (ran in the thread). But now by moving SETUP to earlier we widen the window. Hence let's also add FAILED to migration_connect_error_propagate() and the special CPR-related case in migration_cancel(), to balance things out. This patch is a rework of the change originally proposed by Steve and Ben at [0]. [0] https://lore.kernel.org/qemu-devel/20260128-cpr-tap-v4-0-48e334d4216b@a= kamai.com Originally-by: Steve Sistare Originally-by: Ben Chaney Signed-off-by: Andrey Drobyshev --- migration/migration.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 074d3f2c697..20eff9dbdcb 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1471,6 +1471,13 @@ void migration_connect_error_propagate(MigrationStat= e *s, Error *error) migrate_error_propagate(s, error); =20 if (!resume) { + /* + * Emit FAILED for every pre-thread failure/cancel that ends up he= re, + * to balance the SETUP sent in qmp_migrate(). + */ + if (migration_has_failed(s)) { + migration_call_notifiers(MIG_EVENT_FAILED, NULL); + } migration_cleanup(s); } } @@ -1530,6 +1537,12 @@ void migration_cancel(void) if (cpr_transfer_source_active(s)) { assert(migrate_mode() =3D=3D MIG_MODE_CPR_TRANSFER); assert(setup && !s->to_dst_file); + /* + * This path bypasses both migration_iteration_finish() and + * migration_connect_error_propagate(), so emit FAILED here to bal= ance + * the SETUP sent in qmp_migrate(), before the VM is resumed. + */ + migration_call_notifiers(MIG_EVENT_FAILED, NULL); migration_cleanup(s); /* Now all things should have been released */ assert(!cpr_transfer_source_active(s)); @@ -2117,6 +2130,12 @@ void qmp_migrate(const char *uri, bool has_channels, */ Error *local_err =3D NULL; =20 + /* Notify before starting migration thread and before starting CPR */ + if (!(has_resume && resume) && + migration_call_notifiers(MIG_EVENT_SETUP, &local_err)) { + goto out; + } + if (!cpr_state_save(cpr_ch, &local_err)) { goto out; } @@ -3893,11 +3912,6 @@ void migration_start_outgoing(MigrationState *s) } else { /* This is a fresh new migration */ rate_limit =3D migrate_max_bandwidth(); - - /* Notify before starting migration thread */ - if (migration_call_notifiers(MIG_EVENT_SETUP, &local_err)) { - goto fail; - } } =20 migration_rate_set(rate_limit); --=20 2.47.1 From nobody Sun Jul 26 12:42:15 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=1781866586; cv=pass; d=zohomail.com; s=zohoarc; b=hKt3J8cVlSFxBA8VYVByu2LKxqPVfRiUXer4dJMZHeUx9eru1TdJvYKArlLpR9gOnxhJyQApXCtuxiNJgIRp3izbWYeiZBJd1MBAJrNd4eN73Wb4YACq7tCzVifr6V8GFmYYiQpNvJVwKgI1IHZSh2+F9e1TEOxoodBi2uCi/84= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781866586; 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=XTb+AlUqJw2xnva28g4rxiMmMqlgPFggSMev7UPCQ6Q=; b=Ax7zh+10MqkuzUx/zCVS8nJM09G9JZX5FwZtNLVibHG7IvBSvl0whhqLvsOACmqTCO7PesLiqZnL7fRiZ3HM+XmyelJjDd3Ey7x9R0CtM3DnxnZQCM3eedu3iMBaC9UcOdQRUpR2kUqxuGvgslT7DedlAQTYyJn4n3B0++Me6og= 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 1781866586047388.74979272410394; Fri, 19 Jun 2026 03:56:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waWsp-0007ln-NK; Fri, 19 Jun 2026 06:55:35 -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 1waWsn-0007l5-VC for qemu-devel@nongnu.org; Fri, 19 Jun 2026 06:55:33 -0400 Received: from mail-northeuropeazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c200::1] helo=DB3PR0202CU003.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 1waWsl-0003Ts-VJ for qemu-devel@nongnu.org; Fri, 19 Jun 2026 06:55:33 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by PAXPR08MB6576.eurprd08.prod.outlook.com (2603:10a6:102:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.11; Fri, 19 Jun 2026 10:55:24 +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.0139.011; Fri, 19 Jun 2026 10:55:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=d0mZKPMcCJ4e8eH7rpKu5hkIY5Y5foKMtcIUmd/Xq/2WUEFwCqSTfq8LprKcorP3DSbQkzmXlRsLYlJdYR9F8iaeRhn5lT0wOdkvcgMndYCes+EyN34gwdZVx4ByFI5ZvMdGP2oBeYx5hAkOhv3IOkeUnWSxTSJW8/8kmC+tIWOPT0znz3IgvY+Dri9u1WjuBqq+Pfv/euIu2CphuPvGqJI37a6FFZi4jYglRRBDar3j9+OLksdwH9HEaPfR+04to14lFO+rLhvddfx3/0b+k30p6Ko6ij8Ni2coNziQSo6d8w9KjGxkD5YjqIIp054JFU2bOR6BVNcT2/1w3IOPyQ== 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=XTb+AlUqJw2xnva28g4rxiMmMqlgPFggSMev7UPCQ6Q=; b=tS1/e9rtbpGkGdINGc98n7oM59tMLHCOY5ZCLxQVgKj13ncu7g9cUlaAs/TF4AYkGP6wJfjsjiPXOZW4K7rzjHoZD044tuuKLPeyWDs1mzjCs2uCUxXkBtBQOSjPlzrk9MEW01LgK2yQUx7uBo9Nj3jaWNCbt1bW+RSEIxhM4BvQYVf0kVBABrefNhrprmsTswbBvz+LyX2LVt41cbSApvGvjGZHzgiARbX32kojvYf3DEaeslEtJNAXb9F8ODPF7l49lwA1d4pstcd5KQRGtvM2+/RIf8/nDNnKN6pkSh1UN0ffqSRJVqXKsZNwfJuYAcWg7EX/EmCpXFCiy56S8Q== 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=XTb+AlUqJw2xnva28g4rxiMmMqlgPFggSMev7UPCQ6Q=; b=J3UIIUe78c+jbNo0cOQJlDgh7gmh0NVjd3FtPPKRNhBPMwOYqg8fe2L49V4Bvjfuv/ajSNAPa36eK85msCYXWAWcNfTBMEztRKBrfOExXuIxH8UGK4apk3I54Sn5erOjCIg/SpqKlERwCt7uk6TXd7uXrFQSgS4toSf8Gg2m/gGwgb8IbwjbCgr6PQDS/1TBKEVbXlGwoBkpVJiRXjgOd/ui++nvh8rTQYAUDO1k4vhVHtJVIikiYAMzTA4+ONlrzi1/f4/gFGKeBAeC6XXdQftJAzf0NkIsK9PmlNx6+xZpBLNGp0odK7By5o9vxsq6vr7SdnJWhkRlHLY3+A4ITQ== 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 v2 2/5] migration: stop VM earlier for CPR Date: Fri, 19 Jun 2026 13:55:11 +0300 Message-ID: <20260619105514.128812-3-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260619105514.128812-1-andrey.drobyshev@virtuozzo.com> References: <20260619105514.128812-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIVP296CA0089.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35b::8) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PAXPR08MB6576:EE_ X-MS-Office365-Filtering-Correlation-Id: 4dea8816-ebc5-436c-ff4c-08decdf143a6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|23010399003|52116014|376014|7416014|22082099003|56012099006|18002099003|6133799003|38350700014; X-Microsoft-Antispam-Message-Info: 711sem4UFSzHrEFK8fdWvjQMgWSW1WPLjbHC6hSmlpQz2nJFkTHjPxCy8kSpPyV44dGtm2CW9q7ivCK+AmN7s8qm5WZEwK5k9igYZBmoLdA1mkAmSv8XYk0mhIxeOiPwBIg68PrS79ybjs7eFkMNpcPxa9cSXSIT2uPXdhcpXaGyl/Im/pxXC68cjPPP0u2AwN/C2Mp7svriQgWl+vA63Jmfm+uKWrxPJSs/kjuk6eHpaJDH1Nl5eV2dCKnSXGVSup0//eqk59bDqe1LhoN3dijqadrxcUdYU1s/M2FONkwv2fZCxq6AV78zdgpPNCN/FT0o17bkeWfdIjimXEHTl1i9MUGtgk5jNEEoX3UAt/wUHzTUeQVPn7esejXRYwL8JDSohyFGM3MpXdltMLhcfTBdw5JkjvhIagia42aja82HY+OoBlWCTXwxteyVUs7US9d1rgW4wSd/AYuuIiJggYRx9KmPiHsYi6UAT5eKCRg36ylg8HaXTAjUW2wy31/Xt+eWqs3E+M+F+LPaPhNtQVbBtbw+Qn2ngFxIWEMTX9msVKgp+DvuTn25Pgxo/FRNJ9f20yjmdvNmo+u1nVSaEFJcNZt/W+YNRIaPSB0qz/SUOfISvR4YK2yzBUMRmbijwmikksPl9B4vkktss+7Jf2+WyXMD4oqnjzKdla0w04/Ev2MC1pi2O1vjzt5NWnN37jNC7mn/e7nMkmhzi0zmm4m5QGUTk7nxPrEnI180O/I= 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)(366016)(1800799024)(23010399003)(52116014)(376014)(7416014)(22082099003)(56012099006)(18002099003)(6133799003)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?guKOwgR4+Y5RW4j5JI8O4SS0xFcs7j1gYjl1U6Nv8P/kfGKhlQms8suU0Mci?= =?us-ascii?Q?dbq7dTzj0tW3a7nDt1R+sm/79I7DG8VQmZQd46JuLrmsj8FMZiB8WxSuslkO?= =?us-ascii?Q?QBQ+qeV//nvz1Gbw4u1w1fKXMMYm6K7YnTcXYhdsYRQ7VUd9uHaq+Az0+q1P?= =?us-ascii?Q?Zs4d8ntILXwyceFebTC2OgFCLCQZA/o52iKm+kohLSzfzIEN603JYXvfjZKS?= =?us-ascii?Q?N8dIoG9nacUUceETp+1fNunWHBCOFR8L3kO7UPVc09aSxFDVPQPhM/iG/q3I?= =?us-ascii?Q?jW+XrTzLXEK/6b5W9rd22jqfFkltqTIxd3kQCFxoT+Esu9chDFcAIcZTambQ?= =?us-ascii?Q?KA28sdt2rsMo1J+5RvDSx4iH1btZ4YZwQY+KDl7+zZkPxbDSuDiKskCHLxLH?= =?us-ascii?Q?GyiJyfTeSHtTdOsvwEA26W441EcSYxiMei2hqBj5TCYyKltwBegu7KoPWCSf?= =?us-ascii?Q?i9tO0tGnZfN6ky6WWSF4RqysyUcJ+E2gW6KWHDP21bb+Wg7RhoPz+D67xf2j?= =?us-ascii?Q?HNN9HZQCDmJEQLRi0pWuvgGkzytot0uL9YsRfZiTYKC97/fQEyl5LjVuX+Y1?= =?us-ascii?Q?cPwsiB6NqRXv48iK2IryNIprO1P1J6eLNDlPh+fUL9YBj2ZZECC+3UHNOW3T?= =?us-ascii?Q?d+fZzIsbPzX5NJoQmnaitv/8tSdNSgcnrRmWHsY6iXlYi2O37oiZcLHsffHM?= =?us-ascii?Q?H/T/JCX+D1STwCVwgeXr9qPSjAJ9FnPm3n6af24ZHSLQPRBOlcDzs0wKarv5?= =?us-ascii?Q?y/xe4WIPfOID34TXTyQvVBk5SvFjNwSJhDIRnGeWBMPxyPvvarZvln41pfqK?= =?us-ascii?Q?QLQOAdgzWC5t/fLPgxL9JNefNiPebIfTZ5+yEQEQNq1obRvEr+CMNgEN8427?= =?us-ascii?Q?zPAOL1jy7TJJC47boyntEKLqTuai4zTAF8SFOf2S4CeJTiymJkn+G63BXxdL?= =?us-ascii?Q?5x2PcKr9gFykJ8u71ubPrTNTEmNbY2dovukgm5Q3tdpusKC3XAksle+D7wI5?= =?us-ascii?Q?/0jOXcd4d1BnXj/MJelsfx+oseR2N/sffo1SKGfISz3XoBdTrf+wxmMI1DFo?= =?us-ascii?Q?I+/vgNXnUfnpxt1Yl7/lhoMtndq82+pib6oDss2T3pu+gcRCXZcEXC8EZdU7?= =?us-ascii?Q?DM8FDBm0tw3/NRpMwrbUJmYtYi3osU/Av5znIbISNBM1Hg8P53ZSeJ/ELfxT?= =?us-ascii?Q?omo+TsUvu0yyHjvvnSPDCNktFIgJEbl1Dx6Zb0sECj2IjYLp3F5w51eZvova?= =?us-ascii?Q?2jBtC2qaIpCLRXlf7/vLoWiPw2cINNeryi6P3sIfvx6qL29sEHxfdazbL+Rc?= =?us-ascii?Q?1NqsuLOQQqgLHbuUu7l2LZWBCbb2xqEPtJzjdwdatoQzAOgx0itHLtFxwVIL?= =?us-ascii?Q?D4P3YBvwY2gVeEB7zWUKH03Tkc2WByRSQxQ+3utq/zH1wCE53tkF97qk8rdE?= =?us-ascii?Q?o6hr8b12eLMrtk2BG08iHGaBGHilm7lKRs1TbJaUurizSmb05phYjLc/lF49?= =?us-ascii?Q?HXV8k5c0oQeZWueIlpUIbQC7FJ9ieIGaui/MxS3TGATqjN/yzQAMlQseUx68?= =?us-ascii?Q?Bb3bJU62JYHCXjQ15YTfpqxqAjtnUKVlPkSp8W+gDklfwAKbn+Okx6fHfcN3?= =?us-ascii?Q?Q2BnfZt6rhmNxaQ6YwCHhYi9oIDrHk0Ve1Dalol443dkzZBcpsxQzLw0am4N?= =?us-ascii?Q?2w9aNWPWIbaNMUkh4b0ISrU0L/uoYHkD/qcGmf4fWB+LOqdoIZvsTrbj++zH?= =?us-ascii?Q?Wog8Q8pQFK1ybnQ6dZieQb5kvIXR5cQ=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4dea8816-ebc5-436c-ff4c-08decdf143a6 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jun 2026 10:55:24.0185 (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: s0EtluNf4f2Wh4C56x2pwFERAnJvfSZxuiRh8UNkqbFcEAsm50WM1uQLZ7vyon/+VKbqPbnEb0OMbjlU5p1U6jckcjFN7CPkJyOh/NcRDDA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6576 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::1; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DB3PR0202CU003.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: 1781866588112158500 Content-Type: text/plain; charset="utf-8" During a CPR-style migration, we pass additional CPR state via an aux migration channel (the cpr-transfer case). That's done in cpr_state_save(). The main bulk of the migration is only sent afterwards - that's why we call cpr_state_save() early on in qmp_migrate(). Previous patch placed emitting the SETUP event before cpr_state_save(), since devices must be properly shut down before we send their FDs to CPR target. However, for the proper shut down to take place, we should also stop operating them beforehand, i.e. stop the VM. Thus the desirable order for cpr-transfer case looks as follows: SOURCE TARGET ------ ------ cpr_state_load() blocks | | | 1. migration_stop_vm() | | VM stopped, devices quiesced | | | Waiting for | 2. notifiers (SETUP) | FDs from source | vhost_reset_owner() releases | | device ownership | | | | 3. cpr_state_save() ---- FDs -------> | | | v v postmigrate Device init begins - cpr_find_fd() - vhost_dev_init() - VHOST_SET_OWNER So step 3 is the synchronization/cut-over point. Target proceeds immediately upon receiving FDs, so steps 1-2 must complete successfully. Otherwise: * Target's VHOST_SET_OWNER fails with -EBUSY (source still owns) * Race between source I/O and target device init Let's stop the VM early (before FD transfer) to prevent this race. Unlike regular migration, CPR-transfer passes memory via FD (memfd) rather than copying RAM, so early VM stop should have minimal downtime. Since we call migration_stop_vm() from qmp_migrate() (i.e. from the main thread), we should also balance it out by fallback resume outside of the migration thread - i.e. resume in migration_iteration_finish() is not enough. One good place for this resume op is migration_cleanup(). However, in migration_iteration_finish() resume is gated by successful block activation, so we additionally traverse the block graph nodes to make sure activation did take place before doing vm_resume(). This patch is a rework of the change originally proposed by Steve and Ben at [0]. [0] https://lore.kernel.org/qemu-devel/20260128-cpr-tap-v4-0-48e334d4216b@a= kamai.com Originally-by: Steve Sistare Originally-by: Ben Chaney Signed-off-by: Andrey Drobyshev --- migration/migration.c | 74 +++++++++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 16 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 20eff9dbdcb..4a854ade503 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1323,6 +1323,24 @@ static void migration_cleanup_json_writer(MigrationS= tate *s) g_clear_pointer(&s->vmdesc, json_writer_free); } =20 +static bool migration_check_block_active(void) +{ + BlockDriverState *bs; + BdrvNextIterator it; + + assert(bql_locked()); + GRAPH_RDLOCK_GUARD_MAINLOOP(); + + for (bs =3D bdrv_first(&it); bs; bs =3D bdrv_next(&it)) { + if (bdrv_is_inactive(bs)) { + bdrv_next_cleanup(&it); + return false; + } + } + + return true; +} + static void migration_cleanup(MigrationState *s) { QEMUFile *tmp =3D NULL; @@ -1381,9 +1399,16 @@ static void migration_cleanup(MigrationState *s) /* * FAILED notification should have already happened. Notify DONE if * migration completed successfully. + * + * In case of a failed CPR migration, we want to resume VM. However, + * for a non-CPR migration resume is done in migration_iteration_finis= h() + * and is gated by a successful migration_block_activate(). So in the + * failed CPR case we only resume if that prior activation was success= ful. */ if (!migration_has_failed(s)) { migration_call_notifiers(MIG_EVENT_DONE, NULL); + } else if (migrate_mode_is_cpr() && migration_check_block_active()) { + vm_resume(s->vm_old_state); } =20 yank_unregister_instance(MIGRATION_YANK_INSTANCE); @@ -2130,6 +2155,26 @@ void qmp_migrate(const char *uri, bool has_channels, */ Error *local_err =3D NULL; =20 + /* + * For CPR migration the hand-off happens at cpr_state_save() below, w= hich + * (for cpr-transfer case) transfers the device FDs to the target. The + * target starts claiming them as soon as they arrive. Everything the + * source must do to release the devices therefore has to happen before + * that cut-over - stop the vCPUs and run the SETUP notifiers (which + * release device ownership). + * + * So for CPR case stop the VM here, ahead of the SETUP notifiers and + * cpr_state_save(). Since we aren't copying any RAM (it stays in pla= ce) + * stopping early is cheap. + */ + if (migrate_mode_is_cpr()) { + int ret =3D migration_stop_vm(s, RUN_STATE_FINISH_MIGRATE); + if (ret < 0) { + error_setg(&local_err, "migration_stop_vm failed, error %d", -= ret); + goto out; + } + } + /* Notify before starting migration thread and before starting CPR */ if (!(has_resume && resume) && migration_call_notifiers(MIG_EVENT_SETUP, &local_err)) { @@ -3483,13 +3528,19 @@ static void migration_iteration_finish(MigrationSta= te *s) */ migration_call_notifiers(MIG_EVENT_FAILED, NULL); =20 - if (runstate_is_live(s->vm_old_state)) { - if (!runstate_check(RUN_STATE_SHUTDOWN)) { - vm_start(); - } - } else { - if (runstate_check(RUN_STATE_FINISH_MIGRATE)) { - runstate_set(s->vm_old_state); + /* + * For cpr the VM resume on failure is centralized in + * migration_cleanup(), so don't resume here as well. + */ + if (!migrate_mode_is_cpr()) { + if (runstate_is_live(s->vm_old_state)) { + if (!runstate_check(RUN_STATE_SHUTDOWN)) { + vm_start(); + } + } else { + if (runstate_check(RUN_STATE_FINISH_MIGRATE)) { + runstate_set(s->vm_old_state); + } } } break; @@ -3904,7 +3955,6 @@ void migration_start_outgoing(MigrationState *s) Error *local_err =3D NULL; uint64_t rate_limit; bool resume =3D (s->state =3D=3D MIGRATION_STATUS_POSTCOPY_RECOVER_SET= UP); - int ret; =20 if (resume) { /* This is a resumed migration */ @@ -3945,14 +3995,6 @@ void migration_start_outgoing(MigrationState *s) return; } =20 - if (migrate_mode_is_cpr()) { - ret =3D migration_stop_vm(s, RUN_STATE_FINISH_MIGRATE); - if (ret < 0) { - error_setg(&local_err, "migration_stop_vm failed, error %d", -= ret); - goto fail; - } - } - /* * Take a refcount to make sure the migration object won't get freed by * the main thread already in migration_shutdown(). --=20 2.47.1 From nobody Sun Jul 26 12:42:15 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=1781866569; cv=pass; d=zohomail.com; s=zohoarc; b=QCABiecJhiA8lc6/H3kyrWk7wvpKe9Dt0UcxftE2/wJHgkGP1vvoNfRwCGe/RQj3HnEBO3wCSVzeY0RukGgFEwFi3qnZauGv5o5tQqfjfrJudwc/Ghnz3+Vn4Y9olhqArpFT8khoEQ/lsHeNfRcfB2/o8yzdqKRKppATOxcBPf8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781866569; 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=tiV3GjoVpDRlyekKCVzcF/kD9u5/Dc5SdfxAuBF9yBE=; b=F/NhB0RK8f5Ai0nJ1AKVdNrS4YJMp4QnhYCjNQni7ISvwZgyb0RHadjMAm6tP6MgdVvIau4nHVdvJ4amK17PjuCkdlfJTi1t6p1L/WnAXsK440G26u2KmiaPBXUWirdLpW0oGQM+eBOtpy2cb5C5HLdnT/wIE4g94rEyMjbQxPo= 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 1781866569361422.9236642351291; Fri, 19 Jun 2026 03:56:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waWss-0007mN-0y; Fri, 19 Jun 2026 06:55:38 -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 1waWsq-0007lq-45 for qemu-devel@nongnu.org; Fri, 19 Jun 2026 06:55:36 -0400 Received: from mail-northeuropeazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c200::1] helo=DB3PR0202CU003.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 1waWso-0003Ts-7i for qemu-devel@nongnu.org; Fri, 19 Jun 2026 06:55:35 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by PAXPR08MB6576.eurprd08.prod.outlook.com (2603:10a6:102:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.11; Fri, 19 Jun 2026 10:55:24 +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.0139.011; Fri, 19 Jun 2026 10:55:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=M3ltix6TFxDGd5DQj06+3FoUD/2mVzpf9OiDe5fEEf/QA7At0uUNPAUFckAswDvme388bKQx87XiHwa4EQ8FtjgPIcQMPxmiXnMGp9okGXy5DurSWyPOuMXd0UCmCLhMywDHBHNO6Ku86rMEiDX3qdWx7L2jfiyQXOk/AI0st8yVWArPstKVS+5OgtRSJhBHH80wSCWvyL3ExqHBUDU0MTY7h5Byhqe4sz54IUsoK7WpEy7yxntpI+lUyGVIFJGaEYvfdgOyXsurU1518cqd80RZ+b4Hdq0RasZdUpLHatjGVn6w19+Ya2JWHBcUE2Xxm+nAXTST2bKK4fOiEKBZcQ== 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=tiV3GjoVpDRlyekKCVzcF/kD9u5/Dc5SdfxAuBF9yBE=; b=pHYWRkfepLKu12VUD546s7aOHl01cajeL4ZoKPeRyfNQvsbIOeaVyXltSE5Vh+SPOyg8grkhKiq1hhkbaI/nXlwB4M++B9rOQydKnMPQixGmeEINUoZgfbMN/M5MdYDHHJOhKKelbMj42/OKEm8kc3Eit8J316f8KiDRAP6jh0av/+erQ2xltw+VThlWT2NKac7DKh8J7hopkQEBDqcKGRahH89A0pvJ9TW67AYaqHaGDkzQP+Osf/66VSY4RTnmRRuRCXioIfqTZhF437HXCITsZogqUZsElaxNDQ4GFkpbRIJ0Fx7QKoY3NtY4q30vR2n3uyagB/IUtWVvLwwFdg== 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=tiV3GjoVpDRlyekKCVzcF/kD9u5/Dc5SdfxAuBF9yBE=; b=lzRYo0zTpMDAXWbIodvg1pRq03MezTknLI65ZpXHrcTQMSlJevNSdKhA3f1M1pSjJq9TGayJw5cARmD+kaGEV6tQFguxK4/+yJbmprGBnjVZ3pTz9WsXfrO5jKwA+p7AcWECLSlfHatXEXXABbowOtByL9/xn2rTQC9fc/xsDzSUwkNr7z2D4+aPTvwanfkyE00Wbps00D1ezVerpgvGr/U+ZOeFaBnrx3LjWoNOLR5BZljvTSHxIG6SGibZSUXEEp5uEHppAORVDacALfx8j7mJDxz+hMUsFWn5+ILQHj9yyDCajEDclQDBg+ubVXgAxGnp8N//Ta6L+scSk1gRfw== 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 v2 3/5] vhost: reset vhost devices for CPR Date: Fri, 19 Jun 2026 13:55:12 +0300 Message-ID: <20260619105514.128812-4-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260619105514.128812-1-andrey.drobyshev@virtuozzo.com> References: <20260619105514.128812-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIVP296CA0089.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35b::8) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PAXPR08MB6576:EE_ X-MS-Office365-Filtering-Correlation-Id: 77241b62-25f2-4b9b-9924-08decdf143fd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|23010399003|52116014|376014|7416014|22082099003|56012099006|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: tC7WyoQOustIXQX4DwZj2j3yNaEv6zAsmYPX0coiQxraRec4otE1hMvV1OMQZ68oyrQQXPFgWx+G/DR8yWlu99ZZpF3Dn8pfpbTnGnn718A7ahXI673hmdQp9tCdZ3Y0Tz0RhfGsq02v+Dpt/tr50YKYPDF2rEH6mGFfkGS+xd8TvDgE7I4iAyrDjrTH3eoJ2QzsPTDzG1KxbDxJcwWZBVM6iQkiFw7HItr2prmj5yxn03VFDkVCa6ZGNnOK5RnD6PNui3V6BHfQdy8fWKsmTuc51/BEnhnAMzTx1emOUVm5tFbqWKqcFuNPTMnO8TRe+NTkfk8yYxcpkAlEb94nLUf+KRfs1r5b9iA99/AWh4Jue/zJUnxuRW/Ae6Ra5GLNQLGuxfnyiK9+6Vj2mceIhJebjR1LBod0hIsiuuKFrc/YWtF90LKrVCp+JwovcpeRwIDr7+xs4l3MASnEmceW4ItXvWFMlYKWHRVpxMK1t8gPUpPmc/AhHsq5yqizCC/jRgn9rJ+Tt1yguj0HBMaZjQW4igWGKOjPLCDr5n0evxXiuqNRGsdd+D4Utj/tAx5jy9VwzMoty7MenpNidgqAyKYDlNAWndaMbnJmgHZN+lGBl3u6BfypicO15qnLJkuTgTgTzmuuxqcjvaK9DEQsT7diF8qdn60/LdzWE5wI87mxAluKMkAJv2CwDekyFz4WUPR+AEH8eHzu3apxOpT1MPTM/SC4R9P4d/SryK7Nojo= 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)(366016)(1800799024)(23010399003)(52116014)(376014)(7416014)(22082099003)(56012099006)(18002099003)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?gBYMEJc2FMglPUWP/rY3Lc6OajDZxj4iQr9mrgwENSB73fDq7qYehc06A3ZV?= =?us-ascii?Q?ho8vY/pp4e/2dARLelMaj1jwaqzPF1SIZPk4tPE2DcaO93fyZ7oV/NbQDPH3?= =?us-ascii?Q?4Lo0pP2BYK7NT4M0H8XeFOVSZHfg796oW59vzGE4WkBo01Gq78kPvzi5zd1D?= =?us-ascii?Q?ic9xB2U8PIoqD7iVpwj1ElXCzz0/naJ/4pTxfNLsH3IcZ+ZdhWritiHGggFH?= =?us-ascii?Q?aml7aIQl1B+m3spQsNgXWn6/CGVvNd7BKTaOyUbV6C/vErKv/aerKdRqKIbT?= =?us-ascii?Q?WOCE8SIJdZA/AV7rlN9VcoJagr7YJZ5+cE8UJXdoTlh6lwAOiL9LeeYy335C?= =?us-ascii?Q?7CwL1mEqhEJsqHu9s7u67svY77DFkENxCG9dn3om6fJ1WdT8h/VTun8kK++5?= =?us-ascii?Q?B7H2qwCAA94yhestAw5w3t1jPchniO2uYLT5VzKP/PrmYEUXGwANEWi5XD1g?= =?us-ascii?Q?cSfkoqfFiD4l1GXdwNXx4rZtFHm8vCFp7ETw49wol4vvBoAnOLuTtElLe6b/?= =?us-ascii?Q?RsiUr29zStgiP+naUOzERyKJyvC8+ZfHiYSsYG9rAwekUzueTjZoJOf/5vGa?= =?us-ascii?Q?vcUrTlukyV1OHsCBxpQi7qwvZcEwyJ7z9l5GVrWacwaYtKHAJcpeG2v5KJcA?= =?us-ascii?Q?/dwr0pIQwBcBBGj8E0iolLHQNA0hMSytqUL2eOBrGIuHV+GJaDbYv5gAyu0B?= =?us-ascii?Q?vxv0ajLPEQylODTUcmF5wjwaMsckLMzklGYxewoLtvKv9Q2X7yQX+miE0v96?= =?us-ascii?Q?5hYGFv9+KWG1jD9jlCu+ezoecUnZ9k7cNLmlEuF8fqeNUWv6AFpm0ABLH1ii?= =?us-ascii?Q?5hnkWCMxXc2LE+tjWI5zxbxlJhNKVXDrUBrlYT9Hjn0ntZQDK7KxIevzSBGe?= =?us-ascii?Q?d7KtER757Wx1JrCwKQiFMO+U73CyiBbphJuGFHuEmNS2pYeWTXL4noLaG399?= =?us-ascii?Q?dxWgSU1hQqnrVsTTNnWzytKEt/oFpLZwFxtqHGRkpmgNFrKBf3mK1jMiOQ3h?= =?us-ascii?Q?ekNIKrdgjddcy3xIVbeq6r23VHpOVN+r9CKWBJ9o8L8j80CXNvAy+nDmbn9M?= =?us-ascii?Q?1/3plMAcjyspR6ccTtyH7uAjWSKGEGwiuD2vBS+9Z/WKGlOG5QQqmis68T8P?= =?us-ascii?Q?336dtZJBI1K0Fdbm9h3X47YY50ukJCxiknjn3lnJIOoMSJ3/6uVrbJJGrlU0?= =?us-ascii?Q?l5lM7D/tVVz9sjvGdljjsPTRccE7hsrstuwlaJbLgqVPb94C6eLz2SAKQzmF?= =?us-ascii?Q?NcCBkEOfdj1sRTF7ukqUB1o+MXRIUqcZPflxbN16lw6fbD+PVHgAgDOmvQn5?= =?us-ascii?Q?SOohTyns77rYf5zHD1UFTxAHEZeB0Dy2ZP+316nQHSX1VbtEzrin4LiVmbjb?= =?us-ascii?Q?ewafb1lqV1mMf24isVgzeXFTqBAvPKkew03HJeHtY2PbLEJtax1TxIpGsNWk?= =?us-ascii?Q?SQQlXFXExd3xXdK9rk4XTHYbvPA0jPpqVP0LTZCx7EAHewlKxcc/mslkTU1Z?= =?us-ascii?Q?5KNnJyJShHeHtw39E8UIAOI1X8pUCFtymcIu1Oj781KnESCXHfiqe4v1h2GP?= =?us-ascii?Q?hynVRw2kPbFhXbjmKBqEVK3/JfJOvRKpSQilnjmg03o7exdY/Qc1SWLvmw/9?= =?us-ascii?Q?eSP0FV+GdPQn5fiW5BwAKJOuWYqoSqM2muPjkLwFGEDaMbt5Q9rrAl+NbKNO?= =?us-ascii?Q?wV/zTXRK0qVV0vDGA/HGWC1EslOtnsfovOeNYTbrAMB3/3pVArheZI5xF+aQ?= =?us-ascii?Q?TFM3CDG2Y7L9TCSuWsFZ3uZeQXnxEB0=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 77241b62-25f2-4b9b-9924-08decdf143fd X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jun 2026 10:55:24.5809 (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: 4odJzTxD00lv68lgQ4cpoxEYTspQ7h4JZKcHdJuUgx596lj1eDo5dL1tmtJKxgvJWMfJD7/3io4FRFOt9y0XqMWnDKjOkYyFAfZewx0D3H8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6576 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::1; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DB3PR0202CU003.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: 1781866570590158500 Content-Type: text/plain; charset="utf-8" When preserving a vhost fd using CPR, call VHOST_RESET_OWNER prior to CPR in old QEMU. Otherwise, new QEMU will fail when it calls VHOST_SET_OWNER during vhost_dev_init. This patch is a rework of the change originally proposed by Steve, Ben and Mark at [0]. [0] https://lore.kernel.org/qemu-devel/20260128-cpr-tap-v4-0-48e334d4216b@a= kamai.com Originally-by: Mark Kanda Originally-by: Steve Sistare Originally-by: Ben Chaney Signed-off-by: Andrey Drobyshev --- hw/virtio/vhost-kernel.c | 6 ++++++ hw/virtio/vhost.c | 33 +++++++++++++++++++++++++++++++ include/hw/virtio/vhost-backend.h | 1 + include/hw/virtio/vhost.h | 1 + 4 files changed, 41 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/hw/virtio/vhost.c b/hw/virtio/vhost.c index af41841b529..1521b50cbff 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -24,6 +24,7 @@ #include "standard-headers/linux/vhost_types.h" #include "hw/virtio/virtio-bus.h" #include "hw/mem/memory-device.h" +#include "migration/misc.h" #include "migration/blocker.h" #include "migration/qemu-file-types.h" #include "system/dma.h" @@ -1667,6 +1668,32 @@ static int vhost_dev_init_features(struct vhost_dev = *hdev) return r; } =20 +static int vhost_cpr_notifier(NotifierWithReturn *notifier, + MigrationEvent *e, Error **errp) +{ + struct vhost_dev *dev; + int r; + + dev =3D container_of(notifier, struct vhost_dev, cpr_notifier); + + if (dev->vhost_ops->backend_type !=3D VHOST_BACKEND_TYPE_KERNEL) { + return 0; + } + + if (e->type =3D=3D MIG_EVENT_SETUP) { + r =3D dev->vhost_ops->vhost_reset_owner(dev); + if (r < 0) { + VHOST_OPS_DEBUG(r, "vhost_reset_owner failed"); + } + } else if (e->type =3D=3D MIG_EVENT_FAILED) { + r =3D dev->vhost_ops->vhost_set_owner(dev); + if (r < 0) { + VHOST_OPS_DEBUG(r, "vhost_set_owner failed"); + } + } + return 0; +} + int vhost_dev_init(struct vhost_dev *hdev, void *opaque, VhostBackendType backend_type, uint32_t busyloop_timeou= t, Error **errp) @@ -1678,6 +1705,7 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaq= ue, =20 hdev->vdev =3D NULL; hdev->migration_blocker =3D NULL; + hdev->cpr_notifier.notify =3D NULL; =20 r =3D vhost_set_backend_type(hdev, backend_type); assert(r >=3D 0); @@ -1766,6 +1794,10 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opa= que, hdev->log_enabled =3D false; hdev->started =3D false; memory_listener_register(&hdev->memory_listener, &address_space_memory= ); + migration_add_notifier_modes(&hdev->cpr_notifier, + vhost_cpr_notifier, + BIT(MIG_MODE_CPR_TRANSFER) | + BIT(MIG_MODE_CPR_EXEC)); QLIST_INSERT_HEAD(&vhost_devices, hdev, entry); =20 /* @@ -1814,6 +1846,7 @@ void vhost_dev_cleanup(struct vhost_dev *hdev) QLIST_REMOVE(hdev, entry); } migrate_del_blocker(&hdev->migration_blocker); + migration_remove_notifier(&hdev->cpr_notifier); g_free(hdev->mem); g_free(hdev->mem_sections); if (hdev->vhost_ops) { 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; diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 684bafcaadd..1a722ddf16e 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -119,6 +119,7 @@ struct vhost_dev { QLIST_ENTRY(vhost_dev) logdev_entry; QLIST_HEAD(, vhost_iommu) iommu_list; IOMMUNotifier n; + NotifierWithReturn cpr_notifier; const VhostDevConfigOps *config_ops; }; =20 --=20 2.47.1 From nobody Sun Jul 26 12:42:15 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=1781866606; cv=pass; d=zohomail.com; s=zohoarc; b=SbELDt0udRNrnla8+7ofilejB+tHCmFR9TziZGXgtTd9MkXNh2QpGhTldn7eCzX/zicAhdzNm42NWS3pkemh5wZz27Khp/9sUJRDfVdgh06HTkdBml7EAUzFAI8iR1VJV5IlFry+oUY2k8xf2cXxyz7mozcVFcIZnFfTCaGXhjA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781866606; 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=hdub8YwHaRt+hobvmkpSoOXl4FYLk0vtbTCm+KBDJLw=; b=BThwl7RcFQjY7m8TBVqGxdeO2CGcwaS6U6hJHP1l6AVDOtpuxcbJzt5hQwK4NXakLh+M0cHB59YA+9hB80NcKpge7FpHmqulSAdpMJNzfZbK9RqaHvF6Xb56e3hwHkrLGbsxUyP18+jwp720molwgUFsketuu+yiLsgn6XQTXJY= 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 1781866606750999.9571527728632; Fri, 19 Jun 2026 03:56:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waWst-0007mp-DH; Fri, 19 Jun 2026 06:55:39 -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 1waWsr-0007m8-RP for qemu-devel@nongnu.org; Fri, 19 Jun 2026 06:55:37 -0400 Received: from mail-northeuropeazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c200::1] helo=DB3PR0202CU003.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 1waWsq-0003Ts-DN for qemu-devel@nongnu.org; Fri, 19 Jun 2026 06:55:37 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by PAXPR08MB6576.eurprd08.prod.outlook.com (2603:10a6:102:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.11; Fri, 19 Jun 2026 10:55:26 +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.0139.011; Fri, 19 Jun 2026 10:55:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=K6H5AlEyjKBfSL74II6eJtymdeOpZk0aGNvgj+OxMfPPWFNbHUe2AuVux2s2A9D+76vTrN82ayPYWFxkphqQuwD6eQPwWLyzDdopjNJV14NYxy8jFYkPqlxDM7bga3IARHLrgXFqoKoa64aQUU+LIwHaOMeJWpU9htBdJv5EoxVhxDprMrzZLVcDOWjNSFaXoHYIMdVokZaDWshNA637Rorc3qYZtv2xfxg2kFc1TNZJeJKwXu4MMzOwbdRoKraSYyXFTUciB3NFYtfpWBNyl39Vf7yb/zJ3mp50oYn13xj/aaBhSrRqwGnjJfv74RmWFRBXQy3DHa32IfpxHcvP4A== 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=hdub8YwHaRt+hobvmkpSoOXl4FYLk0vtbTCm+KBDJLw=; b=G1fhqTg7lWC0ZqXid4ZNsVGAi8xgyd8VmRANIkahU76pahM+Pb6294Mzd5h0ILMyBiQ78GHuYUJKzEACwB/NCswLqn/+XI58pO0uJshPz0iy8O0tya1soI0V3Fk/3DqMJZGj7Wey4qVoN9RtZSApXB8QIvEi0MPk8pnkZAQ2t2f/5GkCOJJkZbRivj5uqAv+gslwtOYFSH7OqyQgVk+wFM/nsIGCKlj/rB+dlx3yys8pB4Vjr8VQdroloDgg8BdskRCzZYyStfE4BlYx/hYXLpuxRg3s63gMmO5967GYa7Uk/eSRhp5MtBfTaMhiYvqEsGvwo8Pqt45OSWR8Qrxvqg== 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=hdub8YwHaRt+hobvmkpSoOXl4FYLk0vtbTCm+KBDJLw=; b=hHjdXZiwWWpCpsdHq9M7FYg6r+9Bm3DqO9QQ4e64E13DvmVk6S6RIxN3cE86488oV5N3C7lMy3dpZtXzEk76siUu8X3bqdi0Y9i6jGShRFAFtpRTn3IyjMEPuObfjtg2A3c/f31DBXiqrkc+617gxDki07Yd6XK3OIxNVOjkJRYpEIF4SYGaxAWDdJoriwH42s8h09gnRPCmRezEA34/CO1MW41zCrwawPrZZMaPnEpuaRvuRmZl0TdJI3a9Cz1j32NCs2edJuBDsn4lsLvEgNc4nBuslM2Yh7cNRFAoRc4EQEf8/eAZbfn8/zjLv8XcFNmh6cEY8fFjzxP0wOmHiA== 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 v2 4/5] vhost-vsock: preserve vhost FD during CPR Date: Fri, 19 Jun 2026 13:55:13 +0300 Message-ID: <20260619105514.128812-5-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260619105514.128812-1-andrey.drobyshev@virtuozzo.com> References: <20260619105514.128812-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIVP296CA0089.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35b::8) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PAXPR08MB6576:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e123c02-b1ac-422e-019b-08decdf1444d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|23010399003|52116014|376014|7416014|22082099003|56012099006|18002099003|6133799003|38350700014; X-Microsoft-Antispam-Message-Info: bwitkTFE74k6Y2bbMrm9jau9nl9NMv8etpjJ+mavnygYO28IdoYiPnuKyzRp+c6Xr9SFNAggsIRn2nLdSRG47VQMNuTBO4rE7QsElFzS/KedGI8HjsMA3fA0Wdll/bgSyAC847nEIkpOnE3PyrUOPWamcwkXj5r3eKqmSu4w475foa2ifcEfAkuifjVFPL8FEpj1ggtcWbskvlJiOm7gf+XbX2DGoqBKYSKYNVwrB9OWQVDwOSs0XCE6iZJGwwTpFtIqFBVoNi0VgVBT3ZXTMRhIND+zMYSO/g+3ZIBNrg6D1drzVyE0lJ6IIOkc4gWtTxorLMDq1DokxjK1+6xQdaUI8e/EXfBJfdZqrPmFgo60FJ5wPnftXnI71Mf/aeV3Nk9TEHwz67yFW7r/apqh906lwk3z1tc27iVVFx+mq0AT1omAh6ZBsTEnjdar3flmSAW3qyW/JK+lSgBBeRFAEL9LCaKpbLyVPsvhnsFU+53S0j8xaFeVCoMx46TBsCrCJHAM9UKaNQzE0bGPaslSAm2+yXD+HFdmUj9deawyc5HDKzuFIP1iBi7sj09XKFeVafBavbnj9Jgiys7wNM3j9uBZpFZJYbTi/vYAhqfLrhqXZlj5qM2EHWzMVzMnTxNz/vr1ZdHasnI89IWxxGolKRCXCPtM8ytTqThojUgpveUtq7PEZEdkQadWKco71mKuW9hatrs36ArhiDGozC8QGcuveGr/p4J50iCZrDKw6SI= 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)(366016)(1800799024)(23010399003)(52116014)(376014)(7416014)(22082099003)(56012099006)(18002099003)(6133799003)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?T2T5L1Ufkg+ClXp7i2dUDXV9nKAArCLYa5+z1QfqXcRXWVSYDMTMsQ6rEfsU?= =?us-ascii?Q?NtDObcsznkvtLuhuYZ12sMFdV5ICXr0yPWkjgQr6F+nJWt1AxAppxZftk67D?= =?us-ascii?Q?DZrfiPs4W7leP/bP65ZUszkpbU82xwSU183xvxK824gqoiOx31jfAqdRuju4?= =?us-ascii?Q?pL8UBc0Eaq/mu/mbUsTLKI0ZTQ8qbIGS6LpPvdjKHFVrByFnp1ktsKlOdJ7k?= =?us-ascii?Q?SSPiHQfHVwyc19N+xi6mWF9yW3uZ/RmVG2zCkUzRf0GtM8POpINZqzcP1nQ1?= =?us-ascii?Q?GRifrvBaHje4w5utHbomdzJd7Ou0nUJEb5gkxphJCpw0WaiBt4sof814Ui4+?= =?us-ascii?Q?3AGX48PpY6mrMdLnNOaXejJ9Q3AACTUQAOD8aLai5CzQJb09CiciZkj6Us99?= =?us-ascii?Q?XTYi0ytM76d1NTL90yrYGzkM1UzUf4qaQ7Q+ayXK9h1lSeITswkOIaIr5UAs?= =?us-ascii?Q?DgfSYbUnBDR7dSCQW9TGlNOqpETGihGgzDSV+jy25NHGraKH5sBhQ83RK07M?= =?us-ascii?Q?QMsWPcLBlpUrbZh+WWUAVDlfsw/WLO4no8JqpQcCBg6uhu3rRG4bQhAZVEjf?= =?us-ascii?Q?ROHJvP3jVDWj3fgDBRMfMEgJrMtpePonh0xUj0SrV3UBebH0NHkOmzpDJIl7?= =?us-ascii?Q?EW9CtjN/vKT20lqc61nvUX0QyjAB+f3Zx6dw6k5loOA/+rM+KG9BkUsw02qT?= =?us-ascii?Q?uAeoI4d7zkHoANK0MSgEb9t3a95Kwr6QOUaE68fF7KsZ3e68eJ5JaRIh7WFX?= =?us-ascii?Q?RgBDCM0ic3vxuZgtOLg7lE2BTNDGvv4c5+yl7ZOPQR6qrggoyGS/PwvQQDiq?= =?us-ascii?Q?gBkZHvhvOoqxkD5MLFW2OBqfcdYOAjSuc6SLcLHa5ZA42rj71cgNg1xYUn7j?= =?us-ascii?Q?HAsVZh6Pej/X/o+JZ5KUyNfjQegjDh+bQar5LGbdeN35ARUcPb3KKXqOLb4C?= =?us-ascii?Q?/+sYuMGCFV/VBS3bmCCuydj4PVAVbxTgPoVacGnv8C+psQpPP4C8Mf2NGE8w?= =?us-ascii?Q?Z+NBSdFzlV3jmqYB3Ppk3+YiuHID321QI4qv5FeZek5HA24ApUlRzNrY1D7d?= =?us-ascii?Q?nZwusXVEPVa8qmlqO4kqD78vcFZS4ARCr39tdihbD004fYsXX0bfmz+5xNkk?= =?us-ascii?Q?mwLZK6bTRpUY+XT7RlxrFlyuwlu2oWDZAko0eUBayex1goLoMgDTKFjbXj3v?= =?us-ascii?Q?z6OqEx1hiAEUsDUqayKtaUdAG3vPv37g5qZFv5ZtCll1CMXYzr0BNqPwgwWH?= =?us-ascii?Q?w7fam8kc9VvXcEA89NmAnVKsXIyIX4wqUHuyvG6r3d8G9lGGTp11Ummah+9f?= =?us-ascii?Q?mM5a6o8mYVBkiXxbwPhbD2Gz65jV5pJEFD/zq0tLK9N0YdbWl3UbFTb3TOkx?= =?us-ascii?Q?JplubOwdf5k75b7jpFm4z4KcVlBGfmS1o+elwZemjGLuGqiCDz2RUP7hjJ1b?= =?us-ascii?Q?zj24YOZ8HDhZR1Xhhfbq0GnDrSJE3g0TTowfc8XwzqJOX8dJWoHXh16KZk2m?= =?us-ascii?Q?2Gtrq3WyV3NONdRZdgDsezAL0cc8ib7IF4tUR+Q1Dj/inNKOErNhnq7xBmMd?= =?us-ascii?Q?dW3iZQW9luDE745pdZ4t7Ru+j8sGswBLYGXcapPOJDIy4rSbquHcLaaq56WE?= =?us-ascii?Q?UOxfUhN/g89gWJkBAueEEQryXCkV7RI3VOHj9nufX57HAvBij5djpWkfyz7m?= =?us-ascii?Q?v4bm9sLr6WjkLv8hLboJsuV3wkfGgP4cLcgaHq/sWh8DZADbdu7h+uWkZKP/?= =?us-ascii?Q?m+55SKx7ga05yf8ZiloMJMrNfVy7ktE=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e123c02-b1ac-422e-019b-08decdf1444d X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jun 2026 10:55:25.0870 (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: z53xHY/n7CtxS1K3W68Jl2p3EnrA6ZsW8f0zrRZIWli2vmLSIio6yoCTBzcO6or9UmiMgKapOaMU9hPHQpTeDTsYwnO08wjd/mW0TwSh8v0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6576 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::1; envelope-from=andrey.drobyshev@virtuozzo.com; helo=DB3PR0202CU003.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: 1781866608375158500 Content-Type: text/plain; charset="utf-8" During CPR migration, instead of reopening /dev/vhost-vsock device on each initialization, let's make sure the already open FD is preserved and properly reused on a subsequent initialization. Signed-off-by: Andrey Drobyshev --- hw/virtio/vhost-vsock.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index da244eb1657..ea9a7d2149d 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) { @@ -126,6 +127,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 @@ -141,7 +143,8 @@ static void vhost_vsock_device_realize(DeviceState *dev= , Error **errp) } =20 if (vsock->conf.vhostfd) { - vhostfd =3D monitor_fd_param(monitor_cur(), vsock->conf.vhostfd, e= rrp); + vhostfd =3D cpr_get_fd_param(proxy->id, vsock->conf.vhostfd, 0, + errp); if (vhostfd =3D=3D -1) { error_prepend(errp, "vhost-vsock: unable to parse vhostfd: "); return; @@ -151,10 +154,20 @@ static void vhost_vsock_device_realize(DeviceState *d= ev, Error **errp) return; } } else { - vhostfd =3D open("/dev/vhost-vsock", O_RDWR); - if (vhostfd < 0) { - error_setg_file_open(errp, errno, "/dev/vhost-vsock"); - return; + if (cpr_is_incoming()) { + vhostfd =3D cpr_find_fd(proxy->id, 0); + if (vhostfd < 0) { + error_setg(errp, "vhost-vsock: could not restore vhost FD " + "for %s", proxy->id); + return; + } + } else { + vhostfd =3D open("/dev/vhost-vsock", O_RDWR); + if (vhostfd < 0) { + error_setg_file_open(errp, errno, "/dev/vhost-vsock"); + return; + } + cpr_save_fd(proxy->id, 0, vhostfd); } =20 if (!qemu_set_blocking(vhostfd, false, errp)) { @@ -193,10 +206,12 @@ static void vhost_vsock_device_unrealize(DeviceState = *dev) { VHostVSockCommon *vvc =3D VHOST_VSOCK_COMMON(dev); VirtIODevice *vdev =3D VIRTIO_DEVICE(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 + cpr_delete_fd(proxy->id, 0); vhost_dev_cleanup(&vvc->vhost_dev); vhost_vsock_common_unrealize(vdev); } --=20 2.47.1 From nobody Sun Jul 26 12:42:15 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=1781866569; cv=pass; d=zohomail.com; s=zohoarc; b=MU4gN03LsCmXojixDiscVfPlsj0ke1fdNZQKe454L2b/dFdWXg9GrZ+rQ8GaMAuJVjV8eVhURXVncjUPQHccegepg+Hz11r5lxXByNTL2dnq8ATWeK6nc851JZAAeYdsTIZdeCu1CaHsXZtw5GroKHGLYBrXaNS9TIWwIfY7a10= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781866569; 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=rNuVh9aJOadNgxq1cThfQSQ9+diLURLKMlLXXVPlBYI=; b=hYAiybA0sr/VCWDHWog3J9aIDy2KoziZVA20cSIQQxnr/YHwtHPX/2hohxv+XLDlGUe6jjUfhqNPY0wcnstAirpe7fjpeAg5AXZojZqaONXJepeuJCnv0oRQD4R80y+C3XFMbQ5O1Ufd8xvlQkgRCvPXR36xlYX5I9um8qt5Iww= 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 178186656901718.2261666990579; Fri, 19 Jun 2026 03:56:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waWsm-0007kn-Fq; Fri, 19 Jun 2026 06:55:32 -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 1waWsk-0007kH-UJ for qemu-devel@nongnu.org; Fri, 19 Jun 2026 06:55:30 -0400 Received: from mail-westeuropeazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c201::1] helo=AM0PR83CU005.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 1waWsj-0003WI-Fl for qemu-devel@nongnu.org; Fri, 19 Jun 2026 06:55:30 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DUYPR08MB11992.eurprd08.prod.outlook.com (2603:10a6:10:660::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.13; Fri, 19 Jun 2026 10:55:26 +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.0139.011; Fri, 19 Jun 2026 10:55:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oBSOrRTCLBZiDlmpKzxs8MnqGUxky5DeTvLKN5prQ6XKw1v/t+xsE8Ci9EG+nWeA1hA+50auyi+iUQQgZ638Pf3lrhlkXxZRquJOCmzvi7P21JL9ef11KHowMUrKIYZwlbma0ul0Hf5grDXNd7FibhIkpjhTTXPezpDsWTrtTkmbONWsn0AXWr3R+uuYyAcbAwY7i49uY1MftDvzL570OymS1fRT9ziNFJvVON3sWq0ZK9xsPFLUZZ+gwyxZRiXdn/XZGYCRGeNRPk9UTTJgTyD6q9rWy0NHsiOKB8psK6XlVwCq2b9Rp15JjPPVyRoQbyulJGcpmp1Y5/3QkOZRbQ== 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=rNuVh9aJOadNgxq1cThfQSQ9+diLURLKMlLXXVPlBYI=; b=CENPITV18NV8Hdx6usCUm9Muv+K928buQGF7tJQ5hk1GG7Mx86KoPKzdYdKSLxWTkU8qKPWdtcj8Ck6OFMXlfqkrQGzj43TWDV/Q8TKIjHijJkxIlGip5UcI4FIi+j6Vv6pNmoz/ZN0lfUVSfHkPfyPWQrQbjpgL/xgOz5S0lkV3DT0JOfLfKr5Y5eiLTmdATOO91BZ8tzci5EkWROuRp+TcUfUJGSDSKECokdT1AuqMovYjxfodsFbK2cPSvYpHFNNhthIN64ae80ZCKVQBRn3g0+JZI8HC83hmh4uFqGTlPm9b1XAiF20VsrPsKbiHECsgGyI+yVqOZ4phzm/7zQ== 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=rNuVh9aJOadNgxq1cThfQSQ9+diLURLKMlLXXVPlBYI=; b=JrzSmRPtDV1867OZb6VfIbSbC3f/KV6gnQ1wwuAVW1tGmsGCU9HJOQix6VLofuaj8IfTMs6hNi7kvJj9KeX3kefPhLIB3GsDygT+eLRGl9CkY+Hp6O1Zc+GYIHPyJ0QkYpyf5XnmOwnMKxqu1mE6dXAZnSW+qfa0d5iNXcS/g3Zl3F+WaA783sIHtlctDvWZ66E3/42WSFZ2C2+co53bSMdTU3JoP0UqVM/HDFeILwgwc5xFS3fLRG0Wy+m+1QG0dO8inP+qktJTwKypnx8XZneyFbQqJwD7iNuyeKCwwz3vCTfimyoICNl/6A1pJowjdJ1rQ+VwCNjh8x0B4Pujpg== 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 v2 5/5] vhost-vsock: don't reset connections during CPR Date: Fri, 19 Jun 2026 13:55:14 +0300 Message-ID: <20260619105514.128812-6-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260619105514.128812-1-andrey.drobyshev@virtuozzo.com> References: <20260619105514.128812-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIVP296CA0089.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35b::8) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DUYPR08MB11992:EE_ X-MS-Office365-Filtering-Correlation-Id: 3f91c068-2464-434a-c558-08decdf1449c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|23010399003|1800799024|7416014|52116014|376014|22082099003|18002099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: EVgDez3SYDU/4+SL7AXpOaLZSzmvNV+BaGVPlbrNdeZ2uKHyYA4WYaElPHwFLrmjNnGZ0v5Ry+EoufQOCx590UIjh1J6EDTO/6lciGHOMYeeDN2ZXKyTMn6ZOFTrSbPzBLR2JErvMncXjdTYG1t2C/G9Henp2ITBzXIJQdT8KqhbWbqYNDITQUg4s+Qxmcw8KZhYfVgs0DCqts2cdHzATP4VQo1Zt+1OOhy8yNiykLU1hBi6NPljptx6EPrTb+VtOkNmNloBb8PN06ns9xPpw9UeuMp6p2iVEpJjWoWf40JAS8PO2wpEf0WiqbS/ehxo/jTMoQKpkyOhNAtrJgVAPvpjifQhkfZ+SLgcO3Hmx0e0VrRmjbEKLaBpi9njWwAEvTmWrZYxHtO9Jjn9OpY0k21it9ePULCoEjtafhbdwFuKEYQUr1o0pCmkWF8ZzYM9bt6jerlsMaclumaR7JbEGSvu06D4qOjVbcFQ3m8Knux1tvjzCAySo8uOz+kJxxK99Z8Jj7R/szQs64rh3aPOxQ5J2qJfjxVALXUy5+WfaE41KHSXtb2gC8zEIlgdgABZ5ppyiCL4BuQm3YGD6nsui8ub79egsAMS9mAFMCz1gIgYdOj5vq1WLxr5uFR8BmJ1C/g5Ov9opAtpCJanz3iwTeIrRTU7nW7HLnIdoUsgO+vLudU+TGYypgLmtOCBZU/bPJmzpzV0B56tlSVSvVfLCo21d+hVSfwTXGsw95VXLuE= 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)(366016)(23010399003)(1800799024)(7416014)(52116014)(376014)(22082099003)(18002099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?K+bgApGCHRqo6UAoaflJQAYKgpJoypdhk2FxbLCvnEf7AtV8CI3K2s17Jg9r?= =?us-ascii?Q?aG0pW03VvMwKsldQgA94ys+/AJ4Nl/2088hncYqG9j6GGzZmzx//ma2rtS8u?= =?us-ascii?Q?/9wtV1jk8F83/3Bs25AoC3Aq4Kppt5Nu+R/SIQ+raih84lmXiShZPpMVfjnS?= =?us-ascii?Q?PAWX7HE9z/v54TzBuHLtztzVMs54kNo8IEzbl5amTwf0ld/nUtnjFPLWAr5N?= =?us-ascii?Q?gJdsNELrITEKALw+JFYtwjzsgalwQLFHFDIJKnDaXduwlnyHEHlrfyDqsEpc?= =?us-ascii?Q?Nl7spNdvyCg+VlsXpJI2A6srrmAT0MMpJ++sQ6pO8nGeSZe4lnUy6mHu2P6o?= =?us-ascii?Q?L41vYlNUuTReSVo7ys5InyX1Tw3NqGvni+bVXjPq1iLozL7obnKiF+aA2GTQ?= =?us-ascii?Q?oMMiiULriLwwI3jAOcvd+x03pupmxrxojptlOVyVVafmYXK6393lOTLn4Y8c?= =?us-ascii?Q?l85rfZzLyZRdxKAHdP8S4tfnBM5D7Y3JLGJ8HWh6mcNYjlSTZ6lckagEDaGY?= =?us-ascii?Q?4Gq6DZe5OgvUK5a3IgHdnmwW96fNJaGc8K9b/k2mNNeZOkLsSSk3IiBZhW2q?= =?us-ascii?Q?1dnL3LClz5GBDeCDvqy9X3a0NdrQ8BQ71sigsVet/SNfrD3zAjbZEy7bI8qa?= =?us-ascii?Q?/BOdgZwNjKTff9Zq4izyXhtR3+MXSKHy+k2rAlkPgI4fOP9G+aNEzcWhSYh6?= =?us-ascii?Q?DePqEUW1h7n2sDvXTDBejveYc2NIbCN62S6a5tagMPjNqmdYnDNQ1ZOIJ0sv?= =?us-ascii?Q?cIz9zynFnp7Eb9Epr2locJfsiFN1hJVKKRQqBKgaAJPO1DUbmf1bfHH3Ggve?= =?us-ascii?Q?2oborKLVdf8bTFBkU+qwRVlgHrnsz1rKKg0ZfjMPU3lfAoFKHjp8HCifGPia?= =?us-ascii?Q?TY8FAgH3C74Agx+Dua0E43OvtzNQhAvQRl8V87bHHYRr8H9BmmP3PQxu57ZI?= =?us-ascii?Q?33q9f3xWf6lMJlwmJTgunHRLAUXbf5r8V7HjgdOZ/hH6WCTQ5nVN56CvMtW5?= =?us-ascii?Q?6DCz9Q6A+hANE0TJWoy2bRbfLDaEvLggyhxec8qc+tIyyc2SbQ9BWoJRuDNS?= =?us-ascii?Q?xYJvxelIRLm1y0/AK836qw5fD6HJHGrnfnbaHMbp0sO0AQ94E2lFLczCRjhh?= =?us-ascii?Q?K3a+hdtFAOt+aAZGJ5nLbNRFWMgLdOYmQq0VUVInDiG/+yaP/rIZCdo/Uh1t?= =?us-ascii?Q?1YtOKWJZtOgx7XTipPwD1b3LJr7ANIUcBkD+vQ9QHKThz6FRxvkIkS4upD7i?= =?us-ascii?Q?xEo5hsi5wU97StMvzrTU1medg7DInKk+jsbqmicizNkd/xMu4txjKZ64hY+D?= =?us-ascii?Q?0e3mh4RBCl9Kk2Zk5IsRyJt7hxAo16nk6xopEwouAIY9Wyj0AXY8ClFYgXBY?= =?us-ascii?Q?yZDoZwvb6LiTg8N0dFoIM3TTwN9i0IJNaoZc/7TgjWMIWqg1kiyaxH2edMHs?= =?us-ascii?Q?6QIRlZKng2k3wU6AR0PJXtqQefeH+4Dm7tvAlYxaOx7wqe8pn/B5KtUqbD6l?= =?us-ascii?Q?eCk47RqgLQBDe50IUQAB+t5/8FJBY+hgEgv2QOE1Lae+Sd25CrekMuIUeloa?= =?us-ascii?Q?zntUWjAyfKcIsTFnZrBkEbnl1cov2jaTK00ovzUCTpXisXEjxrEOEL9Q9fTF?= =?us-ascii?Q?t0jG+M+uUoPhCVs/QI5Ktv/4QDNynJZ3U/vUve5+8bGPgxLOMIrPtRbI8kJi?= =?us-ascii?Q?Vmvoe9CP+o9DnGHWT8nzlrxhXn7AVG3eYZq6Sloc7VN9ucxs9sbjcZ4ZLSFH?= =?us-ascii?Q?z51wjfZEEWF2ROngLNcJmYs9ZcN7Iwk=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f91c068-2464-434a-c558-08decdf1449c X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jun 2026 10:55:25.6397 (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: dV6XrMKeOoExTMxQXgzRL6R044C+umGeLHz11KDtLRnyz54wgGv10jxn0Jlb092dAzZMQ3YQeNZB+y5oNGZU7y4YFj3zJuk5e98xHTQnHJ4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DUYPR08MB11992 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:c201::1; envelope-from=andrey.drobyshev@virtuozzo.com; helo=AM0PR83CU005.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: 1781866570693158500 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 --- hw/virtio/vhost-vsock.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index ea9a7d2149d..8b033426296 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -109,6 +109,19 @@ 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) +{ + /* + * For CPR the guest cid is unchanged, so don't reset vsock connections + * (the cid-change reset would otherwise tear them all 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, @@ -118,7 +131,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