From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021072.outbound.protection.outlook.com [40.107.130.72]) by lore.virtuozzo.com (Postfix) with ESMTPS id 39EDA80B1E for ; Fri, 16 Oct 2026 15:26:22 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FPUsuo8e3psRXiQhTBou6Fb1dUDCggws/TyY6lsX5YysMZrDT/0CH97uiK0qdHp73RoZ3lIWvVChCclc3EVbh6N6VO39Z2vVW43dds0NuQl0kLz7nhDIN21WVzZCNnVeRfiBvmDlkM5rQZn5X74azOT+JwQ/4AWpnA6woAem07481ziYE2nqm+yDWXOeY0dIAfX7eWkuBKEHhwajiGhX7jVnY4s1JYrInd7isfaBVSrp45eglLMrBsLZ9tS74zPi8sl3Ya0fHJ6Re3fwD1jadpwbC7nslc7fcJjZyUqakjXEF+HfdqzA42kwhlLA/h9HpiuRRsELgwLiqbiatjooHg== 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=RPrjFL1rvV+1kIxBrH/Md2aGAYhbeK4oJPdQHT1kKAw=; b=vXKXaZtywj3NLfdGC4XZOQPWadytUgXJiBLDLmqu1zRBXEeNoC3au9EBz8cuahbIgYe+eRUeSSMffH+N9+sFzcd4hgBacNLEsZwRsgVxFBjFb0TeMMhfAR3uEEdjb5LDfb5+KatWgh4X+EzknJVIIBpeibKx8q4pVcBVURbjJHoo7BELweja6AulHk7oJcCjT5HMV0wA50cQrlwtmKy2mHhcIAZr3tWaTLXIFOPIQipciP5IO9wryu55e5kzCgUTn4jx0VCduaJAmPMJlNROOrBzHwI3fSkFPtFRMY7G+3owIDA8Rn3zhcXulXOxiNmWtIm1u2yIMEJvWuqWixt45g== 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=RPrjFL1rvV+1kIxBrH/Md2aGAYhbeK4oJPdQHT1kKAw=; b=VfPyvocdYskswtYzr8bmyaPOUidvlKhVgqBxkjDfu7HUNoPmgEzAWB7+8187HY3RAtjnntySQeT7CSh7azWvJGJ7pgCEjHJYg412aPMeZtjEDW+01Fb2NmzbR8ZPVe8g6wS/Jm1XO5IGKhzCuUgzF8ZnVUjJbXZt6akICwi/nQZuJCEes6IDq3cae41bqlePghDxAHfagoGp0eZiGajKcvuopxQziHz2VjAPO3Hdl5YlvKydqnK4I9SgK8qhJcFsWKkRHzAYaUfAJaf5DP0UoJT+a/crSpaWbl6vWoLaCkJNeRq2wJJ6csmhdRHB9g171cLCF3Vu3ZF+TNlgFjGVHg== 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 VI0PR08MB10941.eurprd08.prod.outlook.com (2603:10a6:800:250::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.7; Fri, 16 Oct 2026 15:26:20 +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.0546.006; Fri, 16 Oct 2026 15:26:20 +0000 From: Andrey Drobyshev Date: Fri, 16 Oct 2026 18:26:24 +0300 Subject: [PATCH QEMU HCI-8.1 v3 26/28] VZ: migration/cpr-exec: don't exec if a vhost-net device can't be released Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261016-vfio_v1-v3-26-47487cb5a8e5@virtuozzo.com> References: <20261016-vfio_v1-v3-0-47487cb5a8e5@virtuozzo.com> In-Reply-To: <20261016-vfio_v1-v3-0-47487cb5a8e5@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR10CA0088.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:803:28::17) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|VI0PR08MB10941:EE_ X-MS-Office365-Filtering-Correlation-Id: 5bc5c980-e7d3-4c72-3cbe-08df2b99d249 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|1800799024|52116014|366016|376014|5113699003|10067099003|22082099003|18002099003|5023799004|261009223027099003|38350700014|56012099006; X-Microsoft-Antispam-Message-Info: HefW07Gnc4YkcV3TAQ4MTHzhdoU2vPbTbnXvgzBVQ3HkdJKBggYf8qxOkkNK5Q5yhCnF6ASZi/XvkDtPrUZEjnrk6bEAAxV1EW8otKUh3XT480JNd0HQjWKhywsGZSdEYy1spF+ICLqSz2HJj90dVsEKZek8ZVm0CA9thkbrhBefM7ojkH6ZtjQOSIztLttudrcPGedSJ8WtZlKZaZGLVaVJXRK/VNKX2SeOrhT2gTZ3KgInZictmOutdhgqU2uUWm0fRH0SQuVLYXWWT7V3HzuIJHpKBIeDd3cDL5/QoC467gyOcRR+pxS+XJWLWah1Sr7gyWKNEPdHH9tdMdohPb5V5uAeT4aTQ+lkwpJSRbhZSyaAZSY0GgAYFvzNXv5s7GKtNppv9G5WtsLnDNvJ6NJNcDovGXhkxYrJqX7RIdwyxsMEQhCfQHQVfIvTec1NVbz+IMQWBRkmQQZ5FWIOGK/3RfJ5ZgbITKgVNY9lK6TR/iKodtAncSauJn46NQaZbWgnjUND1UKh+u8A4Hg3Y5UiKcecjLinzGU6FjdGHWw3vJhTvHti6OuBRBeMFq9q3hpeJfVxoorYiVN775vmDXFenxp1St3ghdur4ZpmgyE+m3Zy1jLOsfVmUzJjpvgDARo21quI7+a89HI7S2m8ygRv86+DrA8LDQ1nngsX6OYd8xqLCrRkrbIntN2IEC92erTN+nQrNgzGFNTErEtXgDJ75nSuZnA1CmG2yLZMMzg= 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)(1800799024)(52116014)(366016)(376014)(5113699003)(10067099003)(22082099003)(18002099003)(5023799004)(261009223027099003)(38350700014)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?L2NJNmtzMmFzeGtSRXNaTmV1RlcrWnJ1Z2RUNXFzUHdrYWVObXlEWG9ZMFdE?= =?utf-8?B?Wkh3UEpjZGVTM3dLQUFEM3ZsNHJoV0J5bkdrR0NIVmF2LzBFVTl5aUh1Rkda?= =?utf-8?B?dUhNU1U2M0lJMG1iTG9UL01vZWRJV2t2L1ZhOG1LWlpKSnR1MW1aY2JtUXZs?= =?utf-8?B?Nm41U2VJRHplemVhL3dQRFJBRGZvZzl2RTJlSVVLY21ObzJ5d1NuZnd4Qi84?= =?utf-8?B?cS9uVzJRakRBYTBJWUpoUU1LUGVvMjlrQ0RlaEJDbVZhemZNaGp6cElaSCtn?= =?utf-8?B?VTQxQW9IK1U1ZnppWE9KN01mMmMzVnRJam5MNko2VmRnYnFOaVB5T3pJc1hp?= =?utf-8?B?VFpzZmt4Z0Rsc2YvY0RMSE4yNHQxN1FNWnVMUzhCSEJMT3hrQ2NjV2p2L1dp?= =?utf-8?B?eEcraWRTTFhLcUcrcmtUZWxSTmptVjFRSlV3Z2V6WHZzZUN5U05yN2xnSDNN?= =?utf-8?B?OWlrbjNqaU95alAvbnFSSm9pRVIyMExsbCszMzdYLytjQ0JqYkZ4cm1vT204?= =?utf-8?B?OXc4MXlWbFl3M1FEL21rbFN6MzNlVEdCSW1IbGI0dEdiQkhBdEhBdWRkaVJa?= =?utf-8?B?aUxqcnQ4Z2hKNzdFbGNPLzhuN21uWlFOa09USjRxYXFObHZadHFicEdOY0FP?= =?utf-8?B?NjhYOVFpeFdmSGNOeUNnWVBmOXFta01FZUhPbDNyYy95TzRPRHB3ZXpFMkVP?= =?utf-8?B?Zi9HUU8zRWJ1SVlSRE8vbzFxY25QK0VKSFJxVkwyaUtyaGgxMTVsTWNnS0hS?= =?utf-8?B?SzhadFFJdmQvd281aGpIVU5MSEM3RU1mazI3cmUrcTJweHpwcWxobUhtY2lS?= =?utf-8?B?UXFlRFJ1N3hMU0dnNDNabVdIVFE5RjdOcVZ2MmpqRGt1Q1NiK3hDK1FHN2dB?= =?utf-8?B?ZmplQnJnUTVraDQ2cEJnS1ZCTTcvVVpzTXo3WVpQZUw2V0JoWDhsZzBJbWdY?= =?utf-8?B?NnpURm1wYlJKa0RLcE5uaXhoWXdjYk5MalNHWmMzRnNoTXYyYnFIVkR0VTQz?= =?utf-8?B?aXlWMVExVVpXL3pnbFRtS3pzY24yWkY4RXQvNFh2WVBCK3kvbnhhNGliK0l1?= =?utf-8?B?NFlMUEtQd0dZR1JNMkZxNWlpUTZmWlhJYjVJTEZ0VFBVUDJ5SWhnY1JEeHhT?= =?utf-8?B?OWFkMy9VdnJJSlNLTzlMRmtGYWRJdHAwSVAzbTFrOWJhK1UycW0rK0V5bWNJ?= =?utf-8?B?cXk3NkVpMXUvNVN3MTVjLzU0VExVWlJjVUZtRE1ITUt3eVp0NjRDTHE4Y1JK?= =?utf-8?B?NlhoTllGbVZhdkFXK1k4ZzIyRC80YkU5V3ZtaTZTRzZhdXZXWGsvWEFlRlYw?= =?utf-8?B?ODUyL2wzMHYySlZNMlI5TG5ldk5sa3h5SjRXVDAwSnpOaUhOL2dZQmhTL3A2?= =?utf-8?B?NUVyaWVONnAxb25mREptUGJhV09jYWFIblE1R2xqdWJJMXdTdnZNMUZSQ0hn?= =?utf-8?B?d1phM2d3V2p5QWxzVk9DMmlFTUZVZ1lHNXUyNi8xNXNYbTVPWmNRNVN3dHNK?= =?utf-8?B?L0RSL1FURDFYRGdtQko4MGx6Y1Z3cjluMk8yTjFQNFMza2xTaUl1Mkw1RjM1?= =?utf-8?B?VnRxc1ZtVnZVMHRMM1FRVDJZcjNRV3lUZXdmUTYxb1ppbmtRamFjS1hEcUZq?= =?utf-8?B?VmszQklhWUMrUERRaFZOYXE5dTcwY0RjOHNBcEVFK0xDUWdNNld1TGFKYzAy?= =?utf-8?B?b0prTElyMmNCUndqMU41MlIxdWZWWC91NGlrQzRRbElFMFpYTWZJcGZUOTNp?= =?utf-8?B?UDBHMTRKcTZqNTIvRURCMXFodGJ2YytwVk8yenZUU3hoTEN6UHdFRC8ya2NI?= =?utf-8?B?T0h4ZEJzWUZMZHRTaCs3dDQrTXdpNE9NOVBsWjBqL3BvRlpqT2JYSWtXbEd2?= =?utf-8?B?NW1DUTdOZFEreUVQVWNqc1BlZ3lFcEtaZ1FPczJKdzNzeXQvd2ZJRzdCbUw4?= =?utf-8?B?djV1RHhCaXRxcThwMWp1WDNMZHF5RW5wM3RHTDl1VU1Bb2w5d3JOTlNVVHVv?= =?utf-8?B?OXpaaXgzbngxakZkQXphNGJTYUhEelU5TCtzNU0zcVJIRnhiWCtQOVI0RVo3?= =?utf-8?B?czBGci9kS2hBaVp6T00rV2N2VnhhVTBjeDZTRjRNd3hncWRUT0Q1ZnNNVysx?= =?utf-8?B?bzc1dHEvbkxWVkhYdW53SXJJUTNlYTRKWjh5b2hVbmdvMXBJK3lMdmJVTk9C?= =?utf-8?B?S0NTSlZWUWhxKzN2Z0dLQ09paDliNW5PZVZrRWtuT21oSE5USkhnaE9xTUkr?= =?utf-8?B?L0dvR1BaeXFxZ0N0eHhwTmNTdHNheGErWGVWWjhSYm5CeWlqY1V6clVNL0tV?= =?utf-8?B?OTZRdGFDQW9aUkRlZDBIOXdqUThtaDFBVnFyYzB4NmhSd2lCc1ZCdTMwUStk?= =?utf-8?Q?jXdQP0xsOb63zhEs=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5bc5c980-e7d3-4c72-3cbe-08df2b99d249 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2026 15:26:16.8843 (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: SnXwggD5qqd/hGwFymtrC8WCK2p1VrS9Yd7NJ+/OSAcUvddLgLOEo6Jp7IQkS/leUw/tYzc+gjFxpRlH8kgKifuUaqrTs9BNxs91++XWAas= X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR08MB10941 vhost_net_cpr_reset_owners() only warns when VHOST_RESET_OWNER fails for a device, and the exec goes on. But the new QEMU can't take such a device: it is still owned by the old mm, so VHOST_SET_OWNER fails with EBUSY, and the guest is left without network after the update. Stop at the first device that can't be released and abort the cpr-exec instead. The VM goes on in the old QEMU, with the devices released so far taken back. vhost-vsock already does that in its pre_save. Fixes: 1278e4830052 ("VZ: migration/cpr-exec: vhost-net: send RESET_OWNER before cpr-exec") Signed-off-by: Andrey Drobyshev --- hw/net/vhost_net.c | 19 +++++++++++++------ include/net/vhost_net.h | 2 +- migration/cpr-exec.c | 7 ++++++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c index ae98574fcfe..a556b41f5f7 100644 --- a/hw/net/vhost_net.c +++ b/hw/net/vhost_net.c @@ -579,8 +579,12 @@ void vhost_net_config_mask(VHostNetState *net, VirtIODevice *dev, bool mask) * EBUSY. Called right before execve(), when the VM is stopped and the * devices have already been stopped, so nothing is in flight. The device is * fully re-initialized from the migrated state by the new QEMU. + * + * Stops at the first device that can't be released, since the new QEMU + * couldn't take it. The caller then takes back the ones already released + * with vhost_net_cpr_set_owners(). */ -void vhost_net_cpr_reset_owners(void) +void vhost_net_cpr_reset_owners(Error **errp) { NetClientState *nc; @@ -591,12 +595,15 @@ void vhost_net_cpr_reset_owners(void) net->dev.vhost_ops->backend_type == VHOST_BACKEND_TYPE_KERNEL) { int r = vhost_dev_reset_owner(&net->dev); - if (r < 0 && r != -ENOSYS) { - warn_report("cpr: failed to reset vhost-net owner for %s: %s", - nc->name, strerror(-r)); - } else if (r == 0) { - net->cpr_owner_reset = true; + if (r == -ENOSYS) { + continue; + } + if (r < 0) { + error_setg_errno(errp, -r, "cpr: failed to reset vhost-net " + "owner for %s", nc->name); + return; } + net->cpr_owner_reset = true; } } } diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h index cdfefa81500..679edefa1d3 100644 --- a/include/net/vhost_net.h +++ b/include/net/vhost_net.h @@ -89,6 +89,6 @@ 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_reset_owners(Error **errp); void vhost_net_cpr_set_owners(void); #endif diff --git a/migration/cpr-exec.c b/migration/cpr-exec.c index 21caa614a13..a206ca44a4b 100644 --- a/migration/cpr-exec.c +++ b/migration/cpr-exec.c @@ -228,7 +228,10 @@ static void cpr_exec_cb(void *opaque) * Hand the preserved vhost-net devices over to the new QEMU: they are * still owned by this mm, which is about to be replaced by execve(). */ - vhost_net_cpr_reset_owners(); + vhost_net_cpr_reset_owners(&err); + if (err) { + goto fail_with_err; + } trace_cpr_exec(); execvp(argv[0], argv); @@ -238,6 +241,8 @@ static void cpr_exec_cb(void *opaque) * or the system is very short on resources. */ error_setg_errno(&err, errno, "execvp %s failed", argv[0]); + +fail_with_err: error_report_err(error_copy(err)); migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILED); migrate_set_error(s, err); -- 2.47.1