From nobody Thu Oct 22 19:27:19 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=1791800966; cv=pass; d=zohomail.com; s=zohoarc; b=g4cjyanUwZr0s0wChC5bNhHBbE1MS4f9RqYv0qwyNPiCgtaNsxHE2e80ocLLsE7dxWIqA7pif6an+OqTny/cRAwJ99kvqBAlY5eXLce85W2EOM2vMmkXbmj8rmswmlwH2DKcPU/+1uuBRDw2cFIA1uSRlCNWQxu6kfSJd1XZEDs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791800966; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qpeYjDkVXimj7vKcwL0s8nD/Fw3mIrHREQmIZwYVvdc=; b=XX7QKCev7nhxYw4R/D5LbNuk6TRrsdrGCxi2+2/lySnIb+Uj6Smc2SbDW1toIPSSUhvlMzlTobGcbL1sTDeHwc7nUxwdiTYrXe5+UO18OTSXeHUVzlaF4t6hicgKYdVsVqZNfL95cq222qqlUptzKz8gpesmMCfNK04PrtoAzIQ= 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 1791800966143708.6638372948499; Mon, 12 Oct 2026 03:29:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHB-0007cF-0y; Mon, 12 Oct 2026 06:29:05 -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 1xGDGu-0007Zl-CJ for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:44 -0400 Received: from mail-swedencentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c202::7] helo=GVXPR05CU001.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 1xGDGr-0005Eh-IC for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:44 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:31 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zWIrkH+pwvB9KG2+W31bQxJTM6qtmdBGGI0U5HSEa0k0binAhZcoa9n/cZ8mit8CrUNpkXt/PFHE4OLYMcJNv6goEFATA8itBdH6nRVj0wHARQxbH/h6GEcMgimbbxBvUVhlTRI/11raLutMLNdk9HTehYqUuqpGaPNw/POw1FaMS2wtUydD+Ob0Ost24Rv2EVcgOzcFUZtuwHktS7N27f5BbExLivYgiPDcYqLsY+xogWTq0KPwJcoNAedLAA4xG5dkbQ8lolBjLrXleVzg9YkNmB6fLUJgSOVveIkMNv+wC4E/I+pNraIFDBpQtSrozBNkZ6X9xPq+GmhStXU/5w== 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=qpeYjDkVXimj7vKcwL0s8nD/Fw3mIrHREQmIZwYVvdc=; b=CAUnqNIm2oKREJhTq9fGiOF1aeHXzSfgyeir+hSXIXQIaXNZ4cDxukMtzL4xXfaU4Pz4HPuIelGK++3+JzsGseLn8klDVub0/yvPBJO5TohK8yC3dWcCOHl/j4+TmtMfeIvez5WRCUq+hBtFlc6tN909RnoGYT30PIupvrbil36fVkT9dxBYVSevFnQoRFrOmLXL9pzUko0d9cs+eBUHcFI/XokvehjqZ64ykzgtCl+qQA2LOmxqRE4HoEEXaS4bl6IYoBgecmCugnDvQ4GlDv7omLZgln3aJVePhElI+oUYky7onCPTF/5eHc+wqv5bmJ3wD5mfQhloTeJtynUWUg== 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=qpeYjDkVXimj7vKcwL0s8nD/Fw3mIrHREQmIZwYVvdc=; b=yQpoFtHFNiqe9OwgN5UUU0zp9ClluVqzswgGlXaOW+taCS6OBQIxe1ghi4oDzoONsNBv5EG6n3/XqoqEHBmwH7MJ8okD+qhWIB96e2io9Kdml25e5nDJmgtE4+lQn516l8aJ/Lb9T25DXH0dEjmTrzapfZYh6GeCYGiLY7vIKox+4kLrwWXEipU/hnhZ30aRnHTG+ks3q/h0STNVTsAQpk+yNAAAZZ+xRrYsO8hleXu6Yg389FHAQLVDpvxv0lI2JP8i3GQn9TfYj6RWQ8JPsyv2XcA1umruhNRWd5SyKujoXBspABv3uecZwA52xG9T5WjK8kVC4mfGKUMTxu6GsA== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:09 +0300 Subject: [PATCH v16 01/22] migration/cpr: forbid saving duplicate CprFds into hash table Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-1-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 6c6d6d8e-36d6-4ce5-7596-08df284b8ff8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: GpLvg5InLnHU4TM1Qy+ydljb6Hy0puoxQUjrBwQKmqkgq2hpOYS7dts4g8R/yz3luzxEuTPbFEw6ZYHuX7yZFQHSf5zH3X6hkQt61gcbzUWuOBdEagpx7w/lTzCvJP15+a6oO9P+478w4MRLPa6/4m1BOxhsLejmY4OCMGQvofpSb94C7Yl0cZXTa5Y/z4deDpzC1RKN323w8w82gkEwKz3wBS8IZD3bWLufM8DOsvqwq6TYSePdEYe4LrJEJ65JTdnOCRQsQ8rg4fq6xTKmPllpv41FfOrVgrICMB7xQbAwCe21N0SSfP8svttYXELBV5HEVTs7gGY/LEfrovNtXGUX53+FPHBBJ+2ZUfe9sOR2i4gzFx4IOVR33tDZkQlI8B3iHke8i1wChA/8pcM8KgCmx1BFrCQxY+rxeabWuL2jTUiPVnHc0Hdqolg2qYe98Bw24D/PvnHtMouSZiYvWbcuOydI9FPeP+8pmz6LePjmq2tMXIrZCz9aLRzs5dSL4Wg1hu1mb29QbG7E0YBjTj9Mxun9hOMQxJyBucuidHyHa74i2rqyhhe/k5uIS6G99eLeMcra1zAm0tcbCXZ9rZgEj1c+jbuaBeTCaj4WYsmDRKpL5TNbD2Vwk6ZPotBog90umuJWh33oQH6NWnYn1r8OkJR7qNr5qBfkVFizMX8= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZWdmR2gxWVV0ZkZ1SE12U29EV0d6T3ZaNFpENkx1ODBOWWRzNVo2ekl2Zm1l?= =?utf-8?B?Y3pDL0htK0dPZDJQd2x4MWpCelJQc0V4SDJzVDQ0bTl3emRrbEc4R0J1eW9R?= =?utf-8?B?ZDlFQVNpbFBldEtqcnNCWDVOa1JCc0hOV0pLWXoyUExIMi9WcGpiRFlOcTcr?= =?utf-8?B?d2Y0b0tDWElrbS9YenBZaTNESGtzMFBmalhKdEpVVEZDcTBHM1FCckJ2ZFgz?= =?utf-8?B?V0QwbExTejEzN1JkbGEyVDhESzE4S291VDFmUWJvUGt6dVBYaFEvUkFCR1Nj?= =?utf-8?B?TEgwR252WVRjNk1Ka1dsSjluanFFcTNLZmhReUtLL2RUSlcrK04xcTF6blVj?= =?utf-8?B?ckxKN2NoL3UwWkNJYy9LNGkrRjFCU2xkUk5vbzVMZHMvVWRNNEc2TTVReGxQ?= =?utf-8?B?NVlDNE9yOFJQWFYvemtndWhlVWJXSDcvUjJsZy9tMjgyTTVwS0JxMllRYkRv?= =?utf-8?B?Rms4M3hSY2txc3Z4bDJhNTNOalVuOEwvcFdwMkFwRXI2R1IyYm4wTjB1Y2lS?= =?utf-8?B?NUNEc21Gek5vRzNTdjZPdlRVVHZ1Y2J2N2hUaEM4VlBjZU1ZOFMyamhsd2JT?= =?utf-8?B?N0tNVmJwclRQcTdhYkd5emIxdzk4N0N2cVBpTVRqcU5SM0x5SVpnMXNGODNu?= =?utf-8?B?RTAvSFh3Rmtnd0pQRWQxc2FSZUJuSzB1R0xMZi9GcUhXM3dLcGR2UkRpNEVC?= =?utf-8?B?alBoZ202MEttaDMwQVVKVjEvVzdmakh2WVA5NjJGSnRpWVppZmo5YmJ6VXBD?= =?utf-8?B?N0pMMzQxbUxyZCtwZEJxWkwwRFNOa2luT3NWbG1vL1Z4L0xJWmJJR3g0YW9w?= =?utf-8?B?YzdwTHVxeGZkcG8yWi9TbTc0UTZCZXJMaEF6OXBYbmdEUllQSk1YaVN0MGVQ?= =?utf-8?B?WElyT2dCZW1QZW11ODArRktHZzl1aFBDdjhBUjQ1QktPcDFJR2ZUVE10NEhS?= =?utf-8?B?c0NSYzEwcmZ2Wm41TGUybm5WMk44OVBwZFJLZTlHQ2lEc0lNYnNHMGU3SjRC?= =?utf-8?B?RG1EZ1h4RlhUWGI1NU1DZ3ZST2dpSUJTaEk5YlliNlNOR0E4Zjdoa2hMQnVG?= =?utf-8?B?TzB4WUdiVW5UbFgrbkNuclFabUQ5eEdobk0wWjN0a25iOXJiYUs1Y3M5K1RH?= =?utf-8?B?NlIyOUpyT0pzQlprVHlLSXdmUys1YUh6cHNtaS9SVkVKd2ZCTFdXaWV5ZFM4?= =?utf-8?B?L0JUamZRd29JOVVSWUtlK29ad1JKWGlKbUczQlArOUY5dnNnY3BnUlFBcjNX?= =?utf-8?B?REdyc28zZHNtdlRqSDlqL1RVdXRBS2ZyWFVMcVVwcWFpQjlxTzl4V2ZLWGVI?= =?utf-8?B?cVhBN053S3l3LzV2dnFvNUtDMFNmYTAxWlRHdFZoMkhsQ1R6WS9QeVJrWldB?= =?utf-8?B?TUNMTlNPTzlyZnVicUJhRlprazBONTdFY2RKVXhNRnhwRER0ZG1uZEFkYkJO?= =?utf-8?B?STI4dXRqWnZoWlBRZjhjakljQUZpZUFOeC9lV1YxaVJPcXlJUXgxUVhrRFN4?= =?utf-8?B?YkllN3haSTlSdFl3N1phcWtmc0Y5WHBRTTljam5IazByc09rdTVwaFQ0R0cy?= =?utf-8?B?ZzlyQmJ1VTduaDdVeCtORWR1Y2xhckZvbVg5V0lDSFI4U2h3NmE3eE1ZaU1o?= =?utf-8?B?ZDZCWEJRYldVbllOeGdpbUIrbTVWR1N5c3NyUHRVT01SVjA4UjFTMElGOE96?= =?utf-8?B?NEtGR1c3cWZ3MFlzN2doNTIxQVFtYVdJUC9Dd2xLVVRrdS9TN3ZFMEtkQWtl?= =?utf-8?B?WXZ6eFZ6TWowYjdTcFBEaW1ITHRtY2FzdmFDTkZQN09oa3F0aEdmU3FwZ0t4?= =?utf-8?B?Y1BSRFdrZ0FwanlIblF4NmdOSDFMSytBZGlRZTE2M2dhU1UwWVZMbWh1MEVZ?= =?utf-8?B?SWlBZ0c0dGRMdGdEOXZkVFNDZFhuZThVenJWYVA2c3kzMC9LSDRLTFhmS0ho?= =?utf-8?B?VHBVRlA1MnQ0dFo2QmRNN0lWNzNZYjFCMjJXajNiWnUyM2wwSm5URGxWdk5m?= =?utf-8?B?U09veTROT3hkL1U2cHpxak1VUEJnY3RGcWFTQ3UrekJPc1FkeEtwRnAzK3Vi?= =?utf-8?B?cTAwTFFTdzVhc0RlakVvNGVaem55ZVEyTkpjWkMyM20yOERtd2Y4K0FRcmJV?= =?utf-8?B?MEp1endhOE80WUFWblNXTTRkZXBmM21MODdWcWlncVlZNk0wT24rNmVmZzh2?= =?utf-8?B?RmttN3FXVUtJbzA5akJCUlg1ZFhJUld5OGxEVlB0aGE3OVQ5M2IwM09FQ3pu?= =?utf-8?B?aGVJd1huL2trUzVwRHBBNk8yTFhlUngveDdaTUtwaXpwNDQ1WnlCeUlpNk5M?= =?utf-8?B?NnY2N2NBN1A0OGRQOXUxSDNUL1JxR0lFcUR1aE10azdhaHV3eCtlQWsrSTdQ?= =?utf-8?Q?Kp6IhK7yGoEmTzqw=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c6d6d8e-36d6-4ce5-7596-08df284b8ff8 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:31.5407 (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: +eJvbgd/mX/iGx106xaz55XmJ6YfFeTBkBcMGcfCaCsuK2u+FOQE0rYEpwE8mCjiW+OoIX6HC5WjNCftJ2ODUg/PnmQRoWmcFyyZgM/IXSs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c202::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=GVXPR05CU001.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_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1791800970282158500 In its current form, the mechanism for saving CPR FDs into hash table has flaws. The CPR fd hash table uses the same CprFd for both key and value, and is created with a key destroy function. Inserting a second element with the same (name, id) key leads to a use after free. According to GLib docs [1], g_hash_table_insert() keeps the old key, replaces the value with the new element, and destroys the new key. Thus when inserting 2 CprFd elements fd1 and fd2 with equal keys we get: g_hash_table_insert(table, fd1, fd1); /* table has fd1 -> fd1 */ g_hash_table_insert(table, fd2, fd2); /* table has fd1 -> fd2, fd2 freed= */ Any subsequent cpr_find_fd() for that key then returns freed memory. This is reachable whenever two CPR-aware objects register fds under the same name, and it happens long before an actual CPR, since cpr_save_fd() is typically called from .realize(), i.e. at boot time. Apart from the UAF itself, when the user decides to perform CPR migration, on CPR target we'd get corrupted FD from the hash table and fail somewhere in .realize() for affected devices. As a solution, let's altogether prohibit adding CprFds with duplicate keys. Since FDs are being registered for a subsequent CPR right at the startup in .realize(), that'll allow us to error out and exit QEMU (or fail a device hotplug op) gracefully instead of delaying potential problems for later. To do so, let's make cpr_save_fd() return 'bool' instead of 'void' and provide an 'errp' argument to it. That way caller becomes responsible for checking the return value and propagating the error. Also update all the callers to use the adjusted interface to keep things compilable and bisectable. [1] https://docs.gtk.org/glib/type_func.HashTable.insert.html Fixes: a181df93bb3 ("migration/cpr: use hashtable for cpr fds") Reviewed-by: Peter Xu Reviewed-by: C=C3=A9dric Le Goater Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- backends/hostmem-memfd.c | 5 +++- backends/hostmem-shm.c | 5 +++- backends/iommufd.c | 4 ++- hw/vfio/container-legacy.c | 7 +---- hw/vfio/cpr-legacy.c | 29 ++++++++++++++++----- hw/vfio/cpr.c | 6 ++--- hw/vfio/pci.c | 5 +++- include/hw/vfio/vfio-cpr.h | 7 ++--- include/migration/cpr.h | 2 +- migration/cpr.c | 64 +++++++++++++++++++++++++++++-------------= ---- system/physmem.c | 5 ++-- 11 files changed, 91 insertions(+), 48 deletions(-) diff --git a/backends/hostmem-memfd.c b/backends/hostmem-memfd.c index 666593ff6c0..67f1924a369 100644 --- a/backends/hostmem-memfd.c +++ b/backends/hostmem-memfd.c @@ -84,7 +84,10 @@ memfd_backend_memory_alloc(HostMemoryBackend *backend, E= rror **errp) if (fd < 0) { return false; } - cpr_save_fd(name, 0, fd); + if (!cpr_save_fd(name, 0, fd, errp)) { + close(fd); + return false; + } =20 have_fd: backend->aligned =3D true; diff --git a/backends/hostmem-shm.c b/backends/hostmem-shm.c index 4766db6aad0..adf60957c3c 100644 --- a/backends/hostmem-shm.c +++ b/backends/hostmem-shm.c @@ -48,7 +48,10 @@ shm_backend_memory_alloc(HostMemoryBackend *backend, Err= or **errp) if (fd < 0) { return false; } - cpr_save_fd(backend_name, 0, fd); + if (!cpr_save_fd(backend_name, 0, fd, errp)) { + close(fd); + return false; + } =20 have_fd: /* Let's do the same as memory-backend-ram,share=3Don would do. */ diff --git a/backends/iommufd.c b/backends/iommufd.c index 15f2a513501..45fd2e44c7f 100644 --- a/backends/iommufd.c +++ b/backends/iommufd.c @@ -85,7 +85,9 @@ static void iommufd_backend_complete(UserCreatable *uc, E= rror **errp) if (cpr_is_incoming()) { be->fd =3D cpr_find_fd(name, 0); } else { - cpr_save_fd(name, 0, be->fd); + if (!cpr_save_fd(name, 0, be->fd, errp)) { + return; + } } } else if (!g_file_test("/dev/iommu", G_FILE_TEST_EXISTS)) { error_setg(errp, "/dev/iommu does not exist" diff --git a/hw/vfio/container-legacy.c b/hw/vfio/container-legacy.c index 7ac7b372145..50ca5a3a7ea 100644 --- a/hw/vfio/container-legacy.c +++ b/hw/vfio/container-legacy.c @@ -847,13 +847,8 @@ static bool vfio_device_get(VFIOGroup *group, const ch= ar *name, g_autofree struct vfio_device_info *info =3D NULL; int fd; =20 - fd =3D vfio_cpr_group_get_device_fd(group->fd, name); + fd =3D vfio_cpr_group_get_device_fd(group, name, errp); if (fd < 0) { - error_setg_errno(errp, errno, "error getting device from group %d", - group->groupid); - error_append_hint(errp, - "Verify all devices in group %d are bound to vfio- " - "or pci-stub and not already in use\n", group->group= id); return false; } =20 diff --git a/hw/vfio/cpr-legacy.c b/hw/vfio/cpr-legacy.c index 2d40d8baeaf..807ffacdbc9 100644 --- a/hw/vfio/cpr-legacy.c +++ b/hw/vfio/cpr-legacy.c @@ -254,17 +254,33 @@ bool vfio_cpr_ram_discard_replay_populated(VFIOContai= ner *bcontainer, &vrdl->listener) =3D=3D 0; } =20 -int vfio_cpr_group_get_device_fd(int d, const char *name) +int vfio_cpr_group_get_device_fd(VFIOGroup *group, const char *name, + Error **errp) { + ERRP_GUARD(); const int id =3D 0; int fd =3D cpr_find_fd(name, id); =20 + if (fd >=3D 0) { + return fd; + } + + fd =3D ioctl(group->fd, VFIO_GROUP_GET_DEVICE_FD, name); if (fd < 0) { - fd =3D ioctl(d, VFIO_GROUP_GET_DEVICE_FD, name); - if (fd >=3D 0) { - cpr_save_fd(name, id, fd); - } + error_setg_errno(errp, errno, "error getting device from group %d", + group->groupid); + error_append_hint(errp, + "Verify all devices in group %d are bound to " + "vfio- or pci-stub and not already in use\n= ", + group->groupid); + return -1; } + + if (!cpr_save_fd(name, id, fd, errp)) { + close(fd); + return -1; + } + return fd; } =20 @@ -291,6 +307,7 @@ bool vfio_cpr_container_match(VFIOLegacyContainer *cont= ainer, VFIOGroup *group, */ cpr_delete_fd("vfio_container_for_group", group->groupid); close(fd); - cpr_save_fd("vfio_container_for_group", group->groupid, container->fd); + cpr_save_fd("vfio_container_for_group", group->groupid, container->fd, + &error_abort); return true; } diff --git a/hw/vfio/cpr.c b/hw/vfio/cpr.c index ffa4f8e099d..6e1659dcddc 100644 --- a/hw/vfio/cpr.c +++ b/hw/vfio/cpr.c @@ -32,11 +32,11 @@ int vfio_cpr_reboot_notifier(NotifierWithReturn *notifi= er, #define STRDUP_VECTOR_FD_NAME(vdev, name) \ g_strdup_printf("%s_%s", (vdev)->vbasedev.name, (name)) =20 -void vfio_cpr_save_vector_fd(VFIOPCIDevice *vdev, const char *name, int nr, - int fd) +bool vfio_cpr_save_vector_fd(VFIOPCIDevice *vdev, const char *name, int nr, + int fd, Error **errp) { g_autofree char *fdname =3D STRDUP_VECTOR_FD_NAME(vdev, name); - cpr_save_fd(fdname, nr, fd); + return cpr_save_fd(fdname, nr, fd, errp); } =20 int vfio_cpr_load_vector_fd(VFIOPCIDevice *vdev, const char *name, int nr) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 428ab2f0698..ad13f2306f1 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -76,7 +76,10 @@ static bool vfio_notifier_init(VFIOPCIDevice *vdev, Even= tNotifier *e, } =20 fd =3D event_notifier_get_fd(e); - vfio_cpr_save_vector_fd(vdev, name, nr, fd); + if (!vfio_cpr_save_vector_fd(vdev, name, nr, fd, errp)) { + event_notifier_cleanup(e); + return false; + } return true; } =20 diff --git a/include/hw/vfio/vfio-cpr.h b/include/hw/vfio/vfio-cpr.h index ecabe0c747d..9157a4ac649 100644 --- a/include/hw/vfio/vfio-cpr.h +++ b/include/hw/vfio/vfio-cpr.h @@ -60,7 +60,8 @@ void vfio_iommufd_cpr_register_device(struct VFIODevice *= vbasedev); void vfio_iommufd_cpr_unregister_device(struct VFIODevice *vbasedev); void vfio_cpr_load_device(struct VFIODevice *vbasedev); =20 -int vfio_cpr_group_get_device_fd(int d, const char *name); +int vfio_cpr_group_get_device_fd(struct VFIOGroup *group, const char *name, + Error **errp); =20 bool vfio_cpr_container_match(struct VFIOLegacyContainer *container, struct VFIOGroup *group, int fd); @@ -71,8 +72,8 @@ void vfio_cpr_giommu_remap(struct VFIOContainer *bcontain= er, bool vfio_cpr_ram_discard_replay_populated( struct VFIOContainer *bcontainer, const MemoryRegionSection *section); =20 -void vfio_cpr_save_vector_fd(struct VFIOPCIDevice *vdev, const char *name, - int nr, int fd); +bool vfio_cpr_save_vector_fd(struct VFIOPCIDevice *vdev, const char *name, + int nr, int fd, Error **errp); int vfio_cpr_load_vector_fd(struct VFIOPCIDevice *vdev, const char *name, int nr); void vfio_cpr_delete_vector_fd(struct VFIOPCIDevice *vdev, const char *nam= e, diff --git a/include/migration/cpr.h b/include/migration/cpr.h index 56fb67e6b4d..3ad084d5bab 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -28,7 +28,7 @@ typedef struct CprState { =20 extern CprState cpr_state; =20 -void cpr_save_fd(const char *name, int id, int fd); +bool cpr_save_fd(const char *name, int id, int fd, Error **errp); void cpr_delete_fd(const char *name, int id); int cpr_find_fd(const char *name, int id); void cpr_resave_fd(const char *name, int id, int fd); diff --git a/migration/cpr.c b/migration/cpr.c index bca43e9bf35..cb027bba504 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -82,10 +82,29 @@ static GHashTable *get_cpr_fds_hash(void) return cpr_fds_hash; } =20 +static CprFd *find_fd(const char *name, int id) +{ + CprFd key =3D { + .name =3D (char *)name, + .id =3D id, + }; + + return g_hash_table_lookup(get_cpr_fds_hash(), &key); +} + static void cpr_fd_hash_insert(CprFd *elem) { - /* Use the same CprFd as key and value. */ - g_hash_table_insert(get_cpr_fds_hash(), elem, elem); + GHashTable *hash =3D get_cpr_fds_hash(); + + /* + * We prohibit inserting duplicate keys into the hash table. All call= ers + * are responsible for checking that each added key is unique. + * + * 'elem' serves as both key and value, and a replacing insert would + * silently free it. Therefore we assert, not overwrite. + */ + g_assert(!g_hash_table_contains(hash, elem)); + g_hash_table_insert(hash, elem, elem); } =20 static int cpr_fd_pre_save(void *opaque) @@ -127,26 +146,24 @@ static int cpr_fd_post_load(void *opaque, int version= _id) return 0; } =20 -void cpr_save_fd(const char *name, int id, int fd) +bool cpr_save_fd(const char *name, int id, int fd, Error **errp) { - CprFd *elem =3D g_new0(CprFd, 1); + CprFd *elem; =20 + if (find_fd(name, id)) { + error_setg(errp, "cpr fd '%s' id %d is already registered", name, = id); + return false; + } + + elem =3D g_new0(CprFd, 1); trace_cpr_save_fd(name, id, fd); elem->name =3D g_strdup(name); elem->namelen =3D strlen(name) + 1; elem->id =3D id; elem->fd =3D fd; cpr_fd_hash_insert(elem); -} - -static CprFd *find_fd(const char *name, int id) -{ - CprFd key =3D { - .name =3D (char *)name, - .id =3D id, - }; =20 - return g_hash_table_lookup(get_cpr_fds_hash(), &key); + return true; } =20 void cpr_delete_fd(const char *name, int id) @@ -173,14 +190,13 @@ int cpr_find_fd(const char *name, int id) void cpr_resave_fd(const char *name, int id, int fd) { CprFd *elem =3D find_fd(name, id); - int old_fd =3D elem ? elem->fd : -1; =20 - if (old_fd < 0) { - cpr_save_fd(name, id, fd); - } else if (old_fd !=3D fd) { + if (!elem) { + cpr_save_fd(name, id, fd, &error_abort); + } else if (elem->fd !=3D fd) { error_report("internal error: cpr fd '%s' id %d value %d " "already saved with a different value %d", - name, id, fd, old_fd); + name, id, fd, elem->fd); g_assert_not_reached(); } } @@ -192,8 +208,9 @@ int cpr_open_fd(const char *path, int flags, const char= *name, int id, =20 if (fd < 0) { fd =3D qemu_open(path, flags, errp); - if (fd >=3D 0) { - cpr_save_fd(name, id, fd); + if (fd >=3D 0 && !cpr_save_fd(name, id, fd, errp)) { + close(fd); + fd =3D -1; } } return fd; @@ -400,10 +417,11 @@ int cpr_get_fd_param(const char *name, const char *fd= name, int index, } } else { fd =3D monitor_fd_param(monitor_cur(), fdname, errp); - if (fd >=3D 0) { - cpr_save_fd(name, index, fd); - } else { + if (fd < 0) { error_prepend(errp, "Could not parse object fd %s:", fdname); + } else if (!cpr_save_fd(name, index, fd, errp)) { + close(fd); + fd =3D -1; } } return fd; diff --git a/system/physmem.c b/system/physmem.c index db3dda563d4..a7300bb9d97 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -2456,8 +2456,9 @@ static int qemu_ram_get_shared_fd(const char *name, b= ool *reused, Error **errp) fd =3D qemu_shm_alloc(0, errp); } =20 - if (fd >=3D 0) { - cpr_save_fd(name, 0, fd); + if (fd >=3D 0 && !cpr_save_fd(name, 0, fd, errp)) { + close(fd); + fd =3D -1; } *reused =3D false; return fd; --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791800987; cv=pass; d=zohomail.com; s=zohoarc; b=CpxgQjXSxsN23HvFu+FC0qvTLROqgvyrQC6qJOMk4QiHOBoGfZU5dKUC37rg1b7kYfU0VZUHlSvssztDuf11eJQSFFQIKPJ3zggRBVJ0x5pNLZoVKURMAfQlvat4A3yZFMJNl7l+R8vD4fUGmSzLW1tQqDNSLwKEc1Nlb6eQ2PM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791800987; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CzhhEOopcN3KOOtfWAhLZROUNYy2FrEKLzdoJ27vb+k=; b=HIoa74sb2NpadEX5+VCh0IlxLV+45awaxMRfBZb9hP0wSPLxHNLwyQamZX321pYl2v36tkdayU584ozQTPs3JYL9+rPJOk3palrw7Dkc1TPQEfPfC7YHUL4m0cQ8n3JylHkZ/jO8PJa8tCiSXEQpZxEKjJKbLlZdA6QXA3I+jHg= 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 1791800987388443.64603099457815; Mon, 12 Oct 2026 03:29:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHO-0007iE-Ky; Mon, 12 Oct 2026 06:29: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 1xGDGx-0007bm-Vo for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:50 -0400 Received: from mail-francesouthazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c207::3] helo=MRWPR03CU001.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 1xGDGv-0005FA-US for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:47 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:32 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BVfe0zLXMQ11VOji+x8L0tTBDXi8JeYE7kIwYXJi+cLGeV5IJnwtGMLnNlv/YU1pRLOXBv4xZ/t8FVE+dNUVjST4t4AIol+qd/RPkRY5Ol/SiVh1eibKwq8Qfw1K6Q8/ij2JVwKfAv1w7a9yG0RuhfxYhuOAoNYAnLvdFkUHlZp3ErlK13hkhW8NY3YgNQXVJC+GmQunE5nOqp78hDfgr8R3AUOd3fWvWurZ06wbDA3IGcFbqtTL/P7GtmNd6GmEjBP+zRXX5167aADz+UTsPvVGPesnOnvV06cWT5GMr/Xo/m9C8E5NSG0tuYu9Qx35rjl6EHeAfrh+rUgWRKmH8g== 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=CzhhEOopcN3KOOtfWAhLZROUNYy2FrEKLzdoJ27vb+k=; b=kI3pMfHEW3jbubbJNBMUhHPmNqWBtT6LO5qRpEQfWbLo7a7iAJ/LKn0drHkYe5midrMEc4NgslnP4b2Nwi9KCtBQgR1qnKP+MNF/MXVfgBi/+ipSY05p4XO3pfTwfWP4VMst5ew9dE0OKj7Q4CdjJJhntcRUT6TQu34yjjEIWFegSlwKrlW/kMyKyJjuXeK4D7EELOQ3zt2Vy650uBy6+m04QFpvuw+pWVCIfgGcjFuRT6XU1vVJnO22G8ESAuXjDVrSPXV+hsQfaX5JXNiMJzYPxgvdsPtqep0ImrQerziijZ51BVhw4WGmjgwX7cSKvWqithpKIhs8JEOQj4TTlg== 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=CzhhEOopcN3KOOtfWAhLZROUNYy2FrEKLzdoJ27vb+k=; b=ABHMFIHzk45u2VuzlcZc760ul24iYSPbZ6zZ3d449vFvXOJLWNxb+h62Vf0JDgSo8y6IzBE1JLwka8WexpyoJEPbyuv/fiLwCxjlobu27yw/ZIdFKjSPjXit5iJ46dn/+zx2Lf5o6xicG0WsrMAe5l/z9h8jpPQAC8VW5Ev6Qy11lqdw7mzYKDQMAG5rbfmI6C+kw8j+R6FgjQqjSgT+wAHpr1bGxx2YpnArbA+X4vaZ3dBK/Wi9LuaIJ2PhAEGfSJMaedL0p5iUDzyAT/73NTpQ5Z41ogU18AzRGO5x1HpTPo17ZkRTSTJDkK4OM9e1QgIG0Bi60rL4tvyBiV51Vw== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:10 +0300 Subject: [PATCH v16 02/22] tests/unit: add test for duplicate keys in CPR FD table Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-2-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 3f72b995-52fd-40f5-4297-08df284b908a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|3023799007|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: hD3rkgxn7S0f8dfn/9yijIkPSeoMRyiw1eFkVhuOwSJwijr+/oXojrd0J3jtvduHJ7YKRXymAckwzv3IIUYuMQIOUBADe46yUe4w+cGDfLfGu+/U4MRXk5hwpzUGwkJfOnXtvFa5QsW4hqo9YewzwUeEFkSVJuKBIejfn/Y3AnwCQ7hFZGO5sSS7cl87coJmmvdfQ14oSc1iaW8SeUKNKDvAYhP7QOPuMmuyzY3ha1YtdSBgY+WULpdiWxI9k1BZLBjpwrENqs1v+ikiLNSgq4bS3+0rv720pDiPtN+L+6YrpNf6JBVFQ+9A8wSINUFfyBFKOGhfqHj7aAu1XESZNyfL3054RHJko159PHR4Q65yCvs3m/P5I7G9sM8GSKa/glrYy6u6AxQ/O400N9qFHFsYhHrRQmfYFtkYD6iKW5bZRLuiKXn/SRqFhrwuy940ccTz0AWeFDubH+YU/SemfrbfuZ+giQFskfczo6RNe3eWOWMkWoeGzsXd4Yblh2nl5ndHm9vYUnFTrUgei+XwiuNl567lVShLqEaVulRKAhlLhVskK8FvmDcRIYlUxhTI8knuIs4oUHDWcdVsx0aF4lFck4KwLy3YWyR5v3wPcix6tfFd9BUig87Pr08IEwQd1BBIxolu+MBCdtH0mX3ks6/lHPETgp2ZjbRND0m7RoTZrZN3PnWhyqLvdTVJ68hNxygi6HfIYTuaH0ytq5rw48vka6LTx+BjAKZ8Z5hjjws= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(3023799007)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cGdsaEloRUUyd0ozTVN4TGJMaTgvLzBTcUJRd1VxWlN3bTZSZVlDWjJmUmho?= =?utf-8?B?c2w1RUFrN1FxdDNiYWZBd0Y0Um5NWW1sU3dSdXo1dCtpdFJzVnIwNnJYZjlD?= =?utf-8?B?VG1hNGZVUVd3NlJjSDVCOUFWRndRYk0rd2hOU2Q2ZEljdzdPTW9wNmV6d1Qw?= =?utf-8?B?dGk1bG1XMFY1ZGdIRUk2cDNSTjY1c1hacG12WHFPWHRnV3JicWNZdkdMWFEy?= =?utf-8?B?Q0pBZVZDajRsMVhnellPYW9nc0p0OXJZbW9pcE1rdzB3dGg5bXVUQlR0a1M3?= =?utf-8?B?emJBeWk0aVdkZFNKUzFPNjhzMWxWaCttSThDV1pHVTBzV1pBYW1wbzZVWEx5?= =?utf-8?B?ckVqbEZTQzFrVG1jeDh0TjZEUUlCcnhwaHdwQ1Q3VVVsc1NVTnAwd24zbFdo?= =?utf-8?B?ZDVHeDBLUlRIcWFjd0VlbUUvY21ac2ZDc0o3Wk5iUytqUDNpZHdST2c4dHFM?= =?utf-8?B?MjFlbVFuVXhoTXU2YWowcDJwZ0VmMk5GQThWY09KS09IWTErb1NBUkFXdFBB?= =?utf-8?B?TFUxeTBkWlh1QUx3TUNqMllpOXVrTWxNQndrbjB6NHgwSklRL05DaGhIcXFv?= =?utf-8?B?OWp2eGJHaTBSMGNPR0pPelRUWWs4bDJVZ3JOUFJnL3VGdkNJZHVLdTU3Mzhl?= =?utf-8?B?Ymo4ZmIzTHZlYmpkM09vRGQ4L2NCeTVMOW1sVlVqRW1OYzFzV1lwY2lmUXVU?= =?utf-8?B?MFB1SWtINDEvK1BTUWdwL2R2Zm9xS25KTHNYVDFEMXo3Nkdpc1BTYnF5ZlJ4?= =?utf-8?B?NmlRcXVqSTRveTBnaGpQUjZCakZwUCs2YWpLcW80b0ZUNW9YaUw2WEY3UFRV?= =?utf-8?B?SFNoZnp0Zk93VWYwbUpza2JCQ3NheFV0NE5PK204bnVwN28ybjN4REFJTy8z?= =?utf-8?B?eXZtK2dTWG9DZjlmK0dnT2d2UFFXL05DaWdyOEFockkzSFVPRTdaamw4WUZx?= =?utf-8?B?aDBiTGFoSEdxMmUzT241N3ByWkpQK0Y0bzJIbHNHb252ZzB5dUFZMEpCc0VN?= =?utf-8?B?blo5MnJOQWZ3VVZCRERndzZFajZIcHh6Y21QNVNySHF4akN0bWhBSVo0dnVJ?= =?utf-8?B?UnRxTTJqekdZS3ZKMVZQNFFkWFN4RktTckl6UzRQeXZBWVNRd0REczc2U1Nm?= =?utf-8?B?QmRBcmxUSE1yOUJETkZqQjRwdmJEZW5WZDFGUkNxYzMyL09UZHFGbkhXc09o?= =?utf-8?B?cStuOGpXTkdsTlNnVlV6OThwNFNYWXNNbVpQUWZkOWtHYmRva1pCay9Wc2tK?= =?utf-8?B?V1o2TmJvOEhKRDBLSDN0QnM1bEVtM0NrbU5TSzcwN1JFNEVCaTh4dTZOSkVE?= =?utf-8?B?ZnBwK0pJZ1JJZWdwUnFIRHl5Qk5GWnNLN1JCVFp1V1JPY2xFZEh6eHV0TWlJ?= =?utf-8?B?MWRNeUxOOUVQYWRuMFduMlpva3NaVmgyN21JQ3IyaU00cFprc0hhbEw1UXIy?= =?utf-8?B?RXpWTGFoU1RKQlFyRk40VFMyUzlYWENZR3JacW4xczMwa1M0ZDR0SWgwYlJn?= =?utf-8?B?NDFuSm9BLzAxYnZzTTJFY2o3M3crQ3ZwdU5FdEdsN0Y3UHE1VWxmVVpXRW8z?= =?utf-8?B?YUxzWkFtaGE1MG5ab1BiUHE4b29ybUE5OE9rRnN3R2NnejMvOE5GK21LTTR5?= =?utf-8?B?dG9aYTliTFJYaHYzU1JDL1BRZFJuSTJPY2tGOURoRUQ1SGw3V2ZZL3hrVEEx?= =?utf-8?B?Z3VzajFNM1ZGZHVORE1EZFdpYk9lYlc2bHVWb2I5M2psRlhtKzdheUxZYW51?= =?utf-8?B?bzFCNWg2dHVEYnltalJQWEVWU1BKK0VidFM0emNCMlZyRHBHa3VGSHZMS2FM?= =?utf-8?B?Tk1sbldadzJBbXFuMlUvUHF6VEZXcUVOZEcyTzVudTBBYkFNRXJYOFJlVTg2?= =?utf-8?B?dHNBczdpaE9GSmJEdkF1cGlHczhSU002UmdZeUdZNzliSlYya0xQVkJmZitU?= =?utf-8?B?eGVDbXVkQ1JxRit3dnhGL1dNK2UzOEljWUZLTlBURXRLazVOWlZxME41YWFl?= =?utf-8?B?QmNzMERMc2FwZGtHem5uTHVwR29xdjRKUW9JaURMb0NwelhSakUxYWpsd2h1?= =?utf-8?B?bmEwTG5iWU90bDAwNGFidEhSSTl3QXBlakpRYUx5bExTdndacnZrbXdFN2R5?= =?utf-8?B?ODI1WDEycncwSFVDVDV4YUVwd2ZFR01aY0FGYSt4c3F5bTJPcU84eHB1L1Zq?= =?utf-8?B?cUNvZnl6T0RQNVpjejJOTnVUNHRxaFF5UzBwUFBVTU9ZVm9tcGNJUGNtUys2?= =?utf-8?B?M1hkaFJVdGc3ejdxV1dNWG5KeXZFMm9GTmpkWlN2ZllKeE8wdThmOS9OMjZC?= =?utf-8?B?WUR5eHZadXVXelZxY3p1SlBuMXdiYXIyK2FRUFFJUi9lQXd5UVNibGN4Q3hI?= =?utf-8?Q?fa57B6rdu4dWyA9c=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f72b995-52fd-40f5-4297-08df284b908a X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:32.4959 (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: tZoKTD1aj+iS5QSnM3DKoCaBltjLHChDxXosFDTDPexbeADKHREpUxir4blYq095ZX5dBmuLLbGLLuGzmRYHF03Qgynm0TUDUU2W/bwFEAo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c207::3; envelope-from=andrey.drobyshev@virtuozzo.com; helo=MRWPR03CU001.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, 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: 1791800989437158500 cpr_save_fd() now refuses to register an FD under a (name, id) key which is already taken. Add a test which checks that 2nd registration fails with an error while the 1st one is left intact, that different names or ids don't clash, and that the key can be reused once deleted. Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- tests/unit/meson.build | 1 + tests/unit/test-cpr.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 99 insertions(+) diff --git a/tests/unit/meson.build b/tests/unit/meson.build index d17435c1877..5d2b413fcab 100644 --- a/tests/unit/meson.build +++ b/tests/unit/meson.build @@ -140,6 +140,7 @@ if have_system 'test-bufferiszero': [], 'test-smp-parse': [qom, meson.project_source_root() / 'hw/core/machine= -smp.c'], 'test-vmstate': [migration, io], + 'test-cpr': [migration, io, meson.project_source_root() / 'migration/c= pr.c'], 'test-yank': ['socket-helpers.c', qom, io, chardev], 'test-ram-discard-manager': [ 'test-ram-discard-manager.c', diff --git a/tests/unit/test-cpr.c b/tests/unit/test-cpr.c new file mode 100644 index 00000000000..dfc6b1f2ec0 --- /dev/null +++ b/tests/unit/test-cpr.c @@ -0,0 +1,98 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Unit tests for the CPR fd table + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "migration/cpr.h" +#include "migration/vmstate.h" +#include "monitor/monitor.h" +#include "hw/vfio/vfio-cpr.h" + +/* Stubs for the parts of migration/cpr.c that these tests don't exercise = */ + +const VMStateDescription vmstate_cpr_vfio_devices =3D { + .name =3D "cpr vfio devices", + .fields =3D (const VMStateField[]) { + VMSTATE_END_OF_LIST() + } +}; + +QEMUFile *cpr_transfer_output(MigrationChannel *channel, Error **errp) +{ + g_assert_not_reached(); +} + +QEMUFile *cpr_transfer_input(MigrationChannel *channel, Error **errp) +{ + g_assert_not_reached(); +} + +QEMUFile *cpr_exec_output(Error **errp) +{ + g_assert_not_reached(); +} + +QEMUFile *cpr_exec_input(Error **errp) +{ + g_assert_not_reached(); +} + +bool cpr_exec_persist_state(QEMUFile *f, Error **errp) +{ + g_assert_not_reached(); +} + +bool cpr_exec_has_state(void) +{ + return false; +} + +void cpr_exec_unpreserve_fds(void) +{ +} + +int monitor_fd_param(Monitor *mon, const char *fdname, Error **errp) +{ + g_assert_not_reached(); +} + +static void test_cpr_fd_duplicate(void) +{ + Error *err =3D NULL; + + g_assert_true(cpr_save_fd("dup", 0, 10, &error_abort)); + + /* A second registration of the same (name, id) key must be refused */ + g_assert_false(cpr_save_fd("dup", 0, 11, &err)); + g_assert_nonnull(err); + g_assert_nonnull(strstr(error_get_pretty(err), "already registered")); + error_free(err); + + /* and the first registration must be left intact */ + g_assert_cmpint(cpr_find_fd("dup", 0), =3D=3D, 10); + + /* A different id or name is a different key */ + g_assert_true(cpr_save_fd("dup", 1, 12, &error_abort)); + g_assert_true(cpr_save_fd("other", 0, 13, &error_abort)); + g_assert_cmpint(cpr_find_fd("dup", 1), =3D=3D, 12); + g_assert_cmpint(cpr_find_fd("other", 0), =3D=3D, 13); + + /* Once deleted, the key can be registered again */ + cpr_delete_fd("dup", 0); + g_assert_cmpint(cpr_find_fd("dup", 0), =3D=3D, -1); + g_assert_true(cpr_save_fd("dup", 0, 14, &error_abort)); + g_assert_cmpint(cpr_find_fd("dup", 0), =3D=3D, 14); + + cpr_delete_fd("dup", 0); + cpr_delete_fd("dup", 1); + cpr_delete_fd("other", 0); +} + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + g_test_add_func("/cpr/fd/duplicate", test_cpr_fd_duplicate); + return g_test_run(); +} --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791800995; cv=pass; d=zohomail.com; s=zohoarc; b=CgHE7dWVLnji2bjmhGE1onxAh+23epzOkUg/iyp+avPJ6kNulQ5H39pteG7mVzFhP8+Gd/LwaikeuOe6rdCWqSLBopfCA14UF3C7DitMxf4cvDGq7Kq54sfnKKcL1i7hEBLs3QXh9QGjbclNh4kAZ3BewvHWeOyL1VdrkQLNp+M= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791800995; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=iXgQR79hkZDDfXuHJA0otbnU8q3wx4xJTCQyzRPPke0=; b=LuukYfH1SDXMQfDTlcJlO1pY7G/UaT8BiVTb8jOWUxXAtyuxbsfaJ0kKMtRkFI9iZYT+B3qxDxNheHuDGsiUUJSHQOQVIh9rcAJK51uW0sOUmknxB1MEmV4buf/48/xuUz1/D0BMfTuQVdjBPOy8u0uEebEKfaD2C/1Z/km0Fsg= 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 1791800995020238.86116828622312; Mon, 12 Oct 2026 03:29:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHo-0008C3-V0; Mon, 12 Oct 2026 06:29:41 -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 1xGDGw-0007av-Io for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:46 -0400 Received: from mail-swedencentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c202::7] helo=GVXPR05CU001.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 1xGDGu-0005Eh-UW for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:46 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:33 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=itJwss+35SXPmLNHCA1rZPUdPmQRIv0vS505K2UGzeYqhMAX2mUwvo/C1jSOQEmQfOdMEb7LvFYtB2yUrLsPZmWNUqzVwD42G1hC+Q+gka4ElqvsDPGj8Lx4IyI3Gx45OvRokrA432Q4tIbFnS0mYi6hqBZ1rKl3uV3j7l08M/kAi+RS0V8byweE9DTuHF/ellRdpfVpQiDYVXR3kWKCXr8ea3BDt6hkU58lVl2OoAW/ZM/nabbyIMsKE2SU8bLe4bRBIMtphJC5hbTdWsK4zN45bNaswuS9T5fTrJvJW22Norz7DTfFDziWT0Num0JY6LcfPaWXP7TdnvdQFzOn/w== 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=iXgQR79hkZDDfXuHJA0otbnU8q3wx4xJTCQyzRPPke0=; b=YHkdTqtbkU+wgjxVA4CCRMUL17zgrMMRYr13/+EPCz3BVIjFWx+Z2+Y+u6qdq4T5QbXh8ptE91SurQfNQfniq3m8aafxfqNWVzSoizB+HTUZSknmValPdc/Z4QjA0b5g88rkeNLrth0X+EF27rNDg1/34f4mU2tAXfbA7iFntb5bRPdqtXvOfqndotYhnzOOPbmlQrinepEPlWM+hCDwXNn+JYjX+n7E8a3JjYYhplFJ7SB8RdHtRr0+D7YpIqsD+tVrgp/wxiaXtAWwdFJAw7Pnzsmz54fjmfdko+wY9co/4kw9V8XFtJgIp/i6VwgSAiHa3E7SRhu2FHpCO+VI8w== 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=iXgQR79hkZDDfXuHJA0otbnU8q3wx4xJTCQyzRPPke0=; b=Ka+VCXMhuBZKVvpSVee/qw73h7KY7oOw615tLHVstNiSHSNzkxX+u0cip8pb1huc8NxQct950583+NsIBGPEgr2toACZ6IDKG0malkmL0cFW8GH6+Ie6OmvcIx1PkrG4QjjQzCAXiADKXVOJ0I5PzacbqsjOssMcXf+HB+0u47ckeXPDepBjC401HHEAAV07iVry325tXORl63t63xMA67q4VCnBi0j3v2ENMVc9eWwSvmNwFrnd7OC1y6sqxYFXUXseuW32JS35Q9sSSLIeYWrDfuIUzgFJTmpkfyVlbaIGXw43/LJG+K9U9Dh7+ahS9nGiIUK2v8TBDYi3/d1yNA== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:11 +0300 Subject: [PATCH v16 03/22] migration: forbid snapshots in CPR migration modes Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-3-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: d1196289-81d2-4acc-88d4-08df284b9111 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|3023799007|261009223027099003|5023799004|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: i2hc05KDodIfzskZT9Zbm6nL0tECm8rCWfwH84FeYVvdORSs8LL3p+S/q1y0RXgW3+dRPVANZnVB+AuWOND141uzkx1neTPxI3H2Lp0v9/JzgtNvsENi+POBczmkY12BM+wVZ2oW8q8ObLQG7b1ZwsqgEa2g/8moZ93y0jkCyVk275n9nO6vqVjsLm/p7HSXHvRdWJvEnogP3CM666m2Qdthqrn2ygdkT8EljZc3jrzVkXPKroldEVCSB0bmyvQ/CIod43fnfYqP+5I+0fsRsW4FvNAtZ9iljAejjUjo0NjcsH1LXFAQeSLKhEVqtiholb49fDpqImwS7eEooqQbFfYdLlIfvTmKodvOGCZrYEFlKY9gMmLkC3cK8r+dKCEC3hta1AIfogclhgTSkYiE1Bafkz4oE8dJ7NxGMqyL3wQ7FdZQnagChk0YlNWTpEWtGVxpuF1fekXVrypi7v7VbqT+60q1z62ImYW2eTTbIhprE16LJ1PyWqunzplsNVQnXCLyKHTUXxJtv/kSbVjpIqlzeW7+NwISC08V9J1G6FlYChj7RaRyiyVXTknQxWpY7+hJpxGUBNQ5pYanEiMZglp+S+szaAn5eCUxBc1g9z2EoWqV3GNKyGCRVSeFjYUMiCY57rc01LRjj89YMIpleIx08SwZMysx8+09OjbsY0LTbSyYUPiOHSBoOSPQgiFIRTZNsWs2FUfqPuvioRKomxI3ApXe1/QB2dKtKNtHnqc= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(3023799007)(261009223027099003)(5023799004)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Z3JCeTAvY0tKeXdUbVAxZ3paSTZDMER6WkVRTTViejVSZDEzSzVyQmRIamVx?= =?utf-8?B?ZkNFVTFjTXZ3aSszMWR3T1RSbEFqeHRhL1M2V29qSGwydXJodHBodndETkNN?= =?utf-8?B?ckROZHVIK2R2eDdicG5oTHlxUDR3WWgveWlpMUFyNFBmUklMbjk1MmdlZ1po?= =?utf-8?B?L2RpU0Vyd1pIbjZzWCtPQlpKaW5yWXJGSHZ0K3JHaE0xQTFxdXRvUzcrTnN6?= =?utf-8?B?ZUZHayt3MXhVTUIvV212OWVPakh6U1N0Vi9mbDFQSWNNVFZONU9rVG80RHlZ?= =?utf-8?B?MXNpcHUwRjB1RjRkQkV1Y0tKK2pTaDUyd29uV1JVOStZaFUrRVEzRU5EaDhS?= =?utf-8?B?bE1lTkxleVJSWkdUOG0xRXkxT2dwN1ZiRE5ZWFlFeGxKK29mTENlTThFYTZx?= =?utf-8?B?NHZmdmFoa24rcXhYK014c0hpVTJMZ201ZkxvaGg4SThrajdHSHJzdEJtWVNH?= =?utf-8?B?NFFmL3lQNksyeUlidUJpRllmTjhhNERwLzAydmN5dlg0S3dlQk1OL1pVOEVn?= =?utf-8?B?L0tPcGM0ckpDb1kydUJDY0djb2QwWW81aEROWW5lSnFyektVcVE2MXF4MkNz?= =?utf-8?B?V0d6a3k0YXZvOXV2RGdybWRIWFdPbEhtUDRTcjJPS2lVcU8wLzB3RTROUjlt?= =?utf-8?B?VklZVUJ5bWtlZHZVRlMvQUN1WGYzUjY3OFNIelREc2VsVlI2OFViUkpvd3dC?= =?utf-8?B?M0JidWR2TFAxSUo1VWFtWnFvczMwYUcydGlRMGMyRFRTZU4zMDR6SCsvditv?= =?utf-8?B?eFVPOEcwcld2Y1FFNlhzcmhPRm9QbUxOOVJFME9EVFF4V05yaVhTdzV5Wnc5?= =?utf-8?B?SmtST2dQaDZDby9LUkZIcVpNeXVXYmUxRFl3MTI2SjhaNkJlOCtRYWZGbmFn?= =?utf-8?B?WllkVWVGTHdJZmE3cm9JbjJiU3RXZnVUalJIRDIvUzhSK0RGNk1xekNmWm94?= =?utf-8?B?d2ZxOHhzYnBuUHUwZkwyUEplREV2NExzVEN0Q3RmSGxTenVHVXVqZzNZMmNz?= =?utf-8?B?VmZvT1pCR3RVTFFTRzBaY0U1QTQ3eDlmMWp4Nlk4ZHh1SU9QVXM1QzdjNnky?= =?utf-8?B?cExvZGtnUkZ6dWNHOHFtMUFlZktaYXVBUHJiRzFNdlBxZDUxY1AweldDNXZs?= =?utf-8?B?L1VnUnE1a3p6SCt2RktxeldORlNhVFJ0bDFTTnRtVWRJb2FmZ0VtaGJBTjNn?= =?utf-8?B?b1RZZStQYnlaK2toQTlLdmp5NVJHL0djeGpYQk1QU08zS0t6Q3prK2ZGUFRT?= =?utf-8?B?QmxqMU00dEQ3dmFOTW9Bd2NtL0V2V3c0MlJiRURvSUk2dXY5L0dCZVVneUg2?= =?utf-8?B?ai9QcWNDdTMvUEpQcS8xZk1zbzlHb3J1YW5CNlgrY3d3a1JBVzk1Umdka1lS?= =?utf-8?B?Y3RFWW5ZaTlxblhVKzZ5d2FZekhGYXFvN0w2SmR3MnhkNURxV2txZTg4clVF?= =?utf-8?B?aDdEM2pkOCtUcy9nQVpSSHhPWkx1bEQxcHkydGZYb1lEZ3VIREpwYy9NenUz?= =?utf-8?B?UXZQNlFaUkYxNEVtWGt0QXBhT21vSG1qM2hhSC9iWm1weFlwVmlYb0RyR0J2?= =?utf-8?B?aGZZd0Qwb1VMdGY4RE1QRTBYcWU0QnpmZWxYT3VRY0Z2Vm9sYVA4L1dGd1I2?= =?utf-8?B?UXJidEZLa3N3Wi9GTnRFOHUrZllqRWVDNWFhN2VuTzRpc01MaG42OHd3L25r?= =?utf-8?B?ckltM3MrOXBncHgvVlprRmJIZmpTM1Q0djVtcDZneHJqRUtxd2doRGdLOS9l?= =?utf-8?B?cEdBYkJHNHRaQkx5V3FYb3RsSmloQWtDekVFZVgrR25DbDBudGdXWWNMRU81?= =?utf-8?B?S1c5WDJFODZ4dE02RGk5ejI4Qkxhb052bFZuNmJscWhFWVFJemFYNzVZcjFI?= =?utf-8?B?YVBUd2VNVDZ6N0hqQ3pJUlNXVTI0U1ZPOTFWQTNVRUJYM2U0TjFkLzVDbzlW?= =?utf-8?B?N2l6VHozaFFWdnhtNXRBTXIyTlBvd1p3OEZJWHdXeWtCbkppTkc2Ny83cnBy?= =?utf-8?B?TUw1RW1kLzhoTVE4blZ6elJmem9rcUo0Y01JWDQxV2V0QXZUSlc4bzdoeTFo?= =?utf-8?B?c1VQWlNMN3A2UGJXalc1cW5zQW8wc1dVSGxFb0JQYVZ1T2NncUY0TFIxVFBi?= =?utf-8?B?OHlyNVNvY3FLeUZhaUx4WEt0L3dHK3ZiMGpwbVZsSEMwSXlTNGlBN0NGVUgv?= =?utf-8?B?T2l6L2dBVjl1M0ZRblNqTzRaYnRNVnRNeGxBOVEyaTllZEtDcmZYK3hzM096?= =?utf-8?B?U0JVMUFXRnJmcmxrRW4wZUV4ck43M0ZpR21XSkpjamJuTDk2WndpZVpXTGpj?= =?utf-8?B?bSs1aDQreWdjTkxQajF2UlpsckN3S3VzKzZsbEtoRUJXOTllTlVoeGZPZlFS?= =?utf-8?Q?9jqpteXJmj53icsQ=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d1196289-81d2-4acc-88d4-08df284b9111 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:33.2763 (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: oaS7dFErIsV03el3a/2WIzoRzpDJgSO65NlZs+MNND2uk/N2CPNmgqO1kfHhGWcyV8CR1073BukjcJQtcGU5V+geyMyr3mm0yOCwq2dcubo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c202::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=GVXPR05CU001.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_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1791800996746158500 The savevm/loadvm operation doesn't make any sense in any of the CPR modes. Saving VM state implies saving its RAM entirely, while the whole point of CPR is avoiding that: in cpr-transfer and cpr-exec modes RAM is preserved in place and never put into the migration stream (see migrate_ram_is_ignored() in migration/ram.c). As a result, a snapshot taken with such a mode set has no RAM in it, and loading a snapshot with such a mode set fails in the RAM loader. Currently nothing stops these operations from firing with a CPR mode still set, e.g. after an earlier CPR attempt. Reject them early in migrate_can_snapshot(), which guards 'savevm'/'loadvm' HMP commands as well as 'snapshot-save'/'snapshot-load' QMP commands. Reviewed-by: Peter Xu Reviewed-by: Fabiano Rosas Reviewed-by: Akihiko Odaki Signed-off-by: Andrey Drobyshev --- migration/options.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/migration/options.c b/migration/options.c index 46d040fc3f2..92eda90114e 100644 --- a/migration/options.c +++ b/migration/options.c @@ -560,8 +560,15 @@ static bool migrate_incoming_started(void) bool migrate_can_snapshot(Error **errp) { MigrationState *s =3D migrate_get_current(); + MigMode mode =3D migrate_mode(); int i; =20 + if (mode !=3D MIG_MODE_NORMAL) { + error_setg(errp, "Snapshots are not compatible with migration mode= %s", + MigMode_str(mode)); + return false; + } + for (i =3D 0; i < check_caps_savevm.size; i++) { int incomp_cap =3D check_caps_savevm.caps[i]; =20 --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801016; cv=pass; d=zohomail.com; s=zohoarc; b=BmDhL71pwWOcMcikpFeoaL4Dbv842xiyr0PXwpuqCVvXLi7ulNJz57FefdaZ8o5J8DQr5uJNyQrt1L8VLHBaRRUrXujilEhS/TycSBe/3J/yhbMErV8O6z6wCRGiD/xILMxyjnR7AdaQAXyw7Q0W4kWliVP0u7PWm4FbvDyVSGE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801016; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=LsFB3FDQ+3FBoUdGrsPH789lm9GaLA45KHUm/J4Q16c=; b=F+tU2Prtw7w9oDk/hlZ0QkouVctN9bzbwF7++MtGAlId9Yx7JCpSD7hpAPBUBw4pm5bKKaGGkMayHsIJNH1oiue+Nk/4CatsLfei0iAsouzPKiOvNqiF+avOYhcU7foUhCy5k3be7QnjZtHy6x5v/mTMzUilKXh54Yr436NgpRs= 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 1791801016044222.20786258430326; Mon, 12 Oct 2026 03:30:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHe-0007on-1K; Mon, 12 Oct 2026 06:29:30 -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 1xGDGy-0007bn-Fu for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:50 -0400 Received: from mail-swedencentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c202::7] helo=GVXPR05CU001.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 1xGDGw-0005Eh-Vm for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:48 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:34 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZMB+2u5dkC8ccfhEQ6xSMfKQvyZTEn1E2PbpO18Msfap50P6Ab3RDC3Nm+ldwwmVEWrGZlZM0S93W9UdEQ7UTLjMRTI/1FtTTIAIQeBD1VwOkMGG40P9qCFOYysS88CFjt5GUK6mtk13Qb9/FfEjGHUa+FJHRo/gU/GJeEPKDo8AfS3CpCPSPuDDyW2R6b2Na1EZyEJOggpsP4oBMfpMumwsfwLcbqE0fXs9DQ6VSa9fiimK7XkdDObjFV73TTBc1xQWuxwH5V0SYUvycWhe7JwAmQpth0HS5rNDT3qeEexLhI6Ly9cjp3O56SBK9DXXc0nNsdUigBoi2yxqNSPGMw== 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=LsFB3FDQ+3FBoUdGrsPH789lm9GaLA45KHUm/J4Q16c=; b=Na79ZMRSfGBcv+Ua1gCfM2B0KCTYoRobYmLhvpMHhBVtXj6Dg9tLkv/Bk2RSxpFRt8MyI1IMAi3N8qFX1yVwB5pmYGG2HBd7Pm4/Z04NAowpHfJ3KHAgutfTkPFwpgo9OC0ED5unjzLzdteY1pWDcJozB3Nu7AH23x3vwgZaQyYL8/Osk7fvoITFdRaQXjRObaP3uZpBki4eO+hcJpd+sAA5bxURRfs6jBr6Xcp7pYZXuMVuoZeSCAOASM0IOll2gO6CC5OVgkY7wd0Qo52qeqmiCtIaX3l1bEU9IDd2B1Ibo6SKjU6xbKuQ85+JcJMChY20/T+7kr3LnDojxcrRaA== 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=LsFB3FDQ+3FBoUdGrsPH789lm9GaLA45KHUm/J4Q16c=; b=Ae/qogwnlO7N7HNcb2+ychsi29+TJH3VyrqapdeiTcJmFlNK2xaBigXJ1Rx2SF/qEBVahuhubnWCcy4e6xwoEg9rRo9cN97AMUGkkmLl3/zF6IlCk3TwXB4+9ETdUXmEYFnxIYtRZr3O/tuPONaSCVN3G+9LQ8Vbi1aAiiL7jZntUocBq9O5I5+Myv0eTFD1x0VI4g+fmCgXHnyFPG0TQgMQJ00Vt2RkaOY1Bs1NxVwzpQyeoOrNVyfQDk0BGoQStNkGq1DQlqZtMprUITCca4L44HCl8FV3Lg9HotlaIT4L/nS4TlTICkMGmOJ7zjTn0D0IGFYsPV9znjFhWTXxdQ== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:12 +0300 Subject: [PATCH v16 04/22] migration: forbid snapshots under Xen Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-4-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 7e131773-eb6f-405a-9ef8-08df284b91aa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: wSvPdY3Y/PmLmsgl23O7OCCoDAgy1FCyNkZL5CLJZwNpWk/01mxrH+XeHASHhft1/yUl5SlX18MhnCNYFkXTqPLO69ZjaIneTGCo7OyBvGNmi/KAsKO+VQfgjzPQU8jF7RDVf5ZM/1Sa5LSAU//D1F90Y0pOKI2/ev3MCPH9ql28v2tqe8irP2W6TwcE+JqHdCFbmdyySbWokoP1NooYDn7wfIgOxYIq8A0eZEy+j7Z/scTeOObB5vuffVLLtD9ETBThF5xaJBE2D5TSnfYmZVIvyTXzMZr9yrptKiV/UrPqNDMqfM2NT6Uq3PLRQ/jmt56Fq59rTnlAjXtXudqNhP1Sm7n5P4ERNLh5mwmM/J4I4yI6mo0vdgHAwoP8E2YoNAkVLCqF6u6wAz67nQMridlaLh5T0uePnVhgf0zL2BnpLxKza76NVSxF2JUVeO6J73r0a1AI0ae577/PEsIDEewZXiO9vYrCt4rUG/dYoOybaxgxPSWocvOg5sQz1gaKDNFLiVtkJr6GeCh7jtXvjGCcDcrRqJOjCYhUM0sXeZ3Xc/O7hdSTfG6k+AR49sVKSLJU1/7Z3CrljacOI4L+TMdFs/15wouti/8uXEsci086GAXEqEyFHcU/OUP4ohbpt7MqgR63HGL9cbblt3EKIycwgk/Q2LFdgo260H/owcYFQ1DcdlIeANtwKJT8M3OG/DUXsFz3nsHxWPXj0q6/8mQQKV7lM2E9kg3Ei5xFAKM= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TVVJU243cnZodHBLVVNMWXZRK1pldE9TQkhlNjcwN3p4UHpSY2YveWJJOE80?= =?utf-8?B?RTliMmZqY3U2MnE2RTRVYjNJcDFtZ0cxam0zbjJ6dXVBR0d1RnFLU3RCOE9j?= =?utf-8?B?L0lXNXlsT1kvYnd5VTVHSGdaM0kzRngyUTdMbm9KZ3E1YTByYVZvVnJVNkJs?= =?utf-8?B?b3FpelNqTXpGV2JaU0VCSjc3dDliNjEvMm80TkVPVjZSRXkrOFIranpqdG1I?= =?utf-8?B?T1V0aXo1b0twMEdiU3FZYU1kRFZQbnpiVUVLS0JjUVRiMWlFeTNQdjNRdXpF?= =?utf-8?B?WGg1L3d0ekQ3UDY3aCtVSDNIVSs0UW1Xb3J6OEYxekZoMWpVUHg5aXk4OUtS?= =?utf-8?B?cHh6MFJIS1BKSEQxd1ByUmlhWkw3K3gwYkQzM0JKTFBOdnF6WU1hQjRTSzV2?= =?utf-8?B?Y2d5eEJmWWFkb2dnb0p3T0tjQzVSaUFVMmFGamZSRC94UXBHNzVyOW11Z2o0?= =?utf-8?B?VVl3TFB5Q3IrR3BsZVFHQVJ1RnNkUmQvTlFMNjNoRkxSR1RCU1Zsd2FyWlYy?= =?utf-8?B?ZThBUitWaEwzSm5oSnJTR2U2N3dIUjR3VmgyR203QnpRdnlsUGNzWEx3KzlY?= =?utf-8?B?S1lEeHR1b1FMSUhjUFdRSzIvVTVHZXlxQzBoT3VMQ2dNQVBBVDg5cEdsRldz?= =?utf-8?B?djlEWlZTYkJrY2NIaVBEeXh2MHBoTHR4cCtGeXN3RldqWHVXRnBrdEJkQXEz?= =?utf-8?B?cGVpRmVFS1BaN1JrS3BUTWZVQUk5dE13TGF0alZXVnQxd0daaldVYStRMkFF?= =?utf-8?B?SHFCNUJqWE53M1dNa1l5dkxMWWttT3dpdG9OeEQ3dUhNRWRZOW5qZGJlVSsx?= =?utf-8?B?Q09BRnp4V3RUdUVjTHJjTG1uV3c3R2J3UlhLMDB1U3NMaEhaa1FWWFA2NWdj?= =?utf-8?B?eXR0bkdPK2M3Qkg0a1RmeVpaaEl4aXg1YzVrcFA4MkMvL2daRm8vNFY5V1gv?= =?utf-8?B?TTBVdG82dlBUWmFKZEEwSy9QVUJCSHlER3dwRGp0VTd4Z3orc2V6RHkrOUpp?= =?utf-8?B?b2NCZ1lHbWx5OXBDRURwY0tHQ1orT2pGbDdoRTdneDV2TDBMdk9la05QN0xB?= =?utf-8?B?bnZjaW1xUTgwY2hHQlRhODZZMHVGNUVhWVkyMDRDSVlpTENmOEtsR3BxUGhu?= =?utf-8?B?b3lTMGdqRDlzazlRWVJvTkpEWU1RbE5POVNUSVNWVWdOZzAzbUVSK0QwUmhY?= =?utf-8?B?U2hwVXA5T1I2cmJuaUlXbVlpN2dQNDNSUW9QRGxIay92SzdsajhmRytGZ25q?= =?utf-8?B?R3IvRVRmYUJlcmZPS2VoZG9LRlVGNmR1SEloanRYMHcwUVh3SUlPZVk1V0F4?= =?utf-8?B?NTZRSUlyVWtRc0Fxd0JvMjVpdHlMV2I4MDdXSFZwOTJ5Ump3TlhuYWpjejJo?= =?utf-8?B?SVlMOFRleFF0OUozOXhEN3Y5V1lzTFNMbERJVmpwVHhQdkNrSkJjMFNXUjQr?= =?utf-8?B?ZTJYT1luL0RXRVUrWXhXMEhabGVFck5pZkxkUklQR2xRQWdQdlFCM1BHeWNC?= =?utf-8?B?VGU5aUZjNHk3czJDWDY1RXhtQnJqeDJQQnZiNWw4MWhGbEg2ZUZZVU1jYm5Q?= =?utf-8?B?MWRzN0VjdFB0VUlOTVo2TlRDRnNsRXJjbStPcGNCcVZpZzBnYnU0Ly9kejBL?= =?utf-8?B?YSsySXNHNUNhanY5MTZNa0lkWWx0MHN2WkZiSVdMN3dNZzBhY2NVNHRTSk9a?= =?utf-8?B?bzFGaEZCb2R0QXBKbzNNekMrbnpCbFVubVlvVG9jZDNRdVVEckFmWlh2UkNX?= =?utf-8?B?enp6c2oydUhrRkJMUVZmaUJsUlBEb1RGNlQ1bXhUTG9QT2JJN3dqdkNrWWRy?= =?utf-8?B?M1FjQmVJcXp2eWhBRHl5TFhlZzNJemg5aGtrOVBvV05UdlIxaEFtVkRxWVIw?= =?utf-8?B?UGh3eXhiQ1hmanpwZWZEMnhQemNsUkJRVGk5OG56b2NUT29qWGsvak03ZVB5?= =?utf-8?B?dXlZVFk0bVk5Tm8zUnYvSVlIODhuQVVPM2FiMGw4aG41Z3NYQVdSOENNT1Vi?= =?utf-8?B?MDY0ZW5TQjlVK2hlcEFEbEc1d2k1UnhxMTI5UW1EY0ZNdmUvY21lYk5PSTlT?= =?utf-8?B?VGNNYlNQUmVGR0F1Y2pRdVRFaEtuKy9mTTNNWGVkYWI0Y3pIQTNzakVpQ3Iz?= =?utf-8?B?YW1uUFRiNUkwa3I0dStYOTd0TXZLalBOMEl3Ty9DODNHV1U3MjE0aWRRWjNE?= =?utf-8?B?Vktqa01SOWZaZSsrNUo5TG52YU1xcFcraHpBVTdOazM1emd5SDJpTEc5SnBx?= =?utf-8?B?OFBWVzVINEZWb3N5TzdaNXpXSmxvbjhPbUx0OUREeTF6bGlhVDdKd09BaFVo?= =?utf-8?B?WSs2bGwrbStMdnlJbjJrekEzamNENmV0UlAyZE8rZVQ3L0RyaTNlRjJlV1c2?= =?utf-8?Q?KSJw+aqcuOibhEaw=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7e131773-eb6f-405a-9ef8-08df284b91aa X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:34.3469 (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: 3HFs9DsiIAVL+QUpm25TTcwZuNgp06LFvNKL+kc87Df1lLgUWb0x45xxaIBq/Mr/Ed10DGyaPgu/oCHfrlKEyf9tewGBxpqoKDzPkaQNPUs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c202::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=GVXPR05CU001.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_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1791801018150158500 The snapshot RAM-saving path does not support Xen's memory mappings. Refuse 'savevm' and 'loadvm' when running as a Xen device model, the same way they are refused for CPR migration modes. Suggested-by: Akihiko Odaki Acked-by: Peter Xu Reviewed-by: Akihiko Odaki Signed-off-by: Andrey Drobyshev --- migration/options.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/migration/options.c b/migration/options.c index 92eda90114e..0b7f393492d 100644 --- a/migration/options.c +++ b/migration/options.c @@ -37,6 +37,7 @@ #include "ram.h" #include "options.h" #include "system/kvm.h" +#include "system/xen.h" =20 /* Maximum migrate downtime set to 2000 seconds */ #define MAX_MIGRATE_DOWNTIME_SECONDS 2000 @@ -563,6 +564,11 @@ bool migrate_can_snapshot(Error **errp) MigMode mode =3D migrate_mode(); int i; =20 + if (xen_enabled()) { + error_setg(errp, "Snapshots are not compatible with Xen"); + return false; + } + if (mode !=3D MIG_MODE_NORMAL) { error_setg(errp, "Snapshots are not compatible with migration mode= %s", MigMode_str(mode)); --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791800977; cv=pass; d=zohomail.com; s=zohoarc; b=S/YE9TOMBwjEOnFRaCiODNYrlURTSdbf39N8auu8q1SRsOiD/0l6PB0PlEAZnJCEsK5IpfqFInRltYByWk3bUkhWOZksQ7njlS4aDa9lmv4Zwxi2p1C0mw9HBHwRJvXJdCexjEoBOIA3AZr9mUpRYDC6lFjYS0gYY+QL6TBVF5Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791800977; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=De18djxtHE2E9HKgY8x4Fskcmy6Hm5lIvLp+NNMBlUg=; b=X0nnTBthN/26K78wixO2yxZvDTHS/VyHIt1Be/7/69TMzxeyFT6m5UVPE6fixPtr0WC11NX+TO35KOL8L0TjWFFd4OcYVhjjt+KQrRBcZb75zg8Fh3wMiCU4cS/hHSWhEmvCo7IpCzM8X6AIJvboYLYrjWgIp/iRQt9b5v6Dh8M= 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 1791800977462512.7170827235241; Mon, 12 Oct 2026 03:29:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHU-0007mV-FU; Mon, 12 Oct 2026 06:29:20 -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 1xGDH1-0007cD-55 for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:51 -0400 Received: from mail-francesouthazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c207::3] helo=MRWPR03CU001.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 1xGDGz-0005FA-DC for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:50 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:35 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eAAlS+B0a19J0iK9kh9aq1leMgCDDWAbEHnXBwDWE8lRGkCBpFw1G4oXsYuPvliaR0YOhPSVPziTw8A6BiciWR3njsVRwO49a94jXuMnk7hijKpToStcC/Omcste3tiXPZbNNJmB5C50eRb5GjBIkn7VRjlyvVCX9SqTHqLEOOAF56ya+BH5FKMMsgYQrGhoOG6Ih8l7gpiZDz9dl8+SDxb7aTRJmXAliYoXIK4y0wecw6VNeopyMh0hipmOqDsuvAXwPcNPq+CLGkgt/KOhsbg1wvkHNUduDGJ642wc7DYQTMR3Cc2MO5q1tPAVq5Ja/vyEtTCiYjkYnJpF3Ah/eQ== 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=De18djxtHE2E9HKgY8x4Fskcmy6Hm5lIvLp+NNMBlUg=; b=IX+PjO2vEGaCaG4ysxasnorun6HUuKfe3YbTEVk23VK69bnaeVo2VoOWvOiZl8Exrg5mgnSI2iBEG8U59dHVUkgtdh266BOsoXxjU289D58bkUa9Zie+5CA9x3URzEy0qWvFdXTQCJIYo83SkoLLyqzo9NuCVDtoQvZfPhAE1NBRFBtFW97WRKv2lxLtx0fVjx1C4OIM67CTozdbGraZtec24TD/rXy37rIAWa9I9xAj/IdV3vNiWCMg4nzm/yh45iSTyIurCbO0/6GBjF36j6BeIHts1y1qZLs0wUKGqxc0IixJCtad+c0yfb8YwHKG9wMl69udJl+p3c2O5UYz+w== 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=De18djxtHE2E9HKgY8x4Fskcmy6Hm5lIvLp+NNMBlUg=; b=AQLnm9oZp0DZ8mkZupnC1GKPWHXAjHbHts5hdu9+erTLYk47MP44RQvXZUVQdRCGRbAuchgDne1LBWj6UZnPd9AtIIc+COAwXYw367rG0ACtEhpBVL99Gvp17FsPAOs7Q2aLIJp1Pt3rTgtv4WkBnlEvtZvEAd6rxUJRilA1rmwR5Px2l5X5KKNbU29AjBOpo44mBCcWWLdXo7PTUaKUTh8Jp3uW8NOtk2+OEavPUvuFKnpr3SMzuBLVHhCYD+pauDWnSupsK0oSuLa8GYBwOHZtbSITzJTcMP1hg+4lirih6RremUwYR4/jvbmVuV9vrpKuIwQjCJf1Mnm4hyoDWg== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:13 +0300 Subject: [PATCH v16 05/22] tests/qtest/migration: add test for snapshot rejection in CPR modes Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-5-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: b1d0d367-d8d2-4da1-9974-08df284b923a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: w8aP4b88/EYBG3BkmEdT/Q1AWxUEJ3yh3LE74DdJutwF4cLIRe9Q1zcNvPWebHmOj1xZSBqlDwELUrkCIOsq2GcRi10IRWIKPiLQsyVAJCxE7fQN+OW8q+7/9ocrqA3mKZeuQ8bevsoRjNb+YGBoFouwIrQ711pVHJZ4j2baLfHrKDRb0ABfFZ3ls3+0k2SMFr8i9A3mHRatTPKt7a96Vg9bY9PdtfmZpWZqSBvFTkLbbRLlNwrrbp/0IqYJWivRziRLv7C+gz3EFEsG1bhxcPF6ts+VByFcgW+X7LCw4oYYmLFKzlAFgpGsAwF/KVTnE96jIycatq220To70eUlP41584KFQd8eTajcw+96d5gEri+kjIvr+dn0beOO9Y1CNd9Q8/QhbFXVPFfpeUGvofu2Z1j/3jW0X8g4XWQgaOXrYhkte5H9q1+P/eTf+UAygdEXbTIE4py2Fb/tUldhD2Y82UZ7X5RnpfPKz28YyzBa2ffSXif52qBEAesKkaXswziWgRHPkYvm26DQed5HNvNBUAVlqMtzShWJ84dKk4UxuGvWF9GxWZWU78wPHolwq/LkhV0a3QzUfQMH0Yt4cdGH10VHhdrCL192RfKIK8QtG1My6xX7fnAAzfugUxKODNzHPjfPAYvaKEfYbiZm8xNRtnYveLY2gFIaF6/iRsNyTLFpUjXBcEVdEY6En+jfFUBo61YnYqUCp/n/q5w4NQ== 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Ry9DbFYyN0lFMy9XeU9XN21rTGFWay9zUmF1MlFPWEFVTWd2TGx0V002cFEv?= =?utf-8?B?L1l0MHk0NkpHTjFwOWtSU1RhSWNPQ0loeVJ3dzh6VkhsdElPcDJROVRKRWxy?= =?utf-8?B?MUNxdGwwTUZmOWdmd0R0N09lZVpYdEljN0tKUXh4V0tJbXdmOHZCUnhpRUVa?= =?utf-8?B?Z1B6VFNCa2V4Skk4QW5UVGM5dWhWK05ibFEwZGtpaWNUZHhFUW9MeHVadXBU?= =?utf-8?B?QkNVbWdaUitwZ1d1cUFHR3lHWHdJUWU2YTVTMlczaUF4dmtiODhmNUVvSlBH?= =?utf-8?B?YXhEU3RaR01pczllTXlrb2lLUUdHcTFVeWZ3UDZmVTZJNkg5bGY4SFJEQ3pQ?= =?utf-8?B?bU1xVytlVEpPWTdkNnIrc2dWSStGcnJEb0g1aXdhSWVhazhhOFh0N2R0Rktn?= =?utf-8?B?M25pd3NQak15OEkwR1Awbld6RWcyekRXN1Y0d2JJZ2V1eTd5cXpvTXJwZjM3?= =?utf-8?B?SDQvcGF1L3lzU0F4STU2aVVmajVpbFNSYTlvYXZmWFNlRHI1TG9xazJGakJB?= =?utf-8?B?bnJxMDJnMFdPYm42TmdENUF0WUpoaGgwTU1PaVBlVE9CY0RFZ1lDR1hoZU1U?= =?utf-8?B?dVYvVVpSNWZqV1NMZjlQUk4xRGpHYzlWWVpJYlg4c0NpZlBOVXdNVWFqSzM1?= =?utf-8?B?ejA5K0lnbG5LOUVmSWFBOGpyS09Fd0dtMS9vYzdoUXpkdlpwOFdoUUlZMzdV?= =?utf-8?B?Y0YzYWZlcXlndDFpY1F3N0p4aUg2Q1V5dGpuZUp2SUJ0UmF5V0swdytkemdv?= =?utf-8?B?bDZiUnQwbnJ2YWRtWnR3Q1dNcTJvZUYzcmZXU3JBUWdBeUw3aWNZUWY3djdq?= =?utf-8?B?Y1ZBc3kxOS9rY2ZCZzNlWEcyQXV1cDJsc09ORmNHNUE5S0NFZS82V3gvTHdK?= =?utf-8?B?dzNTbGNXRTRzQlRFbmRWYmR6MUVzeGFIdWNoUEYrU2NwdmVLSUdZaHVGTURR?= =?utf-8?B?aTcwWktnZFJPbjAyQ3hhbGR1eDBNSWlsQzdyYUh0SGdFYW1qQVJ5a2JXUm5S?= =?utf-8?B?VlVFWkNXSWtqSG9YeVQzdndQN0EyZzRXT21zN24zRThuYVZNQXorYXlvYjlM?= =?utf-8?B?UTVGNnFwcTJobC90WllaWlNZTTUzN3F4QW9ZSmNpdjE1UW02cmpRbElmZVZw?= =?utf-8?B?ZmNvNXUvQUpwaGhlM3NOMHVKa1lLWU9iSnM4NU5BcDl1ZE5nL2dxbzBNWlY1?= =?utf-8?B?QTlHY2RXTmhKMU9hc3FjTy9GNVgxVk9zZ25CWXBWMjFMc3YxL2Y3c3JZaE00?= =?utf-8?B?QUdOT0hDTDl1cEZsV0FZSEg3NElKNkRuOE03RGYzaDdXS09JaUNlcUJPQXB4?= =?utf-8?B?WFZvVEhxbVRLaW5WdDBHYTA4WXlDOWRwSXM3RlhPaE4wTEtGeGtmNUZXblE2?= =?utf-8?B?eHNoa3A4TUhTQjV2NlVUMWRYRXlFWExQRHV4U3NZOW82TkpxQXVyNHh3TENm?= =?utf-8?B?dkxFaGtodmNjbi9yWEJ2a0pZRFRzcURDMU9ZS1hWeHlVUDdReGVWQ2taVWNy?= =?utf-8?B?YnI0VUVGNTd5QkZWR0o1QURMM1FVSXlmMmxKb3BGemt3bXVNaFFUeVNjbXQ5?= =?utf-8?B?NjQva01FVkNnSFNSRDNxL3M2eWtjZE9NeUEzTEE5Y0IxMG1RS0lGeWVlM3hV?= =?utf-8?B?N29ZQlk3T3pPaUREbnQvRElBL1pWQ1NMZVo0MXAvSDBEODk3Y1U3aXAwL2pO?= =?utf-8?B?eHJSam8zamQ2MzRMQnB0b2FndHorMjF6VEk5Skg4WVl2c0RkRGVqcWcyajBX?= =?utf-8?B?dCs0TGNJNWZlNWpld0MyMzNtak53UUpRaXltNDdFK3p4bWVMaFdDaHZyMkZk?= =?utf-8?B?UkNNT0srQStaQnlYMkwxZG5XRzM4RTEwdENUZEM0VVA2bkxxUFFNQnpweStJ?= =?utf-8?B?SnpEYVFBQnB6Y3RwbzU3aVNPVnFkRVNxS0dhVk1rVVYwb1hZQ05Wdm1RS0VM?= =?utf-8?B?ZDNQc1hjaktYQURMUSs3Nll5VUZRMTJUK1l3d3RGVkVId1JsTURzalVXQ3dD?= =?utf-8?B?OHlQeVlGNXJ0YmVZeDkyMi9DdEY3UTAzMGJxblpLakVoUFlwWnZvc1Mrb3pT?= =?utf-8?B?b1gzUDYrSEZ1emUyckJkYXJyQStwMDJCeXI2ZEJhQU5WS2lEUzNJd2FyaWd6?= =?utf-8?B?eUkxTkZ4bHlud2lKM1NiYTJEOGgzL3JVUi9JVUdIRTM1WWlDZXM1dHpGMHlq?= =?utf-8?B?WThGcGZuUjFSa3lRa3lpUDRFZXRPTjI0bkR3MjNRSGp1U2FzVjFQV0FMVlBS?= =?utf-8?B?ajFnZXRyLyt0cDlZYlI3cDhrN2xzZEs5MnQ0TEoxTDcwbGhrTStHNkNqdjhz?= =?utf-8?B?TjRKWVg0d1NTMWJ6NDlsM0pnSkpnKzRDWTJ5eXhtVUgxTTJVQXFmT0JRdldz?= =?utf-8?Q?6hHDouF1KGo7oBZk=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b1d0d367-d8d2-4da1-9974-08df284b923a X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:35.1852 (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: rLKxkEjWXBTDYeOcKgKQHp23NISA3C9T54iPg2wNvTiXFANSkWrG1Zvv3Bnk9zdO8gqfAWNAAWD9t7frRdax+SYnYVkOHghgp/Br2o06LIg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c207::3; envelope-from=andrey.drobyshev@virtuozzo.com; helo=MRWPR03CU001.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, 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: 1791800982294158500 Snapshots are refused whenever a CPR migration mode is set. Add a test which sets each of the CPR modes in turn and checks that 'savevm' and 'loadvm' fail with the corresponding error, then switches back to 'normal' mode and checks that the error is gone. Reviewed-by: Peter Xu Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- tests/qtest/migration/cpr-tests.c | 40 +++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 40 insertions(+) diff --git a/tests/qtest/migration/cpr-tests.c b/tests/qtest/migration/cpr-= tests.c index 0bec753b4ab..05c2ac1336d 100644 --- a/tests/qtest/migration/cpr-tests.c +++ b/tests/qtest/migration/cpr-tests.c @@ -290,6 +290,44 @@ static void test_mode_exec(char *name, MigrateCommon *= args) test_cpr_exec(args); } =20 +/* Snapshots must be refused while a CPR migration mode is set */ +static void test_mode_no_snapshot(char *name, MigrateCommon *args) +{ + static const char *const modes[] =3D { + "cpr-reboot", "cpr-transfer", "cpr-exec", + }; + QTestState *vm =3D qtest_init("-nodefaults -machine none"); + char *out; + int i; + + for (i =3D 0; i < ARRAY_SIZE(modes); i++) { + g_autofree char *expected =3D g_strdup_printf( + "Snapshots are not compatible with migration mode %s", modes[i= ]); + + migrate_set_parameter_str(vm, "mode", modes[i]); + + out =3D qtest_hmp(vm, "savevm snap"); + g_assert_nonnull(strstr(out, expected)); + g_free(out); + + out =3D qtest_hmp(vm, "loadvm snap"); + g_assert_nonnull(strstr(out, expected)); + g_free(out); + } + + /* + * The check should no longer fire in normal mode. savevm still fails + * (there's no block device for storing the snapshot). We just check + * that it's not the mode error any more. + */ + migrate_set_parameter_str(vm, "mode", "normal"); + out =3D qtest_hmp(vm, "savevm snap"); + g_assert_null(strstr(out, "not compatible with migration mode")); + g_free(out); + + qtest_quit(vm); +} + void migration_test_add_cpr(MigrationTestEnv *env) { tmpfs =3D env->tmpfs; @@ -300,6 +338,8 @@ void migration_test_add_cpr(MigrationTestEnv *env) return; } =20 + migration_test_add("/migration/mode/no-snapshot", test_mode_no_snapsho= t); + /* * Our CI system has problems with shared memory. * Don't run this test until we find a workaround. --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801003; cv=pass; d=zohomail.com; s=zohoarc; b=dYm5YZPjhut//PiVeCPN9np8qsN+5IqdwTJX4yUODlIIUWBVfmVuVbZqynQ+1gYgamIA4XBggDUcaAbl4ocNLM29wg7j8tBVZYqZmHv0LIApI2ikk+4deJLsvDKaxIjJTlkHuzYpXCkPGkxfy1lBzvxOTBzWni2ZqQicNds+gNo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801003; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=42TxjWWVF52+WjX+vXTK/F5rsdLUfNrhRilXbJ+LOJc=; b=Gnxejf23SQLfRKVry8//UnOSVl92zo/RLKQH4tOiZerUJtoI/XnH+BTuGtkYKjR+M3rg0dcHdHfPWGgSmWCRiAgha0sjNmDD2cZ+bkCkOffF6MYBVWsefUhMDsQmdsmQtST152FRfGp1LXsgjZM25hRi6lJVVPLyeAmhtSX9vC0= 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 1791801003534983.7227288912388; Mon, 12 Oct 2026 03:30:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHe-0007op-0o; Mon, 12 Oct 2026 06:29:30 -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 1xGDH2-0007ce-C1 for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:59 -0400 Received: from mail-swedencentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c202::7] helo=GVXPR05CU001.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 1xGDH0-0005Eh-7t for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:52 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:36 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BXhZKX2B3K5SZpYiDDwfRXZmkIl8e0YQhZLut6NuaTB+HmvBaH2+kPDLeJ2eyzCD+saeRI+X8Zq4/y6/Dop/1kBYBGNrJVUmVKOi6IZKwQIpfGoFfaFJwsPgJ+75OOP4oPj1IPCSwIXC+MaOgRwtIDiKFCUtf/G0pNQqxDp4JgiroWaEZikbbqMdRlCPWgCTeMfoK90ZPVo5X0cNtrP2N74tQXQiYi6dcLX2P/DnV19YVRH8dX/EFtyrhf4dd81d/Vk0zD/efQwO3wMmf58kve8tMVji2FKaGreiU59Lr6JJrfkbD33aSZKxyj4PDe0BnK9YcD6AuzjCeUjjJDWvQg== 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=42TxjWWVF52+WjX+vXTK/F5rsdLUfNrhRilXbJ+LOJc=; b=QEmj/dVV+je4dIom9Ejx07Ihf6gd0AfKw7pX3pKT3+14Uqwdw0qrTdDhu550cA9TLaG5olFy1/PlbGbkov+MxEoHC9F6AT6LSQ9CGLV3K9A+TudnAcMzlwPAxEJC7LA59S0GprPdRMnW67ej+Favy+ersPcetZktcRLzH1wok/wMfmzTsLk7ju52k2IUZuqK/lA+Da7TIESpuHam0ocoxv0ZJmXzNrfedgm9rHPvCLzXMW9JSt6L6LSguNkqc0QsgU/vY3X/y5txzgs1F71JgBwFGoi9NIZGwNsnKTjN3VithFj5ce4FfbXv+1H5LgUs5Ql89Z++aqIBAA6oNzVpzA== 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=42TxjWWVF52+WjX+vXTK/F5rsdLUfNrhRilXbJ+LOJc=; b=GCAvOKWI+2AsFqs+fSFO03nAKCsK7NFcwDgUTp2dAimFB9cQ43ueiMjnPZZLc79OMigsXcAj2xwCflQyeo+RsXVwv26Ox5o1gVXH0dLLbHGrqYrCQVaTCtdXZ32h3TWn2Gp693DikRl3M3QixPTpiuWeGsvAhsrjnvUgeyQpPx0y/fup6zvZTtdrB89Nj5Jj6lkT3AwZQ2Q6DyNmZF6ek6xA5iV8s0iwcX8esl2OVXOHJF+KH1LthMDorUJnmkyEmrWsTLBJBcfo2+7jUAmE1HcAYt9Utn/EIHpHEl6hxW6FDZBUGBPV3lfV9rgWcF7mGMkNAdeEhkCcGgkJAKSxZA== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:14 +0300 Subject: [PATCH v16 06/22] vhost-vsock: block CPR migration modes Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-6-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: fbb230d7-b333-4ada-1325-08df284b92a5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: ti8vnUQOJziG9ljXFGd4jYcrN5HxHAYXmmXW0ssT7WdukdzjenhKS0oa48CE+RqT4IakIrMzcHXi2Ru9ThntbOIJkGiOpYjubolJ1P05tOismG+I5Ek/tPrw006KkPAKb2R9UkGcDdFiMA0jU/jRlVfrlx5hwffZtHvB1OaPi397jwaj4Sw0PlDgze4d2DJlaCk9ORmcnDyveCzMwAibQ6tY4EWG/xfF+SLCQpJ3E1ZEtbPwoXW1go7hHQrZ/6MpXTqKeG8IMEEuY6Sx1EXsQt/lfCgPWcjt8j8yjYw5/fca+fvC42pW9HyDqeDyryKpsNz7CrBXXSwubO426J3rJCLRGlvYFMt+ZEhFWD9KwmfO2Phj+3ghcoM7xrAooXseN5MZluHLjbD1rSxVq5xcWB9qOgPB5Nnob1Pt2CaF+NojvYHzPqTrmbR+mFFH97rPcKybeqZT49d12+jA1YO//+l5hvTet3XgDq5nJ0HBbuPrcM7HR1L+ieCoAE6OsliqhHEd98Dwr3riETObvxauQhRUq/oPURDHfRYVlgzWthnX6OZp0SDcE84ZjOeKEWrS8UF4BZh5moLLsh+10FrnwvybOIAJeQX4WtSVgZZMgGZzil/35uZlSzqQ1BAqv21apZcUjP6KfWTt0nc0bST2SUjFan7jX6y06RbGzw7qxJIfcbXLh3HBcLfZd6ClvKA6Visyn7fP3lzvtop13gLqzJYLxae9MYXGjpjxrU+JI9w= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MitGV0lVcHVNcy9tT2h3bThFWkZYVE1ZR01XbUVITFJ6UXVEb3RmY3FnWURM?= =?utf-8?B?N0tDZHJHRW0rSnVGd2FLRUFiOTZBdVpTclN5Y0ZMY0RnbTB2eG8vVmhwUUtW?= =?utf-8?B?NmFjTEVnUzZNemJySVpLQWpHSWFwTVEwWWZVeGthVWhETDZrVFQ2aTIvOFJN?= =?utf-8?B?YzR4WGgwSHB2cXpzbVpuak1tNWdiNlhDMXd5aGxuNERrdStEaWp6cE8rK1pL?= =?utf-8?B?REtCYk5WaEVrV2wvaXQyTWFIaXdBTy9HRVZaSkZoZFRXQjA4U3ZrSFlDTm81?= =?utf-8?B?VHlmL0IzU0kyK1dFZmFRU0QrZzN5R3RvMDBpSHRFdnFTYVBvUmJNYWNWc0Zn?= =?utf-8?B?bVFUM3ByQXV1R0FjZlQ2dmwrTjI1MjE2UUhBeHJPQ0E1a0txczRpek00V2VN?= =?utf-8?B?MW9FRVJVNDVrZlNrUWJjQ215ak0rWjQ5S2ZSTlA0ZGs4U2lKL0ExWUdRKzhO?= =?utf-8?B?eXJvYlhiQzl0M0tVVXVCVlBkaDFXenZ1N1M1UGtEdXc0MzByeHlUcXlNUnA1?= =?utf-8?B?WVJHTk95MU84QXV4QzZ2T0JPMW4wMzl1ZmhDU29GUHppZlNNQVZCdnJyayt3?= =?utf-8?B?WGljTDdGOGd1OEp4ODlacVk1RWJyRDMyMm16SFBsT0tpb0RTZUh6TDVJVWpJ?= =?utf-8?B?clhDTHZvcE5CU3Z5anJrcW5MYitKaUhSR29QQytSR214elh6QUgzRWNoK3h6?= =?utf-8?B?eEVHSzBpWFJFcTNFN3piWi9qb2pCcFRhczFCeDB5ZlY0TGwwcTFURnBwNllU?= =?utf-8?B?emVGV0NPVUw1TkZqOWUrbGVRVlB1NWMrYUlYaE9Sakc0b2daRFZpMDJGUWhG?= =?utf-8?B?RTNDZTAvWlBMSGhrVHJzWGxqZWltTS9iRUhGcjRYVWxveVA5bi9uSzcyeDMx?= =?utf-8?B?V2gvY013NThUQXVhb3RMcWVBNFlNZW1YK1pacytmQmxPKzZFTDFwQmtOdGdQ?= =?utf-8?B?OExGZzBvY2JtV0FwN1NrVXdoc0pUYUJSTU45M3F6U2MvREs2Vmxrb0dEUnBK?= =?utf-8?B?SEx6QWpSKzhoRy9xdUpwM0pKSTNRNWxLeDZzcCtXczNyU2crU3NIb3pqdWl5?= =?utf-8?B?OUVoVUpjK0l4Lzl3aFpJSnlOWjQrdGpMWDBDVmhid3ZVaFdjdXFmbVZwZktm?= =?utf-8?B?dDJFSTRrVFp0OWdObHh5dmtsRHUwd01RRmYxQ3lMRG5jM0RhNnpSSTdxUEkz?= =?utf-8?B?Ymp6QWpaVC9tYzJuWFk1eERqRXNiY0l3KzdoTFdkRlc3aVVteDNjQVB6emwr?= =?utf-8?B?dFNCMjVpdUx4czFDVkpQVG1iRW1PZkxoTTlHMjlYMURaRnl4WDFlNFlwRjFO?= =?utf-8?B?OUpwMkYveHc1QTZIQ2pObllDNkJkK1k4NTFINTVqQzU3TEVIamFGSzFSY0hw?= =?utf-8?B?cXlzV1p1R1B1VVZKTmgyKzlidkVzZUtBTXZTWHF0U2xjUnRlR1ZLNEE2em1H?= =?utf-8?B?b0hMdXBIbGE0cmNRZHJiaVlkY095YlFUd1Y2RmVjVWNwT3U2L1VKNFQ1eStJ?= =?utf-8?B?OFVqMHZsNWJ3U2tUczhMRjdTZ25rOVhNSzhEVStNR3liVFFkSW1hZXU5R3hE?= =?utf-8?B?enlxSU9ES1owRUh1NUpCSExkNThFLzhuZXNpZDBKdXkyRDhQL1gzWmZ0TXBI?= =?utf-8?B?MVd6R05oS2JpRUlhR3dTOG02cVNNZ0xNNHV5Tm80cEQxRXd2TG5nUkRqL3VP?= =?utf-8?B?bWZUOEZtSmNTUU90S25xYWNOSC9Vb3JTM0lXdERza1N3V2oxaXUwa21jSVNV?= =?utf-8?B?SnRPTmt3SnBaZzFWYWhZMFdqR1BGUmlKMEh0QlB4T1RiV1Z3M1NmYjdET2Nh?= =?utf-8?B?cnlVV2NGZWdFTkJmWkIrY3MrcjVaamRRUG9VY1RzblJuZDNGSzR0WU85dXdP?= =?utf-8?B?QVFrc3A5dDVvVjZ6Ri8zWkhCYkw3S2hLSWxhQjM3VXN6YkdzYU5LSUkzQ1hW?= =?utf-8?B?OFZ4SGx1WFg3R0JRNUlDeS81b0pBblJFdStuNlNZRTlqbExuNG5xOC80R1Zj?= =?utf-8?B?eUQva2xvUGFpWVFZR3pLSjlHMlFXU0N3VlR0MnovaVRneWpOdlpzbUQwWitY?= =?utf-8?B?bkR1M1c4bVpuckRuMS9yYTU1MjRFZ2xwaHVURCtZMDBiQUNzaFJLNWlwR1cv?= =?utf-8?B?MXBkajdWUHlOemduMk5XaVdwT1JCWjN5T1IvR2wzbE1rUldpYm9sVEFrbzB0?= =?utf-8?B?SWFUeFQrNEZQZTBWLzZMZ1MrSDhpUkFzbHpycncxc3c0SkxOZXFLWkt3S3RO?= =?utf-8?B?Z05hdWdjb0Y5Qy8zS3k1VDFlNjBYeEVNNmNFMEhrU3pHN1JWNUNaNHd4TWlS?= =?utf-8?B?VFhBekJtVkdOenJuWWFjQnNVNzhpdjg0MlBqZzRrQXNHNjdJVTJwellOSHc2?= =?utf-8?Q?nE6TWFds0n6uqjms=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: fbb230d7-b333-4ada-1325-08df284b92a5 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:35.8967 (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: CQekaTU1bJp03EFnNPjcJwkPZGkGHlo3rC177wAB/Rl43oKo/4f+rSK99LdEm8gb/7ALFlA27SGyuzyvowA2S0eDGv8s9jJ899snTuJg18I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c202::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=GVXPR05CU001.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_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1791801005796158500 CPR migration with a vhost-vsock device currently crashes the target QEMU. The device ownership is not handed over, so while the source QEMU still holds the guest CID hashed in the kernel, the target's freshly opened vhost-vsock device fails to set the same CID in realize(): qemu-system-x86_64: -device vhost-vsock-pci,id=3Dvsock0,guest-cid=3D3: vhost-vsock: unable to set guest cid: Address already in use Add an unconditional migration blocker for the CPR modes, so that such a migration fails early and gracefully instead. The following patches implement the actual vhost-vsock CPR support, and the blocker is lifted once it's fully working. Signed-off-by: Andrey Drobyshev Acked-by: Stefano Garzarella Reviewed-by: Akihiko Odaki --- hw/virtio/vhost-vsock.c | 27 +++++++++++++++++++++++---- include/hw/virtio/vhost-vsock.h | 1 + 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index da244eb1657..503d248a617 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -20,6 +20,8 @@ #include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-vsock.h" #include "monitor/monitor.h" +#include "migration/blocker.h" +#include "migration/misc.h" =20 static void vhost_vsock_get_config(VirtIODevice *vdev, uint8_t *config) { @@ -140,25 +142,38 @@ static void vhost_vsock_device_realize(DeviceState *d= ev, Error **errp) return; } =20 + /* + * CPR migration of a vhost-vsock device is not supported yet: the + * device ownership is not handed over, so the target fails to set + * up its device. Fail the migration early and gracefully instead. + */ + error_setg(&vsock->migration_blocker, + "vhost-vsock: CPR migration is not supported"); + if (migrate_add_blocker_modes(&vsock->migration_blocker, + BIT(MIG_MODE_CPR_TRANSFER) | + BIT(MIG_MODE_CPR_EXEC), errp) < 0) { + return; + } + 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; } =20 if (!qemu_set_blocking(vhostfd, false, errp)) { - 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)) { - return; + goto err_blocker; } } =20 @@ -187,16 +202,20 @@ 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); =20 /* This will stop vhost backend if appropriate. */ vhost_vsock_set_status(vdev, 0); =20 + 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..a964d57e1bc 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; /* CPR migration is not supported */ =20 /*< public >*/ }; --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801072; cv=pass; d=zohomail.com; s=zohoarc; b=MFuQErko23cVzrsA/aEnQLqoiMZuVhfkWNRk5JhmsbbJmIvRaCfPpWQB7eSjgywAXaRK3XhM67rMgtAOAejFdohpGb5hKI30djjtbkwldCsBiD3CJUjjWpyQ6Igz/NfNiCLma1sSjjuhHYVOz57NELEgIkblBG1Gcb8XV8tMPFc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801072; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pI2kEvdyqWo2h3cBz00/awDb1Cv0bW/IrdoDs7geeFM=; b=H0sVTbSjlkA7/kpKhj4cOPjqTThhEiOCS/vlWKlV+5ZzZrqy1KVFkadiQmNRZv6pX7XxEmR6mf8Bh4A45N7OdLT9UAMUNfLe6ba1Sz3LnsNw7n3qsIl2mbRWSphUiDowiw8KFwY8lcTlaj6R/7T0ca+ly8+svtdb2q5kmf3wYqE= 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 1791801072630119.36816608381332; Mon, 12 Oct 2026 03:31:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHg-0007tm-1G; Mon, 12 Oct 2026 06:29: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 1xGDH3-0007d2-Io for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:00 -0400 Received: from mail-francesouthazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c207::3] helo=MRWPR03CU001.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 1xGDH1-0005FA-Fz for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:53 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:37 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DAc9RGPfz89ZMohv2F+uZhlQn7fzJ5AjAVv34MpA8xQ6E4x5lVt5xIk4nHOkvi2lwG40jjZLjWG49cielnac8HqV8Csn4P8Qe+3LPvgNvXY6tmAJpkgCbnxFv+lxt3JDbWi6W9u8U3WI+vbFMokcpGcwOCrHS3sBOa6kE2K7kj6255U30sqjlQXDFyP/JlZQmSUJUdWF+ert4wFrvaXZd6GGqT2BR2VCrVMlUKnTjnxzp48RZqjg01tn4SGDKz4j0x8E9G/6z/icN02zpDo+KxEgbTZFeZbXj8rC39+VP0iTK/UcLgRM7tp1bTj6UJal+yrlJitLIqfhlD/WMMivMQ== 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=pI2kEvdyqWo2h3cBz00/awDb1Cv0bW/IrdoDs7geeFM=; b=e68nxbtMnRVP73D7BzyM9/ZSVPTrpXc/7syw4/zywMDAOD8Iprn7VoSMfZnG5MBBj5zGSiV+2TDXXkGTHVqLSduGOPtu9CJp5+D5d4QOszxE9fSqzYEu0vJmQ82eqEziTNiEXOYrIfgIYFh36q6CggtJBXP+Ema5BIYhUT3gSJUnd7N7EU/0kuY+yG2olfD/nusYivgkhw2299NZCx/BDYlpOstJeyshzKz1xBMn754mQE9/cw1H9BR+ENTxxXdMkOm2HV5IGGAazbunHom171lrG066mCYJGiE/amUn/eIMbN59GWMlw6O2lj7QCWngKdw+ZL31u1jSotI1TirThA== 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=pI2kEvdyqWo2h3cBz00/awDb1Cv0bW/IrdoDs7geeFM=; b=mWTzSn1UyK4Dfbnwh8ylA6pZ6s02WFZoF3558nVwNx9sw+/wH5OeJ77+dLyO0pVorbkjrIh+ZO2xDAmEYfzYKVB/bIE3Q0Cufyi5j/rsNPLNKgjwbn6W8DxqtPwEJqOGLWg/XG3ZbnCUPaBhndYOEnPjLRBeXezuDNBsHm6MTTB4OV7skW4hQ6k4VIB8pTQYpplUGIH8OozW0gZGCC+kjnsEh/Myzf8ZBymMr2hjm+Sc+uuXzkkTFwK2lwLW4OWF85iV4cOWt00YRtntFpLZCLcqx0jiMaXy/JHxqzmmuhyqhYD6JAd2JUwuDmVZtURkShBOlD6wHgoWrE0fE354rQ== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:15 +0300 Subject: [PATCH v16 07/22] vhost: add vhost_reset_owner op Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-7-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 5277a83e-b075-4822-4fe7-08df284b935e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: wGJSTGXqzKqiGyqJs547xetWP63TJXsLXxLWZtPrNW/s1ex3I3mRtLoj3Jmpqse2mvItYZt8WEUr0+mdojiZ5idlMrBvjnmsoHysRznmKcneGJEiX7g5yqIsKMES3G/+qcZBZteVl+EW40FnvVDynX2XzH4y3Iud8sS9xYActjuN7kZZv8QwiDty/vMuHfmSyJhayA8o9fsxFl7qtTJY3OERKTefdlFzxlpmi16GM+ilMjeP4tE+tLuxqvK5D1Wy0Iz2S/3a4Urt44jmCrv65TqCChxw4vZzDq2RH1z0fg1CfDBM0QLAnVjCOkMFSK5cCAPIPPrL3aY4cRjgdg8awnwNAhgYWtoqbL/8JHVHPyfabYABAl7gKZy8NWR/SueQ/Aqt7YDW7t5Bm3ao+yZ60KcGPjCdE4tkr12hK5C2mvZMEEsqinBzTinMMyGQ1bWmFE847vtf+3CrXkW0TTi8Z+P2/qHj5Lh3qUDQpRXvRSglqle52QoqTFtlqFrVPrW05wOC8to/LCbFZdvqW8sRtWxPntvqDKrITTi3Y6COTJBb+MPItwCz2Z+YCyxTW+KYuXc9IO3gzHLxz03pSpYVYmvCQy3s9/B31Ou+NBtNndh+d6v1vwMEAJjtIkRybGl0cGaalOUfsZjnFGIkfS07evD3HcUkLjQVUfg/rfdXnZy2xiPrRhAKfB5ttXMxg5SvWv2BxQ0Qj7eUd6RGrB6sUQ== 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eU9zR0Uyd2wzOUNsZU9nNjk5RjJVYWI3bzh4bGFnaUtsOHF2aWdxMm9SdzlU?= =?utf-8?B?Yzl2ZmlNNFF5WVRRcThDVmpHbHR3ZnM4Ylp2NW5nUmhRWDZvcWwrVVgvMUNP?= =?utf-8?B?enVPbUloWk0rdEZybXZybXIxcE1lZzZReDdjMU1KdzE0a1dtMDdQeUg1Tjg3?= =?utf-8?B?VlFyb0hHdk1OYzh4ZE5wQmlzQlhsTmFIY1Vaa2dweGc0NnVLUnZQTFpQUTVF?= =?utf-8?B?OGlSMHdiOGRtall3TlVWeG51UFNZVWNSYm5Udlk2OGl5YXdUVFNMbkF4Z05R?= =?utf-8?B?bnhyUmxzbHNhWkVMSm1ISmtNY3F3YVk1S1JlaFhSWmo0Sk1LTmM3clAzamNB?= =?utf-8?B?emtMS05Vbnh3UnFCRWxtMGV0eXNDK3A3dXQ2THBRR0d5a3dUNzR0Vk5uQlpw?= =?utf-8?B?WDBpTUVRUXFnV0E0eGxnalVER0hvZ2RTdUNna2JmUEE1UnQ3S2FCKzZyZVln?= =?utf-8?B?SDVpaUxFWmJucHJ2Y1dtanc2T0pBTGR5RTlkQ0EyaVphZExZYVFISkRZbzRG?= =?utf-8?B?SWRsWE83TFJwbnRUbWZYRGpaR0ZzQW1MZ2RZazNJMmxZN29FdWR1bDQ4VlJP?= =?utf-8?B?T1hmaHRDSW9NRzdocEhneTliT0plSDdreDZyRGNaRTQrVnpWYjY5N0dmK095?= =?utf-8?B?Z1FUaWRIa0NDY21WSE5DVFBtWlVmSnBBaTNxaGtTMlhzUzJMdVlJUWRWdGFm?= =?utf-8?B?OEpON2htUTZRWkw4ZFZ1YTlDMXhKTnJ1YlFVVjlWZlJIdTU5VVc0ODdCSjFi?= =?utf-8?B?UGdIS0lrZStzUmFCTFljaFoyemJBWWYrTXlvaXRSQVY2VmhMcGlzU0xyNmdM?= =?utf-8?B?TEN2WDVTdkdrR1R1SlR2YkdZV2hOTlVWWDM4aFFEbDMyK0NrcENKcXU1MGlX?= =?utf-8?B?cWVGdFk3Zldic1d5N2xtV0YyWlZSTFJ3akxqdTYzTmlrNHJIcGU2MlZaakp1?= =?utf-8?B?OUpHWTBNOXRZbnVzTUdRVlhiT09yd3Uzb05ENVk3a3JTa3k2enpmd1Q3ek5k?= =?utf-8?B?SmtjcWoxT3JUOWRwVkpOakVCc1NZL3h1eElqWmQwazNTZWVmWU8rMTFZWmFE?= =?utf-8?B?MXl6VFRkNjZxaFNJOUtmQ083L0RzVEFZSkdsWGxoQmtWVHVKR1A2a1VKN1N4?= =?utf-8?B?TW9hamIvNVNDQmlJWU1XR2pEM3ZXVS9CbGk4eGt6bHFTNlI4NVExWG1MSGg1?= =?utf-8?B?azFRaWtGNjVrYkVMRk9LYk0yWFpST3J5ZVh1UFZWeGl5UVNlUWlJeFFHTjBl?= =?utf-8?B?VUY0TUVzSXpEaG9SeVBnc29pZ2M5UzJOdWVOQWZGS0hIbmY3VDR6ZllLdmtG?= =?utf-8?B?RzlIeFRsL1YwMHJKQjVUbkFXUU1GT0hieVNrcTVScFNoTzZLNjVaVDZ6ZGdL?= =?utf-8?B?MHhQcUZIUGtVZVdXaHZvM05XbE1IemwvREE5T1NwNDU2WE5EQ09jVkRWekVT?= =?utf-8?B?dDFYbXVSWjdsdEM1MEo5Ylc2QndCaTh0S0EwcmFzSDdrSUw1THJ6aThyOW1n?= =?utf-8?B?ODExVVR2cDhCTnRaaEJ5a0tYR282MzdmZlhYVHZnd3FWMjgvY1cwWVVreVBm?= =?utf-8?B?elVVS3Y0Nkg2aGtaaGZUS3Q5ZjlKZHZsT0RUNEQzRDhTUml4cnBHdTh2YUhE?= =?utf-8?B?QmMrZ1lYNTc5QTJKZUVYVmtUSjI5YXhFNlJDazQ1UmE2MEFkbXVwdWpqYXNz?= =?utf-8?B?MmlhQ05DRlJ4dHhpOThSQVI4S0k1b0FXTnZFVENuZUtNK3B3RjVNUVE3OWRR?= =?utf-8?B?SS81Yy9HSk9OZjJrLzFWL3V4ckRXSnZ5UUlBSUFoZW9WMWhQVnh5RGozaGFp?= =?utf-8?B?aGUrM1FoU0J0c3RFcTBidkRQVEFsbWRBVm03SjRldmQzOG5JejZHcVA3ajdQ?= =?utf-8?B?TGtsZWJBTkFIRlJYVXFOYWlYQjF5WEhJMnQzRkJaY3lEMzVsbEJWRlRBR2Zi?= =?utf-8?B?VHJxRXdtTWFpeER5OFR3d1l5N29lV1huaEY3ajFDS0k0aEFSbnU2eFZHcHBP?= =?utf-8?B?OWp2VVZWSXUyT0V4d2Jabk9JQ0kwc0ZJRXhuM1BNRE9tKzFKL0FqK01uWGJO?= =?utf-8?B?bjNZSnQ2MkVUbklKQ2huT1NHaml4eUh3Qk5NcnlrNzhPK1ArR2FnSXdZb3Ex?= =?utf-8?B?WjZTM3BqSDhKbkhCUk9XdUZReFBPZ0RwNUFVUkVyMXZhQm0rTGRFeER2bUcx?= =?utf-8?B?ZjN6N1FWZkY0eCtMbTF6Zi9sU01Jc1B4SDZnYnlFcUx5WjdjZE92cmNzMXQ5?= =?utf-8?B?S3RBbkQvSUJzZEE5Y2J1YzQxOFR4Q0lxTlBzT0trV1lsSmhVTlEyOU5CaStx?= =?utf-8?B?QUtDOWNJRGtHQkV6WVI3Vk1hVlBKbGd1Y3lFOWhZYlhXR0FSNDROUGZ0SGhF?= =?utf-8?Q?s1KlK91+ZCEUl/gE=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5277a83e-b075-4822-4fe7-08df284b935e X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:37.1715 (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: vxuf1CALWp17WRlbtm0bKsh9b2zLhRSyVvtwkUo6xCACseOrzH+rvZRfPIgVJydeYGonZsmEHHB5/398oV2NQg2+AU8EwOc7ruFkfpx7Rlc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c207::3; envelope-from=andrey.drobyshev@virtuozzo.com; helo=MRWPR03CU001.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, 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: 1791801073098158500 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 Reviewed-by: Stefano Garzarella Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- hw/virtio/vhost-kernel.c | 6 ++++++ include/hw/virtio/vhost-backend.h | 2 ++ 2 files changed, 8 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 daa979a1aae..fb580aa417e 100644 --- a/include/hw/virtio/vhost-backend.h +++ b/include/hw/virtio/vhost-backend.h @@ -104,6 +104,7 @@ typedef int (*vhost_get_features_op)(struct vhost_dev *= dev, uint64_t *features); typedef int (*vhost_set_backend_cap_op)(struct vhost_dev *dev); typedef int (*vhost_set_owner_op)(struct vhost_dev *dev); +typedef int (*vhost_reset_owner_op)(struct vhost_dev *dev); typedef int (*vhost_reset_device_op)(struct vhost_dev *dev); typedef int (*vhost_get_vq_index_op)(struct vhost_dev *dev, int idx); typedef int (*vhost_set_vring_enable_op)(struct vhost_dev *dev, @@ -205,6 +206,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_reset_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 Thu Oct 22 19:27:19 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=1791800990; cv=pass; d=zohomail.com; s=zohoarc; b=De9Sz62sVrlseWiwy9Hr4oUBNlbgiUULsi24SnUefyJ8iwbnPBgJAPdIx7BGqIiNbSmKjqoHjunID0LKrWF1/xhBkmGUUyOZaEpv7bGT4GFJTSYzSzbOlNYudg/g+k5aGEEP92CCx/VJ9JHh74eGOo1vQX0AN3i2qsSxQLVu/Wo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791800990; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=I5ksPgqxpkvwMZR46juSzPb3Jx553hY74OuSgtWMf94=; b=UWUbRPwq2bWRawZH8xOcjDDEpCYDCv+M9C7uxDPj4NduEUBcrYkD0N3fB4/rLMqFs0B+KBrJIWQaX+nPtjf/LxJzT9L+0n5kkoWqpHqjKkVACvnqQo1N6Zn2EG0ZK39qO4NCNr0vO+Uy2ncP4y8fyzLwLWP4AlV2LYYExFEp25U= 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 179180099078727.34446530821367; Mon, 12 Oct 2026 03:29:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHS-0007lt-EQ; Mon, 12 Oct 2026 06:29:19 -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 1xGDH4-0007dJ-KJ for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:00 -0400 Received: from mail-swedencentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c202::7] helo=GVXPR05CU001.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 1xGDH2-0005Eh-Ru for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:54 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:38 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aZmNSwSkasCn6t0LqsDBLwkjHo+KtIRvUtvQ7UCy7e4YLihD/VBp3dNk7PfSSw3q/w9IEGyvHr/c5wcyTUuvCgKzxCtRVNUL/rRg+RhtwbTEyUzpZOSngk99mhFJlq22IogiQa4ytq14DHpfPTnzzwAsdEJATcZcSgJhuAnaczU7fL9UkKssIgS5mazRVT/K7tW5R+P964HDTnnrGnw2TMUJH+BaxLY13wdIs8aMqqtFb2Pb3Qw2vQJMPwkg9R/5DbUrybLkFVBgxgd1J8RMppWz7456Al0cuXVHFipMydBmc3Zty7Pxb0/muIx+swrf5ndY/Zn25qMAWtn5u89ywA== 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=I5ksPgqxpkvwMZR46juSzPb3Jx553hY74OuSgtWMf94=; b=XVE6hzwMlVKDyvGBJe6NhVEKTBPTUY0xui5tDQHEvZiMctL7tAy7Cy1Y0ifPMFlq7VRncfmhxtg5Awj5J+7lWfrKkjr7aBq/fqu2fqMdhJadZwujizUrN1433hv0Ry6v405aI+SaXZK1y2O2FZqwh41BE8MRpjkGRsE5mwg4OfzsQmVr4aHjji36WZgJ8/lVWevCk7bAhLlsc5WsNAD5ZRkIFaoDNZ0JfsP9nWwQOiN14eHPK14GCBYHEyo6WxSkZ7ihS582UwXIIuHzIjPBxU+WxnwMT7sUmtqpc/owKNJFpQKQcL1fEtKh2dGbnqwlb/mFXDV34dUQGJ/voDosRA== 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=I5ksPgqxpkvwMZR46juSzPb3Jx553hY74OuSgtWMf94=; b=IIx/o6K0t3tP8ub1Z242WGsOCbj7Vy5/6qAulSu4GpmUer2dgnpJ8FYXJcseIYvM/PcOaqH7ev0E63K46FOtJ1r2ydwkQVKhi6gdBKWBTbcPTgv4dvujPlSdIsr9gWbxeHSq1lOI8qfSohyAPkWhxRVNkdJmqc3xx08lF9D/u9ddvn4BWV04FEQ28SeXWiJr10OOc1j+AwI+9VMMzHMKzdjVLfBJBAVGUcJqtLdACTV9B3ZsrBfZa51eizYqG/u2yNb8ft6lnzSZmNHM+Wwj7kqEbFo9+WTd3KnyyviDFhVSit/g+lIi0zcK6knK1xy/leEhe+bTfzpGyDzQ++RMUA== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:16 +0300 Subject: [PATCH v16 08/22] vhost-vsock: don't reset connections during CPR Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-8-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 650e7f90-6970-4bbc-6d42-08df284b93d4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: 0Hub7sHc8QkmjWJHzJlYe2MHrwYs/N/dm7mZnzfaaiSDkgGFMi7LO8aZxBwUajnFbbO8ZQGk7EaFxIgCm6jwMJFVQ/jXJpQffZIfRuzSMjTcfMlbJc4Nt5IO3dZi727wvT+wz5/q4qF6gzKEuViMUulebmmVGdMErnum8dBXEcSfkZZeeQbA6KdgkigwS+JmMFiihMRIOUiwyAdOAdqzdLJvRRa/AxZTsrw2eQQ8WwkYXf7TSUGkRWi3ialnJi0GU7+XW45DGcS1ofCI+zS1sSM/ahp8kHmrjDCNxTDCwKZB4+WA7eUSUIEhv6bgtQQM8KSi8ntWcE7gmGIQt8/nxnWFsXc+ucMMmXtvLIvrRfr6XS9idgOhctUcZp5VuChsi8xVY3aSDvOF3+qen7nakBsYZSTKjaz22ObiwFx5zcPc0Mv3HpMJjkaHwGDqKzKPRuSjHqySQ9wRn0B9Bz86UumkMh0BIgb9U4c/yyW/vfreCkoWIPVmtE1ozxbfmcnOtIrlsb+Aq6E5ElR/XXK1OIQYxIGqtOBjCTHVi4YYi7+60oEBAGQjFXFrc6ywwoUrcYpNZ9e7UGoG/qdeU5u+Z7/D/p+BN2AVBeVTruEljcgzuoZP3t9y8RMi+3hrzhRlo4JyNtduqErAaV53+5uEeKxRb+WBCWkFF51/6g5lKyKUfexS7PUngyKl4R/CMiozoYQR4MqTrGzrmxhn3/JQj48LeDIkK5HyV5nQnJNaWzE= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?V2Nwbk8wZXFDRXBaSjUreWpwajVMbDZyZVUvaTd4SHdHVWIwNldvQTBidmtJ?= =?utf-8?B?SWg1OEpweS9VblZYTE83OGtERlpqN1c2ZldBR2wwVUJrVFJuakJTelFTRWJF?= =?utf-8?B?SktmOGh4ZmlaQlc3KzRGZUlxNjY4OXNTWm5hSFVyejJVNVE4VVV4em1qN0l5?= =?utf-8?B?cXlqVnoxWWV6bXJVV2E0cENhNDdXTTJaRlEzV2d2QjI1TkpvUThYTk0wM0Fv?= =?utf-8?B?Y2NzVFgyN3AxbEZyYkdOcVBPcDBrdmxMVC9MVWpuZXV1K3VlM0hCaGM3RE1r?= =?utf-8?B?MmhNdC9QWE5yT3I1WVd1WWhxOUtlSEs2YmJJRkJVcFFtUmwxdVNtMHc0VzdL?= =?utf-8?B?YUNxcGozenJ0bzdyTXRST2Zac0ZJV01palRnY2czUjJCdG03TW5NVWpZQUNX?= =?utf-8?B?cUlmZ25JT3dQajF4WUZ2b3VVeUh1dUQxWHRRTjBLTTBzMzRWcVNrMnljQk5z?= =?utf-8?B?b3NUQ080NTlvTVpSa0w1Sm9sUGoyNVAxRTRkTVRGbWUvZ0tWK1hFUGRBNFlr?= =?utf-8?B?MklwMTFsa1duUEZDckRwaEM0ZWxkZ0pGdGdGV2FsdHY5RTFyWnFHMkpZajUw?= =?utf-8?B?ZmE3NEMrOE5SNC9rREN3R1l1VXRCdEVTM0g5YmYrSmxXNjNFZWt4bDgydGR0?= =?utf-8?B?ZGQ4V2NLQWZWaThMZGUrV1BraWFvdG00Z283U2lGdHUxc2Q2THZDRVpRU3pl?= =?utf-8?B?WjV2MFczaHpFS09obkhKL2ZYaklKZ0pUcVpSTTlRSzNuVSsvS2Izb3owdnBu?= =?utf-8?B?QnF4VVRud3k5RXBvUVhVOGVoMnpLSEEyUjNDVVdRbDdIc3lyTXJIQ05UVWpM?= =?utf-8?B?UnkxcVJiZGxDVUMvSW9uYVNBSDRlR2F0eFJUUlRndFRxbGVMUXZrVDU1ZUt2?= =?utf-8?B?dHNuYnZyNW4vakZXWkh5Z2MvME5XV1RsNi9DMXQycmVvZ3JwYjZTSVcwSFk2?= =?utf-8?B?aUMrQ1NNdEtiV1lNaUVBNGdsWGxtWlpyb1V5V1FWNHRMaDgzOXYzR1JqVHU3?= =?utf-8?B?UHNmcUw4bml0dm05cnEzQVlrMzRwekt2eFZXTnJUR3RIOGpNUGk1WU5ldnlm?= =?utf-8?B?WVFOQkVzNWc5M3NNcXVCak16UEs2UkppLzlPbVN1TXJ4dmVTR242R2FqNWdt?= =?utf-8?B?RUs4dmZSYmNJOU95cStMcVpqc0s5WDNORFVmVk9jRTB3eS9LRHpJVUJXbzA2?= =?utf-8?B?RHgyUEErdkp3am1CWFFvZ2tzMksvelpVRHhHOWlzMm1nMllMQUlPL0VIeUhP?= =?utf-8?B?YmVMNk54LythWEVlclg2djk2Z0EzdU1jR0JKbVk0VHd3Q2NkZm5LTVduOGp2?= =?utf-8?B?RGVBZ21XQlVSZytueHV0U3V0aVh1NkFkaStHOGNFZUkxaVdlTkRPcTdkMWVL?= =?utf-8?B?aHBUbE5HQ1NtR0lUZ0I5NXRJekhaUUNHVXpleHZxMnhpNmkrWmoyTjloL0d2?= =?utf-8?B?TDNYWFRFRFNPdFBWVUtvWHZOTTVkdDBBbW9IYVc4NjFxb3VTS3RUaFNVZmV3?= =?utf-8?B?alUwd0lZbVB4MW4zem01ZkVlQi8vUVRxdXlxY2NCVFp0MlEzQXFmaDVYTzBk?= =?utf-8?B?UU1nWVdiT0dmK1UrbmxkNDlmcTRKQzJNUk5WUWRmOS83ZmU0aC9OZVhFd0xi?= =?utf-8?B?QWlGUzJGSm5XWnlCNnVMOFhLOUwwVFN5Z0Ntc3M4SUtKRmJlLy9rSTAwOUtO?= =?utf-8?B?dEZXblJncGhlamhjSURFSVVIUE1kOXhKVnVYYlV3UTlYWXBzUGRzN2hDYWR6?= =?utf-8?B?T09RTDU1MkxVclVPVVlXTkZnLytuWEhXd05BTTMzWk8rVmtCSlk5Z3FkeGJL?= =?utf-8?B?NEdVT1NJR2F0eGQvUklFTzAyNHR3Vi9ZeWgydEhWMktGdG1mNG1TQXZQT0tO?= =?utf-8?B?OFZueWtSb0FBaGhPM1grcDkrRVQrVkxYVm8wRStsQ1lJRllVNXdyMFc5aUds?= =?utf-8?B?ZVpQck81Q0l1U3YyOEpUZzBVdi85V0wxQ2tXb0tYa3VqK2UyUnF0OTRITkNV?= =?utf-8?B?RzJEdDlwWkxNME96TThvL0ZCUGd1OStSZDVuSVVxMnpyUGRYNlJHRXNyTVdv?= =?utf-8?B?dFZ3UVFsclRnbDg2bVMvZ0NORzNBMVVwWDRhd2VUZk56RzlQZEEwMDZaRnMx?= =?utf-8?B?NU5NZFN5YlhJdm9WNzhJNXF4cUNKV0RpR094WjAvdzZ0Ym8xZVU4VklOQU1K?= =?utf-8?B?WDBjcXFMYmhtSEcyS2tvSW1lbHZ0V0Z0ZWhWR2V1OUJHR2VaQUd6SXZJK1hD?= =?utf-8?B?azM4TEQwLzVUMWNwMnBVY2pJbUQ2K3k4UnBKRHBMM1k3cXlUcVFYZVlBL1Bw?= =?utf-8?B?azBtV3k3aStuenc5RC9idEEyL3JiS1M0Mk1Na2s3c3hOejU5dUlYd2JYSHhl?= =?utf-8?Q?qE0kWYbKLHQEr/h8=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 650e7f90-6970-4bbc-6d42-08df284b93d4 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:37.9518 (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: 7JIbOJ7v/QmHB0OrBp1CBBgLGP9i/vz17xccBP9HMRTq1sV5scr8bZkQFKE7Ey8q4pyc0utMQWuf7+aCzaXELIJ2YmO6J92oWjKOs9hJi5U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c202::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=GVXPR05CU001.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_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1791800991491158500 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. Acked-by: Stefano Garzarella Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- 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 503d248a617..c582ac9fcc8 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" #include "migration/blocker.h" #include "migration/misc.h" =20 @@ -110,6 +111,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 vhost_vsock_common_post_load(opaque, version_id); + } + + return 0; +} + static const VMStateDescription vmstate_virtio_vhost_vsock =3D { .name =3D "virtio-vhost_vsock", .minimum_version_id =3D VHOST_VSOCK_SAVEVM_VERSION, @@ -119,7 +134,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 Thu Oct 22 19:27:19 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=1791801024; cv=pass; d=zohomail.com; s=zohoarc; b=JjUOTrtLKtbbWsIkbbUeadptqfmaAAmbPCa7OoGSu/1t3SZM8c4SRo2W8GQJ4IorGe3AjOWQAuWNxanvYhYO1Cb/gmxckzjuU1Svh3ga2w+0eW3hSLAsTG9utHWJ0KTQtR9gz7Uu8ThE2R6vbnQ3FpIV/tVLt1Bku1VPwlkwR7Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801024; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zFLHrTXYn30DKBGfZX9XawwQGNuxnOEL0tX4YglZD1Y=; b=FB12otkqN4DRazHabZhEP0K00Kxgr7WxlwXbxxN36w4ATvZv+jkKXAkcF6rtMBh9ymmIfQ9ISDJDQk7SV5wm4bI9azICVzPzvzPMO6VvSH5BQx24riw3cwLQXpQquFeO0hLfD2QF4AZMs8+BaNsxCPQGw/wvUNZ2L5IvvtMWzGM= 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 1791801024476502.92836624075926; Mon, 12 Oct 2026 03:30:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHf-0007tL-Kb; Mon, 12 Oct 2026 06:29: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 1xGDH6-0007dO-HY for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:01 -0400 Received: from mail-francesouthazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c207::3] helo=MRWPR03CU001.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 1xGDH3-0005FA-Tn for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:55 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:38 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qNgIN10OPzQ9pFCWB0fvDSccFz1ovoCRvNenJVvG1A/Q8unku/Bkaqljh4Tx2wMjEJel4kc2/HVwDEgybt3syyUJchWd2m85sC2tJwblzVEclrBHUgpibgdEkdvE7/QXcwISBXc3Ov8gg0MijOhcswpAyk8Uj1sfF+PfpJyHPmRECao2OOmC1DdWF08L3KPrNrbjtmAuQURHUDVmwmNyUuosKoO86RiC4HNCAIXZfMNY1Ts/qIzHU6l6Qrur8F8QSzQdXEhsUMmZvH21uLN/GUPIcSSZxAfJvUAIyUdrmRP72r+dcgq+GlLnSMFxX35QSZeZpkqcULvp0xK1c1pbmg== 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=zFLHrTXYn30DKBGfZX9XawwQGNuxnOEL0tX4YglZD1Y=; b=dO1RpOi1CkC6bKuTTK+s1TtW1tHlKtB2QkiEVh1MLBOZpelNoQIV2TbgaptFUueQWDqCuWXuwU80iphywlZqFLHG8gPE1ZchuyVcbnpKlyO1H3YRYoDC9weYeN+0+vQHagn60oCMw+3Xna4bRp8Va7myEnTmdhWq2/7lSiUgTojXOPtGsws837uJWS2xwj7UNaafF30Dvp+4sSq7oFMx/s7FA47/e1VyqxUDkT2mwpXWKEPcSqShyOjDQZ60xIjvNKHmGdPNpCZfmU7RVccjxCgfkfysj1G/Cgkgp+FSgwE+ZVsaz/EKyE4c6NwqJO643aMYFKq2GuoOiNqmdiHxJA== 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=zFLHrTXYn30DKBGfZX9XawwQGNuxnOEL0tX4YglZD1Y=; b=cf7M1yB6lb3xIrCu61V0MqX8dI9ip8GrPp2bdo8MMqWwjEEphEhZE17oxlnTCnBHUOdbZuJiPUi8pva8Y8omSczVDO3h9l64538cKQ97CE7LyIIDibpxdLOUWhgzk/0IHCENxfSwIxtU+ES71ut4D1BdWYdacUdw0ZodUXdf1ZpEnwrupnnxJe7m3ma4fbyq51dMy+zyBZxm16R545UBsOJscF24hu68mljUNS9tygZAQZn3cH2sCLpxnLMFfZYoVNFfjnSFF71HVwfE5nrEUgqcsaGSPDrZPuJyRNoNTRHx+l55K0OhYBshYI2iYZmshpkwg5kF2Wq6SHZv08UP/Q== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:17 +0300 Subject: [PATCH v16 09/22] vhost-vsock: fix FD leak in realize() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-9-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 583a7330-a943-491a-656d-08df284b9447 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: RRmWLK7IkZxzlI+cgHjOBl5NwLo+zNCIPifvAuXNbhUDB37RBHaEBnZhyxwxu9tOboih5GVWj4yOr/Y4V5y0mztjnCkNWI+v3LUIz+DYIJZItSHFs95g66GCFBuMWqUBYpLVcmTOrdQDQ3cDqbQFOP+NOo3L89CfsHVdNKrfsMjR7qrxH4F75TJ9cMl8MVBEwGYIgZkpAMqXoN4uY588R7FoBFtbTxXaFNu4PYtcJQu+Ys2fDmhPBiBpJDktjL2ZDKyHa9kiKIK4ZqRb+MXmxbaYEWVMky/K0Am1lQpFcsrrzfGSkbzIGnWuebINZbRBm6gWBksRZ7jeqZD3ufnQeAy22pIo1KgHah6VQNrU6emsuRdoq1ikUHXe63iZbOFUS4ARJWWKaa2QHZCqNbnK0Hj7pSzW3EqM6G5dItBpLITE8fnt/lpZ42jJR3zlvTXglaIR9l0Q5LcPP28zkAwQvZ/esrqWwhfs5QtHVQyhVUpHrBWZBcdOs9M7LBHbjv9cHBjOsRvRAhbwkoerKlGoqZ7Cse/bkMu9M7ZYWhoyUNFNw1tGlf+9dS6rq5Gd3myEo91s3Lv33M/LV0mccR5c3zfd3Re2hAZQRpCjd15TPb3kRDMO6powE/jLsqzaxe3WRIWkOsS5OTAIKXKCtIsusKHdCXpUMAZ+k8MuW/c2E4SLkty4n5BO6/JqFNbIUfi6JoTqC+D6EAYZvYh34kprLs0Yt/rhQJxlGQDNeDLktLc= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Nnh4emNFOXJXUkhCdVJnSzd2NWcyNlJ0MzdqQllROWY1Y283Ny9ueDBEZFlJ?= =?utf-8?B?VG85WkI0b1RkcG5GSVM3bmdieUkzNHpiQUR0R1NleHppOGh4Uk4vMkMrOUtD?= =?utf-8?B?cGJXTHN1RS9DYkNxbkxsRno5Z0xHVkZ0SmZURnV5cEhORm5iSm10QXZJd1VZ?= =?utf-8?B?KzBPdXNRZTd1T0NhMmpRTWpDeHovYmw0Z2hydmw2dXFSbW9GU0xYVjc4citQ?= =?utf-8?B?cmJNeGJnZG5jRUVpT3h2QzUzVHJySDdzUkdEY0JiVkZWS29SSEtUYytOMkln?= =?utf-8?B?MVEzUGFqYjRHTzBHdENZbEloTE1QZElidjFTWmpVVCt1bWpnK0NHWVVZcCtr?= =?utf-8?B?VmhSa1JHNDBpQTVqQjNKUDc5UmplaHdRUFF1UkJKWDJKYzc0dTFtRTVqdDVK?= =?utf-8?B?NVhRdU1taGR4bDlweEZ2blZMR2YxRWUvSjQ3dUhxSVZrdy9NSU5ST0FybWxJ?= =?utf-8?B?NWVoblorWmtkVzRyRDlxU0tkUzFGTTlFQXgzczFNQ0RHZncyWVdYVEZIbDk2?= =?utf-8?B?VlQ1Mlh5KzFuSXRyTW5PbFV0V0NDNVN1K0x4TjFOMHJpVWtqci81NGRaSUdr?= =?utf-8?B?QXd4UUNFOHlyZm1HcDRCUmVhQzF3eXdsclZLeC8yWnJDeHl6bWRKem53Mjd4?= =?utf-8?B?Yk10eXRIdElNem5qbERVaHN1Rzhjbnh1aGNlTnluR2VLZGV2WEU1aHNIOFRY?= =?utf-8?B?bGRJRWt0M2EvT0RpeVZTdUJKYnBDSEZNT2tIK2VhZ3dPR1Q0YjZJelcwUGd3?= =?utf-8?B?OC83Y2l1MmR3dXR1VEEvaUJBOWFaVnFwYk4zL0VkN0pRMTlvYlBwNW41cTZ3?= =?utf-8?B?RDVFa2hEZGxrcG1jZ3VZbkZDTDZXemkzYmhjQklhR1FkTjBhUmhHbjhzbWdw?= =?utf-8?B?THU5MjhkMGNIMGdPaUVYeEJUSVlNTTl1cmVFNUlYbDJBeXRuMncxbkcrYnNL?= =?utf-8?B?ZDEydC9wOStTbVc0QU9XL2Vya2ZSRDkzWFZQWmpMeEdJYUJjY2t0UXBUZXRS?= =?utf-8?B?TkxGaW9xRHBYVW9Fb0hzMGN4Qm9sR3NHeHdrNFBhTzFnVXllWXRRMVZ3c21I?= =?utf-8?B?Sm1oUzdhNmhXK3h3RUZDV2ViMk1teitOaDRCeDBFKzNkQjREUnYwQzlpdGFt?= =?utf-8?B?VW5yK04zNlFDaHArTUVYNWZnZWpoSUhaMlJFK2NKbnlSSkNsbnp4WjB2TXRH?= =?utf-8?B?anJkY2swSERWL0hUZjc3bkNTNThoMkZIa1puVFhwYmt0a0lUMEZPVjk2Um5k?= =?utf-8?B?REVDendQMURPUGMvdnA0WHY0TG0zQWgyMXltb1JCbEk1RnBQSHQvSGg0ak1H?= =?utf-8?B?THA2ZUlnRnhYMnZIVi9nR050T1BQM1FlQXo3WnNxeFE5YXlhVG91V2R4Yldn?= =?utf-8?B?SkhNcExVRTBFTzEvZGxRMUFHUWJHL0s2QVdKTk1ZcndMSHZOejZJSjJIcGh5?= =?utf-8?B?QWcvTlUyYTByN0Y4dm5rdm5wYkREK1MwbUlKck92bjZCdWZjVHJYVlEyZVcz?= =?utf-8?B?SmhmYU5tKzRHT2Vic2dITzR2dWxtMUgvaWhDUnlrWlBQSnJHc1FydVliLzZU?= =?utf-8?B?QnhrU2RNYWRmUGgvK3FBbzgvQ2VsWW1mY3c1M2Yzbi95dVF2TGdBMXNiUXdl?= =?utf-8?B?WDNiMFJ1R2FXWWtiVjVxYW5KWmpGRVBhc1oxNjdLWnNDWmxoN3V6disxaTVs?= =?utf-8?B?b0l1VzJ4a3FEM21lT0VKNnBId3JGa0dhdkFQV0lJOHhpZFpjNVd5VFhkRlFm?= =?utf-8?B?NEJ6eU94eFQ0WkdxZzE4OGRSN05hQk5OSDJ6NEo4VmFUMmhkOXowSi9kbGg5?= =?utf-8?B?TTFPQUt5cXl5VHdHdkRVRENzS0F3dGtSb0ttUnF1cVRQT3NQUkd6M0lhbVRx?= =?utf-8?B?cFJJUmFoSDh0STJ4NWNqcUhMSnRuMlFqaEx6ZUk3RmJ1aU9neEZzZlh0aUJn?= =?utf-8?B?dHlFazhxeUxIS211QllQRVZEK3VoaGNVZXBFSXp3OHhyS25BSEhaU1hyVjhM?= =?utf-8?B?ZVcxLzUwdldvcjFBV285M0p1djl2bVdDOUR1SWIyZ0dzN1dzMkduZTI3SW1D?= =?utf-8?B?Mjlrcnl2TUgrc0RMYjVWQnRpd3ZOM1k0VlhLdTBlZFQyY0xkaUdXZlJCanpo?= =?utf-8?B?UDdwM3AvMmdOc1ZQS2VVSWRZckcrdE9UUC9CaCtnSDkvQVJUWFlhcFVkMzNv?= =?utf-8?B?Q3E4TGFsaU56bGZUYnFjYzNJdUJFWm44U2RCODk5RHNSdGo2eDIxTEFTNk1S?= =?utf-8?B?TzU5RFkxWDQ1cVVPSjNjaVJ6VGx6OTB4T2JDSlo3cTU4L0g3N0N4RVQzT2dU?= =?utf-8?B?dEZmNm5YRk5GT2VuZ1hidlpTN1NWUHpxektLRVplTE5RdFc3aC9BZGJXUVJi?= =?utf-8?Q?WrJjsl90wQ0ReAyI=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 583a7330-a943-491a-656d-08df284b9447 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:38.6710 (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: 4/L2ohD7rC8Est6XIHFLP5q9EZz+Z0az2q+UnUczulMBuuGp2R3HJfJcabl7xt/xD5XHKbrrRtsrc03JYdVbPmi5h2iLXFdl0NJ/ti7T67c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c207::3; envelope-from=andrey.drobyshev@virtuozzo.com; helo=MRWPR03CU001.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, 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: 1791801026309158500 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). Fixes: 384c2561bddf ("vhost-vsock: set vhostfd to non-blocking mode") Fixes: 701544cfaf46 ("hw: replace qemu_set_nonblock()") Reviewed-by: Stefano Garzarella Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- 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 c582ac9fcc8..3ec20d87606 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -176,20 +176,17 @@ static void vhost_vsock_device_realize(DeviceState *d= ev, Error **errp) error_prepend(errp, "vhost-vsock: unable to parse vhostfd: "); goto err_blocker; } - - if (!qemu_set_blocking(vhostfd, false, errp)) { - goto err_blocker; - } } else { vhostfd =3D open("/dev/vhost-vsock", O_RDWR); if (vhostfd < 0) { error_setg_file_open(errp, errno, "/dev/vhost-vsock"); goto err_blocker; } + } =20 - if (!qemu_set_blocking(vhostfd, false, errp)) { - goto err_blocker; - } + if (!qemu_set_blocking(vhostfd, false, errp)) { + close(vhostfd); + goto err_blocker; } =20 vhost_vsock_common_realize(vdev); --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801035; cv=pass; d=zohomail.com; s=zohoarc; b=H36p9JVsRtPmFOT6+mSfDiONZU4hwbYA0arkBavUtRatpdUt3KnxSM1H6ZCZCVCq7iqW++JNw8WyKi2fn2ijI0wzU4JEVRWtdH9ioxnqzMYhWqhrlLjQgJP6eCad+Mwb81MzBINHPqUBAAAI/z3BWJgrVxvXbr5+JK0gNRqz3VM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801035; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ExIQu0ecC+MilHqTTHG4T+cwdoW/u9j+e/13UOC8evk=; b=a0Z66zGy4JA/0WWgS/yVXubEGyTerpECStn0PvezB/37MJYdRyN6dl0B6LBnVxiI8cCKKW1YUph2cKh/DLvOpr/7cjUg5CluesBjdmzmHVk7oCiYHwnQmiDsRr6YmZ9jkXuFuU5KKZZ4akuuKcUZjAQUZiunrJVu7Iqg60V66Iw= 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 1791801035348273.0243460953528; Mon, 12 Oct 2026 03:30:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHt-0008OW-PU; Mon, 12 Oct 2026 06:29:45 -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 1xGDH8-0007dV-9d for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:02 -0400 Received: from mail-swedencentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c202::7] helo=GVXPR05CU001.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 1xGDH6-0005Eh-FX for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:57 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:39 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:39 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BSStoIUXi0WNX11M9ipgQQvfnZCJq5BDzIWi1UW6+mqmzCUbGmObvLpK5Cz45ZlLY9g5o9OGFHjQrb9pGU+zPEP4YDRodwmybNBi6ULBZSfpGN1EZnYWatfeO8O285O1AIOAFltDtcU1KrqnzY9iF9knREz56twiKdC80d1C51A2O4BxaB6pl7uvPNzo8lrhtseqU/+vokBH59vzDf+aZJiMhASjz9Y6/Fnk44m5P7BveuabHPHAYQuFXnXUujGsi4uf+s2x1JOKjB9n3ZkYivvTupdck3lgPkcmPys0Zd1tB0Q6nuNeoAZ7Dcy2mMHjXEbsElmDNTFeQrissdPReA== 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=ExIQu0ecC+MilHqTTHG4T+cwdoW/u9j+e/13UOC8evk=; b=lpYzXKwewcADNPttl8YwdkeTU1iWj2jNlF7sdFz+KPITJ0sm7l4xHxZznpNRDc7+X5DruBuyiGfyhcbms3V0w7yOVMnfioSKn/9y9260/H+k856A8LxaF5mDaHmdIcq4Un9qxXMjNo4cfwuEdw9ptDVviJ8cnXDTe78kNfF83MsUeTcAVcS6fq+hB7Bm04JoCZKI0uqwxmNAqsL8EDrBt4itiFPmfsZSkX9ApxGqQzPq5hLmIoRYI+sOhZW5g92hMt6+M+GqRul7RRMdglQ74PJdvzK2Y9UxEzjLgP9azARjvYb7UQzucIdVy5JlaPsD8cYeX6lRBbFjYyRcJcDvew== 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=ExIQu0ecC+MilHqTTHG4T+cwdoW/u9j+e/13UOC8evk=; b=Gms9gvEBNYPXaMfpjnO1xTFQpCZEESHEJucYk/jklLuMnPBge3upzOG2wdYV5tUaMjpJBCdtfAS1a6d5/zj6K6HxOdKxtXw5+H0xeHcAFcoB+Bo/vRvZw/U44QmZZZOrpS0zCsDaWc9vuV4HLGLq7rY/Cbb7Jplz/ihALeOWGrjL1eu6wsTcMrVeyvm4snH/wSUoOkLrT/zKkYikfoRQGt7B8OY6pnODD3sP1cdIGwcCqcyXqaHK2z0onl30bXiOboI8EXUmQgzpN4SPU50YTS5vikod4b6VEmyC8fcEGuJZ5UUirLBChyIG28cSvrPlj99jgtk3Pc0nicKf6TQzcQ== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:18 +0300 Subject: [PATCH v16 10/22] vhost-vsock: preserve vhost FD during CPR Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-10-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: f1e66e11-b491-4c8a-34eb-08df284b94b9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: ogFgRIRIaVSZictNS+IgfJfxfNWLZ9Rd4liwI5kQrbeGZzIkMjf99wIXSu3ZE8XGkwAAhx1Cuo86t4t/aifsgFXo45kzssYpMzfgn9k/HC1Rdxv0MOUt9VmB4J3QzJMO3s7UJyZwYbh4vZsIWg7EirxYDuwajJzzPnWRt8q9d2XrrU4h7ydHTFwgDzYzZZAQqD5OaSodz2fXsvqqnZJrMFFlRIYD39wmyhZqc+jsjjaBYP5ntn+1meT8gi+X8HjmzytGQBCxXVk3DRRsrwLVzp7sulhKzu1UoIhiyNElk+XpqCEWtNuqrD2+ewJRRmtEMezE44PXeOsbpWhBPYb51ylQjsQ2pLFo7GVupP4tZcPPFiJr6u5KgIqQYZcftKXj2UFtbnTkdRoBsHSE0GhQ4a2wJMcICS3k3sLr1VpvB2tLK+7P12kRCLJg4NpYq2E0IK/bebVCBzNQ6UfBGjlWDY+aOLjmF2ZpYSq/ioHKzdkBfNHuSLUE9c0pDsw6IYkHClKlCP7wJXYvyMtZ+I2MkbWX48GtuTfngM5LJDJlZgoOYpnlXBAJQEu2526FUa7SZbJLZEtv2Y3V+9uSSmKOuO1+arhygFK2hFULbTKfpp/wEFgcS1FQ5aCJfHgi0FAlHT604ZU6lO9VhTZu/zrwYs7ZHsgR48auNYcYM/HFFKo7UQ+/YPTJtFtntoO6hCNAHabfILX2+kh3aHLdAE3GFfvGB/C/yuVAfXyAAco+nF8= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VFJwWEJMQTdLdU5Pc1FLeHhOMm55K2Q5cE9hZVNYUXhWVG9kQzZnTXRXVkgw?= =?utf-8?B?THRCd3B5dFEwbjU1S0U4WDNaUUVDbXJiTDdnOGJPZk9wbjBxejRpNzNkU3FS?= =?utf-8?B?K3NVQWFUK3owcTMyeEV5dm1hQmZ6aWpGS2ZCSTF4SEo2THdBaTQyMUxJZlJj?= =?utf-8?B?YmJYd2pNdEVrMDh1VENHN1ZXNEpiWUtRMytoV0dwVjE1djdxbEhoRHVHK2JF?= =?utf-8?B?Sk9UTmtOOEsyQUo3TWduNlUzVnlHbHBlZHBVdm00THVPMFBQK0J6MjhwVzNv?= =?utf-8?B?bTBHK0s4cTRpSFZmT3JUcmdpNERiT2IyRmtiNUMrQi9MQ2ZnVC9ZK0VyZ2du?= =?utf-8?B?WW9nZEwvRGUxWUlIZHVIUHdsYmRpSkxZQ05UWjZJRDBGc2JRTEdjTnUxNWtC?= =?utf-8?B?WDlGWWZZM2laRGZ0MEF3NG5CTzEwNk8vQlYxckJlN0YzRTdoS2RuYjd2anBl?= =?utf-8?B?Si9BMTF6VytwZTlPN29VcnRzRlh2dUdlcTRuQ1dvMjl3b1IwT1Z5NDY0N2h0?= =?utf-8?B?Yk9uS1lrMis4aDVkcGUxWm5oVk1FUGJaZERyWGdoMTNjelBlVGR3NXJzcFV1?= =?utf-8?B?TUpFME5pYzVackJwZXN5TFg3VzRRZCtqVWlNMlU5K29uVS8ycG00SjV1Q254?= =?utf-8?B?cFBYSE00R3psVzg3cWp4VGRKQ3JoclM2N2hsdkpQK0g5UnA3LzJoclU5dHFt?= =?utf-8?B?RDBLZkRXNjhoWEZkVWpOSTVtNWZjRWg4WGVkZkRTbHVPb1pORkgvZmo0M0pm?= =?utf-8?B?ZzB3T3QxVkducS9qY1RaV3g3bmpwL2hMU0Q1elJGTGpJdERYUktCME1rMXRi?= =?utf-8?B?Qi9pVkZSNTY2Y1NlTEtEVTRuQ2Nkek9RbWF4cDNOdmdHa2l6Sk9NSnZBWXF2?= =?utf-8?B?UXBnL1Zzd2Z6ZFBYWmVsV3Jjc2puQTVvOVlkdlliTldRK3lQL1cySVMreUFU?= =?utf-8?B?R1hyNmFrckppaHFqc1FUSjhuQU9lVFRkb2VUSjBmeE5JK1hMVldBN1lnMWEr?= =?utf-8?B?NU9rTjhlYkFLTk1QS3ZqN3VqdXJkVDFCQ2pjM09IL25US2lKMEQ4WGxIZHNY?= =?utf-8?B?Q25OV1BHZk0weHgyVTFFOG9lZm1qeDdRREp3MDEyTCtwNFFnUmdzeitRc1BH?= =?utf-8?B?bmZhWE9QVlh0ZjFUZ0oxa3hPOU1QaDdHWUo1NGt0MDRpaW9YZm00MXdRRmJB?= =?utf-8?B?Qzl0dzJiV2grbVlLeVNNS0lkNXBMbnZYMlAzRWM0MlgyZW5IWld0ZTZqRWtR?= =?utf-8?B?K3NyVkkzdmpVem1FeFVHVHpmZGhXV3ZpMytrZTVRbmQ4ZjNUS1g0RDAydWhU?= =?utf-8?B?alBWVktrVjg4SWgxNnBBeGlkcmxxcTdYc0N4a3RSS3k3NWxLcHFMUHBEVDNL?= =?utf-8?B?cTlSM1FENmtvSlQ3TEgrSDJ2WFJ6MThodW1KeDByYUx2V1dvellDN202dmZ6?= =?utf-8?B?RjcxVGY4Vm8ybmxIL0MwSmN1OW8wU1AvQ2ZIUHdxRWppVjNzQ0t2dzVaemZD?= =?utf-8?B?Z05rZEFxMkVnN3hMMTZFK3RyOG5EM285M01VVEZJTmgwOEZHUk1TdmZRaHZV?= =?utf-8?B?SEJOZHdSTEZLQlFqS0Vrcksxd2NGbllpSDIyOVhxMGo5UjQzYXVhYnBONGM2?= =?utf-8?B?ZmRNNjBVYmdMSjhzNEJ6L0hmSmtmbUs0dS9mNjFjdnhjci8vTXVTUjFMVHVk?= =?utf-8?B?TDVyUkNXeklKSVVmM3V0SjBHWm82RkJjc2xzRkJHY1pnZEFRZ1R3VEkweVV4?= =?utf-8?B?SUcrb3g2NXE0YVV5bGhYQktzSTUxUDIzSkpNdzlXNjdNaTJTN1h4VFFPa2Qv?= =?utf-8?B?QlEweGNDSTdYR0VvdXhVVTdxS2E4bXRoNi96MjlxTkpTRkxSUHNQMjIxeWQx?= =?utf-8?B?MDZOQVVTRDJWM2RmenQxMlpLK0FWUFFiTHpFanZJRSs5MkIvU3JVZXhUWGJa?= =?utf-8?B?bVdlRXJRaEY4Z0EwamJqQUpHbnpwNzVqNCtlTk54dk1aT1EwVGN1TDdwSTJV?= =?utf-8?B?M2FVbkZPQnBQdGVGR2NVZThVUGhFbmw3bzU1cWZvdWhPT0xzOHJuZDNDejZ0?= =?utf-8?B?dkdRV2VWYjVaWURocVNpUURFT3lld1RWOHE0SE1qV0ZtUm5TSkpLclQzNFBk?= =?utf-8?B?blhIK3c4UVRjZnp1ckFySWR4R3lGMnJDUEV3TE1XeGllV2lzbExQK1F5SlIw?= =?utf-8?B?M0lXeE44QkJIRXVId29rUk1WN0N4RHpFb0xMWmMwVmtoMHZsQXBwSlgvV3dH?= =?utf-8?B?clB4WmlHeUR1Mk9CUFNrdTVVRHF4eDU3cmNHTWRlNHZ2U0dFM2RYOEJUL3dB?= =?utf-8?B?QWZ4eHh4RXZFK1pnNnlyMkVSbnJEL1J6bStzSVNBQTNvOFNyM0dqTU5BVGdk?= =?utf-8?Q?Rm7Ukcz1tcGuzKvY=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f1e66e11-b491-4c8a-34eb-08df284b94b9 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:39.3850 (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: x18kGIiKg4ZhP1Ehbke3KB/5IilRZkPGS+W3kufSK1jLtrctwnZD5/95NLs2jtVM6hCufcimlwRyMwJMOMcJ4UonsfK0pjDyMp/B1VzHdMk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c202::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=GVXPR05CU001.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_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1791801036378158500 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(). Use the (suffixed) device path as the key in CPR hash table. Device path is obtained with qdev_get_dev_path() and is essentially the device's address on the underlying bus. As any vhost-vsock device is attached to a virtio bus, whose .get_dev_path() forwards to the proxy device, and every proxy bus (PCI, MMIO, CCW) implements it, we should always be getting a unique non-empty path with qdev_get_dev_path(). 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. Until then CPR remains blocked, so the restore path added here is not reachable yet. Reviewed-by: Stefano Garzarella Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- hw/virtio/vhost-vsock.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index 3ec20d87606..6e89007b2ce 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -69,6 +69,18 @@ static int vhost_vsock_set_running(VirtIODevice *vdev, i= nt start) return 0; } =20 +/* + * Any vhost-vsock device is attached to a virtio bus, whose .get_dev_path= () + * forwards to the proxy device, and every proxy bus (PCI, MMIO, CCW) + * implements it. Thus qdev_get_dev_path() always returns a non-empty str= ing, + * which guarantees us a unique CPR name. + */ +static char *vhost_vsock_cpr_name(DeviceState *dev) +{ + g_autofree char *path =3D qdev_get_dev_path(dev); + g_assert(path && path[0]); + return g_strdup_printf("%s/vhost-vsock", path); +} =20 static int vhost_vsock_set_status(VirtIODevice *vdev, uint8_t status) { @@ -143,6 +155,8 @@ 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); + g_autofree char *cpr_name =3D vhost_vsock_cpr_name(dev); + bool cpr_incoming =3D cpr_is_incoming(); int vhostfd; int ret; =20 @@ -170,7 +184,14 @@ static void vhost_vsock_device_realize(DeviceState *de= v, Error **errp) return; } =20 - if (vsock->conf.vhostfd) { + if (cpr_incoming) { + /* Reuse the fd handed over from the source QEMU */ + vhostfd =3D cpr_find_fd(cpr_name, 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: "); @@ -186,6 +207,9 @@ static void vhost_vsock_device_realize(DeviceState *dev= , Error **errp) =20 if (!qemu_set_blocking(vhostfd, false, errp)) { close(vhostfd); + if (cpr_incoming) { + cpr_delete_fd(cpr_name, 0); + } goto err_blocker; } =20 @@ -207,11 +231,20 @@ static void vhost_vsock_device_realize(DeviceState *d= ev, Error **errp) goto err_vhost_dev; } =20 + /* Register the fd for a future CPR after a fully successful realize */ + if (!cpr_incoming && !cpr_save_fd(cpr_name, 0, vhostfd, errp)) { + goto err_vhost_dev; + } + return; =20 err_vhost_dev: /* vhost_dev_cleanup() closes the vhostfd passed to vhost_dev_init() */ vhost_dev_cleanup(&vvc->vhost_dev); + if (cpr_incoming) { + /* The fd came from cpr_find_fd() and is closed now, drop the entr= y */ + cpr_delete_fd(cpr_name, 0); + } err_virtio: vhost_vsock_common_unrealize(vdev); err_blocker: @@ -223,10 +256,12 @@ 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); + g_autofree char *cpr_name =3D vhost_vsock_cpr_name(dev); =20 /* This will stop vhost backend if appropriate. */ vhost_vsock_set_status(vdev, 0); =20 + cpr_delete_fd(cpr_name, 0); migrate_del_blocker(&vsock->migration_blocker); vhost_dev_cleanup(&vvc->vhost_dev); vhost_vsock_common_unrealize(vdev); --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801060; cv=pass; d=zohomail.com; s=zohoarc; b=MpIJlA26sdkxwt4YI9TacLDIxEz5PcR8nMWEBgAeQqhGuPTX2d3jvKOiB0lge+wDZTWhZpVj/KlXxcq9Ef2jwrHSJIk4KvsmwqqrAl8So3kr4RgZnJrDg8Zmos2xXFG8D9V6/vxx4IoWjWR83g53ZlXr32uq2QWp8WP4R5DP8MQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801060; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3zZJ89Z45bQcI+MDgmQM5LzF7kuk0PxBH91uljpEleQ=; b=lTku6rkNzdywsy6JW+Xm3LMbOmpOluMRKlf3wVU6Wp+mPseYYht3zuVLSUY+8SIpowp1UYE2U6kevHnHYv20zMRoEAmxHRFLhuwy1mw54jzESPKwlWqLZFEsGSpHTaXRaOUrSN1Fj4hciGLh85BrAFWduq7UjQHyRdb5ubzpS78= 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 1791801060572370.30219445228545; Mon, 12 Oct 2026 03:31:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHs-0008KD-0L; Mon, 12 Oct 2026 06:29:44 -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 1xGDHA-0007dm-5c for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:04 -0400 Received: from mail-francesouthazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c207::3] helo=MRWPR03CU001.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 1xGDH6-0005FA-SY for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:58 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:40 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nPOcdDMR8TRsAcBe6TGQCKTiF86Q0VU+U64tN03HqZZxVxKPpjJwWvippdudBwjxxn3PFZXy3DEN8/r/8a5aiId5odzzxYWIuItXDjSvAsfjjOoeap3qxYKTku1lW/Dvcl6/33tGhujQCyt5llERyFVog2XoJgxF2XhsNkLL6gwC1atjTEi4HUloqo2/3uqjw/wI6UOb99PA3RA0+O80FjG864P7WlanF7hBq6lrFNmnn4x0oSGcTdVwWN/4+qZiqVrmfYkV62I5B2K4u24QNMLed34EwHvo/57QDI5fo6C0PQD/h9Zk0Pcu3pXdOS8fKldlNuBeBUt5DGsk05V0Qw== 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=3zZJ89Z45bQcI+MDgmQM5LzF7kuk0PxBH91uljpEleQ=; b=h43ucVEKuLTkgDrhLvC//ptGEfMwhAqB7cEdXEb2NGdR8Mhj6B4TACKd3HMorgrPqA0yJIEt0JuZvlUHVWpCzRy4pb5pDxmfAAsryStG8FePNeioU4zq/iO4rGqMyaoQD/+2yvVENpHq0IFzvG7Ouqt6693l7QXYgnYKzJnNPWGPz15BMDEtNddVg/c4aOhgKmfLQP2NZFqqmPENFHatWjzoUrT3zCTYAEUlg7hkqGj34nLGRfl4zqKhYNWo8lqzvOcaAX5HFkcouBjU+a10Le42EQYf49OQHRsMX2gvY9OCVdOAinGdQ0TDnjyUb7sJ9nCbxuRX7VF2gW5j4RMZrw== 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=3zZJ89Z45bQcI+MDgmQM5LzF7kuk0PxBH91uljpEleQ=; b=uza3Wkf3Oci90vlBLyXPhqJ9+8cP7epMOl8lx5+UytCHwnavSv6XYrpXUPXrVNnamnM60fM4YbWhntds4qJ8SVW0/fGnu0qyJvRNytHdQc5W3cf8EV9iaWX8392/cU8gytqnlQ25jGCE3Myb5LwEzL2UkA/kxR9wn+NrilXx6Wtavyh9CH3ex/ae2coJYMGaJRsF64xnMdOgTg574I0WghTdTzb2DUad2rwN5aomTy3ASHoWEBIjRTW6DEs4xnn7XR9dT08Wwmy0+aDiymTRAIW5LotdhjAJWTTf7iKwOTW6Nb0oBQO4aVzBx5LZK1ktfw0dOnlkusZnnkk0eZ6CRQ== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:19 +0300 Subject: [PATCH v16 11/22] vhost: factor out vhost_dev_init_backend() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-11-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 839b8b69-ef46-4d81-7cab-08df284b9531 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: 7TQ8vIuQWQfbanLFDtKYjooozGCZ7IF5MkYqL2WdbcSVSv1jy1iC/7Gkg/08I/80BI30IDKmTRdd067zWpD+28sjUinufdqQeKgm1TjPPDOpVQLcPcYC7MxTKJpkU/P77CMGP8dsqpXoWWwJo1PD+WlYtUOjulqlt5nO7dgnCht2e0yvRhkaG3Iq+IWnhdmSKdOYzLeqcrUrrNFBJPhiiUEsUF0NaMlUBWhCmgdSdx+jCS7eU1cX23lvIwBK7JU7YbAmkutpnTGM0QAL6Hv6pV4mAqoTPWsYI7z+l/o6/HSRWLKPvaTHhv6cc8nZj1TnTLlRt8ytuPIhdFX0JledRiZKVkj9y2pwiuwZLyiAeCkER38IurBksL2rlJ05g5PXpLOC79PomxSDNSbp2mUs9F8Xb+wHwiPqZcojwE06SaYqCHB00eHNwcXjmAKxDBEKiHQnzX+3ypVUPMamSTtKnCrSSQ0kYrIGTh7mWfcm7JIP+AZC63PAAa/o1cFt/uHM5JvdaxBpumRD/hmSmNu0PPsnVNpm2XF3MCOY0dYVyXRMVnQdQcLjWtN0aPpeT5fs8SYKCRVRvQRf6NxD2K/vfLDVgO8LI2JLmZS32mChhPAROSJjwHugwIYh7u8LCNVefYrYQSQr/Jo7w6Cjd0myNwEpu/mH+gcdx8WTeSSFqVhttP8Pn39+yD2fsRE48hh8bq/KZyg5ZweC5ue7tJcbIS+CMyzXSTUt1lfwfZn9JMc= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WDRIVmlwSml4anErVUxzZnFXaWR2N0JvdnNROXZ3YTAxVjJ6ZXlKR2VIeDcv?= =?utf-8?B?V0M1ZXM3ZGNtbTlYZTJGYWhJWTNIM1Z4WEtXSWV1eS9BOHR6M2Q5b21vZThs?= =?utf-8?B?bzJKRkhYaHFzeWJyQXMzTnRKd0NkVGMyZnVSeThFVmpWZktqUUcrVks2MkV4?= =?utf-8?B?Vm8wM3NrdTYvZnY5cjNQbHp6V0Nmc0dBWFcrOENleFdQQVgrVnoxK3U3MXE3?= =?utf-8?B?bWZPaWZXVmJla20zRUY1UmVkZW1QZndKT20vSDUvbkN1VVd4T3pzcHA5MlBM?= =?utf-8?B?QUxnYVUzb3ArUHVkSXdLSnJncnJaK1U0UmtUck9OcTNSdGt2VWpmMUpBdDRq?= =?utf-8?B?NlVWZ0VDRFpXTDFzYU5meGc4emkxWEtIUnA4NmJ3bjY5ck5qREZJSXFFcFh3?= =?utf-8?B?UjlpQldhZDVWQkdRWlkwL0l2R3R4VlpWOGx5U0NDTGw0aFYzcTBUSldIL3F3?= =?utf-8?B?UExmdm84M1FQMzhibkVhRVRpTTN4elhPWmRyb1YxK3ZRcHd1YlphL3VITVZY?= =?utf-8?B?MmlXTzUrVGRpbTV3WEplM3k1MERCcDQvTFlqNXMrNVRZUHgyaTBYSzRQckY5?= =?utf-8?B?WUlmNzVLOUk1U0I0aWcrL3BVelA4U3lmUmEzeXVsTHdRU3pVbjkrNGQxRmRU?= =?utf-8?B?RzRSSEF2amdWTUxkRXltM1JJSmF1UTJBWlcyUzNvcnQ2dm5aWlBpdFp4ZU1J?= =?utf-8?B?OVFod3BiOEliNnl0Z200VnpvcUV0YVNHTGJHYlZja0VaSFVXOU1LNkxoRnRa?= =?utf-8?B?M2QxTXBwdFBRSmpmbnFRblRseUhEYW1VTkNDM2JLT0k0aTRvWHU4eXJVZHA4?= =?utf-8?B?Yk40cDQxQ3Q2ajh2Q3J3SkxvVnQrK1VGcmhQVjJJdnYvQWtRbjMzaVdOYWVw?= =?utf-8?B?Y0k5UjE0KzRhZjROdm1tVEZoZkdZeWJQODdCL1A4Q3B4MlpaUDhIdCs2bHFN?= =?utf-8?B?UmxOR002KzZwQ3FhaTJVeS9wZ21NR1MyMHR5RUMyNUt5ZXlxRHdVT3ZtOWl1?= =?utf-8?B?b0ROQS82cHZYUU12UjUvc3JMN1JIVVlMaHEvZnRBcFNoSE1lZnVqMXJsTWxC?= =?utf-8?B?Z3dxSzNEM2lzN0ZBRGxrVXI4Y05zaVV0T2Z0cTdpOC9NVzZMQnhHYzJZdmpF?= =?utf-8?B?MlVWeFUvamtDanQ0dHAxbGhHd3RING1mZHB4NVJ2RTJoeVo1Z3Uva2t0TGhr?= =?utf-8?B?a1BEWU5yYnJIK1pRVldUdURjU0gwMTdrbFQ0ajZkY0QzcEo0cktjaWxNVWVP?= =?utf-8?B?cnpTdUl2aThESGtPdStWUkJvZGpNdXl3aC9jUzZTU2ZiV1hhVW5objB0YUht?= =?utf-8?B?TCtHNEFUaTM0ME1vem1vNUs1ajhvaHk1Q3JyNWEyQmllN3FlNVNzdi80V28w?= =?utf-8?B?TjE1L2RaUGpVN1hYdE8vSTRKS2VOaUxHUGRNZXU2NU9oN1RYYXJhWmtPK29o?= =?utf-8?B?MFp3ekZ0TGxJZTBjREY0TlVyV2dzTXhRMVdjVThsVjd1MlpoQnVCUTU3a2NS?= =?utf-8?B?Z0N3OFdNS2hqYURhdCtzTnd5cEZWTEczakhYbFBwUTdrZzBiRnFBVld5VWI1?= =?utf-8?B?ZXQ2RmJubmpPOWdSbCszYlhJVEQ3QUNxVHc0VTM4SzdLOE9jM2xjenJCQ3h0?= =?utf-8?B?OVFyUWwxSWwyaUd5dER0bHZzcjNvUkx5TmVCM1NwbjVNWVNnc2g1WVlzMFBv?= =?utf-8?B?VkFmeThPRkN1ckNHZHlOZm1iMXRHbXNxTENrT3dVeUhhSE1JNXlJWHBVUUJv?= =?utf-8?B?LzZmZzRmS1doKzduZnRETTZpMU9rVi91aGdnWkRtMEFxZ2k1OUNkaVhtd1Bu?= =?utf-8?B?cDZzQ1dXcUpBM0JZcS9ON09KMldMcEwxSHJNbXVkc2tMcFYwZlJIWnh1bHVI?= =?utf-8?B?WDZqTHJjcEpDV2x6QlFZb21oOXBrQTFkVy9XdEVENDFlMDc0R0NtSVlnRER1?= =?utf-8?B?Skw5ekxYYi91MUdLQjFEalB5NFlUalBWaFFPVG1oL2lxTUw1KzJ6aDZYUHRW?= =?utf-8?B?dGxkb0RsS3pTUXlGL1ZURXg5TStCUTF3K292WnFnNTNYb0dGMzBROXNJYXY1?= =?utf-8?B?MnQ2R0lHZ3Z1WmZiQkxuc3YzNVJOQlQrQ1BFSnhXRXhLNFBSTU8wOVlsTjZi?= =?utf-8?B?cWJBOVN0azVOeVVRMDhCME1NV2tmb1UrT2ZZZTNMbU1IcGh3NVgzTGhqQ3NN?= =?utf-8?B?UnJMSjl1WFdGWjFDVWYxdDJpRS9oTEFwL2w4MlRoeXpmbkQ3L0hOYnhlU0M1?= =?utf-8?B?cXBxVEZrcWRIdSt2c2VjcmRqaFNqQnFPZlZtRFFlTTZZQndhaC9FNUovcVAy?= =?utf-8?B?anY0c09rTGlubEtTUGJQZFdCa2tYOXJBWnN5Uk1BUkR3QXRqMDZBZzVJTTlM?= =?utf-8?Q?2NHj7hdj+vSDdDI0=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 839b8b69-ef46-4d81-7cab-08df284b9531 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:40.2512 (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: xhk+Lod43P513iWdwanzs+a+LJNE2FGi/tT3Fj+IkVB/I7bmSAuQKaZop7g9FzbACzdZkOzus0zD84vmQms16dLluKxp2sTSeMAvRh4XphQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c207::3; envelope-from=andrey.drobyshev@virtuozzo.com; helo=MRWPR03CU001.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, 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: 1791801063035158500 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(). Reviewed-by: Stefano Garzarella Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- hw/virtio/vhost.c | 33 +++++++++++++++++++++++---------- include/hw/virtio/vhost.h | 22 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 68a8e404818..99561ac5868 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1681,6 +1681,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) @@ -1693,10 +1715,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; } @@ -1707,12 +1726,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 0a322efec1d..b2b644c0d1c 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -156,6 +156,28 @@ 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). + * + * On failure the backend may be left partially initialised; the caller mu= st + * still call vhost_dev_cleanup() to release it. + * + * 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 Thu Oct 22 19:27:19 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=1791801050; cv=pass; d=zohomail.com; s=zohoarc; b=D5MyRi1nFvldfRq/jeIqhHNuJ6rXjDAJ3g2jj2Oi4ZIY+W8L6rfT9JTg79EZG2Jcy4/KfLNXLY7SF7oe7xEzugmzAHgzCDWTEruC/jDApWqxfrC7z8s5epeoTRdrVzIiGfdOtAUc7Zmt1L2upqk1TRvyTAskOIRTJvehc0UPZRk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801050; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gWXhh68le3RfUJjypRVq8x/GzIl/qjsOycrfUzYBtG0=; b=Q+fIq2GRSB9eMSLnk1uq/2DrKsNC8rHMNts9gZXIns3+o7Rjfvi8oweNvRzfENONxWpWOwE4q/z2Afi28Lx26upG3H5TDg+7o/i9N2lYDrH406KmBB18ZRLB/n15sSNjzXBiDedArpPLwHhb3QSTuem7pU46iu/qPuOfX5SLwQ8= 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 1791801050218954.2617938074493; Mon, 12 Oct 2026 03:30:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHh-0007wD-Ou; Mon, 12 Oct 2026 06:29:33 -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 1xGDHD-0007ed-3P for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:08 -0400 Received: from mail-swedencentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c202::7] helo=GVXPR05CU001.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 1xGDHA-0005Eh-CA for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:02 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:41 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fYa6uPPAbSDNcacv/Zasb+zPwloBCAvVa4U8FOnrlvBsTEyQUa6LI6mcdUKqmjuQB8b7ZPzKIRGM/i0iLahVggCiWOB86cPQBEbtZhUNu5ZJGTbdLeCo0JO0Lm5kWnDNjTotE2dlzhf0NfukYZEmdHxx2AshrBOwoeObggvyqUDVyTZ4ikz13ho8VxZYGXYAcnADeVP4cePVCL0M57yQhZLX2sDAKEtZeFsTi2uMUD94SsvlOsXyvt1dXdJApp98m2BXPPq8jRaXuA8JRE41+uzb3FEXb370F01hynZDyxg3XMWWAyqe9AXT16HAFns4jEBnIf6RG/QJDHmy12Kk1A== 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=gWXhh68le3RfUJjypRVq8x/GzIl/qjsOycrfUzYBtG0=; b=H81veixiR8KKqc0dTYCPx/gi/61H8Oe8LC9kVYHmLONdHwJw46TOQQ8K1SHQ2a/Qouo1EEIMBjwBRUlxlY7g2Y8Ff9Jr/FLybPaVqZa4HmzPczbw/PRe8CVsACJTlZ6UpDG6rEYbCvJh5650OmcW2PcHnEpKWWzdtAzN6zE0/OUQqh0IMhAEW4rh+Ge+kPmJut5I8a63sV0tQbqcW6BzaxAaxYiee4xW4hwgcLbLf7hnpnuED+ki1Ug7Q+SNZYYCzxOGFyM1ALWG15VJapldwAWit7s8MTpeHUiQ6oRJK96Qe6TPICoFv0scGNkp31jRkDBGgZ5pl/4nmZS+2N6Ugw== 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=gWXhh68le3RfUJjypRVq8x/GzIl/qjsOycrfUzYBtG0=; b=D2S1SEvNDliL4mjmNEvcs9cDDDVfyw63+U9gxvhRtCwKmpN6LMgyEQ1ZdhQaX/xwe34CF8xNYpuSTW0BchKq+VzB5aaoT3SGUxQjdg32SESz721RWofUCqOPJXGRQfagfRzJrumLKuxGpG7JjI6pkPuHxpDEw0qerzC8BjcrgMpuXhWc9ko8TcYn2DGzd40/FBDOlz3+jJqkLjefARsJDgORHRzlAnx9COIRI9uyjCWttG5wrDZFZ7BaRJZ3s0cb5hLUATnbnunjvNJXfb6Slf7ytWkmpinWUfYqdRG3Pvm0wioHkTwhXzlg0taRfrCaqDsahkPJdNUO7oZn7LkRTA== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:20 +0300 Subject: [PATCH v16 12/22] vhost: make vhost_dev_cleanup() safe on a partially initialized device Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-12-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ef964f7-19bc-44f2-24cc-08df284b95aa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: M9YgBsd6vKR31khQSsAUCKjtiiKolZQon7T+Jh5d1URBGt5o0bent8rv7lk1WRnchQIMfgRR8LWhmUBc3XA71M7b3q/9J8jPFsulBZTCKVCWVI8qP/1zD9ew7cZtGSiFYh+ayF2O1/MBkCI2mW8Un4G45VJes18ixNsHwSV1IfBSYuGmf6xVo70kOh0FNqFyFdnuLbeua9Bn4lcOCfEpN1/LW1eScTWmbF1HG9M5f/o6jWuBNbt6qn1GeN5MbNVDg0cHl1zj1TeEQSX08ugDgrAfHIm14YsQ4eEGFztq22zHnUKdB/xXfZwhEfoBOpEWQC8zzptjygjJMOZ9jgjWZdzawPmKI3+57e6gKGCAsTLBxuJL2PGucP3nSkBQRBOdq6sx20Y1Jjkjh1ncaX0iIjp8sLA9pbcbhtpIanbQ38mKZ+oOu8Xn/26ftwD4pcOAxWmulbEVkgDOU0UxQmgL1erzfSX8kqsTuElzECrp5PE8h0xfCTq7cLOXGLOhs8+gXXSZ2fBUpHe7S4XyZU+XiHmGHGQjIUbeV7v8yhqXFnQAt7UQNOn5NGTLZpyqNJdaWDlusoh6fBAhzKMHAZYcARudCZPcmCWSOwIoxrkj76JY/dqpT2Rz1a1VLAHFv3tfvU0pDFmhCjaXjts15wTDbViqvYRYgwgwMd6y3pPrMxw89CNh9fwClWEpqIWwc9+R/4HLNtY2bneMWWU15jOWYgUar0yqL37JzZ1Q0kHDgQM= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VmIxOGM0djRQVWUwS3l0UEpQY0V3L0oxTGVmaUVNU21LOUxSdG4vWmw2eE9s?= =?utf-8?B?RnAxSHhKYmgxT0hoWkx1QkNoZzNHenBVL0Z1VXVyUmw0RTJoSzZCTlFvR3Bq?= =?utf-8?B?b0c4SGU1WVcrVnhIUThOK2lia2QyZXB3OFFNQjU4K2FyMkpwK0RGYWJHOGRy?= =?utf-8?B?L2dCcHlobDRVRnh6UFR1MnBVY0xqb214Mjh6RFhxckEzNkJtTk1XeTlQOXVp?= =?utf-8?B?RVc5L0l5MGR0WXRGZ0NZOFJGWUlsODlJNDJqM2lLT2lrVE1iRXlQOXMvTVFV?= =?utf-8?B?VlFnMFBhQkM3T21WNStWSHlmVTNlM0lVTTV1WFJ0UWtZWmxpSTdrTmFnVnRE?= =?utf-8?B?eHB0Y3JFdXRCbERaL2M5TjYvc0kyclY0bCtMd2J4Ylc3UGl0bnZVMWsrZXpV?= =?utf-8?B?emQ3UUdTaW5FZDJEd0xvK3NTRDZzWVJBOTBhb2VBbmQvOVVDUy9ETFR0VmUr?= =?utf-8?B?dmRnMHdxZzMybWM2Y2ZQSitTL28wdTYza3ZLcFdKRU53WHlVMVNTN1VoSEd0?= =?utf-8?B?cWhhSWRxUzNXUmlId21WeHVqRlFmaUI4MnpmeUdtMVRMaWhpZG5QaHZ2eVhs?= =?utf-8?B?MkdiZ05RUkV1c3ZNU1NSbDlleFdHZU9qVnNQZjJMNEErR0d4M3c1N3FoaGlS?= =?utf-8?B?ekVwRnlpd01JOVNMeExKT1VPMUt0R0sza2FFaUcyVm9neElQREl0djN0c2l6?= =?utf-8?B?VUNaM3g2SDFuTFV2eDU3ZmFBazMrdnBJeVZISlVHWVp2U2FBVXZDcE12YmFP?= =?utf-8?B?STMxYm5aYy9EZm5qc21RNDNCOVZLNTQvNXFxLzRiMGhscDV3OHFVRXFlRll1?= =?utf-8?B?NmJ4LzJUaEkyeW0zbWRBeU5RWmZiaVV5QW5OYmtUZjdtOWRPZHV6aHB1bTNz?= =?utf-8?B?OEl1U1h6NTM2VE1YbVpWcG00WTlSeUlyTlVWZEwvQXFWanlzL05jS0l5dEdO?= =?utf-8?B?VHBtNjFIUDdGZXRPYWVGYko5a0RXU3pJNm1xa2txR1JSeTY5bm1XYW9xWHZ4?= =?utf-8?B?QjRTUTBJQk5vTG02aVZGdTNYQ0JHOHZXSVZZOW11NTlZV3JiSGxiblNaNUFq?= =?utf-8?B?K1VkM3Y3ME4zdjZ6bnJoblFNRWFhT0RqTFhoNnQwdlF6MFZVZGpHd3dnbzI1?= =?utf-8?B?U0VDWnVsczk4TXlhcVRFVktzbG9Cd0tlK3ZqSUY3Q1VKVEZYckJJV2ZJQm01?= =?utf-8?B?dU04Y3VaK3Q1Qi9zSk13OVhFZ01IbXhnVHJBK1loaW5taGp4R0x0UUVSWmQx?= =?utf-8?B?NjZraTI2RzB6bVpGcFdNVngybmw1cHRpRUhPSTJ0SEhaYXAvek1PZ0RmRmJt?= =?utf-8?B?c0tsRnpoT0lObitmdXlFcHU0RTFLdXdubTdlS1dKVE9QcWNybDYwOERURVBT?= =?utf-8?B?UHpCbWd5Z0VSbjBSaS9QNzB6Q0dDc1RMQVFOQ3N5OTNJY1kzTmFCOVd2SE9Z?= =?utf-8?B?S2xQTzgzaExHQUpyUE1KUXFic0hOeXdHZ0tQTzZpcm5BekxUdFp4S09oUVdI?= =?utf-8?B?TGRsaDU1R1hCM1NoR2JrR3BNRTZUYWFTK3JUZG9BUEJ4bFN3M0lFTmo2ZXJI?= =?utf-8?B?dDJCbE4xQlNCZnFsYUJMcHFPYVIxd1NVRVNCc0hDQWVKMnkyY3FMWjJNU0E5?= =?utf-8?B?WVBwNEVOekxjdjZtM1ROTUNDMnF5MlF2Nml3LzZhbnlGMnJsbVJ4VXQwR0J2?= =?utf-8?B?emhXOXlHNnEybExGejdITklGNmx1bzI4bWJreGkweHRacGp3aWF5U2Y1R3l1?= =?utf-8?B?VEcwdFNNSXRPL2lBM1lDM2E5cFQvOVpGWXFuTHBSMjdkcThhL2kxb1RKOHN5?= =?utf-8?B?a0RVZXpFaFJGQVNUWkt3b3VpQWxlMzRhd1NyTCtUQ0JmYzRXL0lDenRnenFH?= =?utf-8?B?M2RVYmVzVXlxeHhDQVpXZ0FaWVhTWEFwOVB5Rk1XV0lVNTMwVHNOeDUyTFht?= =?utf-8?B?ajNGZWJvTktoeURPRHBzd1E2SVdnd0FtNC9UeldwNm1NVlhZdVZtWlhOSXdm?= =?utf-8?B?aHpLZTNRSjQ3cUtiY3EyNEVQTjdYM1ZLSURkYjZ6YThxRVV6YlpYbTM0TGJq?= =?utf-8?B?L2RvRGZMYnB2QXdhRjZpOStCZ0sxc0RVUDl2VE5iQTIwOG8zaUY0VEJXeUQy?= =?utf-8?B?WE9MT3B6UU1HTVVJR05CVzF0Szl5R0ZPSDhtK1FtUjQ1RVJ5azhFWG0yNVJx?= =?utf-8?B?aDhWR0doVUgwZGltejFBbElUMXZnOWNGMTNkdDBnT0hEaWdvRS9rbmdxbTVm?= =?utf-8?B?QXZVUFc0U1p5TkNhN2laR0syZklKcmRheXIzOHRSS2JpdjJXTGNGV0hOazZF?= =?utf-8?B?SXY3UDFZZFNFTVg2YWxQQVd3TDlOZ1VDbGtEanl1VXJjbGloMGF3MkdvUHRI?= =?utf-8?Q?jNGU4t+N2CgI066s=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ef964f7-19bc-44f2-24cc-08df284b95aa X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:40.9660 (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: g3pNC3Ugt6dzKbpB4Nmd0p6JQ37u+zd6JPW5abTow1dWbq2L49xPlgAJ8WsFzcUv/6ZB5Mo27dt3tl9mc+mMAXZ04vigqQbEAVv7Pmn9Zno= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c202::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=GVXPR05CU001.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_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1791801050643158500 A device which only went through vhost_dev_init_backend() has its VQs not yet initialized, so vq->dev is NULL and vhost_virtqueue_cleanup() would crash dereferencing it. Check vq->dev before use, so that vhost_dev_cleanup() can be called to release a device whose full vhost_dev_init() never ran or failed along the way. As of now, there's no way for the cleanup path to be reached with vq->dev uninitialized. However after a subsequent patch adding CPR support for vhost-vsock this'll become a possibility, so let's prevent such a crash beforehand. Reviewed-by: Stefano Garzarella Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- hw/virtio/vhost.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 99561ac5868..dfdfd49da3f 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1661,7 +1661,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); } --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801054; cv=pass; d=zohomail.com; s=zohoarc; b=N3a/xzRqRjtD4/kuEgCH9h9iRsPsUshMXLOR+bMfDjtPvp/AEvvZkpcyFF4c1MF4FAtNr72aJSLYvUlTk4d87xwbpeHkkpiQggbjI9ADYTIUw6HD2duz7+89hO6uKH4bvDW+6TIYG3I5pZblyaHUiLEoBySQn9WlMsCgvDxAMvE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801054; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZsVXvvvzwqJ72NVYywAYrq/LWoyKs50mmgOws/1FLo0=; b=GMjWGdwjFXWPItMVzkAQXv6sY61J+Pui1oJQrKyYckQZxgPq6YNZryKHTtJCKAdTRE2CuB7roIKq4A5wiiUm4hEnz+X88BVJcZylme4ig6/T40adUODfUFGTgzcvIPO8gwJ7MrnPZP0mxdoIRQqV8edJmTHNuB0LbMZ9ivid0Fw= 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 1791801054309620.1055242003309; Mon, 12 Oct 2026 03:30:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHy-0000BP-I1; Mon, 12 Oct 2026 06:29:50 -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 1xGDHE-0007eu-HH for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:09 -0400 Received: from mail-francesouthazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c207::3] helo=MRWPR03CU001.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 1xGDHC-0005FA-UZ for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:04 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:41 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZW/J6PhbUPijkS8wm0ZwdNmOqaZ73D1FSN0M1QdD2m+6hf2IztkKyoLAq09IgGyOraZ+dId7fzO90kT/SA261fz3NuJ8i7BIADZa+mloPXdvTK4NFOKekUsUQvVewuSboIJQUe2Ff9FdXiRw6/5YFs7Dwb2TCQBNsYNAMtUBjf8CR12zPEIIz4BtuDRIQfS4+VHVUWJq72HzEqjQ+CWxFiKaPhLHhI3IhSPjokXZViD5ACICt3vItEC4Mnaqt+0+JKUv8qB8M6Hq2Ta2m+7UHyfbLzbKFk6nB86WbQ3FO4QbeDbzP6IN7BgSy9sJZl/IzkgJWj4v/bzX79ISy8UBTA== 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=ZsVXvvvzwqJ72NVYywAYrq/LWoyKs50mmgOws/1FLo0=; b=ao7nZ1pPur32QOqSWPvEliOJuZzsYG0AI0UX4Krp0YWbdaD6c9XM3nK2l/DO1gWQ04A35nK2/WaMZfI//IzgnzoxeUITVseXGIb+fWoi6O0W8jRBmHqjjDDhtBHVVA8n7HbwP0T/kTtQNXFp3h8b5/7SiB4AjQ92ZVvNRMH+xHHf5XGOpH2WTuC+8WaOZ/MZutfEy0S7nycyXpyB+/MRtyWI4giNCG7Dp21segnLBV2kXWEVA6CYQdVkhU3hJPYxPdqwax9y8i6VqNcfdRKiKW6XT5KFAeV54kAXqyJNxbIURloeMKMw7Y4xY5jSLMXODi2ZAlhK6EtmK1Qoy4di7A== 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=ZsVXvvvzwqJ72NVYywAYrq/LWoyKs50mmgOws/1FLo0=; b=vEn0x4SojQ9wSHUl+nt+233Aqxz90bXtwZd4AmbyoUQEN3L38snGYKz3we50nh00/DpfhMUJ03rG52TGe2juziMuiv9avIh4TnxSydyFhHBL2qi1T00M1dkZw2knbwgVHUi0uxnXp0O2EiX5bqUxdHqFxC0cfPcNFM1Khe4L4dPS4xvmXqpnZgAXEayt3EO25wCQJ1Mek4NLaPJBCSnIwM0FipscWXqE8sMVmq00RstYV1Bk7a89O1SFP5xyxbNPak/w74EGyzBpg3NclHm95PVmYiMqNPFTX7xPRsKd+5FS/LqLhIkByBHLTzIzhx4G+HiQzG7vKXaRMWluBbatxA== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:21 +0300 Subject: [PATCH v16 13/22] vhost: add vhost_dev_set_owner() / vhost_dev_reset_owner() helpers Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-13-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 3413c97e-e101-4636-2f8b-08df284b9615 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: CQJwmlt2g+DJ6r9yicv/aYwlCgBdNYzaqqNBMIUndLhHLjXmvu/ZOayzy2lmziT8OtDLhaFTBDetRU+js3bpapwJLOlZD4hdpcYvfbPyzXHGQpHnzLLu2tFsCnNWwSw/MNcs0zx1iCiHjLJ0C4pl8Yc4mQVzql6AdzjbmN7bLznvjzDPUfWrMxi7v/yuEap7jcwJ7Zr1CfZPX7epTM2YgsjIsZrRYGEQ/cnKq3AIqQrT+tJE58rYrmbavOPCmnTwGNOWV6LWLVVvtpYrzrYZ2JbrtdeJDlU5GOt3TZB1lHgQ7Kf4ZiP2dq9+cIsfhutDDN72JTdPmLY0z2YdVkGcsAVXF5egsodcg+9iasDyw6qsEquaLnTCQhQ4I/tjC3OSxMG2L6ouw86hvo3bKYLziTA+aiS5jk+ISVUobd2D6MUmLa+lpkNWMy1Z1tU5NrZohnumwYYVW7kSCEebkzTTANRIIFu4OveJ+NadWfGY4bo2fopM4yTCSmNOQ8txubUcm4cXcoQRe4i7JxX9B6FslAD4GmQ6MifXng0CP57sDedAEJUkXrQJUw0zwfuaEbcrewOcEN8b8Voj1c+dLBFPdWydGxrd7vY6ymAH/mQ9JJf2HaO74wSWY/Pjz2Xsad+lFA46xL6erJUDICckVYP/xpMpLDX+R0TaYfsARPCQBR8oeXf3bxYRZdn5lTehOA8QkINuUMuRLpGIIgoY3ZqB4f73DWzzw44HQauv7Ro7tjs= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MGV2cGs3aE1IZ1VaZmU2VERoTXhoY1ZmaGtqdHpCZlR2M2JGZEQxaUFVT1FH?= =?utf-8?B?d2NIdVBhc2tPeCtqRU9ub2tRZmxpMC9xNVNNV1dMNmpMQmhEdTl6NWREQVpG?= =?utf-8?B?M1JaWnFNT3lzTmRrL2RGS3JvRzhEZnBEdU9pNC9yVE94bGJ4WTdubjBrSGVB?= =?utf-8?B?dnBOMU5LWEFjTll1RFM3b1g5dlk0TUdiZmxsdnpQSjZBU25MVUpjK2NHZ2N4?= =?utf-8?B?bTZjYjYyT3B6dmMvYTBvZGJIOGZvWmJtY3owVEsvQ0xxSG1mS2lsOFZJcVVr?= =?utf-8?B?ckZFZG96dlNVcjk4N2x3bFVHNEE5T202cTRiRDlDL2ZDWjl0ZUlLRFdGUnlL?= =?utf-8?B?bzdoRTFwTitpb01VWDIxL24xb2w4MHdmcEVhZ3hiaER1TitBejlRb0pPZTgx?= =?utf-8?B?RDQ0R1F0NzJLVC8vaWlGMFltbVFZbS9QenhmZ2JDSGtwV0daSitmRGxLWWNE?= =?utf-8?B?ZmR0V05Cb3RvUk9MMUwrSFdUbUxYd2RCZkV0ZVJiRHplaG1SVllsNlkrQjh5?= =?utf-8?B?cVdBNDBQOHE5SzI4ekV6alo2VG81d2V1R3pXcWtDaEp2Q1RZZ0JCbFRoQ0Ft?= =?utf-8?B?NElvVXpNZVJzMjB3N3NaU25paG1Da1JFcXJSaGtCcWZIMzlvWVVMUmtuUEpp?= =?utf-8?B?cTd3TUFWWFR6M0M4M1Q0NU5YR0J1NVpabE1Tc2x1cm1lL21aQ1FHN05UMEcr?= =?utf-8?B?SFlNWTN2TEFPYXptclBGY2w2aVRUSjlwT0NXYUhTMk1FY3UzU2g4R245NEUr?= =?utf-8?B?ZGFkQUUxUUdMTkFZTVc5ODNGeWplU25ENUsybjBNQ2tXVVkxY1pvYXBjaVh5?= =?utf-8?B?YlhxT096R2t2YktkTFlZZm50OGNvNHF2R3Q2OEg2REtzaXZ2bmxDdE9tZHNG?= =?utf-8?B?MDZQL2J0RXlGL0xIOUgreVBHNi9zckZaZXhNUC9MMGpKL21LUlVLK0k0NjVS?= =?utf-8?B?SllxbHJUQUZzUVE5TGJTbThXY0RlWXdkdmNMcDZUTVFibEd5MkNYN1ZBRjhO?= =?utf-8?B?M3JOdTl0ZEZoRXdXM2NxNFhac3JkSVJjTDFSdWxhNkhoMzBTWXhrVTNDUy82?= =?utf-8?B?dFVCdnJpdUUrSmh1TUxhdzNVcCswUXdKVXpBSS94UXY5czRaeXY3YldmTDBL?= =?utf-8?B?SjVNT3EzeUwyT01naWpjOUYyVDdkSjlMcEx5WFF1eTN1VTdpenBGaHhucEVn?= =?utf-8?B?WisxVGpQRFFRMDhUNXhhVGhlbFhkZ0UvM2luU3dZMDFaNDdBd0I4ZEdXRUJD?= =?utf-8?B?bSs0aEtta0FNeXlURS9wNXVkZDJ3TVFKa2lFSmlEalFJaW1DMDhGWGt5bjh4?= =?utf-8?B?NXlHbXY5ZDlITGNmb0JTQ2lzTTUrbzNXT0JlN0VyRm90eXROMVR6UjRpdEhD?= =?utf-8?B?RnNqbG5nRHNsZmM3bmo5eHFNS2RDRFk3K2NiRTZ6RXk1QzhXUGV0QUtxNUF1?= =?utf-8?B?Q0xkbTB4RXgwQWJxMGk1R0IwMXRLNGFHUEdNUkIzbTg2VHZQS3RZYktDL284?= =?utf-8?B?bkxjSnBqNnlBOStDazNiTDdlZmZPc1pWcGlrcyt1SVB3VXgvQ0lxQS9SdUgv?= =?utf-8?B?cTJjWGtJekxKbTlxaVNiZVEvSUJhZmJ0NlhVRXdhbkl1RnlCQW9TZnlXYjFO?= =?utf-8?B?OEZoKy94UE9IOENtbGEvWkhlWi82R2RCc0d5K0wvS3FyZmIzck1OK25ZeDVO?= =?utf-8?B?QVo2Rk5SR0g5S2s2aHVZTXFDUzdiSjQwVmU0a29XQ3czR3dRak0xSUFZN0tR?= =?utf-8?B?bDF4UXRGTDB4WlF0M043c1VldjBkdWozWDBKczFwUEN0QUFvOGpqdWRWK0lX?= =?utf-8?B?NmJ3VEVIajlVVjQrU2cvOUNOaXNpRHVMSDZjU2ZtYThzN2QvQ2pEZTBQRkdo?= =?utf-8?B?VUdJVWFkclphVDNiTkdENTREelJkWVBoK1RSOG1DK2VzMUhVU3V6Qk54UWsx?= =?utf-8?B?UUprOUJkVkFlRGUrS2JiNkpnT2l0VSttR09sRWhnTGRadXZMWmhPM1FPMm5Q?= =?utf-8?B?NW9BRGJlSXRoV0lHL1hhNzJjdkk3dnhHYVJGTzM5QVlZWno4TUtJSzE3UjVy?= =?utf-8?B?OWtRMHhHRTNjWGpNeVBuUHQxZWIwbmdiN3dyOVN5VHo5UktOWm9jeXM5aU1C?= =?utf-8?B?UU11bHVaZjBmKzZhTUZxSitEZk8yS2RleHpRbGZ5U0xVT3NGYkhickNCV1BV?= =?utf-8?B?TjVKVk9BaCtVN3ZsUzFDNVY4NTR5U0FqY2IrVVdrVWtDa1Q4bmlQaW42YVZ5?= =?utf-8?B?Ty9OaGF2czBKcFluTjViODNGNkM5TGZ6ejFQWEZiOThOUGZuMG1Xdmg0KytU?= =?utf-8?B?M0t5ejExUlZTeVQwaWJkUThQdXRlVDNwa1VJNVhmNmE3UmJoVU02bnpJdHN4?= =?utf-8?Q?MMmX+ObWHbJ3lLv4=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3413c97e-e101-4636-2f8b-08df284b9615 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:41.7310 (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: tqxbzycS5u4guc6nR3JGbjAjKTem7637pzJeeWtvugmRLtv4kBUBDa1UjpJcp8dYL2xO8y7vog6KcwWNcAQwwz7bRqrk0b7VWGGbX3qLwaA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c207::3; envelope-from=andrey.drobyshev@virtuozzo.com; helo=MRWPR03CU001.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, 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: 1791801054950158501 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. Reviewed-by: Stefano Garzarella Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- hw/virtio/vhost.c | 20 +++++++++++++++++++- include/hw/virtio/vhost.h | 25 +++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index dfdfd49da3f..56fa4345886 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1703,6 +1703,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) @@ -1720,7 +1738,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 b2b644c0d1c..8127a9a5a2c 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -178,6 +178,31 @@ 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() - take ownership of a vhost device + * @hdev: the common vhost_dev structure + * + * Issue VHOST_SET_OWNER on a device that has already been set up, e.g. to + * complete a CPR handoff on the destination, or to take the device back on + * the source after a failed CPR. + * + * Return: 0 on success, -ENOSYS if the backend has no such op, negative + * errno on failure. + */ +int vhost_dev_set_owner(struct vhost_dev *hdev); + +/** + * vhost_dev_reset_owner() - release ownership of a vhost device + * @hdev: the common vhost_dev structure + * + * Issue VHOST_RESET_OWNER so that another process can take the device over + * with vhost_dev_set_owner(), e.g. on the CPR source once the VM is stopp= ed. + * + * Return: 0 on success, -ENOSYS if the backend has no such op, negative + * errno on failure. + */ +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 Thu Oct 22 19:27:19 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=1791800999; cv=pass; d=zohomail.com; s=zohoarc; b=AYz7ajV2ZcHTk9Wb6MQRzgDGfSvYlHeCr14sese1fFFBDe/bPToN3vQFdS6d2omd8v2mdI0I44Jg9Fr/duAYh6sSPHjCiwtEoX8D8jiCMhiOmkMlUcFxD1M8sT6KFq90xn+R8tu4ZRw87evS67o3VrFV140gZAIm9M3KAzYkLeU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791800999; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KQgnkcViSHs3Rahhzmph6ktL2+UOz0MojTzm/dDNgZA=; b=UK6oFYBICevHd1hvYgI/zRhUYXLrBm9Tgo3jYR3RsPnm0/eieDBlObeX7gnnlPqULmqaYv8qnpB/agyebNpqpX0mNecLJX0+Y1HZXKoi9w6MksY9f6lAi7nAiFLb1VpY972oO9qFNSvtY2Poc5ja01jJLTCNcyY3bJ584EQq1no= 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 1791800999951848.467993686994; Mon, 12 Oct 2026 03:29:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHe-0007ra-El; Mon, 12 Oct 2026 06:29:30 -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 1xGDHF-0007f7-Sq for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:09 -0400 Received: from mail-swedencentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c202::7] helo=GVXPR05CU001.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 1xGDHE-0005Eh-0E for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:05 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:42 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KQaELBrRt/eVO7rOARWFFp3E6auCqEvOmXa9skjWGR1+F4h2z9TVmUxj5wEN2xslTBLu9bX3gzelhXRbcn4Oe4/bpaJOtezQhEuYSK00HzOJdsnREQg8/rae2aXAxpvOgzwr4fQB2j0D8U7q8bN+qAYeqH/c9o/sc0JW0MKvpQhrNbeivb3BXOvGT8DD3Vxkf6k8CI9JG8wJfHjYfccEWX4m7wXfKXCFJ6jS3CCk8RaK4AajPOfwWTc3dFS9XEJlORcfKysD02eldIqwH49EPLd/T9+kcc/7ibxh5NrLMK1BSGmwVDCW9uK3NXI8Y7SQc7oydYukRavqf2kY3itOlw== 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=KQgnkcViSHs3Rahhzmph6ktL2+UOz0MojTzm/dDNgZA=; b=QKczJEs4QKh66nJ3a2/Y2HwSFF2RZkip+uVbuuLnQTkqOkNNAwZciBeZZpyif9WEb0JN8jnv+H8pPScLWNkRo2HdCdzW4lS/moySWOSzFM0OMhVYhOKc3Lua07qRTiajJ/H7qxtGhkm7F6tRe0brN8jZaKv1wCwERUrwzzXg5i4FQE3/UhplE+CWAh0lqNsHMI5vOvVh7WuHriV7vaj1bEDJ9LJ/CB5cPVxtrejUE9quMdDdA+ken6nDZg115ftz2YbeA91jc/bXMpK5ofENrOQ6DIUlES54XZuA8ZrkNuuSiV7LOxwOR6kDxB8BcIGe1Zojiy2NhOkm+UGEBO9ryg== 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=KQgnkcViSHs3Rahhzmph6ktL2+UOz0MojTzm/dDNgZA=; b=RevetBraq2Y48jDVTUzBL8sSx2Q9yOuECDYpNedeXEZs00AJeoH5u+a1M0wfLVAhyBvU2/oOPAGoaSc9ITauqdHO+d39fSeZxOCiMbJK818QITMvFtZGDIvQ3HyEDGlDH6Et+5TpwNtcOMwPKL5UCAR34dSKw3eIzwSyepepGWigLyVeepXWjsheoJnhaGVFW7N1YZ2qCPENp6K7jsJq9pnvAP7D+8++7iWdcLt+KiphhlCcCQSJcMlL9ibpLTV6DycH1Z+ENb++HQ8MgVyqXwcV50aNwOwPhIk2j6wy0Tdg6TckD0hAwPp6HB5Ip0tiSWcmZPfs5Uv+tAY6BuIYAw== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:22 +0300 Subject: [PATCH v16 14/22] vhost: add vhost_dev_is_initialized() helper Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-14-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 32c80613-0f2a-4f22-b3af-08df284b968f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: WwTaXCMIdZJSUl4+sp5DmeZ4gO7apppGlOa/fOOdcEhHsmDjlNY2Y0/gckvxG3PGJlmMxJCZnReASB5KlJfDjdxVPT0Xq7w8/5rgv98vEYrsxDsE8rnGvBFUhTNn1nR0dC6q+xs+5fgNeDCvlOy/zrdBr8IY/HoMiAGPdFxAiR/brFKv9fGQn7Vhl7JglEj+qNXyC3MjQvB5eWe4GM5+CluKjoDnQ6HWmR+yBDeSJFWtMoK0SZP+hbqglAz+lCECsBqmeGtc3mRmMQ2ug9kevqcmCsJWUZjoWFCuZH4fRt8z5oF25eR+PKGdx/rkdka9l6DaDa9yBt4dbvhZDm0K30bUhqnM5mXQy1Kyql9HP5TIM/ZX1QOX8n9gk3tR64R18M6lSHGDfQwjlj7oY7CXzRMbsM+QpiXnpgvz25tAF7tT5MPP1ZqTg7bJ6CPMUfqv/RswAJvsF5WuJiCg+srgKvXcvzInM6gxW0/0xJVelhhmyowMQpRomKaJWcYLmidCJCciFiFhYGgTf49mdOMa9TEDLP2vXb4Q9fhEQOL+Qka13y37DF+dv0qJWiEp37JNSPr37cQy7IcbJQ9724k1w+GWV6GFgvb65d/KtzrtmZ3n3usqkZ/gy1YO8YO0MMeRt4voknQg35nodyURQdFHd8YbyxGun9Jxd14IpuPBOklZwFzIQLms9vp+3IECKlHDvNuTRy3rFyYZz/0kqcLnwsluIErafEhDvEPklrkgq0o= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OTNicXA0Ty9kcE82R1YxazYwWDBFSjVINW1lK21LcHoyL0ZRa3ZWSzBkY051?= =?utf-8?B?M0xsMm42bTV4RUJ6WnJoQ2tMdm9ad3NrLzRIbnFHQm9iZ1VCN0JIVjlwSjVm?= =?utf-8?B?N29GS1o2UEZYTWYyOHZLK3YrV3JjalcrbVB0YlNHYmdTR2VQc1F3QTZjeU9K?= =?utf-8?B?MGdBMHlMQUJBUTZQcllCU1ozbmRPbTdKNVFzdmhyaEJNWmhqVkFRcUYyemlp?= =?utf-8?B?NlBlYmRzZWVLNXdNcEtyWThHZnBIM1RsMHZYSzNGRGhwMndPY1Q1d0g0YmVD?= =?utf-8?B?c2l5aC9tckVhUldrMm1XS3ltZXRYOHovY0gybW5ya3ZYaHJ4SXovRjV6eUNQ?= =?utf-8?B?VDZCV0FuazlIemhVMVd6QWlxcjladWpzZ2JmaTVQdm45NUNsU3JLNUZSQ0lQ?= =?utf-8?B?NG5rNHg1Mmw4Unl6NExtaXM2R0gvU0hINWFMYm1qQlU4d3YyTWJSUzlLL2dU?= =?utf-8?B?OWNSNll3MjRUdUMxckUxNW9zb3dPa2UxSFRYbEF1QmZaaklvSmFrMGsxd3ZE?= =?utf-8?B?ZzBpbWQ3WHJ4YzdNNWhzOHg1dmJpd09zSXZrdWxmb2k0dmllN1N2djh3aDk4?= =?utf-8?B?YzBPZXMybW1LbFlmWW50eEdDcXVDdE5pb3N1NGF4U1loVjFWMXU3NkdibkFz?= =?utf-8?B?d3RqNkxVMkx5NW9pNGI4MldxMUVudjV5Z3o1ZEc2MjliVXFRZTVvR3AxcXcw?= =?utf-8?B?M01nV3o2MXpzeWJ0Y1JxTVRnWjg4ZFV2cVNGU21YaVdER29JK0t6ZnJKdWp6?= =?utf-8?B?MjlqUFpRZTZvcDlMT1A1VUZ4cU9qcm00R3NndFpHSFcvWitiOHZvZml4QVlz?= =?utf-8?B?QXdKdG5vMlVtYlRRRjc3aUp3YmZod3VRNWF4RDJxUXNVZEoxVGE3bVEvTWM4?= =?utf-8?B?K0llNTVKNHc1SlVCYS9GMlFRdTdkUStDd3BkUFRlM2JtYmlUWEFXN05CdWJq?= =?utf-8?B?ZHlIYi83dGRUbkV6b0lDUzN1c2w2VWJWdEppbG9tUTlIaVlibXJQRk9tU3Vv?= =?utf-8?B?WkhnRk0vU1dIMHkrbFRlby93S0pNMnJReEhsREpUUzJ6ZTkzVndzNVNwWlFQ?= =?utf-8?B?Z00rQ3pwMXVaZGFsdEZPWllSZkw4S3RQL0N3U1RlS2xSTEdnMzNpUEZVbWxS?= =?utf-8?B?VnN4aGZKbEcySXhobFhReEVDbG5NMnM2QjlJSlREa002djVEY2g2VVRTUitV?= =?utf-8?B?MTQrV1hvcHZLRlZEK3FVMVZoTXNiUGlTV2lCQnVYOThnSnRtQjFPZ0laWjRG?= =?utf-8?B?QUErOHpzWnRqMmR1VzVLc2VVdUhVa3Bpdk4zTUtWcEl3WmJ4ZE9hRURRVGNm?= =?utf-8?B?Vnp3Y3RpWnd6TUhQNlFmVnZ5RkQ4Ly9CeWNPS2d6elBVbFoxdHZ4aVJYS1VX?= =?utf-8?B?QTNZdG1IejRmdDFVUVZ5SVhaRitPY3NHMktkanNpL2I0R2dBaEZkTUhOSklj?= =?utf-8?B?aFp2TWNnUG5YRTcrRUhXSHpCYkZHMXlxMnNnSjhwSUx2L1lMZGwxeEYreERx?= =?utf-8?B?SXBqWTFCZklqbmp3c0tpRzhoUmU3c2hCaWVtcGVlUW51OVgxbDRTaFRJenhI?= =?utf-8?B?bXJoU01tK3hRcml0ckVHdDk5YSs1YWZ2OW11bWtNd3hHTTM0SXI2SzExSjRU?= =?utf-8?B?ZmlWbEl4TlAraXpNbHovWGZsZ2thaFBBSVphZ25kMVVRVjVtekVxOHorYXhL?= =?utf-8?B?cFQ0T1dTSUhKTEYzYWFNZFc3R2FYbkRGNzR0aU9GOVFPZnNpMDhTWXV4eWN1?= =?utf-8?B?dXRaVUFjRTZQdEM1Snp5TUFTL2tBdngzSHR1bjBHQVlQZnZ6ZG9XUWZwaDlx?= =?utf-8?B?elhkdU1TdHNOcjJVUDRVZDdsNnhMYkZuVG9YRDhBbGNhdXF4b3ZaQzlGUXhu?= =?utf-8?B?RHJETkhUZ0FkMVhqVGJBaWNYbHZwaXNTMjgxY1FqNFBUeFhWTExkdzBsNjFJ?= =?utf-8?B?aU1pSlZVWWZmb1RIV0xMbERLWTF5M2R3VWdNNTE4SS81TzYydlIwQ2w5Nksy?= =?utf-8?B?d1pRRWdhaWk3cVBXS1E5b3BGdm5yZklXYXphNUxTWlJ4ZTluVGJyeFJyWUVR?= =?utf-8?B?THF6cEdiRTByMzhwY0JGYzh5S28yYzlyRUxRWVZSQUhiZmFLL3hCaGJzNDJ2?= =?utf-8?B?TTNVRVlGa0wrZWtPWjFERVVhcHIwMnR4TmdYZDBQVnpnWGFNdmFoVisvK1dv?= =?utf-8?B?akI1WUN4eTVvNS9BN2dVS0hNMWF4NFlIWUwvVW11cXQrbUhZTWJBb0ZXaStY?= =?utf-8?B?NkZnUWN0QjliaFN0Qld3K0xIR3BpVTdkUEdubzM4WXRQZjZmVktVSE5NWHhk?= =?utf-8?B?TGNRaWNRbVZaSmdiYTg0S2pCTXJnRTV1K0VMNGRXTWFxVndRbHlTUjA4UFJt?= =?utf-8?Q?SBrbZZTRoELwqXlY=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 32c80613-0f2a-4f22-b3af-08df284b968f X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:42.4819 (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: jxh7xGDc4D8U/hZJhiHkUWrZvTu7de0v195ok5dqWGZr+OBVa9DuT47lQGnjLwham+vyrP3DFFcWP762fepXPMrySgTjTDK7b9Do6MaEH7Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c202::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=GVXPR05CU001.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_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1791801001670158500 The upcoming CPR support for vhost-vsock defers the full vhost_dev_init() to .post_load(). On an incoming CPR .realize() only sets up the backend, so we need a way to tell a fully initialized vhost device from a partially initialized one. Add an explicit 'bool initialized' field, set once vhost_dev_init() succeeds, and cleared only in vhost_dev_cleanup() (by memset(0)). Also add a public vhost_dev_is_initialized() helper. Suggested-by: Stefano Garzarella Reviewed-by: Stefano Garzarella Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- hw/virtio/vhost.c | 2 ++ include/hw/virtio/vhost.h | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 56fa4345886..c01ccc800cb 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1834,6 +1834,8 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaq= ue, goto fail; } =20 + hdev->initialized =3D true; + trace_vhost_dev_init_out(hdev); =20 return 0; diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 8127a9a5a2c..73ea130d7ee 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -109,6 +109,8 @@ struct vhost_dev { uint64_t backend_cap; /* @started: is the vhost device started? */ bool started; + /* @initialized: has the full vhost_dev_init() completed? */ + bool initialized; bool log_enabled; uint64_t log_size; Error *migration_blocker; @@ -248,6 +250,18 @@ static inline bool vhost_dev_is_started(struct vhost_d= ev *hdev) return hdev->started; } =20 +/** + * vhost_dev_is_initialized() - report init status of vhost device + * @hdev: common vhost_dev structure + * + * Return true if the full vhost_dev_init() has completed successfully + * (and vhost_dev_cleanup() has not run since). + */ +static inline bool vhost_dev_is_initialized(struct vhost_dev *hdev) +{ + return hdev->initialized; +} + static inline int vhost_dev_set_vring_enable(struct vhost_dev *hdev, int e= nable) { if (!hdev->vhost_ops->vhost_set_vring_enable) { --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801075; cv=pass; d=zohomail.com; s=zohoarc; b=Y73birBEUwWBn+QDQZWqrHPeOFZ/kIP61FzMx6NVgAvOd3kcPXfeNjCIByznQELG/1gtyFHCWr0rjnKFrTf41TGpU91EBJx+VnUbOVthmNUvgDg+4Ic7s3yE4igV7W4NQBwGWFx3VOZFvneJaWA3lI9TtsUL9UkAMQdfoEoYSOg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801075; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/loml3enlc59rmXiaz7S5sIhG/WnHAXU5sTXFnDUBVQ=; b=QpW5pZ8VMIzTK/sU4k9X+qh8HKfzQ/HYk3uBOZtm0aUlVambOdKTW4M6djU1AZjCZ87xZbtKh6F9ShmMkMU/bKW8jWwSPD7kdWONdm1pDqKs81emM8IYwnQqlFg0n/WiqG+n/8zFR/XXKZZ4gLTkTpdUTIP2XkQkJRce7JJuTOM= 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 1791801075102506.43011769964323; Mon, 12 Oct 2026 03:31:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHh-0007vw-7p; Mon, 12 Oct 2026 06:29:33 -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 1xGDHI-0007hN-Rg for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:09 -0400 Received: from mail-francesouthazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c207::3] helo=MRWPR03CU001.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 1xGDHE-0005FA-Ry for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:06 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:43 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tNar4qNTPh+czuoSB8aqnqaWLN6cveKfOA8D0KKA+kg/fwHybx0L0ksDmkvV2R19K/kzOSLXYXh0/xKoNuTkQ8qUoAkNikJ69xuilV01jEbdD4s1yo4OE2RVqodm0cHDIMfFSuO9pE+pRVA0vgOB9jT35e1iQeDe/unnujtOgzbnCXV7JoWPgJR7YTtumqDHUsRjfCsj2Xpje861fX4YqPL2+Q1TF7xeyg41nN9S3iaOS22CFlwoOLWpkfXREUN/86aAjb9ltAQP+0KwrjYBCSTkhz+3WRIzXfisJpsLIu38HCC+Eyed7pPdVgLlq0niho2GgDhH2tvvp819VaIfMA== 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=/loml3enlc59rmXiaz7S5sIhG/WnHAXU5sTXFnDUBVQ=; b=lrwpq2Lou35Bc7dBEo7YCFwMcgH7Sp6m8vXzmQboM38CoKVh6vhZHI8oopivbEeqG91w1xuDeYxrjTTn6XlWm6WdJeDquKtGKUDYdGJ9ImqSTCn5pVrNA9aW/SSi77toga6Baa5buInESF22ARi+BDIHDbaKgLwj5CX8qvezdo1YTVE0z7ZA3qFhA7CMOKg73ADpBnZMY7PRWCYtaPqra1pFDWRgwh12uCsCbSfv8jellIkaSQptiLft2BHOs7AnrsUTF3XRO4Itukd0n7VYleCKmxgzLP6DJFIkHryVnBqjbQ7d1OV8k6CkwH1Z/AjEXtbzNl0hmRpj499/9CyErQ== 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=/loml3enlc59rmXiaz7S5sIhG/WnHAXU5sTXFnDUBVQ=; b=TeRb8BfUKSqh5ZPcUQl8zlZQYhxZgn53NOXtNcApsWuWlpX10peOwTSB2su/WngWS7OoVTyHNOPNliC+B43dpiYK4+uTPY03UM4eFRwGFnXjyhfPHECAjJsyFc1vDmdMEUIZDyJ5UCs+lPZwS5ek9Bxon2+raag+W7ly51DpDgm3UqPT9chu7GxovICohmO86xZlwdukU/49y3Xx+ZIaQjlyAoF81IUBu3WAN/g7g6Zey8JkVkzcnLXivXQi5e3M2X2w0A+hJfY8o7d4huRj96o7eQT2xBTRaiZx36BoPUO12qZUs0Rn3xMTDNFr7bzy/Jy7kEq/kXaT5MuN4fKigQ== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:23 +0300 Subject: [PATCH v16 15/22] vhost: release ownership in vhost_dev_cleanup() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-15-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 74f56524-afb8-4cf8-31d6-08df284b9712 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|5023799004|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: jiqhn03cjP8pME0YHOZ5T//4zrX+ZvgbFWFQ5g2QXl+B6wwbxdpxiE36GgTZO4n1MT4RVBcNHCfrk0EnlM3kLSjR3zIOWhBm3xh+L8FrZQZZDm00o4rts9Uu+8RorW5nhiy7vfDUs2LBbMqk709A3woXwuihqU2nH9hfeGjdgYm98oZBka8wtFSlSOcH8K9s4sHOOGrJdtL1/7WiHYbYjGHbfh7IhgL3aIq7YzLD7GCEp/0seA5xHII49Rl3oBnaQ22cKAQfLVb29TXDfINI83tyRchjq7p+O5BTysxRNOexZeq53o9EBD7DFoI2PW9sPFpj3eHIDP4aZPFpzEwANtrjGOH6OE0elzr1Ohz9lWrUe7cVXmaMKeSNCUDF2QIBYKcoJEDdRQ03ty2th4QT9ssY2ZxQQgLk0Za4lCB1yUPMTyxPY8wfDhfrtGF8mWKnGd/I1Z1QwVlnxDxGv9OL/Y9OfquHgWrr6apMP/Z2ZrMeoVqhqAJylAPdW2UUWGWiPySJo5kNTQVdU0inR/WPxaalSzWWKqQip4V5ZpUA0a9D3YHvKM9bljaivhBkAWeuR9WwU6DapAe37/Ejl4cWShQ7nvzOXAWtLOFixYFlmm9nAm1NmE4JcLSMN0jPwn1IqAZXHzM8H4TcckLivr/xIiTssaODSTO2gKwT7wi/uQYJ+qzTgs85qExscIELlwSMQZZLaZQutLHTNewzjv3FxGNU+7GMHHJ6YldcIh9+fx8= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(5023799004)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZmZtY1loamk5Sk5qRWdDd1dMK3VtVmo4dnh5RnMyVE14bWdRbUNOeDBLWFgx?= =?utf-8?B?Z2tQVEIrc2ZnR3o1L2NIY1dzYlFFL2IrNUtaYTFiNGhXRzBta0NpT1hReU9L?= =?utf-8?B?bUxIQ0dDSjd2WXBQcjM3UTRRUEYveWhBZ3Y0RS81L2phNEUwQVg0YVkraFJk?= =?utf-8?B?emhSTDN6bjh6ZWorVlZvYjZXVktZczBzN2R2Vy9pcStSZVZ0TjhHMnhmWkYz?= =?utf-8?B?WnI3WkFIOEJWVHRuMWlKN285aFFWaFZWY3lkc1ZGdjM3RTh6SEMyUnJLSndP?= =?utf-8?B?NVZkVXhpMjRHSHZ3YkI0SGllOFNSVTcvWWZ2YitNbkt3ZW9KUlVvalNSVGhJ?= =?utf-8?B?M05ra2dSZmdGM0Vhc2VidXNOWDQxWGh5YmkxY25vZE9iUGtqVDJ0N2tZYWdB?= =?utf-8?B?cVJ1YmVJNUdqVlJ4eWpVUVlqNEEvaHA5OW44L2l5MXp5VTlGbGx4R1IzdGNR?= =?utf-8?B?QndPM2hEanRuYWhqTzR2akJVZFBOclNYRFJqaGttS25XZjZQbzI0c3pEZndz?= =?utf-8?B?NUx5SlVkbmVUbkdEUk1mZ1hheGNXb0h1aE1rY2t1UGlBVkNxNVMvNnprVUdC?= =?utf-8?B?TmxNWFJIVlJKNmxTdVQya1F2R3pOLzNQenZ1THBmSG9QQml2MjFRazhmYi85?= =?utf-8?B?a1JTOWhpSk1aNXkyZTdEcnJmOThXaEdaSzlnREJnQ0hDL2FXS3BYdCsrU3J4?= =?utf-8?B?UExZaHkwS0k3RTY0Q2RNd1dVNVJqZ1g2eEprbHU0SGRTeUx3V05BYW9tOXEw?= =?utf-8?B?TVBINmxDZnRIdlEvaXJUTHNTcysxYTN0Zm5aOFpFSHVVVUNOd3A2Q0J2RExq?= =?utf-8?B?bGpWYktvMG5tUHpCeTBGNFJXU3YwbWVGZC9vTlc3eWx5Tkd2L0VTQXJqZ1RO?= =?utf-8?B?WS9HNHFqazIyaWJ2aGRpVXZyTDhWRWsrNmFEZnpFWVFGZ2ZsY1NmS2Mva2NC?= =?utf-8?B?dnV6SW9WSlhWNXNsVXMxVXU5ZG8vWmwxaUh1a2o2Tk9WdW9sNnNYVnl1eTl2?= =?utf-8?B?UHVlTnJBMDd6WkZKTDB5L1FENkhqSXhoRjdtcktjVU5jWVRCYTVYcFArVUla?= =?utf-8?B?QVhQanVQTTFvVTlXdjRLTHF4SXl2bDY2enRmTVZmZXZiZ0Fodm5qM2x6czJJ?= =?utf-8?B?aWRVY1pkcnVMdVd4cFNCeXN5Yjg5cUs2Y3MxM1RxNU1TOXpQUDAwOFQ1SU1V?= =?utf-8?B?WlFaZFhKUDhNOHBIc2VPSy92SUlVYXA1VFFPWGdITHh5aWZCZlg5dk9pS3Z4?= =?utf-8?B?ZVIyamlyUmtudTAzQjlqQXRncUkrODJCTlAxUXRFR254Z0d0MkN2OTFpeUFD?= =?utf-8?B?cUd2UUhIV0xhdmFobWdUaG5tckN2c0Z3WVpXMkRPclZVTVdrOW1relhoVHB5?= =?utf-8?B?YVFpVzJDMWkzcWVpbVd4ZFkxbEpDS2VRRFFWdDEweTAwOXBGUHgzRFB5V1FO?= =?utf-8?B?R3BDM3FwVmFoWUlydFpDRkViOGZaUnhFbE10dEJIK091TmJxOE9ZNnRSaGtF?= =?utf-8?B?T094M0lmMzNTNWVRbHpQOEg1eHpkNm1lcG5ic1RtbkRBZWhqeFpBaFNOZGxj?= =?utf-8?B?elJ0elBzRXgydFZVMmR3T01OZCtVTU42VVUxbHFZallBUVBDdzlXMmJqYTlq?= =?utf-8?B?YjMxVmVMRnd4dFQvTjUzVHMxOWUwTUVYR0twVFFrNzlhQzZwOEV4cWpJanJB?= =?utf-8?B?VG1ZbDY2SFlod01tb1V2MmEwc2ljb2RmYUFRY3JqY2xIa211NGZFZzAzMkZx?= =?utf-8?B?Q2JBdTMyWGQrb3B1UU5VNjNUUi9CVnNDNDAxekZEZ2tScGFsVmVzZkxkZGVh?= =?utf-8?B?Q21WUWFVOG4xQ0JHWEx5OHl1b1pWVm80QWJaVHlhTDYzaUVFQWtSNmpTeFdr?= =?utf-8?B?OGpzYk5xVEdrdnpxYjAwMS9uWmN1a1UxNzJIZWRQN24zMWlmR0ZhamNrNjJj?= =?utf-8?B?ZXZzcUsxN21ldVhWN2QrbmNqK2RqWVpNSmo0RFhUUmd2K09USTlHU3U5bVY3?= =?utf-8?B?QlBzN0E3eWNxbG1zT3VBd1dyOWZKNEk1T0EvdVV0OEdncUVHSFlRVzYzU3RG?= =?utf-8?B?bUZGZzJsblVpelg0Rk1PUkdRRjJyRDRuL2pwZm54Yldib2ZxN21Gcm1JUzVR?= =?utf-8?B?RzZ4cVM1b2ExMTRWQjNzZTlIckVnZWNsRzYwMUZQeVBRakpxa1U2RStZTFky?= =?utf-8?B?MHNLUStETTIxT0dOMTZ1RWhFcnRKY3NhSzU4UUl3dXUxcTUyVHpCb1c5bEJ6?= =?utf-8?B?RVJieUY0ZlJLNC9QMDFQMTdhRFp0czVzNFJoTERxUkEyeGZ2ZG1JREhHdUdF?= =?utf-8?B?Q0Q3TVFqdXUxKzlpYldKKzFzQU9kakhVdkQ2dUFudmNPYjkxenlQNGlNc3Fl?= =?utf-8?Q?fT07UDLf+/isXCBs=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 74f56524-afb8-4cf8-31d6-08df284b9712 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:43.4861 (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: TWV4q7Dpq22ruHOtjtChVAoRBz7QLa5E2vkj1TZp0T9D2GokuCNNpoCLZVgPGYDt1frJPp1a3/jywqV+jwgKhG3O/yeqrasPwvl7l4+J1xY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c207::3; envelope-from=andrey.drobyshev@virtuozzo.com; helo=MRWPR03CU001.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, 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: 1791801077308158500 vhost_dev_cleanup() closes the backend FD, but that doesn't release the device ownership taken with VHOST_SET_OWNER if the same file is open elsewhere. That's the case on a CPR target: the source keeps the FD, so if the target fails after SET_OWNER, either inside vhost_dev_init() or later in its caller, the ownership stays with the target. Once the source is resumed it can't take the device back, SET_OWNER fails with EBUSY. Track the ownership with a new 'owner' flag in struct vhost_dev, set and cleared by vhost_dev_set_owner() and vhost_dev_reset_owner(), and issue VHOST_RESET_OWNER in vhost_dev_cleanup() as the common teardown for all those paths. Only do it if the ownership was handed over to us by another process, which is marked by the device with a new bool flag 'owner_handed_over'. Upon ownership release failure, we have nothing to unwind at this point (CPR target teardown), so we just report the failure. Reported-by: Akihiko Odaki Suggested-by: Stefano Garzarella Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- hw/virtio/vhost.c | 40 ++++++++++++++++++++++++++++++++++++++-- include/hw/virtio/vhost.h | 11 +++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index c01ccc800cb..085e2ef6f16 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -53,6 +53,25 @@ static QLIST_HEAD(, vhost_dev) vhost_log_devs[VHOST_BACK= END_TYPE_MAX]; static QLIST_HEAD(, vhost_dev) vhost_devices =3D QLIST_HEAD_INITIALIZER(vhost_devices); =20 +/* + * Release the device ownership if it was handed over to us by another + * process, e.g. the CPR source. + */ +static void vhost_dev_try_release_owner(struct vhost_dev *hdev, + const char *when) +{ + int r; + + if (!hdev->owner || !hdev->owner_handed_over) { + return; + } + r =3D vhost_dev_reset_owner(hdev); + if (r < 0) { + error_report("vhost: cannot release device ownership on %s: %s", + when, strerror(-r)); + } +} + unsigned int vhost_get_max_memslots(void) { unsigned int max =3D UINT_MAX; @@ -1705,20 +1724,32 @@ int vhost_dev_init_backend(struct vhost_dev *hdev, = void *opaque, =20 int vhost_dev_set_owner(struct vhost_dev *hdev) { + int r; + assert(hdev->vhost_ops); if (!hdev->vhost_ops->vhost_set_owner) { return -ENOSYS; } - return hdev->vhost_ops->vhost_set_owner(hdev); + r =3D hdev->vhost_ops->vhost_set_owner(hdev); + if (!r) { + hdev->owner =3D true; + } + return r; } =20 int vhost_dev_reset_owner(struct vhost_dev *hdev) { + int r; + assert(hdev->vhost_ops); if (!hdev->vhost_ops->vhost_reset_owner) { return -ENOSYS; } - return hdev->vhost_ops->vhost_reset_owner(hdev); + r =3D hdev->vhost_ops->vhost_reset_owner(hdev); + if (!r) { + hdev->owner =3D false; + } + return r; } =20 int vhost_dev_init(struct vhost_dev *hdev, void *opaque, @@ -1864,6 +1895,11 @@ void vhost_dev_cleanup(struct vhost_dev *hdev) g_free(hdev->mem); g_free(hdev->mem_sections); if (hdev->vhost_ops) { + /* + * Release the device ownership if we hold it. Needed e.g. for + * failing CPR target, so the source can re-acquire it. + */ + vhost_dev_try_release_owner(hdev, "cleanup"); hdev->vhost_ops->vhost_cleanup(hdev); } assert(!hdev->log); diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 73ea130d7ee..efe1eed2606 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -111,6 +111,17 @@ struct vhost_dev { bool started; /* @initialized: has the full vhost_dev_init() completed? */ bool initialized; + /* + * @owner: has this vhost_dev acquired the device ownership? + * Updated only by vhost_dev_set_owner()/vhost_dev_reset_owner() + */ + bool owner; + /* + * @owner_handed_over: CPR target side. The ownership was handed over + * to us by another process (the CPR source) and must be given back + * when this vhost_dev goes away. Set by the device. + */ + bool owner_handed_over; bool log_enabled; uint64_t log_size; Error *migration_blocker; --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801022; cv=pass; d=zohomail.com; s=zohoarc; b=NhEBwaOzGd5Mx0dbJk/Migz+DNwxF6JV2FGIin/qeakxeBQ/om0esKgz73ShggvXVWB4mKcCqmAebcOpd9WHK3AVlIBGJQy7RA399nXP08nN2poL4LoCXOIZOlimRvl/Zs9xb97dhFR/HbNutO8AqXFEtp3j1CsMSnfxuoKegzA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801022; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=iqFyiBMw7BGy2xf/Bhra5i6q6k7Q2873lM6tyUGhHq8=; b=DinbwPHAJInaHszlzcRKjtFDU2GfEuJaTrpJ9KgqSPlprKjkPDgh2lij9DwbW5lYx1XpEohMlluRBJcgagVqNZjFk46aqTeaX5mo+DzDmNLoE8ZMKJdXOqIR1ZyvsHGjhA5lYsJVJcT/VhWwCNqGMtdUO22W13qiEoXTzdWMSa4= 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 1791801022522830.0152845600943; Mon, 12 Oct 2026 03:30:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHw-000052-Kc; Mon, 12 Oct 2026 06:29:48 -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 1xGDHK-0007iF-Pg for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:12 -0400 Received: from mail-swedencentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c202::7] helo=GVXPR05CU001.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 1xGDHH-0005Eh-Ct for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:09 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:44 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xkC6aaAr2GvwL+chpC90wJhEMtkh3YiMT0O4uNVONWSKSLMtVIhhTeSl0teyTHDssEm2KoZnzwNRT+qNHH3cpgavbCo7CUHDJ+mENXfw3DJKLfvOq636OtIIztmbN67zBxqCBleBP2Ch4wRcLnX2t9KP6cqCFUcQlCm77Zd00AGdEEnXBiMlUj5p5SbIxWjk8ylipo8jyM7MLKAjOfsuMSmyRaoPh9DsDpuDhfyuf3LyrckQFOAA4QaS16RB7aIidpEaj+LCImkc/Rf2PKbDe7rQJZCQQn8MH7+j8JRB/r7IqyfCv7UOaP7i0veH2QnWVUxfgHmlDlUfTzmoYPvTaQ== 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=iqFyiBMw7BGy2xf/Bhra5i6q6k7Q2873lM6tyUGhHq8=; b=hNoF/FdGAAKwux1zQboKUr2JzjbHS/lCfabZQ4eRf/r58OxD3Q+AqP142HboTxeunSpKtgWC0JVtM8fki1VqiSk+mVuEeba35V5xQev9+GZ7FyqHzoHHtWs/2vWIXW3ZgBAYT7XYPt3qvpBSCDvsLK+7Jg7t9xcEULRp95xS4Pql2Ll6vhvM2axB3q245jqt+o6FrhMUdJz6PU3rKes7KzUoOs5L1HeobnBEZgesZTpRRojAO7sHOC/vSLrAUY/S/+biC+pg4rXA2dAcWwhHJcudUJNw08PzvlxkdnDSYiw6XMQ4lNhQ498y6QAAuAIJOMvsrwy0NUsSuHefNAGoXw== 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=iqFyiBMw7BGy2xf/Bhra5i6q6k7Q2873lM6tyUGhHq8=; b=okRfRUvWSxf/nIE9o5e+fBMwoGPJ3OSHLTeNA3f285B0fWMAeajAnKJMtRzjVwvy1TTg4AZ5VIGTlLpFj/Alv3usYCF15CaznHUFwFObGFZBz3pJ7NMIl0AE0glX7iv1DzUAE/bf/r6X9DmEA7rYJ2L1Yj3a0zfDggG1diXY/UiJG+SUr/4X8d1ZQbW063d04z4x8A9yl1wViRfGLuIptFxNQdYQx2aQHvGUTVPYiYnWAjxrP3E88JavMJ848LXrMaNbPLsAA5NgzFNLuNOVNWtxvcmUcKDqjoKkD2upTQAOs6SNHtxwKVgmUqkz3hGqHPyTJ7aR9KJus8e3EMbXHg== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:24 +0300 Subject: [PATCH v16 16/22] migration: add MIG_EVENT_INCOMING_FAILED Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-16-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: 29f43359-b5cf-46b9-5ec7-08df284b97c0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|6133799003|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: AUXAScLG2FPerr4HCfnERxX9I+u//DPdTQ+fJzHK5g6s8p3sxDoQIEIH8XZ90Mq+QbJET7bi4DAgAOVrQAU1/Bqh6jhUmW7lTeUkqJjXm4OrzwncUN8U8etVLb7rRm5DZFl1BPnBm0wc6P82dwUyZ1QF8fFhvKLNJRO+5g/tYCvOhkB5G387Twz9gnSFmqB45MLvKfcdEYddH1ajQuucS5wphIxD488NeL3Q4dLPK5CB+bnxuU3jqwEHtK6wPDE4o5DuWwmHKYlHrUB35P3X+awQhLVMmy3LlxPTifw67HEu2TQhKoATqEk34NK82ZCBxw7npx2s8wHqOFdIusCBKciFMU9rJ98ifBT0ckp8he2E1pSe7DlV5Ki7p4YKosXwC9llX1DEDCHe7MYcygySKiekbidB+4BejNKNR0GDJfDuV+HEthlZHDlKymx/rQ70uMaMCHrIUxgYpmR5xr71e5E1+YuYhWOAbQQdW4td+fnUsyIHhqFBr+QNYsOc/IuDq1LF/dNPRcNUJeDlBNAKTuIDmD39mV0/520/QZWw0IsYqympykSXwvrLVWwXWk3DOLSzrtXsSJsBXolFwmZuImwF9l/rHwmti5B+HWnl3SQZ2uKwrnHFwXpZFsCv4krYRQBh6PzG6pMcbiPa+Z4246PqcwIvW7wlF1TeesU+72lqdTyiaJbuyTnU+nMRFJaKcj5GwbtxmBWy7Vys7fCWUtQIjCTTHNi/+Vq3gLEPDLQ= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(6133799003)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eGw4NUVWdi9VQm1VQ3R2RDdwTklBZm5yZEE3a3J4YnVQNnBQLzNOTEdYZWtm?= =?utf-8?B?Rm1KcHhFOUFJc2RlZTkvV2NMNFJaL2pjcWtnSXlTZ25HMDJGUlJCcDN3Y1B2?= =?utf-8?B?V3lGSFNNZlpwNFBMRExjRGdBYmtvcFRUYXNDUkRQbitPY0p2VmJIcTNQVFM3?= =?utf-8?B?QWxtazRGQ2JXMU5ING9qdWZZbFZ5aWFHMEhQeXBYVWVQdUIxcmF1VGJnTERS?= =?utf-8?B?MTE1Q1UzQ1hDd3VFSndtbFFlMDdEdlBOcktrcUVNUXYyeVFrTFFwT0ZRbHVB?= =?utf-8?B?VjIwbWFCZFh0WFpOb0YxMEJUU29HUm5kUDhIZWN5MmpIWVBNYlBIczNMKzFo?= =?utf-8?B?L1VlRHhYVk40THJRckdsOHV1cXQ0Q1pRTE5VaXg2bDN1eU5oQ3p2YnI0dE1B?= =?utf-8?B?bEhEUFdZMG5qMXhGeUdTcVNWVzVXOEpQRlhPQmwzWUVGQTdabkNmMFBvcktv?= =?utf-8?B?OVJjQm5YaGovVXR5OEdYYWJXUXoxV2tvRkh2b0J4alVwYW5sRU82TC9venhF?= =?utf-8?B?Ni8wUGdaSjBPd2NEWmNVY0FQRUlIdi92UFQ1azBnRTV5ekxrOVZlMEIxK2tu?= =?utf-8?B?dEhDRk12UmNnT0k0VlJMM0pDT1VjYVlpTkxDaThJeGp2cmRnc0FZeTRmL1Vq?= =?utf-8?B?OXZMaWovVHdFTzdBUlc1THZFampyZ0lFVmtvbm9GZ0p1Skh3YnVsL3pJK3Nj?= =?utf-8?B?M0hzQzQxVWNucEpEb3FjOWNiRzlUa1k5eURIelVNczBIUTV3RExDZy9IMmFS?= =?utf-8?B?YzJXRDVOY1owM1ROTEcrMkZCc3NoNVFsWm5hRGFNV1NTVnoyTGJTVk9WTFdy?= =?utf-8?B?N0w4WXRiT3JDN0o1SG81SW5kK0Q5US9YSzJ5TzVaanUyV053MW5aMGpweWV6?= =?utf-8?B?MW53YTRjaTJhdFN4RVl3N2VDTUZyeFhMT1NIT2Z3TTlyaUcwbGxlZDRmR1FY?= =?utf-8?B?dEhuY3F4eHJyVDJYYnRrN3U5OVVNMGlhNHlIM1JUak5aTm43Q0I2TFgwek9E?= =?utf-8?B?clZSRVAyb0dNWktuYmRxaHRRZTUzZTZMUGswMkVtR0N2ZjZzTDhqbHhBbnBD?= =?utf-8?B?MjZMRGtybEk3ZEJCNnYxOXNpMTNUOHhSdGw2N1FOanlFY0xQTUJSVWpLZmFv?= =?utf-8?B?OTNzSHR4SDhyN1RVdXNSUFQ3bEJqWml1QmU2L2hEM2R2T1dSOXFDOGVxT2pw?= =?utf-8?B?SE1mMlBHQVZ4djROb1VQQjZIVDV3N1YyR2NGMVNQYXA5c0xmNG9UalgvdjZU?= =?utf-8?B?SmNlUzZ4L3dVNjFrMmtsU2d2SEM3cC90dkRlbklzTTJSNFZ2R2U1MlZqazh1?= =?utf-8?B?enhxc2hkN3phOUhyRWpTemZwMFYxdjJzSnFOZFFxZkI3VTlNQzJIVG8yd0Ra?= =?utf-8?B?bG15UE1vU0hMSk9yTWluQ2s4bEhzemlWaVM1NDJnTW5UVTNyOE9sRGFWL3Fw?= =?utf-8?B?UmFOK2RTNDBoSjA2WXR6bWJhaFJlNUtQaUZRTUV0ZXlUR0UwQWgrcm1NanNU?= =?utf-8?B?cTFpWFpGRGhVejh3UW1XMlVCWUgwUjFjdk9KR0dQYjZENGdiZ0NrMFJqZSsx?= =?utf-8?B?TjdRNkE1NjVnR2RzNmJkVnVQbzRoMzJvbXFxTDUwbno3cmRPNVZjaG5ZZkpL?= =?utf-8?B?UWg1QjhoOW0wK1hrQWh5UzJZVkkyMWw3SlR5aHpGL05kT1lZa0UxRWZidVBK?= =?utf-8?B?czl1UjF5Lyt0OXBxNFdDLzB6cGlyRUhYZStvUWorVmJBVS9sd1ZGWjJGamwx?= =?utf-8?B?M2JMVkhOaGFkc2RhT2tIRUlsdHFXRjRxNE81eitMcTg2aUN1ZzhXSzlESjdS?= =?utf-8?B?bFVud2wwY3YxWTQ5VUFxby9iTFNyd3hDMDBINkdsTXJUVUhnMG1DUUFPMm5F?= =?utf-8?B?OEhJVnFaZkF2TFNKQTMvY0lNeThpZW1wVmNDL3doN29RQjI2VW8zOXNmTVBS?= =?utf-8?B?ejdYK2o3M0tJczlEMHBxWHlZQXdGRGFPS2VKdW94UTV1QU9GNHlBZUJZZWpH?= =?utf-8?B?L0FTR2xuWS90citlbnFqejh3MG9WSDhYSk82QWp1NTY2WXR3b1ZuVGpPbFlm?= =?utf-8?B?TmhCY3RlbE13ZlFINGR4WWh6NDg2TzQzelRxWXFWMHRCVkltQ0VvSTdEelV0?= =?utf-8?B?QzMzSjhzN0dadEtFaW9mZFhkSEFVbGdzYU9pSGxyOU5kcGVaMjVWNHgycngr?= =?utf-8?B?VVVtbWlaTmRwckFubG9KUUdHRTF6NVIyZjhQYUlCUm1RbzhHSDdtZEZydHRy?= =?utf-8?B?ZlFUY3pSWFJFNm1tQ0Y1YjVkK0RpM3dpU3dWTUFUMCs0YWlPQXMzdDNnK2hl?= =?utf-8?B?cko5WEc2Z1pvYkRRV3RNK3Y3OHpsMmFmbEVnM2h6RHNZbEpZQkV5bytiamdS?= =?utf-8?Q?JYIb/CN0I5mIlDTM=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 29f43359-b5cf-46b9-5ec7-08df284b97c0 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:44.5969 (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: 5tF1QRcK5xbRQup7RDzjL8V6lmllxzgy2+in6yHfGMyE1hoqzZK3Yo7neR7Q05JtOStdKsGhy+ztBGzZldVfO+cgz3L2Q+QyUrm7mISQL2M= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c202::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=GVXPR05CU001.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_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1791801024169158500 A device may take over a resource from the source in post_load(), e.g. vhost-vsock acquires the device ownership on a CPR target. If the incoming migration fails afterwards, there's currently no way for the device to give that resource back before the failure is published, i.e. before the source is told about it over the return path and resumes, or the management sees the MIGRATION event on the target and resumes the source, or the target exits. Add a migration event for that, sent to the migration notifiers from the failure path of process_incoming_migration_co() before the failure is published. Reviewed-by: Peter Xu Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- include/migration/misc.h | 5 +++++ migration/migration.c | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/migration/misc.h b/include/migration/misc.h index 019717f4cda..86cc7eefd66 100644 --- a/include/migration/misc.h +++ b/include/migration/misc.h @@ -65,12 +65,17 @@ bool migration_thread_is_self(void); * - MIG_EVENT_SETUP [-> MIG_EVENT_POSTCOPY_START] -> MIG_EVENT_DONE * - MIG_EVENT_SETUP [-> MIG_EVENT_POSTCOPY_START] -> MIG_EVENT_FAILED * - MIG_EVENT_FAILED + * + * MIG_EVENT_INCOMING_FAILED is currently the only event sent on the + * incoming side, when the incoming migration fails and before the failure + * is published. */ typedef enum MigrationEventType { MIG_EVENT_SETUP, MIG_EVENT_POSTCOPY_START, MIG_EVENT_DONE, MIG_EVENT_FAILED, + MIG_EVENT_INCOMING_FAILED, MIG_EVENT_MAX } MigrationEventType; =20 diff --git a/migration/migration.c b/migration/migration.c index fab7949fe11..82a8a252289 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -815,6 +815,16 @@ process_incoming_migration_co(void *opaque) goto out; =20 fail: + /* + * Allow the devices which have registered their callbacks for + * migration target failure to undo the changes they may have + * done in post_load(). + * + * Do that before the failure is published in any way: the MIGRATION + * event emitted by migrate_set_state() below, the return path (if + * present) in migration_incoming_state_destroy(), or the exit(). + */ + migration_call_notifiers(MIG_EVENT_INCOMING_FAILED, NULL); migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE, MIGRATION_STATUS_FAILED); migrate_error_propagate(s, local_err); --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801032; cv=pass; d=zohomail.com; s=zohoarc; b=WA3VoF+WqvKNtzKClXqsfctVZ9NEw1nTGRkicAIWBK9Xw++RSZMUfm1Ua9ErVJBtFjfrCRe6q5/avM/WQauOZe3ZDeKB8q0nT3HzWWhZlLkWnPS736yvGW4o7HEwh5LjIVhUTi0nA8Kl6hNjXp/Rr0HZ7huHt6Oc1GzG7HgIv/s= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801032; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zuZ1L1/6fDMoqJD4xhpbWURBAK0zYGO/l+m96Q1DYGg=; b=mgrMGIj+u7lUz0ksbeDv/YI05PWx5kTv7fFlews95K8Duyxs0EwUs/SIK/82+YBy3Wuswok+FcOpOG9Se23VejZvdP4IaL2E43ueEYivOwnxWA0I6fCJg1/5o6rf7M1L4vR61kseYzqFPAhi3svOy6qNyq5R+FGOQHV9qZF1koM= 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 1791801032208681.8361618685876; Mon, 12 Oct 2026 03:30:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHt-0008Od-QH; Mon, 12 Oct 2026 06:29:45 -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 1xGDHN-0007jc-EB for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:14 -0400 Received: from mail-francesouthazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c207::3] helo=MRWPR03CU001.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 1xGDHJ-0005FA-6n for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:11 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM0PR08MB5523.eurprd08.prod.outlook.com (2603:10a6:208:17f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 10:28:46 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XNoX2PaEqyu81WQMN9OYei++WpQWuUqb7icIGbs1OYto85LNAjhFnVJcgYzUHH6x1jblZkf2OrXO05UQksGhmjE1pXcbZSmmVQaOTH7nx3z+QTkQS9kOswvtJyMBCQ8rZSLiVcMA1Ava0tsZVsom8KuQzZIdWvItwmLW6YGW1rNtbiWXPTi6xJRC2ANprwyPWKVHlhoBHSNyBnMc/KA3Gspdm980ObDFPtqJmO4mHgpORir64XhoLiR876LTZBgxF4q05E01plvpIb1Gg3XVRgAG8p56OmuBJ1Hv6IG8K+zCpYjU9Ee6SO8C0R83sxfP7FTpQPz9XinBfpHyoYbPwA== 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=zuZ1L1/6fDMoqJD4xhpbWURBAK0zYGO/l+m96Q1DYGg=; b=g1DAyHlcb8Rw2kE5xT1gFedDUScEfgGtgEalXht1WpPK2MEVD0bwq6XYw2FNC7zUhFTtJcpnSuJvWb7505jUZry3sfHRtOy5x39/0YcDr23/75uf/lLtlpoxrOk95o+0e1LyyjKYk0J7+h5j9vSOgv9sy28nhV2YLWnS5xMmiAz9hn8ni+MmrosjBgdcdQURIaihnjqa0r3a0449pD469LwYHJ8gu+0pQ4quENLcNMcOa3qytjOOBVH0qdNxpLm9CnoA3M2LwPu5o7EKdqT/+Atp+cLF0sdalAfjm/zxR39wuCitkaHguZQyASMA6mDUEIXeb2ciGPzg1nY3j3vcvQ== 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=zuZ1L1/6fDMoqJD4xhpbWURBAK0zYGO/l+m96Q1DYGg=; b=mkSG12HrkT9iPmYQsn5vT0eC3IwDu/u7Qo6L/jaYs5hzOQWE/fPxM5jf7uRmvSScK8UvyL57O1u6wUwPwO7ZwO3H71tF0/toekMbl6Crwrl2OQ3b0lgehc19V/Cdw8fGPfB7mAJRMCDZSGQ2UeSsWFXAC581Uopha2XvUP/ZjYM/1e3h955JCOqvhgDJ2wCTfKlM55iNTlSDyCMQNkbV4OfwNjhkMYLZUEuMYTJ8kgjhhUOfcC/QdXOQVNvaU9Io/4dl5xhhX3UTOCRuRF40RLWNMAhS92+iU8xBc01bq+KagadUhiO74N0WG1zlcsLfR91yBomgCR3WbJIp1laXuA== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:25 +0300 Subject: [PATCH v16 17/22] vhost: release ownership when the incoming migration fails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-17-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM0PR08MB5523:EE_ X-MS-Office365-Filtering-Correlation-Id: bdbeb5b8-a756-4df3-617a-08df284b9868 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|52116014|1800799024|23010399003|366016|10067099003|22082099003|18002099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: xNuvcT6KICEwNZ8munevQ+EfW5HhSoOcEOgKIUKzbHfmS96RUzp7TiWS34GSHO9JtvSeo4ebji7RPuvjiVFOkPWoVfqoeYheK7kYNe2wmrcjHAV7ysXTdo5nB7JELk8SLPi7YLRcgHB73dENMz7GApdKW//PxXvyaLacngx4znHXUfUj72yeF3dNU7ouWsWkgzMG81ut4JPnfC1X7XK5Qh5ewqPFqlV+puXPQ5x+dcKal5IpvB8c/mrHxS174hIHjx4W/ZoTrg8hqzDlP770q7Hn4AMJeknW4ZSvBmB4Yeb5BhM8CB0T3o8/zqPjkzMhwXj65X6kxJi7Oa9ztXqHqq3GfCPWiFCFXF48NyhUM7WGH6z8hakh/asiRtmDtYE8nbhUQr4QgZa0F/7qwUe5bwb6UEnGCF2SEJWGI5M3zePhVkFBzlPfE9rvhK76LJkvAesEbXjtsgzvaWTTFPd6/m+QJUfK+iaGLr9gm+APTx/T/fv1q6wBZp19FzNTWPZpx45IvndoA9BZ+MleWh8/265bmU6ZDr1NNr5CFWEEf9islY5+8XVZyaxHb+ylwvi26YeeqNghfBV1kEV//clvWNazqfU+slqLtP5P1496GaABR6wH1FD7TeRVAAO3fQxTRAYfctSXQ9TxaGSFRsY8w58HGQ+A/xO+7aVm+1t257CFqJGA6pl874SIBm+1mrQj98boAXsnYaUiTBkB3NNFr2IAU0dGXCky09JODdnhrpg= 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)(7416014)(376014)(52116014)(1800799024)(23010399003)(366016)(10067099003)(22082099003)(18002099003)(261009223027099003)(56012099006)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Qll6L0hMU1g4OGlua1p1NDZBWkErTWhHL1daWDZQY2pQRXV3ajZJOXJldzJr?= =?utf-8?B?UTFtN3Z3MmVFNHBQbm94eWV2bEhxdWtYTjFHVFNNV3h4L2dUMzBrcUJyUmp4?= =?utf-8?B?WlBYb1hIWGd2LzZNc3d1K1RSUjJMNjZKZ2tDTEIzelhSMG0yb1FMc0ptVVNH?= =?utf-8?B?S1NOTWI4U0gyejBYdXJIM1d4dkVZZzdpMHVDMnU5aGdBZ2VIMVN1RnE2Ynkx?= =?utf-8?B?bkVrZzR6aTA1VTY3ZUE0ancyb0tLV01ZNDhsKzdPdXE2WnNnWFVBQVJIdkhi?= =?utf-8?B?dlJiSU5rL1ZzYWRDbFJzNzg5eWt4cW5PZy9lbThmZUpSM3JzbjhFOFZxbkdY?= =?utf-8?B?TXhRUGJqS0NYdlJZRlRtclV2YitvNVZoaktINGk1MUdmM2tpczhtcEF3R3V4?= =?utf-8?B?TW5ESkdiZzdGWFdrcGJaTmtITDhZOEFjTVJSd0lRQXZCMkhRV1k2STRYSVcw?= =?utf-8?B?TDRpbVQxUmFacmFEV2tCZzh0anBqREp4WXgxSDdkTkh0RUt5cUhUMCtMUUp5?= =?utf-8?B?M1JlVjJuL2xMb28vTnZpbnNnQU5KWHE1aGlPZy9WUVZFYzRTbnkrN0RJazFi?= =?utf-8?B?ZEdpTkpOK0ZGRENsa2QwRm1vOTJ0Z3pYNk9ZaWdMais0M1NKYjRjQnJCcTFB?= =?utf-8?B?L3FoTnFmdDRzTm1nSHBGTFVZYVA2ZHFXeld4c25iMHZwSDNMQytyc0tXeVVJ?= =?utf-8?B?R1AzNCtjMVdLNHdIRlVqTU55Y3NOYWpPUmFJczlJVS9na3o0akFyK1NFeVAv?= =?utf-8?B?bE9WcllWYzhjbzc3OSsrc3FCS0pWT3lmcFpEMTBUTzR6aXErQVFSQ0xvcnFM?= =?utf-8?B?VkJxRzlKSVBkL0xickFUa2ZBRnp5d255bDVhZzZCMUZrWEYxTGRCNlVtTmF6?= =?utf-8?B?dUlOTWVpU0R5djRiT2NsUjBnNjBDcXJ2b1J1RFlwMXd1djAvdmJ6bXVJbnVO?= =?utf-8?B?UUhOeExxd2swU1dUWXlQZkN1NERONzBDcGVjU1I5U3JCTExsSlVTNUd5R1E5?= =?utf-8?B?RnhXRjdYYjF3ZkViNnBBSWZ0eWkxQU0yNFQ3cmtrZE1rUFVqRDdlUmJxMmpm?= =?utf-8?B?SUlYZW1tZXZDczJLb3VWbmxndm92Q2NjRnZWdlFXYXRLcDVMc0JEL1Q0bURj?= =?utf-8?B?TXlGYUxDY0ozb2dtamxKLzVMN1ZnVlhMbmVoRUMxdnJUQ2VEWUFBZ2NILzlm?= =?utf-8?B?NFpnMEhSM09KOGFHNWF4T1RIZERDYjREbG9TWWlRY0h4MVpGdWRDSTRuNzVm?= =?utf-8?B?YlRvVXFHQStxdFdicUZRaFVYdXdWYXFnQ2tESWRYZVduOVI5a3NFR2ZnSDVo?= =?utf-8?B?U2pBeWt5RCtVQXQ2UitiMm50QU5IVnY1UHlBdGF0cTZteHVSR3VIS2pqZFRx?= =?utf-8?B?WlpRaXlkQ21uMG1iNkJtQzFXQ3RuZWpBeEJKU3ZFZXpwV1FVbWM0ZGJLS1Ir?= =?utf-8?B?VjJTbXJwakxnVVNSQWw1cHJkWWMrOU5UUVdlOUNvVlJQS2MwMnprQksrQk5m?= =?utf-8?B?UjI5MytBdWsyZWcveUhLYWRiSUdsdUVFTlprcklwb0sxQXJIVHFQVmNrUGdq?= =?utf-8?B?QXBEdk1PVXF4UHd3K0taSWtvdWtyYjdpTG5wK0QvMG1oZ3c0VzRTL2ptTm1H?= =?utf-8?B?QU5NeFpydE1xUU56RHpvY3hlT1R4T0hqaUtaVEpub1RZV29ZK1lLUU4zWW9y?= =?utf-8?B?ZUJVSVI0NHNVdG94TXBhZitJeUp4MTZHaVk1S0hXaHBhU2F5UlZxWFIxQzFJ?= =?utf-8?B?b1hLOWlJV2tDRzRUbGRDa2ViQmxqdDNzeWdpUGZXTnVjNVdqOTZxcGx1UXZ1?= =?utf-8?B?ZWZ5cTJOTmNUVU16RVFteVY2V296dWVsSmZHSjdocDYxdmE2dlJwNzlZZGdR?= =?utf-8?B?VGozb1R3Tk5LZS8rQ29TOUd3SGJsd1NDblJZTHgzTHQ4L1p6bERYZGZDVUM3?= =?utf-8?B?Sno2L1ZLYjlocklvZ0xrdFJ0MUplUzNKY1dPYXRva3ArYzZVV0s1SWVCU3FH?= =?utf-8?B?ckJsZXJ6Q25PMTV2T0xiUGFUVFRPZFZhbVRrUDRsY0ltMndseVZtY0V5YVIr?= =?utf-8?B?Qk9hSEkvQ1QrZ1VtQ2F3ZWpuZzY3VlU3M3EzL2piVzIrN3FQRmt5d25hRFJw?= =?utf-8?B?QmZDVWRsSFlSQXlYK3h6WGlKaFJQcGVDbm14YTdCTVBYZStkWC9kRWswbFdH?= =?utf-8?B?TDlMMTA3UmxBWWMvc0ZWT3U1SUVpdUVSY1pRd1laR2lJNDBOYzN6bTdrY1pG?= =?utf-8?B?YWF5cGhZZytnYmlBOGJOSmY5YzYzYUxEZVprY1o3RnN3NVZmaGlaeVZ6THBj?= =?utf-8?B?R0RKamlybjBMUmlrVVpyclI1NjRUaXdwb2wvWjYrZzU5KytRUElLbzRrRG1n?= =?utf-8?Q?tt6OgEn1W5fQwsxU=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: bdbeb5b8-a756-4df3-617a-08df284b9868 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:45.6528 (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: g5hMRg5px8O2QXwwkQF2Xhsv6Q3wzlFm6JNsN3rDOd4HXGlLWaBH+DKwTimUnRI2oxOC5z4DPwCFqKBSlWq6ZKH9r/KMIWI4Jj8ygHLKd6U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5523 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:c207::3; envelope-from=andrey.drobyshev@virtuozzo.com; helo=MRWPR03CU001.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, 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: 1791801034368158500 A CPR target that has taken the device ownership in post_load() doesn't always reach vhost_dev_cleanup(): a subsequent load error, e.g. a truncated migration stream footer, makes QEMU exit() right away, and the ownership stays with the dead process. The source still holds the FD, so the kernel never releases the device, and the source can't take it back after being resumed -> SET_OWNER fails with EBUSY. Releasing the ownership at exit isn't enough either: with the return-path capability the target reports the failure to the source before exiting, and the source resumes right away, racing with the target's exit for the ownership. And with exit-on-error=3Dfalse the target doesn't exit at all. Add a migration notifier to each vhost_dev, registered for its lifetime for the CPR modes, that releases the ownership if still held on MIG_EVENT_INCOMING_FAILED. It runs before the failure is published in any way. Reported-by: Akihiko Odaki Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- hw/virtio/vhost.c | 23 +++++++++++++++++++++++ include/hw/virtio/vhost.h | 6 ++++++ 2 files changed, 29 insertions(+) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 085e2ef6f16..7fd2883504f 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -26,6 +26,7 @@ #include "hw/virtio/vhost-user.h" #include "hw/mem/memory-device.h" #include "migration/blocker.h" +#include "migration/misc.h" #include "migration/qemu-file-types.h" #include "system/dma.h" #include "system/memory.h" @@ -72,6 +73,23 @@ static void vhost_dev_try_release_owner(struct vhost_dev= *hdev, } } =20 +/* + * A CPR target takes the device ownership in post_load(). If the load + * fails afterwards, release it before the source learns about the failure + * and resumes, so that the source can take the device back. + */ +static int vhost_migration_notify(NotifierWithReturn *notifier, + MigrationEvent *e, Error **errp) +{ + struct vhost_dev *hdev =3D container_of(notifier, struct vhost_dev, + migration_notifier); + + if (e->type =3D=3D MIG_EVENT_INCOMING_FAILED) { + vhost_dev_try_release_owner(hdev, "incoming migration failure"); + } + return 0; +} + unsigned int vhost_get_max_memslots(void) { unsigned int max =3D UINT_MAX; @@ -1842,6 +1860,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->migration_notifier, + vhost_migration_notify, + BIT(MIG_MODE_CPR_TRANSFER) | + BIT(MIG_MODE_CPR_EXEC)); QLIST_INSERT_HEAD(&vhost_devices, hdev, entry); =20 /* @@ -1891,6 +1913,7 @@ void vhost_dev_cleanup(struct vhost_dev *hdev) memory_listener_unregister(&hdev->memory_listener); QLIST_REMOVE(hdev, entry); } + migration_remove_notifier(&hdev->migration_notifier); migrate_del_blocker(&hdev->migration_blocker); g_free(hdev->mem); g_free(hdev->mem_sections); diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index efe1eed2606..3b9ef86bacf 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -3,6 +3,7 @@ =20 #include "net/vhost_net.h" #include "hw/virtio/vhost-backend.h" +#include "qemu/notify.h" #include "hw/virtio/virtio.h" #include "system/memory.h" =20 @@ -122,6 +123,11 @@ struct vhost_dev { * when this vhost_dev goes away. Set by the device. */ bool owner_handed_over; + /* + * @migration_notifier: releases the ownership when an incoming + * migration fails, vhost_migration_notify() + */ + NotifierWithReturn migration_notifier; bool log_enabled; uint64_t log_size; Error *migration_blocker; --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801005; cv=pass; d=zohomail.com; s=zohoarc; b=B1tABmKPfGV1cWVAc/+6hi63Ba1CdbP6IKAir3oNeTvGEmxbS0pIrtiGasKGPNe+gXWd5yH4D9h7E59EXS3BQFqghAe/aD9crxIYCR5mKO4e+ksx3Y+noVz5rJFLo6vqIDA15Jxft513hcfXhps4q3592QmQw6TFLOhQR0UoK8c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801005; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3TExFPwLeMXjlLuiIvbbRNjfeIdrEhSOIYSBxmZt7sY=; b=IqaxRejivpqpQev1NNTc2xyG098dMATeGCaEzeyhlBORwtASKbIiQ4aGHaUmnyWzK1IFyjBOYnKxOOFrLgw+tzrW3ePgmi8fUwjigBdghtyereyIcIbihw+4ai2iPZLZhpm71Vq9OR7Qg26tkCrsPSqskeIipbIHmlOGPaSdQRA= 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 1791801005309821.5111716825025; Mon, 12 Oct 2026 03:30:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHf-0007tM-LB; Mon, 12 Oct 2026 06:29: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 1xGDH2-0007cf-KC for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:59 -0400 Received: from mail-norwayeastazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20f::7] helo=OSPPR02CU001.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 1xGDH0-0005Fy-Jn for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:52 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB11921.eurprd08.prod.outlook.com (2603:10a6:10:614::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.15; Mon, 12 Oct 2026 10:28:47 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wPlKdvj7Gg31eYoP6glDNU01BCC3BoSw2fCE53c6YSagQkBnG9l3Iq1F9cJOO06/OSSzV6ISbqgzmjXdQFjw8kRt2HVdGWzhXI2z+hZ1wyUZ6eXd6AYFEjCzRsvELGMXPFpeODUrzq5H/g1GO+xEr4mpSAYhlhJdlBwqn56YDLj1Us07oF7aCOpcneZztXQZRZh9hHmTe3gQ8Resc/49ve5IAXICaz//mKx5neaP34p72tUVwooKoM6xZNeQMhfZTD9EITDpYrgLcfbUvWmPMHfFgNT9PojW8/pvicSOoa+5ykkwljBOmr4yyTjiix5C5lEltb1GcB1vIsKBAt5aEA== 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=3TExFPwLeMXjlLuiIvbbRNjfeIdrEhSOIYSBxmZt7sY=; b=RgYREY1jl16q2rFzti+6PrMiutBR819LNDSwkaTa/AKNDp2hx9iadtBZUjNoxNrkAay9/azk86N8GZLiWMycwZ27CiEV+x8OwrTLPKPLIe//TCz/cFC8Ka6ZWeTD4C631fvEhZW6WkSRM6Dz7N4vmaEc4TqgkYSjsAY6KY0JmdKf9ifKNdt/4any2/a0FHrsEcZ2O25xb/Kn4HiKqwTCx53+UIhzIaHmZcQGA+/+BTNHqDa0l9clLKBBTRSfISS1rNCUJOsC4l9uzdgjuN8ajnqYAvtC3AWMpIg2PWcvhoOxzq1odCYT8y+JV7kvNuLagmOcCDhV7qAtuRmn5Jrp2w== 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=3TExFPwLeMXjlLuiIvbbRNjfeIdrEhSOIYSBxmZt7sY=; b=bS05E7l6BTGOLhuy1aFs+ZkAOisxizoNyltrs9QtQkVLZXfTMHeoaYT1IkI/GXzspLuvx2PQq3DepOBK9LCwqE+473ChZ2OaVji07D2LarJVEY7pFuke3DYa4bK17Ru1P76N7jWHsk+hvhPttPOCZZK2GQpaYg+ROFiBpdDbdeOuN2gcd+s/SW34jPcwq5cYTvyZJ0Gcr09SQYI7B5QwHC42HmPdR/k8h4orGqP2u5pW6lwSQ0TyN0nvlR6wZLdju0pYvodC+Wt5v8hEtmZxWOB8SvzfDaW+QBHSGY3sfmpTvaZNIADmXc/NhHLxf0ZIF4z531NjNxeUVaFAPNzftw== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:26 +0300 Subject: [PATCH v16 18/22] vhost: release ownership on exit Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-18-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB11921:EE_ X-MS-Office365-Filtering-Correlation-Id: ed7ab587-32d8-456e-904c-08df284b98f4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|376014|1800799024|7416014|52116014|366016|18002099003|22082099003|10067099003|38350700014|56012099006|261009223027099003; X-Microsoft-Antispam-Message-Info: e2A2MclcUrW5pohjlK30FzLKe3s6Ay3AR8zxdU+qGSE4Ado10ZxSjQ4+A3tp1+3CGaW69xBenwBgKYtSxzE2FRKB64nioJs9nWZ/JPgfslv8jQ4FIaRi09WTqPxMUiX9Lg7FQJ0wWM1FZ92PzYlng24EQDMY3GRtMoE6ApdzxtgqVDOmG1rpqmWXCFNziFb5hpkawWBG6qkgXJLamjR4Bafl2NZf8IIt5do3bYm4/Ro/9gT4pjvs7eqgRcJRk+AFvkw7kYVB774aLGnEt5Di4NqNtkNs9NK8WWQBeG3r3EBevUfla8ncCMCi/zKPFt91ecs91qsTzZn0vCLAdepDRVjfYbRz0oL6H0SfP+QMw2r1bdhQdF1yzoTSd88wsNKR4EJxYC066pSf/bK1HnFY7abH22OzkUpgoYBcvuLTKZRv56DtMSqfmxXVeVJmHcrzr9qSBW2rIFCrb3NA5QGuPpwDmY3szZmozx4xE18xkGtZHUnOveu0JHE2H9Zk7VQHx8myOdPkX3HLSQaRJkFlKmRD1mH0l/h/gjVk7L6nPyMhWcEzlHKtUBmwh10A2r09CwbMHF2H4ZBRDSshrwsNIqpUlEpPcA9cLQQ1Y/lN812j/D63OoeZEgHVrus0DReF+UxKFqEBNvIZk9AufgnWE47ASscoi/eL/JtwPuDmCDtbvj0TPQ2ZTB3CMQ4kQwrJYfDmqxnf5Ug6STqoo4oOfZye7LsSL3DSJdVGqgR07WE= 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)(23010399003)(376014)(1800799024)(7416014)(52116014)(366016)(18002099003)(22082099003)(10067099003)(38350700014)(56012099006)(261009223027099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UzYyUDMvR0FxS3RXLzhhZTEwditweEhBR1p0eFlKQ0k2cEQ2ZjZaR0dXODNn?= =?utf-8?B?MzVFN0cxVHIzZnlFaFBkL3dzL2xIcGtxWUhjZzZGazYzNFhKOForMkZYMUdO?= =?utf-8?B?VzIxSjJ6dWI2Rk9Ed3hDSXBoL2JvVnRvWFI4QmxEZlFBZXhsSnlOd2ZIVFJu?= =?utf-8?B?enFqVFNWeFFNbmxYWmxxK0lLeWRoVEJwNGpIWFppYzRPOUFkQkxYeWV0MTNj?= =?utf-8?B?d05Ec1ZxSnJocmxhQ3B2d2RrWEw0VGhuS1VYcEpPWFhjbmZiOUJkbXdRQ0Qv?= =?utf-8?B?L0EzbHBCZU5EeVc0QW5EalNVRFk4RWdmZE5tTk9WVkd3NnBQbmdRWVF2U0Yw?= =?utf-8?B?ei9YM1hneEVqeSt3Z1lxZGdNTDhQNzR0dTFBS1IvYVdPQ05BZ2RTRGNHL0o1?= =?utf-8?B?Y3BiUFZQbERVakxOYzRBSk5TZ1R3V3AySC9XZFc1Ky9CaXBGNkhxTDZGS2o0?= =?utf-8?B?TEtSOUJEQWdpcndqVFFRa2dSK2NHL24wNStIOW43a0NzVlRUVGZRTHp3ZXFV?= =?utf-8?B?aTFHcXZDbEM4UllXOWFudFNBOWRTdTl6eUphekgwRXM2WkVCNFVyL0R6MjFX?= =?utf-8?B?WUpCcktmOUdJeFZ2L0EwU3pwbG9wR2R6dkxoU2ZLWXZqV0hveU13dEJqaVBu?= =?utf-8?B?QlNwZDdHbmJUc3Z2LzdSMzk2VU5DTnBnNnNOSmZ4bCtUZ3NGUEZubXBXazAz?= =?utf-8?B?QW5lYkNIdzkyVDl2eXdmUTBkK1YrVnhEM3RkVWtJUUtoZzd5ajRqOUZpUTQ2?= =?utf-8?B?SHhaRlkzL0s2M1BVLzk5SVJadzNHUVBWc1p3bFQ3Rmwvd3h5RWtOVHAxQTRw?= =?utf-8?B?d0k0ZFhSUi9uVTJIRGR1cDduWFlqM2FBRXlpT25xV0VEZzJzUnZER1gyazNK?= =?utf-8?B?UHhDd2l1VldSNDRXZ0FZS2Q4ZVdwbzF4Mm1SbFh4VUEyZm5NbkE3czI0Rkg2?= =?utf-8?B?YUdsdll2b3hkQ0plcWJUbUJ5OHRXU2RBeUxwWUw0S3RWY2g5T00raDNJNzF1?= =?utf-8?B?OHpnYXBtNzl5MjlMMytpbVdoUThCVXlYdElGbjlrVmRTd0oreld2c3ovenMr?= =?utf-8?B?bFhLNmtzWm5abXlGWXZGT3IwUUdySTc1UGc5MTRNNlFWVnRjMkJnWkwrREJQ?= =?utf-8?B?cGxKTzJBSHRVK09JMFJ0REpteFZzdUt0ZFpXeTVqWW9USnh4RW9aSVNQaVdY?= =?utf-8?B?K1cvRXRON1VEMzBZQXU3TU01aDgrcTVOdHMyTGR1LzBCUWMvMnZhYmtPVGNP?= =?utf-8?B?cFFHeFhaUlUvQm1KY1VkSFErUTFPcnBwU3pabEZOSDNlRmZldlZtZWpJR1pz?= =?utf-8?B?YTI3RllVcVJRUlRjQXF4cUl5alBFc2c5ODM3L3BqYVZPdEVxd3hIUVY4eHVk?= =?utf-8?B?K1Z0QUhFaVFaNmVGOWtHSXlVcFRodHY2TTZ2aU5jZUIxUlg2Z1ZsZFlqNC91?= =?utf-8?B?TnBKVi9lbUVUNWRGQUQ2c2gzRHNrSTZWK1kzRzgwUjJrWVZHVkpyZnB3eWFY?= =?utf-8?B?OHFuaEFOek8vNmNuOUZYbis5TmcvR3dFNldTMGY1ZWFLeU1uZTlhN3RnTVQx?= =?utf-8?B?Rmlncmo4YzZWL214T1F2UDVVUERrR3hqeWJrQVhQQnNpc25mWmMxNjZyeE5U?= =?utf-8?B?dTlYbGVTbDVpekdWY0xicHdMdDVscjdKemZWNkZ1d0k4UXVmczhOMGJGTDls?= =?utf-8?B?UkVuQzBFeFozaHJPdStneWNqam4vQzlFbVdwSUpYTkhRTkJMQmlRYUdrOXM3?= =?utf-8?B?NDZIYXRIdDNxKzVmbHkrVnZCbUZlcXRNYUZIT3IxcnVPbW9lZ3pBV0J5Tmxx?= =?utf-8?B?VkVxeEJYSC80djlOLy95VXhFNlh4dWo0ZXNXTU5HTktyc2UvSDk1U3ZmQVVv?= =?utf-8?B?THArYllnSGYrSjllWjFhUkhFYUgrUk54SmZmdVk4SXFvQXRUUnVJcnNwQUtn?= =?utf-8?B?bGhvWXg5NytaYlBkc3VzdGdDMUVpdkIxcVROSEZjS0FYSGtkMzlEZmJ3UFpQ?= =?utf-8?B?alpMMHZwbmlqZEc5S0VwRlowRnE4ZEZsRWpvcGVSaXo3QXpuanBUckQrVCtG?= =?utf-8?B?Z1hORXVvRms4a0d3dFZpUklKcWxKOWhZZzFYK3VkMmM2MjNBVkQ5K3BtQWJW?= =?utf-8?B?OEJxWi9OV3daY0lpVkhYWms3cHJQZVc4ZUxJQzJ3ZW9oYy9jZUZKQWdMbVdO?= =?utf-8?B?RzJRTWpha3A1aHpEb1l3dmxLQ29OVHMxUjBHa1FmMjdJTzUxWHV1bmJwUkxq?= =?utf-8?B?UFF3b04xZGtHd3Qxa0dHRU9BM2x5ZVF6T3ZKSm0zZUgyQ3c2OGQyT3BIWXI4?= =?utf-8?B?QW5sRDZZSmxKTnFrbDVzSUNKR1dRZkhJMW93VXFMSitOL1Bsb2dObkhIcUFE?= =?utf-8?Q?xX5xC4v81Fw2iDQ8=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed7ab587-32d8-456e-904c-08df284b98f4 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:46.5855 (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: v3LSvEyb7ULGY23cwAyQEgWZg+5tw/rXlzCLJ6rG9mEMf+48ewPYzUf5HUMIDLONNAEzKXotkEveoRTidNg/9LEZXZviCdciK4SV2LeIBhE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB11921 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:c20f::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=OSPPR02CU001.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: 1791801005804158501 A CPR target that has taken the device ownership in post_load() doesn't always reach vhost_dev_cleanup(): a target which has loaded the state but hasn't been started yet, e.g. one started with -S, may be quit normally, with the source being resumed instead. Devices aren't unrealized on quit, so the ownership stays with the dead process. The source still holds the FD, so the kernel never releases the device, and the source can't take it back after being resumed -> SET_OWNER fails with EBUSY. Add an exit notifier to each vhost_dev, registered for its lifetime, that releases the ownership if still held. This covers every orderly exit. A target killed with SIGKILL or crashing still leaves the device unrecoverable. Reported-by: Akihiko Odaki Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- hw/virtio/vhost.c | 20 ++++++++++++++++++++ include/hw/virtio/vhost.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 7fd2883504f..cbf6e82afbd 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -31,6 +31,7 @@ #include "system/dma.h" #include "system/memory.h" #include "system/ramblock.h" +#include "system/system.h" #include "trace.h" =20 /* enabled until disconnected backend stabilizes */ @@ -90,6 +91,19 @@ static int vhost_migration_notify(NotifierWithReturn *no= tifier, return 0; } =20 +/* + * Release the ownership of the vhost devices still held at exit(), so that + * another process sharing the backend FDs (e.g. the CPR source) can take + * them over. + */ +static void vhost_exit_notify(Notifier *notifier, void *data) +{ + struct vhost_dev *hdev =3D container_of(notifier, struct vhost_dev, + exit_notifier); + + vhost_dev_try_release_owner(hdev, "exit"); +} + unsigned int vhost_get_max_memslots(void) { unsigned int max =3D UINT_MAX; @@ -1860,6 +1874,8 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaq= ue, hdev->log_enabled =3D false; hdev->started =3D false; memory_listener_register(&hdev->memory_listener, &address_space_memory= ); + hdev->exit_notifier.notify =3D vhost_exit_notify; + qemu_add_exit_notifier(&hdev->exit_notifier); migration_add_notifier_modes(&hdev->migration_notifier, vhost_migration_notify, BIT(MIG_MODE_CPR_TRANSFER) | @@ -1913,6 +1929,10 @@ void vhost_dev_cleanup(struct vhost_dev *hdev) memory_listener_unregister(&hdev->memory_listener); QLIST_REMOVE(hdev, entry); } + if (hdev->exit_notifier.notify) { + qemu_remove_exit_notifier(&hdev->exit_notifier); + hdev->exit_notifier.notify =3D NULL; + } migration_remove_notifier(&hdev->migration_notifier); migrate_del_blocker(&hdev->migration_blocker); g_free(hdev->mem); diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 3b9ef86bacf..eb693e32898 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -123,6 +123,8 @@ struct vhost_dev { * when this vhost_dev goes away. Set by the device. */ bool owner_handed_over; + /* @exit_notifier: releases the ownership at exit, vhost_exit_notify()= */ + Notifier exit_notifier; /* * @migration_notifier: releases the ownership when an incoming * migration fails, vhost_migration_notify() --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801004; cv=pass; d=zohomail.com; s=zohoarc; b=Uch9joP1WFsBWIdLGf5oAnX8d2QXQmgLBhtBjgqAc4ykx4xKW4OQWKLB6Gk1d/JEUlpaY0xcYSvQjS+bmbxCZvwym8ffUsVoZI0VnZW9XJqwvr3COyFu8TPLq9Gw5iYdFYREmCpjUUTHBdqmzWBX2hKgBbwA3vHZzpH10A2GQJ8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801004; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ncY3aBoopIW4OgNFcxrbEFdrNLaTHYF0LW8//1vaR/0=; b=F+lajgj6wbUW8Vl2W+YK2CY0HGQW9PC0Xk6YWM1Cg9rDP+HaZgEVzp2v5+N2s6SWzpSuCPhb1mmDf3i5sItj8m1zKCQZsxtJcgZj6JWUINhO2OaRGUz02QNRALqEg96Wcnw8M1b9iQNN2NZ0mqtmTP2xpd/kYCFkRW3sXBu3z8I= 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 1791801004708118.59239684886882; Mon, 12 Oct 2026 03:30:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHi-0007yP-UE; Mon, 12 Oct 2026 06:29: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 1xGDH6-0007dN-HR for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:01 -0400 Received: from mail-norwayeastazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20f::7] helo=OSPPR02CU001.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 1xGDH3-0005Fy-0I for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:54 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB11921.eurprd08.prod.outlook.com (2603:10a6:10:614::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.15; Mon, 12 Oct 2026 10:28:47 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VNRhvwQCk+q4qo7M0EYG5sMEQ2BVM51vtMGjsC1O9hct2wCHsJUgdZfXQAjW3ycnWT7bIh8Kk23UhGMyRbmQdD71+m3tGmwdDDKdvrjkJ14728w78pt7xDIOziVswPlB7YJ1J3P6d+LX4N4SHCXbm5zU5Db4NRY7CMypHAyT2RJjHaLISsEjGvM/32n9Hvi3BX6VCdoUGyDqNQBnQeVbal+ZCvCGz7/fbtFgDUX2j6qpsqHneOhK56DBPlmLUIMoF5BeR3TsavQvqw23MSa6Vsr9nkOKxRZ9XJXi51YDD16uSCVY6+zaD7RCHaP/N0UNLg9Yq/iFLd0dnmcSyhadjQ== 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=ncY3aBoopIW4OgNFcxrbEFdrNLaTHYF0LW8//1vaR/0=; b=atUpqM4mz4yyWpaMPG0aoKNBxNwye/B5RKkObOOwx6IEQZXOTL5l1Xl9ZRTByOfUVspCy2JzcO/b96n1UAY/10wvnON83oRpZqtJCOYJ9ei2uAKFyhVGbZbHLe++Qp14pqS2Ko1D/9N6WV/OQ1MRwFCvPl/LuiburXJrk64Js34vFfIVhnITJRI+AMTY/jSyLwa1bnry9GI/3Z2LJ5tTG79NZsRMPtUfxNbyePnfT+mcVIxOASJduD7REDRweTTcAg8uJ0dM0i5BsR2ZCZEb6oNkLoZf47Glw+jQ3DMvjHruRiWUevdIM8+xAhrNC3Ke/cO/5tvRhFXZmw6BeqZfvQ== 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=ncY3aBoopIW4OgNFcxrbEFdrNLaTHYF0LW8//1vaR/0=; b=Ag+HDSvgQzrjEUArmcKmZhPj9E6d+CA9PDfXlbmgf9xiLs8KR2Wl+A8gAZhI4sqh5Y1dkrojayOR4S/9mLGtJseTYbQctcUJLd4U2BKnIOAZ5b/Kf8x02+cob1ubDEULkoQfghJRVJvyC3k/HFqVMzBE1CGXGtXupFBhzYweFAJGwMRGS5jf28zvTdaua4FczfFlcsLRJxMSO1TVZj2EU60vWKcIKuOC/YmInxAPQH/8QIoTmd/lIWx8At0SoAOgWHF13pgD83O71w6RXic4jgh3qLTFLWat0rgrLTsnbClcj2UqWsR71/Vqndu8XOlPUK34OMWesxw9LLtUGxu08w== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:27 +0300 Subject: [PATCH v16 19/22] vhost-vsock: hand off device ownership across CPR Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-19-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB11921:EE_ X-MS-Office365-Filtering-Correlation-Id: 4519f942-f3fa-4983-d142-08df284b997f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|376014|1800799024|7416014|52116014|366016|6133799003|18002099003|22082099003|10067099003|38350700014|56012099006|261009223027099003; X-Microsoft-Antispam-Message-Info: /Xfx+0Yze7CXgnIYsUZZE0bAcDJ4WJr86hWM18/jBPhQ5dc6xDMoPY1QvtdvjC6ofXuWkrYGe1cjwvZWFum4kAnNNW0ya7A6b1TQ5bdY0+t4xhqhAueqINJC2sCDxsI3XZzgWWRlX6sVJPXZkrvIQMBRLdI0GvvNq8y0HLXhYbWHa1Jt9Q1Y+UxAwmqHW/Axh7ZbJ/Lzcr6b647eO5Q+wD66ZFrU7BqJ6yAakhz5V2YWD3SUh6Q9MgwgqepFXY05x7Kbfup+NuDEWIpHhTsHigKzEQW629qhJ4z7jhwzgbfPtHUYjgTkEAo7sUIqsKP/2JIpz8msPQb3YcT5LVfkX+tbPiGnIysDVBo4A2ydask8dxpY0IUV1jvsAE6FMp0W3ekBba6zo/2spWGk7x+i1ffbLtbc5zJJVZobe1Lg+tk48p0GC3hKDZqdhNQSRNIoE+4tjF0R5EjvjEtav2JTVK+diC0IfuwBPeMqzL2dByADXJzpDWirK0IhS/o4Vwp+ywArrC4pxnLGGtmlfx2zPv1q5aYywZUE6lgbHbGTjbfZiLN1JBukZ4JvFtJ6L8Bht9W4I0TjQZ8Llw/9H2wLyA+lGTnuKQzJScx7tW6q/WyiIaQzPK1T8TAOT5fufzhzgoI2gHdnhWMN9iTgYGBXSISBPKcULLnI2qLOAyMIQQoQVrNrJG+OtQi0pkmvPZPgqGqK071E9ic3dRy3xImpS90o+HMH8lUpxiSF6Zf35kA= 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)(23010399003)(376014)(1800799024)(7416014)(52116014)(366016)(6133799003)(18002099003)(22082099003)(10067099003)(38350700014)(56012099006)(261009223027099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S3lVZjJpZFQ5ZkNJODV5MktOSHpDSWV0aEdjTzYyM2tnd05MYmJxN0ZCY1BW?= =?utf-8?B?UWpqVlB6WmZWQVJqcDZ0d2d4dkRSeThYNTIrQmVOTHJBS0xETXFVWEhXZFVB?= =?utf-8?B?VnFFTi80TGtIMS94dFRoZXRHK2c3Sk5uQlFXVFZrYU5DV1hBcXBJNnFxVjdN?= =?utf-8?B?VUh5WHkwZjd4ME5sVEhFVzNZd3NzRWIxeGVXclpaN1lpRDRmQVpEYlBsTFlx?= =?utf-8?B?dFBiN09MWHBFczJWVVNGenVjeTJLc0ZhS2pxTTFBMlJ2OVNWWWgvak44Qlhr?= =?utf-8?B?SitQTzIzbkRqNHdoSllEVU03eHpPU3BodWR2cjFIOHdXTHJzenFMVzBBM28x?= =?utf-8?B?SStZcEM0VFNQbGxnTWkwaXVBeXBJMS9xYjRwbVZQUUVwdEZ4WnM0TE9zVUl5?= =?utf-8?B?NXFQcktxYzM5b0VvMk5MMFJlTjg0djhienZVS2IwUXRUVTREMVFWZ0JhN2Rl?= =?utf-8?B?ZERpbGRtdldOaGJ3ck5Db3F4MGMza0djTjJsNnBIa2ZqSzRzQmdiT1FEbllq?= =?utf-8?B?ZE41eFcybkpQMkpLdmZEWTRvUEFma1hCT2VQQjNEM2F2R2ZVd1RaNHV5WDdY?= =?utf-8?B?ZDlCZStZZHIxSU9vNHlZYTZBVmZxRXlFZWZScWpybGgvTmVBak5UTXJRa1Bq?= =?utf-8?B?Ty8rQ3FNRi9naU5hT28rbWM3VXRDZll1MVVlS0VZd2dzdkhQM3VJMGoyQkM1?= =?utf-8?B?NU53R3U2L24yMGdvRDRWbU03U05KeTJxOWFtTU5zbURsaVB3RnNUVFB1VGpN?= =?utf-8?B?TVZOc0R5emlpb1pmektxcytDSklld2pWUkh6dkhMVW5LU3d3SlRvdk9NSDF5?= =?utf-8?B?MnkxL05QTU51VDBGSmRtZDBCWFZEUEpzaVNLaG9uNU4wcEdudytzVFpBRTZN?= =?utf-8?B?dm9kQ053dzdxU3hKNGZ1NzV1OHpaelBBSWdFMFVxcmVHc2xJT0hFME9kWFpY?= =?utf-8?B?L1ZXOVdZRzJoWWQzL0JweSswS2h1ek5YZ0gxMTNZeFZGbExpUzdsQmxmMHBS?= =?utf-8?B?K2paeE02eHd6YkNEbnI4U2F5VVI5dXh0ajAyTTRpUG9XdlZORERaMjVFZ3di?= =?utf-8?B?RExJOVR1S3ROMkYvQzRXY0pLQU5YY1VadXFWN3RhVVJLcDlNbC9IempBdUJN?= =?utf-8?B?Q2crZk53TmwzMHl1NjBLVVpuUmRNdkVCREUvS0hoc3Z6UU1pcVcxYTU3WUdj?= =?utf-8?B?YVFrMUxzT2tyTmRJUlIxVzBBTXkyQjNKeXNycG0yZ2RrK3NKRXh0ZWNrKzc2?= =?utf-8?B?dzJIaFNEaTNyVGM0ZTVZcGY3VnluTjhzM1NWeC8zQW5rQXl0ZG1YbXVtMUNR?= =?utf-8?B?bTJoRVlXOGJwQ2t0ek41anJleFJXYy9nMVR2d0JQbjVlMFR6aThkbllYdHh0?= =?utf-8?B?MXdJcFhmKzl1YlFVQ3dWbmpmRTVzdUorMHZITjVGcElXMHlhWGVpNW9CTGo2?= =?utf-8?B?d2djUDAxNm93OHlFZUh4LzZEcytIdGJsVTNINmxWQUpDb0M4U2VhTjhuMmVa?= =?utf-8?B?ZHJKMC9ObUZDVjhsa0FacWNEcFZZQTBOVzgvTFpDdG5kWTc4KzFUaE5hdmds?= =?utf-8?B?TGRaTFdVZWFFdDRhRWEzVWNZbHpSUU16M2sreUVFNmZWeHA0U3hLcDlzZGhj?= =?utf-8?B?MnZqS3QrMkY5M0huMmxRbHNxYkg3R3NOTk5WRzdLTWFlWGM5ZnNTUDFUakJa?= =?utf-8?B?UlVtWU9lMkxocENySDc5ZG42dDYzZVdJb2lwZEhLYzdiVVdRbVVFWURQWWpy?= =?utf-8?B?YWRQYlU1OXpuaThtdXFrZ0c5bWZuQUVreUx1cjVMbC9sQ2xRRUtPT1Qzbzlh?= =?utf-8?B?UWZSeEVHY0FuYWl1WERsdlJublNiVFZZN3d3dVFvb2JvMC9kUXpnWmRxcTZT?= =?utf-8?B?ek9EQXJNNkdPMDlBN3RnTXNTSTJNVkV2Z1FieHRha3NFY1JiSCs5dC9Qb1VO?= =?utf-8?B?YWRFMzlhUFdkVXFYcmRkM3lzcXFuZGVnK2dhdjhWT0ZEa3ZmUllNWVZ6L0xp?= =?utf-8?B?cnBUVGFma2FhSXlJY2xvZktFaUl4Q3NKMmx2UWN0Y2l5L0dOSE9paTN5bEVz?= =?utf-8?B?VDlEMUgzU1hZUVRwQ25mcFNqODF1eVErbnMzeFBlZWdEeUUzOUx6a2x3R3Bv?= =?utf-8?B?NTN5K1k1RkJRa052K3JMTE5BUFA2ZEQxVVVYZi94bTlCS3NkTXVtaVdGU3BI?= =?utf-8?B?ZkphLytybnAzdk1tWTNybXlRWjM3dkpTbVQzcTQyRnVNWTQ1d0NDTlFPYnJH?= =?utf-8?B?ZHNPZzR1R2U1cW5XN0FWNkNmNnRhVmVwYUYwS1RpRVAyNzBTdWlUdTJicGlr?= =?utf-8?B?VS96akwvTVhsVUs0SDgzS1BBTHpVVGJXeEhBandiLzNzaUQwTi9DU2c0WmJH?= =?utf-8?Q?egdUwbh4amqnEQzo=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4519f942-f3fa-4983-d142-08df284b997f X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:47.4594 (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: KVTA4hThWz8V3m6mV2PGvuMMMrCtA5Tf7HfnrFfLuPGEH0WNhqI5ckmC2oM2ehw8HcrHGAEC8PAuDISVAt2JTiWqlML9VSQ35Z9mPgZUflo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB11921 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:c20f::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=OSPPR02CU001.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: 1791801005881158500 The previous patches reuse the source vhost FD on the destination, however both source and target 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 restart: - .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. It also marks the ownership as handed over ('owner_handed_over'), so that it's released if this target goes away. - .set_status() refuses to start a device whose init hasn't completed yet (incoming CPR before post_load). - .set_status() re-acquires ownership before starting the device if pre_save released it and this QEMU is about to run the guest again: the migration failed, or it completed and the management resumed the source (e.g. cpr-transfer target died). With the handoff in place, lift the CPR blocker. Note: this requires kernel side support of VHOST_RESET_OWNER operation for vhost-vsock. Otherwise CPR attempt fails in .pre_save(). Suggested-by: Dongli Zhang Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- hw/virtio/vhost-vsock.c | 157 ++++++++++++++++++++++++++++++++----= ---- include/hw/virtio/vhost-vsock.h | 1 - 2 files changed, 127 insertions(+), 31 deletions(-) diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index 6e89007b2ce..4ff58a98019 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -21,7 +21,6 @@ #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) @@ -88,11 +87,40 @@ static int vhost_vsock_set_status(VirtIODevice *vdev, u= int8_t status) bool should_start =3D virtio_device_should_start(vdev, status); int ret; =20 + /* + * During CPR, on target the full vhost_dev_init() is deferred to + * post_load. Refuse to start a half-initialised device rather than + * issue vhost ioctls on it. + */ + if (should_start && !vhost_dev_is_initialized(&vvc->vhost_dev)) { + 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; } =20 if (should_start) { + /* + * The ownership is released in .pre_save() on CPR migration + * source. If we end up here without it - that means that either + * CPR migration failed, or we got 'cont' cmd from the management + * (e.g. cpr-transfer target died). In either case, we need to + * re-acquire device ownership. + * + * On failure leave the device stopped. The next start attempt + * (guest driver reset, VM stop/cont) retries. + */ + if (!vvc->vhost_dev.owner) { + ret =3D vhost_dev_set_owner(&vvc->vhost_dev); + if (ret < 0) { + error_report("vhost-vsock: cannot re-acquire device " + "ownership: %s", strerror(-ret)); + return 0; + } + } + ret =3D vhost_vsock_common_start(vdev); if (ret < 0) { return 0; @@ -123,8 +151,42 @@ static uint64_t vhost_vsock_get_features(VirtIODevice = *vdev, return vhost_vsock_common_get_features(vdev, requested_features, errp); } =20 +static int vhost_vsock_pre_save(void *opaque) +{ + VHostVSockCommon *vvc =3D VHOST_VSOCK_COMMON(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) && migration_is_running() && + vvc->vhost_dev.owner) { + ret =3D vhost_dev_reset_owner(&vvc->vhost_dev); + if (ret < 0) { + error_report("vhost-vsock: vhost_reset_owner failed: %s", + strerror(-ret)); + return ret; + } + } + + 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); + g_autofree char *cpr_name =3D vhost_vsock_cpr_name(DEVICE(opaque)); + 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 @@ -134,6 +196,40 @@ static int vhost_vsock_post_load(void *opaque, int ver= sion_id) return vhost_vsock_common_post_load(opaque, version_id); } =20 + /* + * 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(cpr_name, 0); + if (vhostfd < 0) { + error_report("vhost-vsock: could not find restored vhost FD"); + return -1; + } + + /* + * The source has released the ownership on this FD for us, so give it + * back if this target goes away. + */ + vvc->vhost_dev.owner_handed_over =3D true; + 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); + cpr_delete_fd(cpr_name, 0); + return ret; + } + + ret =3D vhost_vsock_set_guest_cid(vdev); + if (ret < 0) { + error_report("vhost-vsock: unable to set guest cid: %s", + strerror(-ret)); + vhost_dev_cleanup(&vvc->vhost_dev); + cpr_delete_fd(cpr_name, 0); + return ret; + } + return 0; } =20 @@ -145,7 +241,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 @@ -171,37 +267,24 @@ static void vhost_vsock_device_realize(DeviceState *d= ev, Error **errp) return; } =20 - /* - * CPR migration of a vhost-vsock device is not supported yet: the - * device ownership is not handed over, so the target fails to set - * up its device. Fail the migration early and gracefully instead. - */ - error_setg(&vsock->migration_blocker, - "vhost-vsock: CPR migration is not supported"); - if (migrate_add_blocker_modes(&vsock->migration_blocker, - BIT(MIG_MODE_CPR_TRANSFER) | - BIT(MIG_MODE_CPR_EXEC), errp) < 0) { - return; - } - if (cpr_incoming) { /* Reuse the fd handed over from the source QEMU */ vhostfd =3D cpr_find_fd(cpr_name, 0); if (vhostfd < 0) { error_setg(errp, "vhost-vsock: could not find restored vhost F= D"); - goto err_blocker; + return; } } 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: "); - goto err_blocker; + return; } } else { vhostfd =3D open("/dev/vhost-vsock", O_RDWR); if (vhostfd < 0) { error_setg_file_open(errp, errno, "/dev/vhost-vsock"); - goto err_blocker; + return; } } =20 @@ -210,19 +293,37 @@ static void vhost_vsock_device_realize(DeviceState *d= ev, Error **errp) if (cpr_incoming) { cpr_delete_fd(cpr_name, 0); } - goto err_blocker; + return; } =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); @@ -232,7 +333,7 @@ static void vhost_vsock_device_realize(DeviceState *dev= , Error **errp) } =20 /* Register the fd for a future CPR after a fully successful realize */ - if (!cpr_incoming && !cpr_save_fd(cpr_name, 0, vhostfd, errp)) { + if (!cpr_save_fd(cpr_name, 0, vhostfd, errp)) { goto err_vhost_dev; } =20 @@ -247,22 +348,18 @@ err_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); g_autofree char *cpr_name =3D vhost_vsock_cpr_name(dev); =20 /* This will stop vhost backend if appropriate. */ vhost_vsock_set_status(vdev, 0); =20 cpr_delete_fd(cpr_name, 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 a964d57e1bc..84f4e727c70 100644 --- a/include/hw/virtio/vhost-vsock.h +++ b/include/hw/virtio/vhost-vsock.h @@ -29,7 +29,6 @@ struct VHostVSock { /*< private >*/ VHostVSockCommon parent; VHostVSockConf conf; - Error *migration_blocker; /* CPR migration is not supported */ =20 /*< public >*/ }; --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801060; cv=pass; d=zohomail.com; s=zohoarc; b=EqrV3fhKdgIOaDRTsgf5wByMau6uNWV38+WtT388+pSh4C/9i5SEPIvKQTsO1SW/RA3gYgyyeQ5nYgWWXXpwSLw3EuQJRAR00vIh6J8QqpW6l7f5MDDjkZCZ+ZHO7cdfoLPSi9LtIL0lQB10reZIELXiC8XVAs4Q3D312yLJ5ok= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801060; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1Q/HDXLoyiC61Uu3uiyDBlQDft7G81VamCAO8Ca1qio=; b=PwLuo/cAy2lPIIMLweBDjT4/LgvtLvlNCXLKtDv+CH80daV+5PGg0wf5TYk3wYlXjyAG1ffqdzFemEEMj6Ki1OXu/eCNyUUObSL0uq/3AqfXRevyWfPFupu/eYa24f6uzUNBGFbFkAQYd3pY2qt8nBCy8x3mh9/FVz3T5vrRu/8= 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 1791801060470365.05947388002164; Mon, 12 Oct 2026 03:31:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHy-0000BS-Jo; Mon, 12 Oct 2026 06:29:50 -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 1xGDHB-0007e2-Ul for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:07 -0400 Received: from mail-norwayeastazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20f::7] helo=OSPPR02CU001.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 1xGDH6-0005Fy-TF for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:28:59 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB11921.eurprd08.prod.outlook.com (2603:10a6:10:614::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.15; Mon, 12 Oct 2026 10:28:48 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OLnbW2bh2aAb4RynqF7Jd9xnBk2VupdPJRIICj0aff/EDZ0wgXu01FVNNo8CvTuruZ8wK6TEvC5+In/C6UI12UDsPUJ8ElZ1FurVnmNrUcv/fuPq4y4UAgyKv4wz0DklL3plsMI7rP9MxdLadpfOzdH6jnFW0PwL5toC9zJqv24G0t0La0BdT7u1ZJU5JB4UqWx6GuLj4sMqHUYMdHvJ1qje/IU20DvG4OMkP36hwl4unWe6d69lAoLwaSkaumUIuDMl4MfD3IMfFchnaS1HhmkoUQDTitOim5gOYjvzMYBSXMDBplNvID41rAIoosG6RrSggFhllHB9brHg9V1GJw== 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=1Q/HDXLoyiC61Uu3uiyDBlQDft7G81VamCAO8Ca1qio=; b=NuHAL5MrpX+RNUyRxoI+bbLHkfTudtkXCvZU6zWcXbksuSe3y7iDKN7FZ1bn/XldAnGD/DtAtk1Xn/6B+zorZqnXSXSvFTP0v1OltrieLJdWmBJXVL66dN3g4alkTwIdMPmUVGf7m3a/mI0qIaIZzW+0lzdM8Ci/0T+87fcKrcjbCo9TMteaQLrsB4Vnbl+j+4wi2mcPl/vJ6nYrhHuXPsjmdUTUDfI9fMYs7e0Dpfg0LIm3bQErvkWtwfgoy5gjzhjWMiTfIkpBB5C8f8gjAYH+2D5pSvnWBpKJDd5DYoWQCgpMpZDe4kDckwQQ8u4deDWDQqOq9GDg7WWN0sRU9A== 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=1Q/HDXLoyiC61Uu3uiyDBlQDft7G81VamCAO8Ca1qio=; b=eiUt9+KFctI6R32zUke32IVonm00TRqvjKsaDOuNIFeOvPq0e2nkDZcjTjkZakCL3qHK4RXi3L5ChQ1XOQZeubBqXPmHgaC14CDysgoX45vZmN1fpPfYKtPFYmbKowwChGLZ9YCMr+5TbjttB+es4huhR7f687wlOmXiUQAFgkfXhHwOlVnx5zZeaEbKeY7qpTxwukXLSF2inLxkU/x/nXAZPGs73bRXEF6cYBe1wwRqQIyT+tt3PQtgvyKJ1g7hJBV13veiPQt1Crej9GDpgVWEMDF5AyjivvaqeIikKQJ9LCMBD18vf2jGe7kG3hVxEUSidWdSbpGrpj3vKz0lSw== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:28 +0300 Subject: [PATCH v16 20/22] tests/qtest/migration: add vhost-vsock tests for cpr-transfer and cpr-exec Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-20-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB11921:EE_ X-MS-Office365-Filtering-Correlation-Id: 8b22da8a-97b5-43f2-e569-08df284b99f7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|376014|1800799024|7416014|52116014|366016|6133799003|18002099003|22082099003|10067099003|260925021911599003|260925021311599003|260925022911599003|38350700014|56012099006|261009223027099003; X-Microsoft-Antispam-Message-Info: zy9gmS6ck9sOafdHY5tI7kMYR+eBN23wYEJrlCUL/+HTNcGTb1pND+hacQE67X19uxDvtA1Gs4RpPTzwH7q3hk0RKZFmngDv3vVPYGN7AKm8f9IlmS13xNFfJwEB9KfxHm9NPdpGNKmDEM4e6DtJ91JDOX7kWx+plAEqWy3KKBpKWwDQ67caxb4nM7CDYcINd+ezVEdE8sKpTmwxNzTodSUezRoPutlNPPrBFe82D9jRPPsYmvIEDzkkBkx2URNxaz/clJghNkQ/lILndjKcizzuzqX/6tPfA7CJMllgsLQLd4N4dsShW8zMr5nO5vO3PVRLbQ1KBPu1yL+kpEVgFnAPCEJoRPEdJHGKnzDRXm11HaMYDDfzLCc/r1OW5autsVO4/lNC+xsPO4iFL3UY6XTWHZ8yD7nto4GuOLRwJHC4VBZbpTkwNoJ+SBqKVPXhsbm220xTqy/urnHNcvcdMUlDWFvudkKzzggdstYNTLrWs2UQkwmoSv1XA5mc3NgXOfnZA8mxg7kJhfECfrAMQBV1ESs1HX6W7GZcM5MGcE9UYV4ph/EA5UpSJaoHf8+q7N0VLhiYvvI/ir8H2rEi+DwKCCkP5Ds+ll7rrc2vXW3xHhdB9wBaTw9QkYzYJZLwk8yKQRKA1JUsGrAaSjP0Wd9ucEbonbSgXRrkMkbdAb0oO/TifsVy/69hNjMdua8ngWCsyJAr1sVa1LJV4V6wkKjd1qwyHVJWpQ71+cFBoRk= 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)(23010399003)(376014)(1800799024)(7416014)(52116014)(366016)(6133799003)(18002099003)(22082099003)(10067099003)(260925021911599003)(260925021311599003)(260925022911599003)(38350700014)(56012099006)(261009223027099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NFNmWU15VllEM052R2hET2xzVEpWd3doV05TOUdOS2V0TVRlWWRQWjcrRVl6?= =?utf-8?B?Uy81aFNVTzFoUjRBbzlXc3MreHltVXZJa2Q2OStEeFFJODlGTW0yd0NvYzY2?= =?utf-8?B?LzdxWHV2NXhVNXVwVlF2dGFuUUt4ZXAwUWNLZk9TMG8zalE5RkpxZ3BlQ1FV?= =?utf-8?B?eTlkZ2gyZjlvNFQ2ZHRTUDh0WEhvMi9DRHBTZkdtdmhncUtMOW1nU3RNOTJL?= =?utf-8?B?QXhNWDJMRER3ajNqYXFqRDU0bGVXdFJmWUZ4L05NSkR4QjdJZEI3a2dZc2Nl?= =?utf-8?B?d1piQUk5RWlDUk81bmZwUE1SMHUzdjJMcjB4WFhaYkVJTlFQMTNMaU82V2Js?= =?utf-8?B?cXBUWlZlaHBvQmFZalk1bHdEZFhVaEJqQTdoVFM5ZFNTeXY2YlF0SjVzRDRy?= =?utf-8?B?RVQ5QStNUmI1aEl0ZlJRSjBxWU9HemQ4ZHdUUDk0ZllMb21SVWtRcndPcTdU?= =?utf-8?B?bmwzcW90TmN1ZFVMSTNZQzFFaTdqZTVuNm02bFprbWF5OE5TTXh6Qm04cTQz?= =?utf-8?B?cTR5cEVlV2hQdTVESkN5YXJhZ2N5Z3g0KzMyYUhsakdyMU9sMzFsK2FUTnJ1?= =?utf-8?B?Q3VUQ00vbGxXTDBiMGRJNFB6RVVYTnNRSFc0Z1R2RDV4ZHV4NXRvNUM2VE9j?= =?utf-8?B?U2JJWWg0M3pUNW5nVmpiN3VmeFV2TmFjYkNsWXhHRFBiellGTHBody85Qk1l?= =?utf-8?B?R0RiQ2VWTFlKeFE1U0wrM3prQ2tWQ1Bpb0dpOWxPLzl1cGdUSEh6YkVkSlVJ?= =?utf-8?B?Q09hcXNqV2RmTFRPUG5zSW1hOFYyanU4eUErTmM4TzNkVTBaVmRTNGtiRjF6?= =?utf-8?B?U1A3WVh5b1hSZVpSa2FoVHArcmFqTG5qNnpTV3JhL0ZYdVI5VElQMmMrVWEw?= =?utf-8?B?VFVQd2c0dElaMTlJSnBQbENXZlh0NE53RGJFanphR3pjaFpTUFpqRVc2Y0kw?= =?utf-8?B?MWNzUTlsS0ZzaHZxQW5Eait0c1VOZWdYT1RtMmNIam1oSzUwRHcwbERwcXFP?= =?utf-8?B?L1BCcnFoOTMvc2FmY1FKM2tvcVNBclU3MDdEZXhRTndLZzdNbHJqYnBhcDJq?= =?utf-8?B?eXp0WWFuY25ldGN0aEN4NVNrTGZZVDRsc1pnWnFFWTVyZWE4NldaYjZvYXVF?= =?utf-8?B?eGJzUXBUOWtjeUM3eXpINVJUNnVIWkt3SnNTL1ZNZUMrM1dKT0hhNHVtclpG?= =?utf-8?B?djBPSjZsVUVoUFVxQzV6ckIxT3lSVDNUN0JLLzFLWXFEMHNHS0NCV0JtZWhZ?= =?utf-8?B?bjBsNHorTU9NaFU4RXNGc05KeGFGSmlzeXQ4UVk1eCtweThvS3lLeGdrcHV2?= =?utf-8?B?WkM1aExnai9VdVdBb29wOGZqRFFDTTZaWHdRVmdLVHZQL3dmREdiR0N4Z0Q1?= =?utf-8?B?c0xtd2NEQ3VjVzM1TFpjK2E5a3NTRXRuVEhFTGJFWE96VEdTQjBCVHNSdmJv?= =?utf-8?B?QlQzcDUxa0pLU0V5L25laC9ZTGVtMGpFZ3N6NHFabUNSOW1kUVVPWUg0aVk2?= =?utf-8?B?ZGc0aUF1MThOaDlNeDc0QWVKU051cDBhWXJHeFJpdURSa1JwWlVLbXlucTRR?= =?utf-8?B?R2l1bWpKejVnTW9wRnVuaHdHSFVHLzF2VkFzZGRiY1VXaEx3RkI1czM4VlZE?= =?utf-8?B?ZDJ1WmtBTllaUnF2SkdKUnlybG1OYU5Ld2JyMUlMOU5jRHhmTWF3UUpMV2Fo?= =?utf-8?B?THMzTXdidWFmS25BMXJCL000MUpRSGo2cG9lUTdrMVdIeWtWdWlmcEpXeVVF?= =?utf-8?B?RVVnR0JGYTk2dzVuajk3aG1KV1gwcnFtRk5KLzhtTVUxclUzSzgrOVlxM2JU?= =?utf-8?B?R1VSSDZ2TFUzektGVlhGMmwyNEhabzVBRGJwREgrd0lObTZNZExpMm1heXpV?= =?utf-8?B?U0VERFF4U2Z5dnQ5M2hkUFI5K3YraVE5UEdzRlFMb002OGsxY2FYZHNpVGN5?= =?utf-8?B?bEZWN1RWbEJZWW5IZE5PL0kvUlFWTFZmanJXUWsrL29JVUJHRVFlMWhOVWpi?= =?utf-8?B?ZWRhd2UyTWxDdDRjUndzMXZLVmZIbmdEQ0FLT1NNZjg4T0hRZjZ5elFURzFs?= =?utf-8?B?M05xUndqTzhHKzV3RnBFZXQrUExhRFdjMGpacHZMd2pkSzJXSzFyUTdBSDRy?= =?utf-8?B?cld2eVhxellXeWF1RzhjbVZKNWNvRUtrZkhsYnB6MnYvY0N2b1haL1FDTzln?= =?utf-8?B?S1dnUjNzSXNJRkFZTGFnR2pIRlZrbTdSalB1eHhnR2Z3MTgrT3F1QWV0ZlZv?= =?utf-8?B?SWNNVTU5bzYzaXc1MGUzNitMYjAvakxXdGVIcFNxUEkrTUxIR0k3V2NPU2kw?= =?utf-8?B?M1V5aVZZbWxBSCtqamNrUk1zaTlTYVpKb0J1OG1PKzZRVytNNFV5NjJoQk9M?= =?utf-8?Q?uKYfpJO4DL8YuGfQ=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b22da8a-97b5-43f2-e569-08df284b99f7 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:48.2030 (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: mU2e2G0+dSMnp+eZgJ/r1RHDmZAJFkaMjKwecrWQTK+cAmMYE0TtE3t+lLY2epI+H7FF96ujRf49zqNlq0ChX9RKx5T0yHvLoz5Lsdfnabc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB11921 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:c20f::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=OSPPR02CU001.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: 1791801063060158500 Run the existing cpr-transfer and cpr-exec tests with a vhost-vsock-pci device attached. There's no guest involved which is driving the device, so here we only test the QEMU side of the handoff, i.e. the vhost FD is preserved, the device ownership is released on the source and re-acquired on the target. The tests need /dev/vhost-vsock on the host and a kernel supporting VHOST_RESET_OWNER for vhost-vsock, they are skipped otherwise. Reviewed-by: Peter Xu Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- tests/qtest/migration/cpr-tests.c | 93 +++++++++++++++++++++++++++++++++++= +--- 1 file changed, 87 insertions(+), 6 deletions(-) diff --git a/tests/qtest/migration/cpr-tests.c b/tests/qtest/migration/cpr-= tests.c index 05c2ac1336d..3c21b79001e 100644 --- a/tests/qtest/migration/cpr-tests.c +++ b/tests/qtest/migration/cpr-tests.c @@ -19,6 +19,13 @@ #include "qobject/qjson.h" #include "qobject/qlist.h" =20 +#ifdef CONFIG_LINUX +#include +#include +#endif + +/* We expect this CID to be unassigned on the host */ +#define VHOST_VSOCK_TEST_DEV "vhost-vsock-pci,guest-cid=3D4000000000" =20 static char *tmpfs; =20 @@ -101,14 +108,17 @@ static int test_transfer(MigrateCommon *args, const c= har *cpr_channel, * migration, and cannot connect synchronously to the monitor, so defer * the target connection. */ -static void test_mode_transfer_common(MigrateCommon *args, bool incoming_d= efer) +static void test_mode_transfer_common(MigrateCommon *args, bool incoming_d= efer, + const char *dev_opts) { g_autofree char *cpr_path =3D g_strdup_printf("%s/cpr.sock", tmpfs); g_autofree char *mig_path =3D g_strdup_printf("%s/migsocket", tmpfs); g_autofree char *uri =3D g_strdup_printf("unix:%s", mig_path); g_autofree char *opts_target =3D NULL; =20 - const char *opts =3D "-machine aux-ram-share=3Don -nodefaults"; + g_autofree char *opts =3D g_strdup_printf("-machine aux-ram-share=3Don= " + "-nodefaults %s", + dev_opts ? dev_opts : ""); g_autofree const char *cpr_channel =3D g_strdup_printf( "cpr,addr.transport=3Dsocket,addr.type=3Dunix,addr.path=3D%s", cpr_path); @@ -154,12 +164,12 @@ static void test_mode_transfer_common(MigrateCommon *= args, bool incoming_defer) =20 static void test_mode_transfer(char *name, MigrateCommon *args) { - test_mode_transfer_common(args, false); + test_mode_transfer_common(args, false, NULL); } =20 static void test_mode_transfer_defer(char *name, MigrateCommon *args) { - test_mode_transfer_common(args, true); + test_mode_transfer_common(args, true, NULL); } =20 static void set_cpr_exec_args(QTestState *who, MigrateCommon *args) @@ -276,20 +286,85 @@ static void *test_mode_exec_start(QTestState *from, Q= TestState *to) return NULL; } =20 -static void test_mode_exec(char *name, MigrateCommon *args) +static void test_mode_exec_common(MigrateCommon *args, const char *dev_opt= s) { g_autofree char *uri =3D g_strdup_printf("file:%s/%s", tmpfs, FILE_TEST_FILENAME); + g_autofree char *opts =3D g_strdup_printf("-machine aux-ram-share=3Don= " + "-nodefaults %s", + dev_opts ? dev_opts : ""); args->uri =3D uri; args->start_hook =3D test_mode_exec_start; =20 args->start.only_source =3D true; - args->start.opts_source =3D "-machine aux-ram-share=3Don -nodefaults"; + args->start.opts_source =3D opts; args->start.mem_type =3D MEM_TYPE_MEMFD; =20 test_cpr_exec(args); } =20 +static void test_mode_exec(char *name, MigrateCommon *args) +{ + test_mode_exec_common(args, NULL); +} + +/* + * A vhost-vsock device can be handed over across CPR only if the host + * exposes /dev/vhost-vsock and its kernel supports VHOST_RESET_OWNER + * for it. Skip the test otherwise. + */ +static bool vhost_vsock_cpr_check(void) +{ +#ifdef CONFIG_LINUX + bool set_owner, reset_owner; + int fd; + + if (!qtest_has_device("vhost-vsock-pci")) { + g_test_skip("vhost-vsock-pci device is not available"); + return false; + } + + fd =3D open("/dev/vhost-vsock", O_RDWR); + if (fd < 0) { + g_test_skip("/dev/vhost-vsock is not available"); + return false; + } + + set_owner =3D ioctl(fd, VHOST_SET_OWNER) =3D=3D 0; + reset_owner =3D ioctl(fd, VHOST_RESET_OWNER) =3D=3D 0; + close(fd); + + if (!set_owner) { + g_test_skip("VHOST_SET_OWNER is not supported for vhost-vsock"); + return false; + } + + if (!reset_owner) { + g_test_skip("VHOST_RESET_OWNER is not supported for vhost-vsock"); + return false; + } + + return true; +#else + g_test_skip("vhost-vsock is Linux only"); + return false; +#endif +} + +static void test_mode_transfer_vhost_vsock(char *name, MigrateCommon *args) +{ + if (vhost_vsock_cpr_check()) { + test_mode_transfer_common(args, false, "-device " VHOST_VSOCK_TEST= _DEV); + } +} + +static void test_mode_exec_vhost_vsock(char *name, MigrateCommon *args) +{ + if (vhost_vsock_cpr_check()) { + test_mode_exec_common(args, "-device " VHOST_VSOCK_TEST_DEV); + } +} + /* Snapshots must be refused while a CPR migration mode is set */ static void test_mode_no_snapshot(char *name, MigrateCommon *args) { @@ -354,4 +429,10 @@ void migration_test_add_cpr(MigrationTestEnv *env) test_mode_transfer_defer); migration_test_add("/migration/mode/exec", test_mode_exec); } + + /* The vhost-vsock handoff doesn't need KVM */ + migration_test_add("/migration/mode/transfer/vhost-vsock", + test_mode_transfer_vhost_vsock); + migration_test_add("/migration/mode/exec/vhost-vsock", + test_mode_exec_vhost_vsock); } --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791801064; cv=pass; d=zohomail.com; s=zohoarc; b=Cm5EgRa/QGiTXTNZTpR5OTE3PSdwa0cf259Jmqc8OZU5nRoFTNrXu7c7i01icA54DXAgFqZF6n1S+oPBSFHbVoH1LbWbXdlLzklqpYa+eV3IcQqKY1VSnwwbOyFSkKLX1+pK12odc2tj+Pf/EwTWGDCcsSlTs+uQOvEuREI00y8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791801064; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=drAKAesrt6zn3dVVGT8tS0Fff5fyaU2GIsx2Yzp7c0c=; b=TdsuPCAqIBc2AvlqRBCvHcXJW+YC4zH4h+7jyYOZBTS03nnCmVGxh3YXs9XaV8fJSMUSeKdpKdtQrZgaK1zQ21LKzEe7Xl9/pTWfbc708rtxIStJYPIWRrQ+7DvLfL4uOXs2FPHpvHB7UpgjEl3Y2SXpbxARpYe3vY06fSflM4Y= 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 1791801064057155.58760369622007; Mon, 12 Oct 2026 03:31:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHh-0007vz-7U; Mon, 12 Oct 2026 06:29:33 -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 1xGDHE-0007ex-Pk for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:09 -0400 Received: from mail-norwayeastazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20f::7] helo=OSPPR02CU001.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 1xGDHC-0005Fy-AS for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:04 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB11921.eurprd08.prod.outlook.com (2603:10a6:10:614::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.15; Mon, 12 Oct 2026 10:28:49 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EqMt6BOCJT0Xagnqjh7+pTUlULIyzKsME/6Gtz91yV5RPXflqTQ6Fx5NIBgwYlb0HKJKVxQOxzNkumSGkLwAo49hWpGWtdfWxvSuyFecpl5C7jK/u6E3wS3+RhtK2MPQ3Arsz5CVxCER5bKP8ZDfiLLL76Zv5lNfx/+O0a9WRh3qBxnoRSyWH1MAh4tKVzKe8d+I1rfdCmvELqZGxkBqZp9O5A72kspDa3eU5Wjw0kWn1LgENercc70eQM5Lak6B/Xl0RdUok3V9Ot+X3CqxDHbphNiV1QmtzD/xg6GVwtsDZGstVpWqvH+QpA0U+kc23HhWmdbPZm3d+NO9JsKazA== 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=drAKAesrt6zn3dVVGT8tS0Fff5fyaU2GIsx2Yzp7c0c=; b=y+nzqlQ21ZWkVr0iAmtXdgFi0HgaNKsBr7g8FcYc1vBZxYd9P90RvESsK1HRuQA1Qr73FCORQ5N0nrK+Z2Siu3gJSoxrPy7lF4BwN4RbeVjUAH3KIhgEC1mlodEY2a5aHHeWjUIDs6H8Az0MJ8sLmMVbMgEtNjmeVRrmerKDGvDU1mHsqTdl4CcVaZAHX7MlzC8KZL7rf1A+43+YUNS1IeyZxaEsYKYH8D0JJ2pTTVSMRocSwViCLlKq3qzzQxtJIK8IThnIlYt1OaV1EBicgmznID3A+MoHSB8Z7hdJhYdpSySL6chsrv1ztaUeyqdz/LFeGCW8cBFdhctgOLJJyA== 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=drAKAesrt6zn3dVVGT8tS0Fff5fyaU2GIsx2Yzp7c0c=; b=dVVkpiqwEzxMZ0FuDHUSxV4uGx00q07HEVflskMgE5tSyTgUL9g/cF1nR0y7WiA20tkuDz+NyxzILUt/pSo3LOJ4Py8ffRTw38i+rkOyuhhNV9bscBRKfrdqOy17f2UNwKKEmfgtk/Jb3c8EszDFTrb0Vl6qQob6Z9ggUjFIRGHGr5QUHXxDpB7mo5+Fgc02yVOoYj3C3M69E/5ypilh/o2XEfwNjcubLqH847cny1bRbrr6zYH53GGAptNjGkTGkOAzEtua9M4HmyMNaeFZUOnSNyQR/uBwk3vOVX8lnRRYc7q8YfYgVHTJTmf6XsYpYM6rp3EhEnikMIqDcr1jBw== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:29 +0300 Subject: [PATCH v16 21/22] tests/functional: add vhost-vsock CPR test with a live guest Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-21-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB11921:EE_ X-MS-Office365-Filtering-Correlation-Id: adc6ed4c-4111-44e3-cd83-08df284b9a78 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|376014|1800799024|7416014|52116014|366016|18002099003|22082099003|3023799007|10067099003|260925021911599003|260925021311599003|260925022911599003|38350700014|56012099006|261009223027099003; X-Microsoft-Antispam-Message-Info: mZ1GlL+QZc9m9H7fAdvKlDjieHA2an8K6ChTdJV7D7MHuxnFINclD0m6T/vJmLLs9IvpAuy68td+DMw/fHxVOYvyNvSGAEb1aXBPnL+vCPEfOEGS9YRtHV+2y2BAMGR3u2ibL8h2pPTDmcaBFWK6IvxzUDh+32lf0tocew0/E6D7zHuev6YdyPprmtWXqboYU4HMXWWxtHo6gxZuGDMqUwTZvjPzVcjkH+DRTPgTyCH6QLwsi5S9J1ITvUXmv7D7NDZy8buow6sDF524zgoLN/+bhwD+3Cv2QwoJPg2pF3bUn0uSOfmN9UMxlnylvJ59ZJAXvIWmVJDaCPhpRyQyrGlmX3MKptcbrkLRJ0W4JIlVJqMI7fNWPdUqZ13zxg9O/pvGPl/W+gIx5m6Kd2zmHjaiZAuDF3tYtWbjIuliHKkv5OtfoA3yTRuzVMmreWRQznNyPrWCVaCYP/xFSMg7f0oWVe72VPojO7UWcgQoUQVVjjjQN7n0XyJUkaZhrZyLYu+rHIIhFX7mUTfPq8mQpOx+xtoewdJTwh+dbDXHWxbe8Vdz7X8d6J6oinfiX/vDeMxXG54C/aFQW8rPzc7fjX2ntZ+TbWnxmHssFoaGo5A7/hzwBhplq+dQusHQQckKtZNfbbu++VukdUA/vDXqUovYZx7fEJ8tZQXZzu/cfXzdDsqTCNyR6Hvg6bSsPjhIEYtj0EXdg2jANcv82ulW4Gyg4lSK99mQUCr2vBIAgSM= 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)(23010399003)(376014)(1800799024)(7416014)(52116014)(366016)(18002099003)(22082099003)(3023799007)(10067099003)(260925021911599003)(260925021311599003)(260925022911599003)(38350700014)(56012099006)(261009223027099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MXpWcTFrQndYTGNSZmxTQkFUNm8vT25ySTY3SDArdUpnbmNVV2M5VWVpcjY5?= =?utf-8?B?M2ZuNS9wVlZzTkpVOWE0SnRTN1lsMzZCOFpraTkvTVFRUnRRU2ZwTkM4ZGIw?= =?utf-8?B?ak1IZHBtZ1AwTjdNVzdEaFFidXBpWkh5dmZwaWlwOVQyZmtzSVdGQXJVSS9T?= =?utf-8?B?eVMwUzlMNG0yU0FZb013NkxCTWxpRExFN2tvK1hOeGZTWXpnMG5iOWZuc09S?= =?utf-8?B?bzlrektrYVNKUTNRdjMyWE81ejlmcCtROVhxODdKbVY2aUEycnlPaXVBRWpo?= =?utf-8?B?UWR5WkdyZXFESjhWekxpR09WeVljNnlnajZBQ1ZxUUZtZVRQdEo0MFlnUURB?= =?utf-8?B?elBXQ0w0dXJqVlZ4WnhUSlRPZldVcS9ia2lUOC95TTd2N2hadWROTEttb1lU?= =?utf-8?B?VFNCUVYvanVFSm5VbG11WlBOZk9ERk9rNkpiRzRtUEJSdDhIaEFYL3d5Rk92?= =?utf-8?B?dVJlYWtORktJdzMzd3lsYVFLUGxqV2JFbUtNRXJLSmp3eDYvKzdtK3VLZ0Nz?= =?utf-8?B?dE5NaUxadzd5L00rQ2dtOXV2N1FYdWFjWGJ1UjUrYlBaSVFVNUl5Y25qNVgx?= =?utf-8?B?bDliMHRTanNXbnBMUHNIeVpTdkZZaEIwV3Q5Y0VYdCthZlpDNnRDVkxUSUNC?= =?utf-8?B?b1VMVUR1NFEvSEM3N2ZoOFBFVGNPbFlyWG9XcWpRRlM3VDNCd1FFbDRrTHIx?= =?utf-8?B?VGlFVDVmMmxiU0Z3Q2dJM3d1dzJSVG1ISi9kUHo3U0xkaEQrMThwOXBaV0ZG?= =?utf-8?B?eUowdW5WaUdzQVZzK01ybTMwUlR6Z29tQVBSKzdLS0s5cHU0WnBKWTZ1ZWM1?= =?utf-8?B?UDRUQTFYTEVsRExvOXBQSXZSNmJsbkk2QkEzb3liMWEvOGx6SVQ1ek96SlI2?= =?utf-8?B?cmJkc0t1K1dyWkZCb21lZTZPd09ENEpSVWJEdk45cUkxcllqWHcxcjdhc0ZH?= =?utf-8?B?TkxNRGE0R0NJQUxWb0taeWN3NVh6SWVTNzE4Wmh3aEZuenk3c2ZIYis5L282?= =?utf-8?B?NGdRYXJCV1ZNLzVDajV3aGdFTnIrdy9Kc3J6aDkzbUR5bzIwWE1CaklRdm9V?= =?utf-8?B?S3l5QitFSDJBVFRZNWc3SE8wSk1lOU50WHdkOEE2RkFxS1BHZ0Z0bUxDaDgr?= =?utf-8?B?RTArMUJ4SFR1MXhYOXQ5SG0yMDZxTHpSSFpsbHRXVlJ5QmFoZTByMGxuNmkv?= =?utf-8?B?RXR6Y2ZzVHkvaEIza0RrNHhLazIyVzlHd2JlQVB2MFFJOTlQLzFEejZtZ0h1?= =?utf-8?B?dWtwd2RaK3Q5THpwL2ZzWmJqL2owUi9ydm11V0xHV2J5Z0I4V2ozeWt1Qm5n?= =?utf-8?B?VTE4K0FXVmhmb0cwRnU0WjRSZXhhQVBET3E3S1FwZnEvSmt3TzBxQjN1QWZV?= =?utf-8?B?WEVrWkNENkM2MzJ5UXp3Ykg1WlNTZVBPcVpYL1dPYysvaGFIVjh0Z2trdFFW?= =?utf-8?B?V3BhNGQ2dDVLZENTc0lUL3lXOVNXN0FvbWRkZU1YbzkzY3hjTWd6a0hEYXhU?= =?utf-8?B?N2pMVHkwRUdTWjBCTGYvMUJTYXZQRGVCQnlSNzBOUlV4bnJlTHp0elpCVC8z?= =?utf-8?B?aW54a3hqbmNWOG8xRE1SVG1PZUU1d0RuSTNJTTFhaVdiZDZ4Q3Z4MjVvZjI5?= =?utf-8?B?MjJRS0lBbmtTYW1yZElsYUhPeERDWXg2OUo2RTlBZVpHWWoxNnBJQ09BT2Ja?= =?utf-8?B?NVRlWGxLMzFPalNhTWNpU2NBYjdjWWZTUXpUVWt6N1ZrYzVKTWtPcUI4Nmtz?= =?utf-8?B?azNpUlNoVWN4K1VWMG4ydWJ1RitqNnpnZU5td2k4ZXNkV0VNSE85Q1VGa1d5?= =?utf-8?B?SzVwVjVSajlsbE1hUzc4b0xVN1Q3SGFna3Z0VG9zc1RLcmpkRGIwYTdjUm15?= =?utf-8?B?QXlqZlJoanlXQ2hkZVlYWXpzRDBOaUJvTWJCemZneTlhVTBlMlNpOWZRalVN?= =?utf-8?B?a3IzZUZXcUw0M0QwS1JrMlBBNDVycWRNMElZYTRRbXJhMlg4RHhzUGJQa1Z5?= =?utf-8?B?alJvN01pLzNXSTRHSW4xVDRvbmZFbzZpaVZBNVh0L2JtL3htcjUrci9rK0o1?= =?utf-8?B?eEhYMjIrbWtSa1NkdzJKeWNUdkRaeWtLWDA3b0QxcXE3NzMyWHd6OTJ3OVFI?= =?utf-8?B?STJicDFuZnZibWhkVXlxYkZzYW03TlU3b25XbjhCN2tBeUNNQ0lPMDRaWjd2?= =?utf-8?B?NVBkRHdmSUJJWXNZbXN6ZE9ZL2RoMGZ3cE8zU2FBR2pVWW10b2hiOGFlUFVj?= =?utf-8?B?Nis2Z1pSanhJc2NIcnYycytYZUVwc1BIVUN6MlAxb25maXZaKy9vSnRVcGla?= =?utf-8?B?cjJkaDh2TFVsU095Q0dZcFJxOWlyTERpdWh3b01NSVFKcUJtVzdEcGZOV2M2?= =?utf-8?Q?yI51dQBp4vtgRvxY=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: adc6ed4c-4111-44e3-cd83-08df284b9a78 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:49.0487 (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: ry3GKEJKQaMkt/oZyBEpFpMIsKYp0AikiqoSqEkCrIePpcJWwUxkQxEltynBMroXDxxfp0VH5sO7I5TtY04+K1Jw2S4576U0s1ZTrvlhXMM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB11921 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:c20f::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=OSPPR02CU001.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: 1791801065105158500 The qtests only cover the QEMU side of the vhost-vsock handoff. Add a functional test which runs an actual host<->guest vsock transfer across a series of CPR migrations, for both cpr-transfer and cpr-exec: - the guest is booted on top of a qcow2 overlay shared by all the QEMU instances it goes through; - the host sends a 512M file of random data to the guest with socat, where it's stored on disk, then gets it back the same way; a CPR migration is performed every 0.2s while a transfer is in progress; - with cpr-transfer each migration starts a fresh target QEMU and retires the source; with cpr-exec the same process is re-exec'ed over and over; - the file received back must be identical to the one sent, and both socat instances in the guest must exit cleanly. The test needs KVM, socat and /dev/vhost-vsock on the host, and a kernel supporting VHOST_RESET_OWNER for vhost-vsock. If any of those requirements are missing the test is skipped. Acked-by: Peter Xu Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- tests/functional/x86_64/meson.build | 2 + tests/functional/x86_64/test_vhost_vsock_cpr.py | 245 ++++++++++++++++++++= ++++ 2 files changed, 247 insertions(+) diff --git a/tests/functional/x86_64/meson.build b/tests/functional/x86_64/= meson.build index 0353b2af8e1..718bdc5195c 100644 --- a/tests/functional/x86_64/meson.build +++ b/tests/functional/x86_64/meson.build @@ -7,6 +7,7 @@ test_x86_64_timeouts =3D { 'netdev_ethtool' : 180, 'replay' : 480, 'virtio_balloon': 120, + 'vhost_vsock_cpr': 300, } =20 tests_x86_64_system_quick =3D [ @@ -51,4 +52,5 @@ tests_x86_64_system_thorough =3D [ 'virtio_balloon', 'virtio_gpu', 'rebuild_vmfd', + 'vhost_vsock_cpr', ] diff --git a/tests/functional/x86_64/test_vhost_vsock_cpr.py b/tests/functi= onal/x86_64/test_vhost_vsock_cpr.py new file mode 100755 index 00000000000..035307fc82f --- /dev/null +++ b/tests/functional/x86_64/test_vhost_vsock_cpr.py @@ -0,0 +1,245 @@ +#!/usr/bin/env python3 +# +# Functional test for vhost-vsock over CPR (cpr-transfer and cpr-exec): +# a host<->guest vsock transfer must survive repeated CPR migrations, in +# either direction. +# +# Copyright (c) 2026 Virtuozzo International GmbH. +# +# SPDX-License-Identifier: GPL-2.0-or-later + +import fcntl +import filecmp +import os +import subprocess +import time + +from qemu.qmp import ConnectError, ExecInterruptedError +from qemu.qmp.legacy import QEMUMonitorProtocol +from qemu_test import (Asset, LinuxKernelTest, exec_command, + exec_command_and_wait_for_pattern, get_qemu_img, + skipIfMissingCommands) + +GUEST_CID =3D 4000000010 # we expect this CID to be free on the host +VSOCK_PORT =3D 5000 + +TRANSFER_SIZE =3D 512 * 1024 * 1024 # file size for host<->guest transf= er +CPR_INTERVAL =3D 0.2 # interval between CPR ops + +VHOST_SET_OWNER =3D 0xAF01 # _IO(VHOST_VIRTIO, 0x01) +VHOST_RESET_OWNER =3D 0xAF02 # _IO(VHOST_VIRTIO, 0x02) + +# What a QMP connection raises when its QEMU goes away underneath it +QMP_GONE =3D (OSError, EOFError, ConnectError, ExecInterruptedError) + + +@skipIfMissingCommands('socat') +class VhostVsockCPR(LinuxKernelTest): + # This should have passwordless root login, vsock support + socat + ASSET_DISKIMAGE =3D Asset( + ('https://cloud.debian.org/images/cloud/bookworm/20231210-1590/' + 'debian-12-nocloud-amd64-20231210-1590.qcow2'), + 'b94e3f34db59988a815b33dffc24f5a58502540efece2cc1ed15e0ac8749bb2e') + + def require_vhost_vsock_cpr(self): + try: + fd =3D os.open('/dev/vhost-vsock', os.O_RDWR) + except OSError: + self.skipTest('/dev/vhost-vsock is not available') + try: + for name, request in (('VHOST_SET_OWNER', VHOST_SET_OWNER), + ('VHOST_RESET_OWNER', VHOST_RESET_OWNER)= ): + try: + fcntl.ioctl(fd, request) + except OSError: + self.skipTest(f'{name} is not supported for vhost-vsoc= k') + finally: + os.close(fd) + + def setUp(self): + super().setUp() + self.require_accelerator('kvm') + self.require_device('vhost-vsock-pci') + self.require_vhost_vsock_cpr() + self.set_machine('q35') + + # Use Debian cloud image as a backing. During host<->guest + # transfer the guest will write data to its disk, so we start + # it with an overlay + self.disk =3D self.scratch_file('disk.qcow2') + subprocess.check_call([get_qemu_img(self), 'create', '-q', '-f', + 'qcow2', '-b', self.ASSET_DISKIMAGE.fetch(), + '-F', 'qcow2', self.disk]) + + self.payload =3D self.scratch_file('payload') + with open(self.payload, 'wb') as f: + for _ in range(TRANSFER_SIZE >> 20): + f.write(os.urandom(1 << 20)) + + self.sock_dir =3D self.socket_dir().name + self.cpr_count =3D 0 + + self.guest =3D None + self.qmp_path =3D None + + def prepare_vm(self, vm, name, *extra_args): + # We don't want QEMUMachine.launch() set up QMP for us. In this + # case launch() waits for greeting - which won't be sent cause + # CPR target is reading CPR migration channel before QMP + qmp_path =3D os.path.join(self.sock_dir, f'{name}-qmp.sock') + vm.set_qmp_monitor(False) + vm.set_console() + vm.add_args('-accel', 'kvm', '-m', '1G', + '-object', 'memory-backend-memfd,id=3Dram,share=3Don,s= ize=3D1G', + '-machine', 'memory-backend=3Dram,aux-ram-share=3Don', + '-drive', f'file=3D{self.disk},if=3Dnone,id=3Ddisk,for= mat=3Dqcow2', + '-device', 'virtio-blk-pci,drive=3Ddisk', + '-device', f'vhost-vsock-pci,guest-cid=3D{GUEST_CID}', + '-qmp', f'unix:{qmp_path},server=3Don,wait=3Doff', + *extra_args) + return qmp_path + + def wait_for(self, what, cond, timeout=3D60): + """Poll cond() until it returns something true, and return that""" + deadline =3D time.monotonic() + timeout + while True: + value =3D cond() + if value: + return value + self.assertLess(time.monotonic(), deadline, + f'timed out waiting for {what}') + time.sleep(0.2) + + def qmp_connect(self, qmp_path): + """Connect to a QEMU which may still be starting up""" + def attempt(): + try: + qmp =3D QEMUMonitorProtocol(qmp_path) + qmp.connect() + return qmp + except (OSError, ConnectError): + return None + return self.wait_for('QMP to come up', attempt) + + def wait_migration(self, qmp): + def completed(): + status =3D qmp.cmd('query-migrate').get('status') + self.assertNotEqual(status, 'failed', 'migration failed') + return status =3D=3D 'completed' + self.wait_for('migration completion', completed) + + def wait_running(self, qmp_path): + # Make sure we're dealing with the new QEMU after CPR + while True: + try: + with self.qmp_connect(qmp_path) as qmp: + self.wait_for('the VM to resume', lambda: qmp.cmd( + 'query-status')['status'] =3D=3D 'running') + return + except QMP_GONE: + pass + + def boot(self): + self.guest =3D self.vm + self.qmp_path =3D self.prepare_vm(self.guest, 'source') + self.guest.launch() + self.wait_for_console_pattern('login:') + exec_command_and_wait_for_pattern(self, 'root', 'root@localhost:~#= ') + + def transfer(self, guest_cmd, host_cmd, cpr): + """ + Run a socat transfer between the guest and the host, and keep + performing CPR migrations as long as it's in progress + """ + exec_command(self, f'{guest_cmd} &', vm=3Dself.guest) + with subprocess.Popen(host_cmd) as socat: + while socat.poll() is None: + time.sleep(CPR_INTERVAL) + cpr() + self.assertEqual(socat.returncode, 0, 'host socat failed') + exec_command_and_wait_for_pattern(self, 'wait %1; echo RC_$?', + 'RC_0', vm=3Dself.guest) + + def transfer_both_ways(self, cpr): + """ + Send the payload to a file on the guest's disk, get it back into + another file on the host, then compare. + """ + echo =3D self.scratch_file('echo') + connect =3D f'VSOCK-CONNECT:{GUEST_CID}:{VSOCK_PORT},retry=3D10' + + self.transfer(f'socat -u VSOCK-LISTEN:{VSOCK_PORT} CREATE:/root/da= ta', + ['socat', '-u', f'FILE:{self.payload}', connect], cp= r) + self.transfer(f'socat -u FILE:/root/data VSOCK-LISTEN:{VSOCK_PORT}= ', + ['socat', '-u', connect, f'CREATE:{echo}'], cpr) + + self.log.info('%d CPR migrations performed', self.cpr_count) + self.assertTrue(filecmp.cmp(self.payload, echo, shallow=3DFalse), + 'the data came back different') + + def test_cpr_transfer(self): + """ + Perform consecutive cpr-transfer migrations during vsock file + transfer, starting a new QEMU instance on each one, migrating into + it and shutting down the source + """ + def cpr(): + n =3D self.cpr_count + mig_sock =3D os.path.join(self.sock_dir, f'mig{n}.sock') + cpr_sock =3D os.path.join(self.sock_dir, f'cpr{n}.sock') + target =3D self.get_vm(name=3Df'target{n}') + target_qmp_path =3D self.prepare_vm( + target, f'target{n}', + '-incoming', f'unix:{mig_sock}', + '-incoming', 'cpr,addr.transport=3Dsocket,addr.type=3Dunix= ,' + f'addr.path=3D{cpr_sock}') + + # The target listens on the CPR channel: wait for it to be the= re + target.launch() + self.wait_for('the CPR socket', lambda: os.path.exists(cpr_soc= k)) + + with self.qmp_connect(self.qmp_path) as qmp: + qmp.cmd('migrate-set-parameters', mode=3D'cpr-transfer') + qmp.cmd('migrate', channels=3D[ + {'channel-type': 'main', + 'addr': {'transport': 'socket', 'type': 'unix', + 'path': mig_sock}}, + {'channel-type': 'cpr', + 'addr': {'transport': 'socket', 'type': 'unix', + 'path': cpr_sock}}]) + self.wait_migration(qmp) + self.wait_running(target_qmp_path) + + self.guest.shutdown() + self.guest, self.qmp_path =3D target, target_qmp_path + self.cpr_count +=3D 1 + + self.boot() + self.transfer_both_ways(cpr) + + def test_cpr_exec(self): + """ + Perform consecutive cpr-exec migration during vsock file transfer, + saving devices' state to a file + """ + state =3D self.scratch_file('cpr.state') + + def cpr(): + try: + with self.qmp_connect(self.qmp_path) as qmp: + qmp.cmd('migrate-set-parameters', **{ + 'mode': 'cpr-exec', 'cpr-exec-command': exec_cmd}) + qmp.cmd('migrate', uri=3Df'file:{state}') + self.wait_migration(qmp) + except QMP_GONE: + pass + self.wait_running(self.qmp_path) + self.cpr_count +=3D 1 + + self.boot() + exec_cmd =3D [*self.guest._qemu_full_args, '-incoming', f'file:{st= ate}'] + self.transfer_both_ways(cpr) + + +if __name__ =3D=3D '__main__': + LinuxKernelTest.main() --=20 2.47.1 From nobody Thu Oct 22 19:27:19 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=1791800995; cv=pass; d=zohomail.com; s=zohoarc; b=jy0ah0rSHQNMxSuHg+C/7Ia9OLkPDlHKpVJTy4Pd8OfOt5bGg7sSgLscqxahZwWrim7aiOwbSQ5pexboeVxXy3O/UFSEOECRwofBOUW027UBtHHHc5itOEUYZ4ZXEsBjsYnKISUjzYdPZP7qwXlPJB5nfUt6/guSCdeJmf0vPQY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791800995; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/9uyq7mQIpionRYH4TGd39qHDkvCHjkKh3DniesFcmA=; b=FRVyinNYTtKk8/Gzh1W4GFhS2Qnj3loajthBRcM/Y8Uwbeye2h5tAmHpjZ7vXIQ9GY+p58ZzhLf831FsGU5zv4XKlhRoL/PDHWBHVK/aRJvEL3Fl9rctxTHTS3meee9v9vX8W5aDzZadqlmex8LON/MswoBtfdQfhseULjGDRwQ= 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 1791800995276883.6449291661244; Mon, 12 Oct 2026 03:29:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGDHk-0007zb-7s; Mon, 12 Oct 2026 06:29:36 -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 1xGDHJ-0007hW-2w for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:10 -0400 Received: from mail-norwayeastazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20f::7] helo=OSPPR02CU001.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 1xGDHF-0005Fy-6n for qemu-devel@nongnu.org; Mon, 12 Oct 2026 06:29:07 -0400 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DB9PR08MB11921.eurprd08.prod.outlook.com (2603:10a6:10:614::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.15; Mon, 12 Oct 2026 10:28:49 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Mon, 12 Oct 2026 10:28:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QnV5fFcz4Ncr5ghfAFdOosXlFwYCtjxaDWPrQ+Dq6p6fPyHDeRmbcOOPLdgFIp5EXnaTpucBWbwLQ0E4wLaxzkDjiyZY8mxLh92Z16tqIGqKoclHISlxxPXAM1xyRJOrcS2O/L7oG3K22ipR9CmBIzEZj/opAmCWM64V2gNcb9HqocBDyNwiR/luuBo/heMabIsKGK11wCVlzRdblIpJiOLQVGCUpvi1Kfn/hA0Ow/zJL5WyvzxhgIxF6tabsBx6Gk43vMH3BOYbC15YuJ1a5vfenVxchyD6y0H9oft3ylv9Iy1HO4gLV1n3bueurtOTY3r3fJIJGqOtqKG97i8KKw== 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=/9uyq7mQIpionRYH4TGd39qHDkvCHjkKh3DniesFcmA=; b=ARWIsIsJyctZjkpBajz2l+cs6BQC1T0vwhltGLOyaQFPioSzq6VMDYDYqe49FTZLMJpnkPEyv/Qisfm5cECoPr16ztEcDCbFJTnOkmVuDlbCz5+FLFBMr6CsQkKJMc7cWQPQpk24Vrz9QPdPL5gMRcY1Vaew937hEwYfjHdUDwkJ1pP6tVMr6Yh9h0kmodibf8SNRcXP+d2OXBbTLpfOu4MPHgjMl7rPfJbnKhn88U3YNPL7d2iG2hMmuZcLLtTSPWdktRDQbl1t2p/p6cDqtLXpKDW6yOddD16xp52v0yv4yfEciCQWIgTHN6JpgnhHscFJwMEbHuXKgmletM4Hlw== 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=/9uyq7mQIpionRYH4TGd39qHDkvCHjkKh3DniesFcmA=; b=n3IkhehIfaC55ca/KsJgA4mOXMJb9HGkfo+oA0oUPUeJ/yUY23u8ZkaEbo19A5WmddfWkWXcGYMjpyVv0zWgdJsyLF9D++ODXbYGQDtcmMdjPEmjMcr70XgOMHclAvBHVCSqR5yWB6yEcW1KLQaGtxgAbCnuuxwsJ2qVRNxEoe2yZzyUCnLE3KPCiwrENTePP3LoV3VI3ARRxuphkoQeQp9lFxoaJNRr5XwI3fU8TUSXWItZdumYI0/uQiZg6mQCKKmlJdKtiR5YInnfVvKIRegiaQ0mW7/tRWsP3A6CI7lFEExRiBjMsSWpzJVgn/3cmfWesIO2SptWVonYu3f7Aw== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Andrey Drobyshev Date: Mon, 12 Oct 2026 13:28:30 +0300 Subject: [PATCH v16 22/22] tests/functional: cover a cpr-transfer target going away with vhost-vsock Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-up-vsock-vhost-v5-v16-22-36c38bd15ffc@virtuozzo.com> References: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> In-Reply-To: <20261012-up-vsock-vhost-v5-v16-0-36c38bd15ffc@virtuozzo.com> To: qemu-devel@nongnu.org Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, bchaney@akamai.com, mst@redhat.com, maciej.szmigiero@oracle.com, sgarzare@redhat.com, mark.kanda@oracle.com, vsementsov@yandex-team.ru, clg@redhat.com, den@openvz.org, dongli.zhang@oracle.com, farosas@suse.de, andrey.drobyshev@virtuozzo.com, peterx@redhat.com, dwmw2@infradead.org, philmd@oss.qualcomm.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR03CA0043.eurprd03.prod.outlook.com (2603:10a6:803:50::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB11921:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f55ae85-abb6-4b65-7dd2-08df284b9aea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|376014|1800799024|7416014|52116014|366016|6133799003|18002099003|22082099003|261009223327099003|261009221727099003|261009221227099003|3023799007|10067099003|261009220027099003|38350700014|56012099006|261009223027099003; X-Microsoft-Antispam-Message-Info: HgI8Q6MyPgEJ01VXfI8NgD3eeAc51mu3debUQBXQLcC3ccT8uy/bbLswv8jbHZ+jJJdL6y2/m/cNR6D+e6g1wlXKK6GmubYEfpFHdWBCeUMB9NKQY+kPn+pGHa5ScJSG4DHR6j/45ulKbgwalg0vReLGz2jfLMvPOSq6dcWKuwx7vq8DA3eXUw4xeng4H5LLcwGQc+9HcPnqINrRmTnpktOCriszA0vLwVyRrxvsLzbggRfvCbspeN05KSdqFsfzkXKuRC9N7hkP+nJXwpOMj/uarkY1LIFO0x26A4OfyLdvbQ81b1wsald+9m776XPjvhyPDjne4t0CQDvbKpU6ob1H3g8DC7QtvVmEvIHeJ6ndzkVRT6zJViOlqee6VcxfkvVGZTZ+uIrt2o+kbdkq9LumihoqYPx6QuthBspO9KDYz327I7+2MPgq1wMuux2G/bFGd9k41uNYMvnbm5OtcxEsPpYPXsLDV+yXH8pGT9CqR5WMt7UlEkMI/om8S1D68dJphDyHZlbXJpR2ebRYAdln/KD2E1U30bMpP03wvthFvBcgDo/Y9BafGVQpvRJgk1BeZ+Vy+fXRxQZ5oAFh4dNLF4zWfhuEencxZaprWwk4L5BUEv9n+3m+H/DBbwcfwdJN6phXMlyfdxdF9pm/szkr0Dxs5OIcVaNmKue6gvkgMB9Yh7winSfHG01Nnozy1j5aJCNu+Bz0puZbAzkfPfYVb8CWDVJosBaQDin72sQ= 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)(23010399003)(376014)(1800799024)(7416014)(52116014)(366016)(6133799003)(18002099003)(22082099003)(261009223327099003)(261009221727099003)(261009221227099003)(3023799007)(10067099003)(261009220027099003)(38350700014)(56012099006)(261009223027099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZnhJR09McDI5VHlmcVdyVnZiT0hUMVhCVnBwTFI5STB5WkljeG5WVGpxeG1X?= =?utf-8?B?NUY1ZVd2Qkw4Y3B6QUdGSHBWMzVVQlk0elJ0ZmdsZk15QWcwTm5idnl3MUwx?= =?utf-8?B?M2F6VkVLcDNvRnpjNWx0SXo2SGZteDN3bjV4elcvY3dQTUdtNUJsSUMzOFNr?= =?utf-8?B?VG42VGM4ZDVsekxsaDhnWFlFUWtKTGxUbTh3eXVuQTdMc0c5b3c2cjhRRGdX?= =?utf-8?B?MHlaWU1ZMFhCOVREUHpvSFR4N0RBeE1Ia2pXcUE3K3NHSXp1MHd5YXRXa1NS?= =?utf-8?B?a00yemZpZUNnRTlYRlNMR0p4VmRwZDYyRmhFV0xCNUVmYUxvaWgwSHdEMnZE?= =?utf-8?B?UGc3MTV6enpUOE91MmFXa2xSWW1jb29IaHVjb2ZiRlFwcU0wSHorbk1wUUoy?= =?utf-8?B?UVByY1NHMGF2UDFURG1EdFZ2S2tZZnRIY0VIRWVzRFBGdkF0K1h5dCszRy91?= =?utf-8?B?TDdYYmtodkpTWVhBclF4V0UwbXVXVTB4WkdEYXhveVNLWk9nelZxREFEOG5m?= =?utf-8?B?aS8wK1J0NnVxVndyZUJObmN5Z2FqK2Z0K2JlRDR0V2ZlVG5LUHVHYTgyaGcw?= =?utf-8?B?bllGTXJlVDE1bG9mSHFqSnUwNGJjYTEySXFDTzU0SnNhRXowNmoxeUdGMGNU?= =?utf-8?B?a1h1T3Voa0RpRUJodVN0Uk51VTluclUvbTVuRkdWb3A5SVNlTWc4dzN3THJm?= =?utf-8?B?VlAxOEtLMzhVek1RS2tDZTdkZVRPUUlvRm9rY0ZiUnRaM1czUU13SHp2TWRs?= =?utf-8?B?RGJibEhSbUQ0djVac2RBOWFpSTZacHd3czI4aE1zaE95UHZPaVdEOVNsOU8z?= =?utf-8?B?aVMrOVJsNVB3M0NRcU0raDUwQkpYanlRZkxJVGdSU1ArWVl5V0lTdHV1VDBH?= =?utf-8?B?Skt1ME81eXlUOHdUUnhlbThETDhMbzJNNDdBdWlIa2lSQTN5cVkrQ05xUGZG?= =?utf-8?B?T3B6NlZWekxRWTdXMW5vU3hDeDkwY1Z0SFNWV3Q3Rjg1NTg4WWd1bmMwcXhM?= =?utf-8?B?cnpjczZlOXRPbkRsdUZlNUNNK2VoTTQwMFVIeDJpZUlkYkRXQSs4UXhBSXBD?= =?utf-8?B?cm43SUNzNUdPYW1aV0N1OUMrQ0gxTzBFTWxjMlRpS1NYUXFrRXd2WDQxN09u?= =?utf-8?B?ZVE1OXRQSkFDUUtYbDBrcVRaNEpacHBqL3A0T005Ujk0dGFqVno3VTFyT2xj?= =?utf-8?B?Q2pieUpKRm5hekYrSGNOR1ZBMkExMFUxc0JXTTNKRkl0OUdXYk1xMjI1endi?= =?utf-8?B?N3M1MS9FYy95cmhSdG9UNHdvLys4Tlg3bW1oTlYyRHprOWJBOG1BbUszbDZK?= =?utf-8?B?QW45TWZ6WVgxS2ttREUvREQ1aHZPZWdiZ3cydTBoM3ZzKzI0NXJ4M0UybFhK?= =?utf-8?B?aG5rSkszVnhPRC9JRzBvcVQyUHVyU2JEcU53Wlk4TkoycXJjZWdkTE9TZkVW?= =?utf-8?B?ME9hV1oxWEVVa2Z2QndsQUdCemxUc05DQnF6eDRjL2o2Vi8vbDhWUzloY3NX?= =?utf-8?B?b2RqZGR3K3Vmd3VWdkgrNEx3WHpwUXd2ZWk4ZndhNXVpU0VoVGFkRWxzSGxp?= =?utf-8?B?ZkxJblVWY1FUSE81aTU4VUdXQ1VsVE84cWQrUzgxSmo4S0FPWFFrQnlYVHZo?= =?utf-8?B?VUgzYVgzalQwR2VwOEdOaml3T0hGVm94WkEyRldBZkNwVk5XR0hIZXVHZitB?= =?utf-8?B?dUVWSEl6SUNJaVRVU2FQSDJkSDQrQ3ZuVmFUSG01U3REUkdxSFNiSXRoK3Jk?= =?utf-8?B?YUhkK1oza0hBRXJQNHEyczROSHRUd1J4OTdOSGVFbmpXaTNSQXRIdndzZWxK?= =?utf-8?B?NkRXSmY2VnhqeWdVRHR0blArSTZmSHRKajY5alNYd2pzZTY3eE85KytJdlFo?= =?utf-8?B?WEl4djhPK2pVYUVXQ1lTaW5CMHYxMjJPWHVmUEdxRmFMbWxDUmt4a3F1cFJJ?= =?utf-8?B?amI1NVBVQ2JnTFRhUk9Gdm9ISXdJVDJiNm0weWxzVExRclVIQ2VXK3E5NFd1?= =?utf-8?B?UmN6NXhReVVLQnZPazFKVXl1RUpKWEo3MXQ1d0tNRGk2ejFMd1hpNUhrYkxa?= =?utf-8?B?VzVFT3ZQSFZ4bEZBWDByMVBmQ0lUSE42a3BNRDdIV2FoVDBRN2U3V2NiUVFr?= =?utf-8?B?N1diM2VhVDR4RlYrVlA5NHh4QW1DMS9jQ3I2Z0MydUFrQU5oSzlXbzlnaG1h?= =?utf-8?B?TVMxZVIvMU44M0lTMmtUUWI5VXdLQklxSTNSa1BBMTA4S0JEWFVqbTNYdDNh?= =?utf-8?B?dWI2czRRODJ0N1pVVFlZRis3a2lkS1k5MzVWdWVsd2tYYmpyM3hwQnFIWDhJ?= =?utf-8?B?cm4zZ2RpM1dQZzQyTklxcXNwcDcrcjZTZjJnTHdVRDdVZjJ3MkZlZTFyMTR6?= =?utf-8?Q?8yE+A8vlaztUB3LY=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5f55ae85-abb6-4b65-7dd2-08df284b9aea X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 10:28:49.7552 (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: Sb8AjoQ8iAIxI1KAEk7jNg9X99anTcDqkrmM1+eVzVqura+DK3JSq3bl8099gRveGQROOt6urM9dgL+Dh9R+dfsVF7FIPd8trKhtTbWfnUU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB11921 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:c20f::7; envelope-from=andrey.drobyshev@virtuozzo.com; helo=OSPPR02CU001.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: 1791800996823158500 A cpr-transfer target takes the vsock device over in post_load(). Make sure the source gets it back when the target goes away afterwards. Three cases, in the first two the target is made to fail the load by lacking a device the source has: - the target exits on the failure (default exit-on-error); the source is stopped beforehand, so it stays paused until we 'cont' it once the target is gone; - the target stays alive (exit-on-error=3Dfalse) and the source resumes on its own (return-path capability); - the target loads the state while the source is stopped, stays paused and is quit normally; the source is resumed instead. In all cases a host<->guest transfer must then work on the source. The transfer helpers get a payload size parameter, since the plain checks don't need the 512M of the stress cases, and the target start code is moved into a helper shared with the existing cpr-transfer test. Signed-off-by: Andrey Drobyshev Reviewed-by: Akihiko Odaki --- tests/functional/x86_64/test_vhost_vsock_cpr.py | 178 +++++++++++++++++++-= ---- 1 file changed, 140 insertions(+), 38 deletions(-) diff --git a/tests/functional/x86_64/test_vhost_vsock_cpr.py b/tests/functi= onal/x86_64/test_vhost_vsock_cpr.py index 035307fc82f..3ac0a80c5ed 100755 --- a/tests/functional/x86_64/test_vhost_vsock_cpr.py +++ b/tests/functional/x86_64/test_vhost_vsock_cpr.py @@ -24,6 +24,7 @@ VSOCK_PORT =3D 5000 =20 TRANSFER_SIZE =3D 512 * 1024 * 1024 # file size for host<->guest transf= er +CHECK_SIZE =3D 16 * 1024 * 1024 # enough to just check that vsock w= orks CPR_INTERVAL =3D 0.2 # interval between CPR ops =20 VHOST_SET_OWNER =3D 0xAF01 # _IO(VHOST_VIRTIO, 0x01) @@ -71,11 +72,6 @@ def setUp(self): 'qcow2', '-b', self.ASSET_DISKIMAGE.fetch(), '-F', 'qcow2', self.disk]) =20 - self.payload =3D self.scratch_file('payload') - with open(self.payload, 'wb') as f: - for _ in range(TRANSFER_SIZE >> 20): - f.write(os.urandom(1 << 20)) - self.sock_dir =3D self.socket_dir().name self.cpr_count =3D 0 =20 @@ -121,12 +117,16 @@ def attempt(): return None return self.wait_for('QMP to come up', attempt) =20 - def wait_migration(self, qmp): - def completed(): + def wait_migration(self, qmp, expect=3D'completed'): + def finished(): status =3D qmp.cmd('query-migrate').get('status') - self.assertNotEqual(status, 'failed', 'migration failed') - return status =3D=3D 'completed' - self.wait_for('migration completion', completed) + if status in ('completed', 'failed'): + if expect: + self.assertEqual(status, expect, + 'unexpected migration result') + return True + return False + self.wait_for('migration completion', finished) =20 def wait_running(self, qmp_path): # Make sure we're dealing with the new QEMU after CPR @@ -139,13 +139,37 @@ def wait_running(self, qmp_path): except QMP_GONE: pass =20 - def boot(self): + def boot(self, *extra_args): self.guest =3D self.vm - self.qmp_path =3D self.prepare_vm(self.guest, 'source') + self.qmp_path =3D self.prepare_vm(self.guest, 'source', *extra_arg= s) self.guest.launch() self.wait_for_console_pattern('login:') exec_command_and_wait_for_pattern(self, 'root', 'root@localhost:~#= ') =20 + def start_target(self, name, main_incoming=3DNone): + """ + Start a cpr-transfer target listening on the CPR channel. Return + the VM, its QMP socket path and the channels for 'migrate'. + """ + mig_sock =3D os.path.join(self.sock_dir, f'{name}-mig.sock') + cpr_sock =3D os.path.join(self.sock_dir, f'{name}-cpr.sock') + channels =3D [ + {'channel-type': 'main', + 'addr': {'transport': 'socket', 'type': 'unix', + 'path': mig_sock}}, + {'channel-type': 'cpr', + 'addr': {'transport': 'socket', 'type': 'unix', + 'path': cpr_sock}}] + + target =3D self.get_vm(name=3Dname) + qmp_path =3D self.prepare_vm( + target, name, '-incoming', main_incoming or f'unix:{mig_sock}', + '-incoming', 'cpr,addr.transport=3Dsocket,addr.type=3Dunix,' + f'addr.path=3D{cpr_sock}') + target.launch() + self.wait_for('the CPR socket', lambda: os.path.exists(cpr_sock)) + return target, qmp_path, channels + def transfer(self, guest_cmd, host_cmd, cpr): """ Run a socat transfer between the guest and the host, and keep @@ -160,21 +184,26 @@ def transfer(self, guest_cmd, host_cmd, cpr): exec_command_and_wait_for_pattern(self, 'wait %1; echo RC_$?', 'RC_0', vm=3Dself.guest) =20 - def transfer_both_ways(self, cpr): + def transfer_both_ways(self, cpr, size=3DTRANSFER_SIZE): """ - Send the payload to a file on the guest's disk, get it back into - another file on the host, then compare. + Send a random payload to a file on the guest's disk, get it back + into another file on the host, then compare. """ + payload =3D self.scratch_file('payload') + with open(payload, 'wb') as f: + for _ in range(size >> 20): + f.write(os.urandom(1 << 20)) + echo =3D self.scratch_file('echo') connect =3D f'VSOCK-CONNECT:{GUEST_CID}:{VSOCK_PORT},retry=3D10' =20 self.transfer(f'socat -u VSOCK-LISTEN:{VSOCK_PORT} CREATE:/root/da= ta', - ['socat', '-u', f'FILE:{self.payload}', connect], cp= r) + ['socat', '-u', f'FILE:{payload}', connect], cpr) self.transfer(f'socat -u FILE:/root/data VSOCK-LISTEN:{VSOCK_PORT}= ', ['socat', '-u', connect, f'CREATE:{echo}'], cpr) =20 self.log.info('%d CPR migrations performed', self.cpr_count) - self.assertTrue(filecmp.cmp(self.payload, echo, shallow=3DFalse), + self.assertTrue(filecmp.cmp(payload, echo, shallow=3DFalse), 'the data came back different') =20 def test_cpr_transfer(self): @@ -184,29 +213,11 @@ def test_cpr_transfer(self): it and shutting down the source """ def cpr(): - n =3D self.cpr_count - mig_sock =3D os.path.join(self.sock_dir, f'mig{n}.sock') - cpr_sock =3D os.path.join(self.sock_dir, f'cpr{n}.sock') - target =3D self.get_vm(name=3Df'target{n}') - target_qmp_path =3D self.prepare_vm( - target, f'target{n}', - '-incoming', f'unix:{mig_sock}', - '-incoming', 'cpr,addr.transport=3Dsocket,addr.type=3Dunix= ,' - f'addr.path=3D{cpr_sock}') - - # The target listens on the CPR channel: wait for it to be the= re - target.launch() - self.wait_for('the CPR socket', lambda: os.path.exists(cpr_soc= k)) - + target, target_qmp_path, channels =3D self.start_target( + f'target{self.cpr_count}') with self.qmp_connect(self.qmp_path) as qmp: qmp.cmd('migrate-set-parameters', mode=3D'cpr-transfer') - qmp.cmd('migrate', channels=3D[ - {'channel-type': 'main', - 'addr': {'transport': 'socket', 'type': 'unix', - 'path': mig_sock}}, - {'channel-type': 'cpr', - 'addr': {'transport': 'socket', 'type': 'unix', - 'path': cpr_sock}}]) + qmp.cmd('migrate', channels=3Dchannels) self.wait_migration(qmp) self.wait_running(target_qmp_path) =20 @@ -217,6 +228,97 @@ def cpr(): self.boot() self.transfer_both_ways(cpr) =20 + def test_cpr_transfer_dead_target(self): + """ + A cpr-transfer target which exits on a load error after having + taken the vsock device over must release it on exit, so that the + source can be resumed afterwards. The target lacks a device the + source has. The source is stopped beforehand, so it stays paused + on failure until we 'cont' it. + """ + self.boot('-device', 'virtio-rng-pci') + target, _, channels =3D self.start_target('target') + + with self.qmp_connect(self.qmp_path) as qmp: + qmp.cmd('stop') + qmp.cmd('migrate-set-parameters', mode=3D'cpr-transfer') + qmp.cmd('migrate', channels=3Dchannels) + self.wait_migration(qmp, expect=3DNone) + self.wait_for('the target to exit', + lambda: not target.is_running()) + self.assertEqual(target.exitcode(), 1, + 'the target did not exit on the load error') + qmp.cmd('cont') + + self.wait_running(self.qmp_path) + self.transfer_both_ways(lambda: None, size=3DCHECK_SIZE) + + def test_cpr_transfer_target_quit(self): + """ + A cpr-transfer target which has loaded the state but hasn't been + started yet may quit normally, and the source resume instead. + The target doesn't unrealize its devices on quit, so it must + release the vsock device on exit. + """ + self.boot() + target, target_qmp_path, channels =3D self.start_target( + 'target', main_incoming=3D'defer') + + with self.qmp_connect(self.qmp_path) as qmp: + qmp.cmd('stop') + qmp.cmd('migrate-set-parameters', mode=3D'cpr-transfer') + qmp.cmd('migrate', channels=3Dchannels) + + target_qmp =3D self.qmp_connect(target_qmp_path) + target_qmp.cmd('migrate-incoming', channels=3Dchannels[:1]) + self.wait_migration(qmp) + self.wait_migration(target_qmp) + self.assertEqual(target_qmp.cmd('query-status')['status'], + 'paused') + try: + target_qmp.cmd('quit') + target_qmp.close() + except QMP_GONE: + pass + + self.wait_for('the target to quit', + lambda: not target.is_running()) + self.assertEqual(target.exitcode(), 0, 'the target did not qui= t') + qmp.cmd('cont') + + self.wait_running(self.qmp_path) + self.transfer_both_ways(lambda: None, size=3DCHECK_SIZE) + + def test_cpr_transfer_failed_target(self): + """ + A cpr-transfer target which fails to load the state after having + taken the vsock device over must give it back to the source. + The target lacks a device the source has, stays alive on failure + (exit-on-error=3Dfalse), and the source resumes on its own + (return-path). Then vsock must still work on the source. + """ + self.boot('-device', 'virtio-rng-pci') + target, target_qmp_path, channels =3D self.start_target( + 'target', main_incoming=3D'defer') + + with self.qmp_connect(self.qmp_path) as qmp: + qmp.cmd('migrate-set-parameters', mode=3D'cpr-transfer') + qmp.cmd('migrate-set-capabilities', capabilities=3D[ + {'capability': 'return-path', 'state': True}]) + qmp.cmd('migrate', channels=3Dchannels) + + # The target opens its monitor once it has read the CPR state + with self.qmp_connect(target_qmp_path) as target_qmp: + target_qmp.cmd('migrate-incoming', channels=3Dchannels[:1], + **{'exit-on-error': False}) + self.wait_migration(qmp, expect=3D'failed') + self.wait_migration(target_qmp, expect=3D'failed') + + # The source resumes by itself, and vsock must work on it + self.wait_running(self.qmp_path) + self.transfer_both_ways(lambda: None, size=3DCHECK_SIZE) + target.shutdown() + def test_cpr_exec(self): """ Perform consecutive cpr-exec migration during vsock file transfer, --=20 2.47.1