From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021113.outbound.protection.outlook.com [40.107.130.113]) by lore.virtuozzo.com (Postfix) with ESMTPS id 3254D80A8A for ; Tue, 13 Oct 2026 15:28:19 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pAtC5ZFjo6pHQjhWTKABuc8DA2BJoRvGgkf03VIklqfS+u61B4RJOhbE8LX7qtYUpfejqxq/4QBzGLrR5JlvOYJIZKGzQkzqAqkVCEk05GQMoVQiZYjteA0vSZ6+GeKPYXv/RTgxWy0jQafNyvvwyabSnon6zMD+EpJAzy0s/4ue/Xnu3vuM5weL5NPs8Sr1/vAQeOVhYytGZ8/SBy1WRKFBdTVMEFCDJw62S3ilHNCi61FrFj4NHPfbyy0627LoIgrK/a2AhLyJDZuYCsnFKovZ7gtaihy14AJZW3uXgMW1yjxpcq10+Z0PkvyZbRPbhfVGqZyZE0aXCbOCYWjAaA== 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=iVF6VoFEVpH3muPQNOcE8bUZ2G4tfG3CWCCV2Y4Wvmg=; b=O08Zx92sl64jra1/9rVg172zsw7rKBi5mkHUzNfDI96tbleKTKGYb4OHZuCTOZg79KZ0g/Q9F2pCIse4l+PV0V7cbIhG3dCW0znR4we38gsfoH39X19dLvLuRu4sZ2VNYQAYKSkhburBIXaalXG/DInXjSrPzxmJosfmS2idrCAh451dk8kZ+U3d53qQo6gmJCZkr0lUe/TghZBwUDQUfDMQq6y3LGpapbkovbMv1yPtwYb2QPNKCgPtcVejtDYnJtadelM0W/1Vg3x82hEOx2RJXkLHLc5GXGQHqtvkRN04x50m4L/JHCAYDzC/yOkwn3BsbleJgpr4wiyb6jAQsw== 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=iVF6VoFEVpH3muPQNOcE8bUZ2G4tfG3CWCCV2Y4Wvmg=; b=uoBYpuPVhN7vy1Hhh/FO77wWN+cyA5C3L+ukuqxnKucnLIiNy5T0pMW15Dg1Bgel2oI4tb68r4ftBYCYMCvkA+Z6mBiUTzaj7681GP2xzhdbLR4NwrtaebMlvgN2EtMaG8MbROZwb2E1PgWM3sULXzrJ47IkWl00C51VZRxIoU8E6svzYtZCj/sRpOxUjd0NKGusEamOLWpsjttHIhhkKYy7a7DwWJyRGwVpmE5lUcMqzq+BdmE9fiCBzxSabMRKIFp1jIXhcJxvZWxt1ANDv2/sc+c6tGMW4pYMJWClyuTNo8NAEq6pkSpZal2PdgnQc2kq/kdCeat7mKgGULH84Q== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by WA4PR08MB366192.eurprd08.prod.outlook.com (2603:10a6:1d0:30::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.12; Tue, 13 Oct 2026 15:28:18 +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; Tue, 13 Oct 2026 15:28:18 +0000 From: Andrey Drobyshev Date: Tue, 13 Oct 2026 18:28:26 +0300 Subject: [PATCH QEMU HCI-8.1 v2 22/24] VZ: migration/cpr-exec: take the vhost-net devices back if exec fails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261013-vfio_v1-v2-22-433455c0a294@virtuozzo.com> References: <20261013-vfio_v1-v2-0-433455c0a294@virtuozzo.com> In-Reply-To: <20261013-vfio_v1-v2-0-433455c0a294@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI5PEPF00000939.AUTP296.PROD.OUTLOOK.COM (2603:10a6:808:1::833) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|WA4PR08MB366192:EE_ X-MS-Office365-Filtering-Correlation-Id: ff1842d3-b4c7-4d9c-bbec-08df293e9afe X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|52116014|5113699003|18002099003|22082099003|10067099003|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: eT0odXTBLN7Pu44xv7NJGUjG/GtSfXAbgZb62XLKQOxso4u2KvJ23HgAwQp9AfiNIEjeOrS7pcwBjOsBRJYv3qX9Ao+qiRBm9VE0983mVdg3h5hDmi3YlI5TtC+f15uILOrK7fFmwbtoTCZGhwtGsjstCCw+RzoEt20k40oO5gof1XWOF1+6PaO0ZMxNGOsv3YgR5ShBnluWdNBknWmSBg+e+7UzRj2nK9Ipx+7McTbH5NbYZ6bZj5lK6aGZeJ4j6BEpWOFUtrPDVkJybGc1d2oFMUhaRnXGdHhuf9k4tBZbTBL2CpV8u8PbaIpZiclp9yHuMfVv+MS4qdURa/l8ZSFLP2rKEviL01ZsdRoFVnxTUcxul3iBZroKIiz5QUmUhPtuz1nQ7ruqLnbCe6mFgD86Qg6TJuxcIJnFzdAra37Y0AWAPUNGw4glaJ4s963Fj0dPKRQ1/1qiG/ot2iLKl/dKY6VHaGP2qJtUNARLWGofFTGc1lfWGmRC6IP7Jv8hJewTsmI4c+I9hJhMcuDWd0MPkPyoraBL7YAo+Ru9Ra3uOspq311Q1vk5YUT4iAu9VnEV1uU0VMEznyRYdpnqS9lTdZnwWWRkTXoYribZOcS7iwx/oTe8RHVoAvMjBqYNOx80EfBkiMIbwxWdklZln+oN+7lglr3dt3hyTMs5TadPA8MmKvO79ZB/wYtvwLn1EGcmU/iyRVEFlJBrrBb5glCw9DmwvTVWYerqwnb5XSQ= 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)(366016)(52116014)(5113699003)(18002099003)(22082099003)(10067099003)(261009223027099003)(56012099006)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QUtqUFNyV3dwZkdXdktCV1FZcjc4bHhFL2RYSzVUR3JoSTc0eDJIaEFieGVJ?= =?utf-8?B?bkR3V3RQOEpIS1BEVUlhQy82OEJmSGRLODE2a0tTcC9nY1dETG9jTlUwYVpx?= =?utf-8?B?clk4amdYMjAyV2tGRW52RGVrcWFid3dxeGZyVTNYWksyckF6Wlk5T0l6S2xF?= =?utf-8?B?c1hxR1M4eThYUnZORFdvTno0TzMrNHhwV25JdXJhaVF3WUVGNktTQjUrUGpQ?= =?utf-8?B?UGdpRzVwZWxxc2xLV2dxdjNIdjlUcFJoUEhUYkR3dFZzc3o3VHhqTnY5SEQ4?= =?utf-8?B?Q2xMM3ZRWU5FZENHVTVXMXBwL3lua2ZyT0E1ZEVldlNkNnBVM3lEWEhnTGpG?= =?utf-8?B?ZWNXdGlxbk1RZXVsNXJPbXl3dmk0Wnh2MC9haytoMkR4WlY3T08zTWlOcVBT?= =?utf-8?B?cnN5d1lGRDFocVBvT3BNMFMwaHB1V2toNnNTNlh6eStBZW43VDE2aXVHNHFp?= =?utf-8?B?eDBENmwzWnZwWkxiMll2dHRPb3dDOVQrNVNBQnVKVGpXUDRValdMdmlUTzEr?= =?utf-8?B?MDgyaWk1dFd1QW1KVzVpTmV3dC9ZQVZkUU8waEVySXFsN1ZFSEcvN0R0dzRi?= =?utf-8?B?OVIxNlMvL0xzeVNxYXJFMUc4UFVWVFdSSkxLdXI0MnY1bHo5QmpsTURPU2ZK?= =?utf-8?B?OGd6RFpyUk85aXBGc25VV05YUmlJTytxQlAwaS9STUEvWUFlblN1WktGak1x?= =?utf-8?B?OHFWeFdKV21LOXFGcjkxMURQdnNQRjlGVFR3ZFJFc3E4Vnp1eWQ1WXdJUUZI?= =?utf-8?B?Y0ZLT1dXRkRhcGE4cXZVK2VEZDByRW16cWJYMXMvWmZKc05GOW53STFXNG1j?= =?utf-8?B?MjB1RVprOUxjUCt0RGZKb2ZVYStxekxhYkk5bXE1MGIyamt3YjZUNGI2SmFi?= =?utf-8?B?Y3A4eWlzdXg4RklGMkNmWXVUZTFielZRbXQwU3pXSE1Jcm0zaXI1ZnBpeTZp?= =?utf-8?B?M3VIUjhjTVljV1Rxa0krWlhua2xWQzdaYXB0QWdSUHk0U0ZORmhBcGFJWXhq?= =?utf-8?B?L1pSMDFnWUhwNkZVRW5vNE0xWkxjK2MwUnQ5bDg0dGJxeUoxWDJjOXdXOFZC?= =?utf-8?B?V3d6YUMvWWdJWTlFdUhJdW91d0c1cXd1cVJsSWN5ejNBeWRJbklXT3dQT3F3?= =?utf-8?B?UjlGZXRsMmEwMzBJQUJPdW52QjhUTUJHUFJaVEZ2Qk44WGdTTGZ0UXB0RDFB?= =?utf-8?B?Nm96NCszNDgzK3F3YWx0b1FzbTZRREQrSG44WldHZ1VabE04amJPN0g1dHJD?= =?utf-8?B?U3NHakd3djc1aTFPT2h6bDRMZ284bFFIcFRBQjJmQk1pYmM1WGZzeHA3d0Yv?= =?utf-8?B?Qm1IYkdVaGxzZXU5cWJmZWV0cHlHYnVVUU0vamFsaTB5Ums3RnloVE9XamJj?= =?utf-8?B?M1hKK214eU9DZGpJTFlkS3FRQStCaHJPd0pNbHIwMzEzNy9HR3huTTNDcXlF?= =?utf-8?B?LzFLdi9LNzNYaEpVcTNCdGZQYWRLSFJyY1FWM21RNGtrb1NxcSt4UUlwcnVG?= =?utf-8?B?NDFoL3dvckpHYUZ0YVNUZ1RQSnJjeTQwaUlBaklzeU16bDlBYjRpL0k3MHpK?= =?utf-8?B?dFpXc1BaSkF3MXNvSXZuUHpzMTRQUnA2V3BjTnpGMndaVU03VGtMUDBDUjJJ?= =?utf-8?B?TmI4SHU5R3RaS294eGc0ZlhTZkQ4YWI2Z0N3a3ZpSWVhTkJEbSt6c25NbU5D?= =?utf-8?B?YU1FTlJVRS9kdi9jVGl2SXhIL1Nsb25OSHQrMWVMci8ybVFtMExEa1ExWmJD?= =?utf-8?B?UXg1UVZMUGszcExiK3ZGeTVMcGJieWZrV1duWkJ3OURieUQ3TEhCVGJoTGZv?= =?utf-8?B?aFdaRG5DdDZEejJTbnFabTFiQS9tMXVtcHc3QTE5ZnVMb3Q2NTZwM3VMYzE0?= =?utf-8?B?QXE0VitZY1RxRFAvNC9tRnNuMmZGbjF2NFBpWUZSMUVxbG1pVnNtQ1I0ZkFW?= =?utf-8?B?d21wRGg2Y1JsNHE5ZndzWXFVWUtoaUFyR2o4cnp6Rll5dGNlQTFNeTJxbEo5?= =?utf-8?B?TVJxU3dyd3V6RlVGTDBPQ0JmOXd5ZkgraHdrU0owTTlVWFNGVUVUNGp6SWFr?= =?utf-8?B?VTJ5OFRzSEdPTlVTY3l5bGtQMzY3UFg5QUtyWUp5bFhqL3phMzNJdWNoQVd1?= =?utf-8?B?NnFXK3FRQkFkZlorSmMvblpPVk8zZGtONEMwWXdPa0FJalI2dkZJUUJlakZ5?= =?utf-8?B?bDlIWnBsdUNuYXhaa0pTOXZLTEpOdHBGb255VDVlVk0zaWxFTGViVW9PeTBO?= =?utf-8?B?c28xQW56V1hMS0pDU0ZwaGprM0NGd3JxcVVJREJERE8wSDJYUVZXYnMvYXRI?= =?utf-8?B?cDdITkxYZmRYZWVZbTZlQmpqNWZxZnhhT2lMM0FldkMzL2dQdGpOaWZwQ1Nh?= =?utf-8?Q?E3+l5QB5cX6M5td4=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: ff1842d3-b4c7-4d9c-bbec-08df293e9afe X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2026 15:28:17.6334 (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: NFigv6DPRBN76TKGZrkYZi/dysokp/DMeXEbyEEZM8rZKKrFDE7Pj6X/A+fy8NhyRbMGgUxudSP0ohd2dqWk2uuUyceWVV40zgh77liS5/o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: WA4PR08MB366192 Right before execve(), cpr_exec_cb() releases the kernel vhost-net devices with VHOST_RESET_OWNER, so that the new QEMU can take them. If execve() fails, the VM goes on in the old QEMU, but nobody takes the devices back: the kernel refuses the ioctls of the next vhost_net_start(), and the guest is left without network. Take them back with VHOST_SET_OWNER right after the exec failure. The devices are stopped at that point, and vhost_net_start() sets up the rest again when the VM resumes. vhost-vsock does the same in its CPR notifier. Signed-off-by: Andrey Drobyshev --- hw/net/vhost_net.c | 25 +++++++++++++++++++++++++ include/net/vhost_net.h | 1 + migration/cpr-exec.c | 3 +++ 3 files changed, 29 insertions(+) diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c index 56c697f4bcd..58233788ebb 100644 --- a/hw/net/vhost_net.c +++ b/hw/net/vhost_net.c @@ -599,6 +599,31 @@ void vhost_net_cpr_reset_owners(void) } } +/* + * Take the ownership back when the exec fails and the VM goes on in the + * old QEMU. VHOST_RESET_OWNER has reset the kernel device, but the devices + * are stopped, and vhost_net_start() sets everything up again when the VM + * resumes. + */ +void vhost_net_cpr_set_owners(void) +{ + NetClientState *nc; + + QTAILQ_FOREACH(nc, &net_clients, next) { + VHostNetState *net = get_vhost_net(nc); + + if (net && net->dev.vhost_ops && + net->dev.vhost_ops->backend_type == VHOST_BACKEND_TYPE_KERNEL) { + int r = vhost_dev_set_owner(&net->dev); + + if (r < 0 && r != -ENOSYS) { + warn_report("cpr: failed to set vhost-net owner for %s: %s", + nc->name, strerror(-r)); + } + } + } +} + VHostNetState *get_vhost_net(NetClientState *nc) { if (!nc) { diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h index 39ce7ad0e3d..cdfefa81500 100644 --- a/include/net/vhost_net.h +++ b/include/net/vhost_net.h @@ -90,4 +90,5 @@ int vhost_net_virtqueue_restart(VirtIODevice *vdev, NetClientState *nc, void vhost_net_save_acked_features(NetClientState *nc); void vhost_net_cpr_reset_owners(void); +void vhost_net_cpr_set_owners(void); #endif diff --git a/migration/cpr-exec.c b/migration/cpr-exec.c index cb962ce7252..9a428b43093 100644 --- a/migration/cpr-exec.c +++ b/migration/cpr-exec.c @@ -243,6 +243,9 @@ static void cpr_exec_cb(void *opaque) error_free(err); err = NULL; + /* Still the same mm, take the vhost-net devices back */ + vhost_net_cpr_set_owners(); + fail: g_clear_pointer(&argv, g_strfreev); cpr_exec_unpreserve_fds(); -- 2.47.1