From nobody Mon Feb 9 16:03:51 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; dmarc=pass(p=quarantine dis=none) header.from=akamai.com ARC-Seal: i=1; a=rsa-sha256; t=1769632868; cv=none; d=zohomail.com; s=zohoarc; b=brXbmS/sp0PD1m9nmWiNfX/bfv/JQ+Fns2VMtFWLeC7ca/KjPil9cW3xjb7bp9UKJXVJkL9zg/01JQn7J/D/Nx8n9ZIaCoH4Ht495CvGRbLeI+ujUEAesNEOm0CX/L8W1f45kqE91C5IZ8IoP26HkLzJ6JImJBQdaFJdSRQHULU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769632868; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aeZzkvmebewRfaih4/t4ihsdQNyBJJYUYDDfKylGW9w=; b=Lx02Sb3Jjruczos5oG3HN8/BSgUmz/ACDeS2dZK0H3cLtmNI4sAEJ5U0xMjwRS6PNp8SmN9D3dg6TVkgMxoD/Kg0vOoJPjpxQwW2kvrSLVEStWFNYYhUk6g74mu8aBzf0+IH0D+wS13+z4SdX7hUj01fhXCtRx56vJoksYP9jrQ= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769632868416371.66390041345164; Wed, 28 Jan 2026 12:41:08 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlCKi-00087P-CL; Wed, 28 Jan 2026 15:40:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKL-0007bI-PZ for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:50 -0500 Received: from mx0a-00190b01.pphosted.com ([67.231.149.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKH-00084W-78 for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:49 -0500 Received: from pps.filterd (m0409409.ppops.net [127.0.0.1]) by m0409409.ppops.net-00190b01. (8.18.1.11/8.18.1.11) with ESMTP id 60SDMwsh3880427; Wed, 28 Jan 2026 20:39:41 GMT Received: from prod-mail-ppoint5 (prod-mail-ppoint5.akamai.com [184.51.33.60]) by m0409409.ppops.net-00190b01. (PPS) with ESMTPS id 4by2u0y6ep-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 28 Jan 2026 20:39:40 +0000 (GMT) Received: from pps.filterd (prod-mail-ppoint5.akamai.com [127.0.0.1]) by prod-mail-ppoint5.akamai.com (8.18.1.2/8.18.1.2) with ESMTP id 60SJlc8k013937; Wed, 28 Jan 2026 12:39:39 -0800 Received: from prod-mail-relay02.akamai.com ([172.27.118.35]) by prod-mail-ppoint5.akamai.com (PPS) with ESMTP id 4bvvxfyxx9-1; Wed, 28 Jan 2026 12:39:39 -0800 Received: from bos-lhvkhf.bos01.corp.akamai.com (bos-lhvkhf.bos01.corp.akamai.com [172.28.220.254]) by prod-mail-relay02.akamai.com (Postfix) with ESMTP id 0066D99; Wed, 28 Jan 2026 20:39:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akamai.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=jan2016.eng; bh=aeZzkvmebewRfaih4/t4ihsdQNyBJJYUYDDfKylGW9w=; b=NvjanVxPAfeN 6gydrksGB+zTkObywhAeqgAHE9Wnt+QHew7SyaDwRqkyWzNio/i6Svpzdogr5DM6 1NKyDbIBp+0e7FTp1gszqN4lmlnnNqXZXyDLmQCp5Cx2AANIjfjpph+tY5ZlHx50 t11aD0Yn//bmn2ZsZzWV7sOouwX5Pa1lGM7I149hrVuWgTQb04t+xFqZKQr7ccUZ OMxfHk36ffILz5t1m3lnSxOl8gIMRVKVmz498HSlHh7sqeIdtw/h+eh0dH2IIskj lKWUlgOYrbCtMO8x8qflI2GLA93LYudURNrStMlqegkXJslLEVezglwvMxNYCaE3 dMEDPsEphQ== From: Ben Chaney Date: Wed, 28 Jan 2026 15:39:29 -0500 Subject: [PATCH v4 1/8] migration: stop vm earlier for cpr MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260128-cpr-tap-v4-1-48e334d4216b@akamai.com> References: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> In-Reply-To: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , "Michael S. Tsirkin" , Stefano Garzarella , Jason Wang , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Eric Blake , Markus Armbruster , Stefan Weil , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Paolo Bonzini , Hamza Khan , Mark Kanda , Joshua Hunt , Max Tottenham , Ben Chaney , Steve Sistare X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1769632778; l=4773; i=bchaney@akamai.com; s=20251203; h=from:subject:message-id; bh=1oAm0CghpeE3ORzzZ0ONoCUfr6xsC782SwLSqOwlPWY=; b=n599jx+ep5dXg8teN4LS5FpiEZgZvIir5AHC0dIxJ+ySFb3/JXJ6PJ897w2d/9amFHEFTBxau BlNvnMs5Kp7Dna31qKzZ4Frf6wPKDte0qHRUBtvzkSnNH4hwiVAmZTY X-Developer-Key: i=bchaney@akamai.com; a=ed25519; pk=6+w9cse5QEeVdy3tjqFxs/4rAaRdQ2/fkTxVFq+lWy4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 mlxscore=0 bulkscore=0 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2601150000 definitions=main-2601280169 X-Authority-Analysis: v=2.4 cv=OOkqHCaB c=1 sm=1 tr=0 ts=697a740c cx=c_pps a=NpDlK6FjLPvvy7XAFEyJFw==:117 a=NpDlK6FjLPvvy7XAFEyJFw==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=X7Ea-ya5AAAA:8 a=N5d-UlcB8v2vpT89WNEA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: 8NAJ6BHxrsGwBj-6Kg3tMNEnBo0PnA_2 X-Proofpoint-GUID: 8NAJ6BHxrsGwBj-6Kg3tMNEnBo0PnA_2 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI4MDE3MCBTYWx0ZWRfX1wkiyc1uZCel Pgbrnnd1JZ6+YcxwEnhrKOULz4mCbWn+sUxYixhSkDLeg0P2mIOEpksxg6My23XWSpwifm2Q/Bv rdtK9iOKZIXJGuoY53RYPTzibBLDvCMtCC6M9N94YZkz548HsF8N8zK/ILn6JNASJRHq6dmoZbv ZthUXz5fdIhwHQauCIuspKlpzQzAf+iOChFdiFFhl495Y/P9hzx76zMXFlQRCqvvkHzXtqOyM1O PsVSuUarRq/XYkMEWVOMsoaD9OG8XaUmPo/ZMcyYfPBxSjnfCOOnaR/zjhH9Ma98ERihcTuW0/2 gsRAHaYLFREn6HXMoTDw/aFNTI2EZz0ntABOTOCBnScklT7v2fly/ksOq3Q0LjzVn0ua1QrtTxG eaD5XmVvOuHqgzfqKEwUlWPXw6XQQONdj7uiT5MSGdnUMpeWPki6VmSgOdF9SoDGsZ2Iuv/Eefc I5bAWf30LJM2Inv5ZPA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 impostorscore=0 clxscore=1011 adultscore=0 priorityscore=1501 spamscore=0 malwarescore=0 bulkscore=0 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601280170 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=lists.gnu.org; Received-SPF: pass client-ip=67.231.149.131; envelope-from=bchaney@akamai.com; helo=mx0a-00190b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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 @akamai.com) X-ZM-MESSAGEID: 1769632870756158500 From: Steve Sistare Stop the vm earlier for cpr, before cpr_save_state which causes new QEMU to proceed and initialize devices. We must guarantee devices are stopped in old QEMU, and all source notifiers called, before they are initialized in new QEMU. Signed-off-by: Steve Sistare Signed-off-by: Ben Chaney --- migration/migration.c | 57 +++++++++++++++++++++++++++++++++++++++++++----= ---- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 1bcde301f7..f36e59d9e8 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1654,6 +1654,7 @@ void migration_cancel(void) MIGRATION_STATUS_CANCELLED); cpr_state_close(); migrate_hup_delete(s); + vm_resume(s->vm_old_state); } } =20 @@ -2212,6 +2213,7 @@ void qmp_migrate(const char *uri, bool has_channels, MigrationAddress *addr =3D NULL; MigrationChannel *channelv[MIGRATION_CHANNEL_TYPE__MAX] =3D { NULL }; MigrationChannel *cpr_channel =3D NULL; + bool stopped =3D false; =20 /* * Having preliminary checks for uri and channel @@ -2264,6 +2266,46 @@ void qmp_migrate(const char *uri, bool has_channels, return; } =20 + /* + * CPR-transfer ordering: + * + * SOURCE TARGET + * ------ ------ + * cpr_state_load() blocks + * | | + * | 1. migration_stop_vm() | + * | VM stopped, devices quiesced | + * | | Waiting for + * | 2. notifiers (PRECOPY_SETUP) | FDs from source + * | vhost_reset_owner() releases | + * | device ownership | + * | | + * | 3. cpr_state_save() ---- FDs -------> | + * | | + * v v + * postmigrate Device init begins + * - cpr_find_fd() + * - vhost_dev_init() + * - VHOST_SET_OWNER + * + * Step 3 is the synchronization/cut-over point. Target proceeds immed= iately + * upon receiving FDs, so steps 1-2 must complete otherwise: + * - Target's VHOST_SET_OWNER fails with -EBUSY (source still owns) + * - Race between source I/O and target device init + * + * We stop the VM early (before FD transfer) to prevent this race. + * Unlike regular migration, CPR-transfer passes memory via FD (memfd) + * rather than copying RAM, so early VM stop should have minimal down= time. + */ + if (migrate_mode_is_cpr(s)) { + int ret =3D migration_stop_vm(s, RUN_STATE_FINISH_MIGRATE); + if (ret < 0) { + error_setg(&local_err, "migration_stop_vm failed, error %d", -= ret); + goto out; + } + stopped =3D true; + } + if (!cpr_state_save(cpr_channel, &local_err)) { goto out; } @@ -2290,6 +2332,9 @@ out: if (local_err) { migration_connect_error_propagate(s, error_copy(local_err)); error_propagate(errp, local_err); + if (stopped) { + vm_resume(s->vm_old_state); + } } } =20 @@ -2334,6 +2379,9 @@ static void qmp_migrate_finish(MigrationAddress *addr= , bool resume_requested, } migration_connect_error_propagate(s, error_copy(local_err)); error_propagate(errp, local_err); + if (migrate_mode_is_cpr(s)) { + vm_resume(s->vm_old_state); + } return; } } @@ -4017,7 +4065,6 @@ void migration_connect(MigrationState *s, Error *erro= r_in) Error *local_err =3D NULL; uint64_t rate_limit; bool resume =3D (s->state =3D=3D MIGRATION_STATUS_POSTCOPY_RECOVER_SET= UP); - int ret; =20 /* * If there's a previous error, free it and prepare for another one. @@ -4088,14 +4135,6 @@ void migration_connect(MigrationState *s, Error *err= or_in) return; } =20 - if (migrate_mode_is_cpr(s)) { - ret =3D migration_stop_vm(s, RUN_STATE_FINISH_MIGRATE); - if (ret < 0) { - error_setg(&local_err, "migration_stop_vm failed, error %d", -= ret); - goto fail; - } - } - /* * Take a refcount to make sure the migration object won't get freed by * the main thread already in migration_shutdown(). --=20 2.34.1 From nobody Mon Feb 9 16:03:51 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; dmarc=pass(p=quarantine dis=none) header.from=akamai.com ARC-Seal: i=1; a=rsa-sha256; t=1769632848; cv=none; d=zohomail.com; s=zohoarc; b=Pg9XTYcyW02h3DIVmiEkehPSgnki8+8n99qiGPMs6+cAXhA+HywJd7Ud+meob/KR7Kh4KZac5GB7v5RGeDbdaWjruuLoHMZ+4RHWgVvsJDWlkAIGAAhOJ+2sG4qcUK6LA5psmst7bDbiPj27je0EsFa/d2IuwUxLhBhyn/T4TYA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769632848; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=M6BH2hIUeZbU+CB1JGWLEoI/4w6A4BvK63bGRzusxys=; b=jqEJc/1dGeYwakgynROvir0dvSf8cw0DO5N9NokB5ndeS16ZG3mLRnx3Vv12UD4ICKBQgVB+xDAr2kWErOOVZSU7MLWdLN6Q1ueRdpwgIxpd5uCPgKXYFIw0q+PMlLcIR0+xsjAVI+Tb6gatIqu9VT5HC1Q1z6vJ/GUapy+mCbU= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769632848642235.58193400132495; Wed, 28 Jan 2026 12:40:48 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlCKj-0008Do-E6; Wed, 28 Jan 2026 15:40:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKK-0007aq-5V for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:50 -0500 Received: from mx0b-00190b01.pphosted.com ([67.231.157.127]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKG-00084Q-UT for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:47 -0500 Received: from pps.filterd (m0409410.ppops.net [127.0.0.1]) by m0409410.ppops.net-00190b01. (8.18.1.11/8.18.1.11) with ESMTP id 60SHTiRw1207698; Wed, 28 Jan 2026 20:39:40 GMT Received: from prod-mail-ppoint1 (prod-mail-ppoint1.akamai.com [184.51.33.18]) by m0409410.ppops.net-00190b01. (PPS) with ESMTPS id 4bw9v9uppq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 28 Jan 2026 20:39:40 +0000 (GMT) Received: from pps.filterd (prod-mail-ppoint1.akamai.com [127.0.0.1]) by prod-mail-ppoint1.akamai.com (8.18.1.2/8.18.1.2) with ESMTP id 60SJ3ZeR026882; Wed, 28 Jan 2026 15:39:39 -0500 Received: from prod-mail-relay02.akamai.com ([172.27.118.35]) by prod-mail-ppoint1.akamai.com (PPS) with ESMTP id 4bvta3rd2h-1; Wed, 28 Jan 2026 15:39:39 -0500 Received: from bos-lhvkhf.bos01.corp.akamai.com (bos-lhvkhf.bos01.corp.akamai.com [172.28.220.254]) by prod-mail-relay02.akamai.com (Postfix) with ESMTP id 050819F; Wed, 28 Jan 2026 20:39:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akamai.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=jan2016.eng; bh=M6BH2hIUeZbU+CB1JGWLEoI/4w6A4BvK63bGRzusxys=; b=pF2osIAcHYZb JcQ41JoX5fKPgP3h3bezDquM0vY4zKJ0Nw3EkK6Wr0/U6Gd9czZezA3wLMsRIJYI MOg1HcZlcPnXtsRmtG2KqaKR588IyRgASgzhnBsJzYnPQItdDANG92G9o11s48TY YfiIn+YL8hYIRfC/TdgHbLML8ULDipLK+wY/4r3QgM7EGpYaQ0tiZc/at143TNnw VTBRVCQ9C4yuiCo9P3fGHeCiXACvAF3n7eDxlCwR57UoSgF/uuPYUknkZFBx1u8j kor5KC1rZeM4oseB8Bs52siolpbY1ZCxz5TIKmYdHIuoO9EpywNOMrUK+e3D0R0M OSPAG1u0gg== From: Ben Chaney Date: Wed, 28 Jan 2026 15:39:30 -0500 Subject: [PATCH v4 2/8] migration: cpr setup notifier MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260128-cpr-tap-v4-2-48e334d4216b@akamai.com> References: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> In-Reply-To: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , "Michael S. Tsirkin" , Stefano Garzarella , Jason Wang , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Eric Blake , Markus Armbruster , Stefan Weil , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Paolo Bonzini , Hamza Khan , Mark Kanda , Joshua Hunt , Max Tottenham , Ben Chaney , Steve Sistare X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1769632778; l=1432; i=bchaney@akamai.com; s=20251203; h=from:subject:message-id; bh=TqfXrM/OLXJJheaXufHTgmdq25foyMIiKHT3li/H83w=; b=UXClXqc3GMw3lLo7z41lQNIgUKiYBymnynASjf1dU+wUjEqMecuhMsgIOoA15pgWn2g8YzwPk S/ywgTs1T+ABYbpDRJ6Kc/2miF3Ndvt49bCBtKqMUGhoeR+TAX7CtjE X-Developer-Key: i=bchaney@akamai.com; a=ed25519; pk=6+w9cse5QEeVdy3tjqFxs/4rAaRdQ2/fkTxVFq+lWy4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 spamscore=0 mlxscore=0 bulkscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2601150000 definitions=main-2601280169 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI4MDE3MCBTYWx0ZWRfXwPao9aUxYFJt qKz6qiJn35f+EL00PmqV633ZEWu3RlO29iNdFFpPJQEvhUxViIMdoi6DQAOGrF2z7NsF3mYxlJA DItUIc/PoLDA7sOza6wS0+JYgdahqxGD1PZ91hHtKP7CfcQl5mKFeL+V5Snm0uA2k+2JnFtblis CUPBdMO3o+IRxDPS24qu4wjY87Ix5u2J6gL31YzyZOivr1SaMmBRiTSSJDrojQgFovLC9dp5c58 9hOiDTGDpkX7DY5IlyuCCXL8yPYTpQSKG0B9ZKqzPSJTnQVFY8Jo39gf4rd9vu/OzNIiwJ0VN+l nlwU8jUhJBM+s0mZ33/rLtqWK1n/m0QapDUcQS7Ixyua6lDwE/OFapJy+QOTxoUUdHQoxkLXjS1 T9i9X3ffCTmFp0VkdNOumvqVbMIjvnWvrFKEIJcFo7rBQAHuUycXidkBHMG6eEQEMWmcl0W7Yeh CqtUc5A5eyAa6ALtMhA== X-Authority-Analysis: v=2.4 cv=TrbrRTXh c=1 sm=1 tr=0 ts=697a740c cx=c_pps a=StLZT/nZ0R8Xs+spdojYmg==:117 a=StLZT/nZ0R8Xs+spdojYmg==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=X7Ea-ya5AAAA:8 a=9e0HOU0VQPgVKZhTx6MA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-GUID: SL2HvEf-R0cPZ7wVi1iNPtEhol0yVjCP X-Proofpoint-ORIG-GUID: SL2HvEf-R0cPZ7wVi1iNPtEhol0yVjCP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 impostorscore=0 spamscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1011 bulkscore=0 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601280170 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=lists.gnu.org; Received-SPF: pass client-ip=67.231.157.127; envelope-from=bchaney@akamai.com; helo=mx0b-00190b01.pphosted.com X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no 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 @akamai.com) X-ZM-MESSAGEID: 1769632850346154100 From: Steve Sistare Call MIG_EVENT_PRECOPY_SETUP earlier, before CPR starts. An early notifier is needed for resetting vhost devices, as explained in the next patch. Signed-off-by: Steve Sistare Signed-off-by: Ben Chaney --- migration/migration.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index f36e59d9e8..191a34f667 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2306,7 +2306,14 @@ void qmp_migrate(const char *uri, bool has_channels, stopped =3D true; } =20 + /* Notify before starting migration thread, and before starting cpr */ + if (!resume_requested && + migration_call_notifiers(s, MIG_EVENT_PRECOPY_SETUP, &local_err)) { + goto out; + } + if (!cpr_state_save(cpr_channel, &local_err)) { + migration_call_notifiers(s, MIG_EVENT_PRECOPY_FAILED, NULL); goto out; } =20 @@ -4097,11 +4104,6 @@ void migration_connect(MigrationState *s, Error *err= or_in) } else { /* This is a fresh new migration */ rate_limit =3D migrate_max_bandwidth(); - - /* Notify before starting migration thread */ - if (migration_call_notifiers(s, MIG_EVENT_PRECOPY_SETUP, &local_er= r)) { - goto fail; - } } =20 migration_rate_set(rate_limit); --=20 2.34.1 From nobody Mon Feb 9 16:03:51 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; dmarc=pass(p=quarantine dis=none) header.from=akamai.com ARC-Seal: i=1; a=rsa-sha256; t=1769632860; cv=none; d=zohomail.com; s=zohoarc; b=ipTTtihspJ//MpKQhVnzrYgDECOdVLviEkPmhELyoRWsySvC30XKndjLEwMTegnewgeMNDgIvs93PBpj8xua7sJj7sqdDbX1SRXw2lgp58bst35Zu/EXfEqn9x5CuPsjjQkkkmcWpXaHie/nQFc4YdtwPH4eVZK1gZoAvtEmd00= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769632860; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VpKSo7dvDuyWSbsFXQ3bXWOKmh2SUJJjQn/1dvaSXYw=; b=Abt8Z3WtAfytRFgSoZ8LVPAQZsxogKZbRPEeDQ48z0Pw6LM/HLXoPnUpWMLticOjk/tCCMp7WFRn9UQZINIrenv04UI8Wi/Hyex+BJupl9cJsH+K+ECqlREKfvrrjVwoJSBHk7EeI+4Rh3+YcDzFHYk+mlrZ7gfJM3ayPfe8LLM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769632860228267.98948860806433; Wed, 28 Jan 2026 12:41:00 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlCKQ-0007kw-Jy; Wed, 28 Jan 2026 15:39:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKI-0007Xj-Ub for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:50 -0500 Received: from mx0b-00190b01.pphosted.com ([67.231.157.127]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKG-00084R-UW for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:46 -0500 Received: from pps.filterd (m0409411.ppops.net [127.0.0.1]) by m0409411.ppops.net-00190b01. (8.18.1.11/8.18.1.11) with ESMTP id 60SHRWWO1128338; Wed, 28 Jan 2026 20:39:40 GMT Received: from prod-mail-ppoint5 (prod-mail-ppoint5.akamai.com [184.51.33.60]) by m0409411.ppops.net-00190b01. (PPS) with ESMTPS id 4bw8a6cv4c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 28 Jan 2026 20:39:40 +0000 (GMT) Received: from pps.filterd (prod-mail-ppoint5.akamai.com [127.0.0.1]) by prod-mail-ppoint5.akamai.com (8.18.1.2/8.18.1.2) with ESMTP id 60SFYGux004167; Wed, 28 Jan 2026 12:39:39 -0800 Received: from prod-mail-relay02.akamai.com ([172.27.118.35]) by prod-mail-ppoint5.akamai.com (PPS) with ESMTP id 4bvvxfyxx8-1; Wed, 28 Jan 2026 12:39:39 -0800 Received: from bos-lhvkhf.bos01.corp.akamai.com (bos-lhvkhf.bos01.corp.akamai.com [172.28.220.254]) by prod-mail-relay02.akamai.com (Postfix) with ESMTP id 0A463A3; Wed, 28 Jan 2026 20:39:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akamai.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=jan2016.eng; bh=VpKSo7dvDuyWSbsFXQ3bXWOKmh2SUJJjQn/1dvaSXYw=; b=CMm6vy/sslXx 1McLpstjuUdzy0ZLEZYdAEGe9PZBGRa8cg8FxufbxsnhQOKGCNFnI3W46jLfalPd 4LfxSU/gF3u/LZmJrVV94rsR53CDnFEvXu6HKwoXkdhnzCbaUsa/OSWZKyc2xAg6 RzQ2/qShF6OOInbg4MmYNLpA6wXSvwUZwXr2VpYfNbVRHhG3HrLrS09xge0/Tud+ j80ADXY28RzVwO7TgmxZ6bi7iPSXrKqxlNq3BhpHBKVYHQ50k/tX0UWsipUkDn0l QdjZRnFEhEbjZmx764lG4TMtxHu9rTdmTepdjfnEzS1+DlZPQLQ897+L5Uv5Oh79 FrkVX4LUFQ== From: Ben Chaney Date: Wed, 28 Jan 2026 15:39:31 -0500 Subject: [PATCH v4 3/8] vhost: reset vhost devices for cpr MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260128-cpr-tap-v4-3-48e334d4216b@akamai.com> References: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> In-Reply-To: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , "Michael S. Tsirkin" , Stefano Garzarella , Jason Wang , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Eric Blake , Markus Armbruster , Stefan Weil , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Paolo Bonzini , Hamza Khan , Mark Kanda , Joshua Hunt , Max Tottenham , Ben Chaney , Steve Sistare X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1769632778; l=5230; i=bchaney@akamai.com; s=20251203; h=from:subject:message-id; bh=fmXj30u3JtRIrwcd6PJUKYFgVyJebbXBSc5CMyYvc3U=; b=3yB+uiXhMIl2zcuNoDiOGDGvLml5IwnJWCBmmBhmCAev6E98liZEmkfvCHfMLsnvJ6iB6BP+C /pCdQp9n5uuD5rgMNc8WAzDFVGZrRANah9ZNgAb1DDDkEKjtfehUqk5 X-Developer-Key: i=bchaney@akamai.com; a=ed25519; pk=6+w9cse5QEeVdy3tjqFxs/4rAaRdQ2/fkTxVFq+lWy4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 mlxscore=0 bulkscore=0 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2601150000 definitions=main-2601280169 X-Proofpoint-ORIG-GUID: IINWAyS4-QIbpb6hA0byL_lG1egR_BiE X-Proofpoint-GUID: IINWAyS4-QIbpb6hA0byL_lG1egR_BiE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI4MDE3MCBTYWx0ZWRfXxTrp8UCofi5Q FfzFeOTZR+9FChmSz6hVIm6v85OsF7SWmreujV/8QDjyew67h5IRNmJCkBAMqrwYHODD1USw+B9 stvNAWeuWwGHJTC5+grEOmkhnpzFMF+SJCFHl61AKaRKvxcHo6OQXGzwFOy0LSaFxjaV6YC2Q/M xPaEeI5vEMRCGL9byPHYFnu67oIDZ2ROHcBwidAUVh/S6Y7w2HQtF7VPTT7aL2yTo5DmtNvl8sy uKBw4AEEfX8AsQ5zhcY5xe2RzGAaNmT2qf0AHDt6q69YuPTmLL7U0dhSimCt5zHUjYemxtZkB/Y VwnlmzubHlxWH5woN/H+dTB6TKDQIeby1S22+MpOY7QtCHC7/6sg42zlbpTEHPlaaotaUbLIqEM vjtWC6aBWJKsk6RVsJ1/3/C7OjA7a6dvnu3nZRPCEI+1mRc/oCg4SrnqGfUiXRN1Ywg+Ny6wpdD 3Giz2/Az7ERVtPj+8tA== X-Authority-Analysis: v=2.4 cv=KcPfcAYD c=1 sm=1 tr=0 ts=697a740c cx=c_pps a=NpDlK6FjLPvvy7XAFEyJFw==:117 a=NpDlK6FjLPvvy7XAFEyJFw==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=X7Ea-ya5AAAA:8 a=6lTwf2g7YyX0f-ifu7AA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 priorityscore=1501 malwarescore=0 bulkscore=0 impostorscore=0 adultscore=0 phishscore=0 clxscore=1011 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601280170 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=lists.gnu.org; Received-SPF: pass client-ip=67.231.157.127; envelope-from=bchaney@akamai.com; helo=mx0b-00190b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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 @akamai.com) X-ZM-MESSAGEID: 1769632862787158500 From: Steve Sistare When preserving a vhost fd using CPR, call VHOST_RESET_OWNER prior to CPR in old QEMU. Otherwise, new QEMU will fail when it calls VHOST_SET_OWNER during vhost_dev_init. Signed-off-by: Mark Kanda Signed-off-by: Steve Sistare Signed-off-by: Ben Chaney --- hw/virtio/vhost-backend.c | 6 ++++++ hw/virtio/vhost.c | 32 ++++++++++++++++++++++++++++++++ include/hw/virtio/vhost-backend.h | 1 + include/hw/virtio/vhost.h | 1 + 4 files changed, 40 insertions(+) diff --git a/hw/virtio/vhost-backend.c b/hw/virtio/vhost-backend.c index 4367db0d95..1447d12963 100644 --- a/hw/virtio/vhost-backend.c +++ b/hw/virtio/vhost-backend.c @@ -261,6 +261,11 @@ static int vhost_kernel_set_owner(struct vhost_dev *de= v) return vhost_kernel_call(dev, VHOST_SET_OWNER, NULL); } =20 +static int vhost_kernel_reset_owner(struct vhost_dev *dev) +{ + return vhost_kernel_call(dev, VHOST_RESET_OWNER, NULL); +} + static int vhost_kernel_get_vq_index(struct vhost_dev *dev, int idx) { assert(idx >=3D dev->vq_index && idx < dev->vq_index + dev->nvqs); @@ -385,6 +390,7 @@ const VhostOps kernel_ops =3D { .vhost_get_features_ex =3D vhost_kernel_get_features, .vhost_set_backend_cap =3D vhost_kernel_set_backend_cap, .vhost_set_owner =3D vhost_kernel_set_owner, + .vhost_reset_owner =3D vhost_kernel_reset_owner, .vhost_get_vq_index =3D vhost_kernel_get_vq_index, .vhost_vsock_set_guest_cid =3D vhost_kernel_vsock_set_guest_cid, .vhost_vsock_set_running =3D vhost_kernel_vsock_set_running, diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 31e9704cdc..beec547e46 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -24,6 +24,7 @@ #include "standard-headers/linux/vhost_types.h" #include "hw/virtio/virtio-bus.h" #include "hw/mem/memory-device.h" +#include "migration/misc.h" #include "migration/blocker.h" #include "migration/qemu-file-types.h" #include "system/dma.h" @@ -1549,6 +1550,32 @@ static int vhost_dev_get_features(struct vhost_dev *= hdev, return r; } =20 +static int vhost_cpr_notifier(NotifierWithReturn *notifier, + MigrationEvent *e, Error **errp) +{ + struct vhost_dev *dev; + int r; + + dev =3D container_of(notifier, struct vhost_dev, cpr_transfer_notifier= ); + + if (dev->vhost_ops->backend_type !=3D VHOST_BACKEND_TYPE_KERNEL) { + return 0; + } + + if (e->type =3D=3D MIG_EVENT_PRECOPY_SETUP) { + r =3D dev->vhost_ops->vhost_reset_owner(dev); + if (r < 0) { + VHOST_OPS_DEBUG(r, "vhost_reset_owner failed"); + } + } else if (e->type =3D=3D MIG_EVENT_PRECOPY_FAILED) { + r =3D dev->vhost_ops->vhost_set_owner(dev); + if (r < 0) { + VHOST_OPS_DEBUG(r, "vhost_set_owner failed"); + } + } + return 0; +} + int vhost_dev_init(struct vhost_dev *hdev, void *opaque, VhostBackendType backend_type, uint32_t busyloop_timeou= t, Error **errp) @@ -1559,6 +1586,7 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaq= ue, =20 hdev->vdev =3D NULL; hdev->migration_blocker =3D NULL; + hdev->cpr_transfer_notifier.notify =3D NULL; =20 r =3D vhost_set_backend_type(hdev, backend_type); assert(r >=3D 0); @@ -1659,6 +1687,9 @@ 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= ); + migration_add_notifier_mode(&hdev->cpr_transfer_notifier, + vhost_cpr_notifier, + MIG_MODE_CPR_TRANSFER); QLIST_INSERT_HEAD(&vhost_devices, hdev, entry); =20 /* @@ -1711,6 +1742,7 @@ void vhost_dev_cleanup(struct vhost_dev *hdev) QLIST_REMOVE(hdev, entry); } migrate_del_blocker(&hdev->migration_blocker); + migration_remove_notifier(&hdev->cpr_transfer_notifier); g_free(hdev->mem); g_free(hdev->mem_sections); if (hdev->vhost_ops) { diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-ba= ckend.h index ff94fa1734..18ce5ea9a0 100644 --- a/include/hw/virtio/vhost-backend.h +++ b/include/hw/virtio/vhost-backend.h @@ -196,6 +196,7 @@ typedef struct VhostOps { vhost_get_features_op vhost_get_features; vhost_set_backend_cap_op vhost_set_backend_cap; vhost_set_owner_op vhost_set_owner; + vhost_set_owner_op vhost_reset_owner; vhost_reset_device_op vhost_reset_device; vhost_get_vq_index_op vhost_get_vq_index; vhost_set_vring_enable_op vhost_set_vring_enable; diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 08bbb4dfe9..5d11a97e43 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -133,6 +133,7 @@ struct vhost_dev { QLIST_ENTRY(vhost_dev) logdev_entry; QLIST_HEAD(, vhost_iommu) iommu_list; IOMMUNotifier n; + NotifierWithReturn cpr_transfer_notifier; const VhostDevConfigOps *config_ops; }; =20 --=20 2.34.1 From nobody Mon Feb 9 16:03:51 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; dmarc=pass(p=quarantine dis=none) header.from=akamai.com ARC-Seal: i=1; a=rsa-sha256; t=1769632839; cv=none; d=zohomail.com; s=zohoarc; b=QZafhWOzITrhYM2kYbX8iunPFeBR8ixsMq4v9eyFvTXlIX//Qb/dQ2BY5ag7eDXQv63zwangfKjvjv0r5ElusUSbnM+F0Db/kL9/untYOXcm0UrD07HtVg62NPDurJTcXIvo0/IBHREQUbVNRhOq5tYzSMt64cFkm3RmGeADbNA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769632839; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=iDI9J/2kQZuf9g4MQ4HQ3luovEdJMVHjXyCsvqkM41I=; b=YHdZ8ffYJQZHcNICbhFWDBFd9A1a4KlvI6sZl1heSXrBzJWKXFkiE247eGTLwqJ04lBvHYPxmG/HUXxbVuthAHGhhq1FIiSdRCEVcFioaRAeAYJSkvRoeQHZjsJBs7uyxq2YBM+tpBo11pVtunOrnVRVKkQlYS2fJKbZDCyOlFU= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769632838997609.2041888020037; Wed, 28 Jan 2026 12:40:38 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlCKQ-0007m9-WD; Wed, 28 Jan 2026 15:39:55 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKI-0007Xf-Ra for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:50 -0500 Received: from mx0a-00190b01.pphosted.com ([67.231.149.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKG-00084b-Ua for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:46 -0500 Received: from pps.filterd (m0409409.ppops.net [127.0.0.1]) by m0409409.ppops.net-00190b01. (8.18.1.11/8.18.1.11) with ESMTP id 60SKOMP2615999; Wed, 28 Jan 2026 20:39:41 GMT Received: from prod-mail-ppoint1 (prod-mail-ppoint1.akamai.com [184.51.33.18]) by m0409409.ppops.net-00190b01. (PPS) with ESMTPS id 4by2u0y6eq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 28 Jan 2026 20:39:40 +0000 (GMT) Received: from pps.filterd (prod-mail-ppoint1.akamai.com [127.0.0.1]) by prod-mail-ppoint1.akamai.com (8.18.1.2/8.18.1.2) with ESMTP id 60SHaNpM027792; Wed, 28 Jan 2026 15:39:39 -0500 Received: from prod-mail-relay02.akamai.com ([172.27.118.35]) by prod-mail-ppoint1.akamai.com (PPS) with ESMTP id 4bvta3rd2k-1; Wed, 28 Jan 2026 15:39:39 -0500 Received: from bos-lhvkhf.bos01.corp.akamai.com (bos-lhvkhf.bos01.corp.akamai.com [172.28.220.254]) by prod-mail-relay02.akamai.com (Postfix) with ESMTP id 0D7B3A7; Wed, 28 Jan 2026 20:39:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akamai.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=jan2016.eng; bh=iDI9J/2kQZuf9g4MQ4HQ3luovEdJMVHjXyCsvqkM41I=; b=odoW25ii+AK6 G5Y0zu+NjXPHNl0cnYkUGWTYtitNwsAfWOjzRnMJzDWgcs7VVI6nco817aN+knya KihR0/HU66106CKkMe4zc2YM6SeMplrKZ3ZyPErZAmN00Q3VQ4nqEcHAkJ9M2sqh d9l3WwnzOPe52kwov+Jeq8JLdtO+wN8DpYkJJToWhGjFsMXK8ee/Sl/U4pRZAkTq WIlUGgX64v4plndjYt/TubndSEtFpfAd5gCIHLcxl9z1y4sSoQeSGdJ+pCKdnCLU dksrZmVeezXSe2hAyaLdtp+zGVq9t2xm/iK7BNFr5Z8pLFgzDydhIYfwhp+I9DT0 15dTjRHI/A== From: Ben Chaney Date: Wed, 28 Jan 2026 15:39:32 -0500 Subject: [PATCH v4 4/8] cpr: delete all fds MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260128-cpr-tap-v4-4-48e334d4216b@akamai.com> References: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> In-Reply-To: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , "Michael S. Tsirkin" , Stefano Garzarella , Jason Wang , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Eric Blake , Markus Armbruster , Stefan Weil , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Paolo Bonzini , Hamza Khan , Mark Kanda , Joshua Hunt , Max Tottenham , Ben Chaney , Steve Sistare X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1769632778; l=1519; i=bchaney@akamai.com; s=20251203; h=from:subject:message-id; bh=Damz0E1eWx9seXrv9+FOKa0jx9R91HPkz/OMuj3AucM=; b=x1cN8t23lCcrsd9ATgVEADXMH2Ex1PmIj57S03giHvMWvtxqK1wwGKQimEUHewMQzVgZhAadT vA+xYoy2CnSDzrGPp53+wxvPmojCoGwboWGwtuDrJNE4/G+DbIomZ3Z X-Developer-Key: i=bchaney@akamai.com; a=ed25519; pk=6+w9cse5QEeVdy3tjqFxs/4rAaRdQ2/fkTxVFq+lWy4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 spamscore=0 mlxscore=0 bulkscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2601150000 definitions=main-2601280169 X-Authority-Analysis: v=2.4 cv=OOkqHCaB c=1 sm=1 tr=0 ts=697a740c cx=c_pps a=StLZT/nZ0R8Xs+spdojYmg==:117 a=StLZT/nZ0R8Xs+spdojYmg==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=X7Ea-ya5AAAA:8 a=n655hgSsutws6UkWyQYA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: 7uUafde4TSqvnZWBDiNjzX5zSAXAh5JW X-Proofpoint-GUID: 7uUafde4TSqvnZWBDiNjzX5zSAXAh5JW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI4MDE3MCBTYWx0ZWRfX4Aq7WLolcLtz Aqm5eN2L+7jrTss01Chy/RcqW/mpZoTtgsPkjKm+bqYDQYg1CHhlnhYC+6kH5y9Die+75uepG03 wPton7X0rXCvzmbmVfNYd6XjdbbGK0EngXGqKmRxZ0+XR2DySPcAtWb0fDsASZu+NOyesd9MvIb zPWcMpZdtix0uFCHNZr8AthiVyorYgUkl4MmlYKHFo3OcVIQYa3KLFMATM0Pq6NXvXqfkYW4Kbx BrIizCMlaCp0BoMFTLlBbhea6v//SbEcw/D52wtvs1Uiwt68ncjfhsN1jsVhqr4/PdFNS0sr7cY HEgjw2BjUspehZPUtqzv09U+snYm+8xPKlk+dsCYtF1E9tvKlXvMjGuBIWhjGJxXtE3OMYy3dAP FKUxXQfw4570FraynSEVvbHODZ8C3GLWrHG1mgZ+PbVNIE3t27Sw+cKsYDBelRds/CETlFQvLuH Z0OnCcAXqduVy+bOpKg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 adultscore=0 priorityscore=1501 spamscore=0 malwarescore=0 bulkscore=0 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601280170 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=lists.gnu.org; Received-SPF: pass client-ip=67.231.149.131; envelope-from=bchaney@akamai.com; helo=mx0a-00190b01.pphosted.com X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no 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 @akamai.com) X-ZM-MESSAGEID: 1769632842893158500 From: Steve Sistare Add the cpr_delete_fd_all function to delete all fds associated with a device. Signed-off-by: Steve Sistare Signed-off-by: Ben Chaney --- include/migration/cpr.h | 1 + migration/cpr.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/migration/cpr.h b/include/migration/cpr.h index 027cb98073..d585fadc5b 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -29,6 +29,7 @@ extern CprState cpr_state; =20 void cpr_save_fd(const char *name, int id, int fd); void cpr_delete_fd(const char *name, int id); +void cpr_delete_fd_all(const char *name); int cpr_find_fd(const char *name, int id); void cpr_resave_fd(const char *name, int id, int fd); int cpr_open_fd(const char *path, int flags, const char *name, int id, diff --git a/migration/cpr.c b/migration/cpr.c index adee2a919a..c0bf93a7ba 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -85,6 +85,19 @@ void cpr_delete_fd(const char *name, int id) trace_cpr_delete_fd(name, id); } =20 +void cpr_delete_fd_all(const char *name) +{ + CprFd *elem, *next_elem; + + QLIST_FOREACH_SAFE(elem, &cpr_state.fds, next, next_elem) { + if (!strcmp(elem->name, name)) { + QLIST_REMOVE(elem, next); + g_free(elem->name); + g_free(elem); + } + } +} + int cpr_find_fd(const char *name, int id) { CprFd *elem =3D find_fd(&cpr_state.fds, name, id); --=20 2.34.1 From nobody Mon Feb 9 16:03:51 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; dmarc=pass(p=quarantine dis=none) header.from=akamai.com ARC-Seal: i=1; a=rsa-sha256; t=1769632824; cv=none; d=zohomail.com; s=zohoarc; b=ZOXjE0fSz0LBMY3liAHqUYZqJEnu8DdYdeat4t1s5uf5W4UICe8xFrBepRRHCc8LCRzoCOnrAs94kIcOQ4ohJG0gYNBtml0xTACzJZmWWwF0EGfYHkOhFUmDfyBAyzEMGATB+tdbwj/1fCKbfOqOKydau7votlE/NBPBbw+DFr0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769632824; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=EnOnlaaVzC0OpclLnA+dVUJZIShPIfiEyU9wHJb1UAQ=; b=AZqsuphf1265mSt1Hb2iZTXRoLwxEw/TL8LXu/AI+nlmP/X3O2P1QSvFTgDbVEVosMstmSaKxUf1NnJoM++Du6cGwwiqnMTZYZRILntpSi5OAbf+CYKe3krBbV8QmKX1W+RhT7YqTWTIVBMrTUW1j7TAKYzPiVp4MSvYpvtgzdM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769632824389161.29946805241752; Wed, 28 Jan 2026 12:40:24 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlCKk-0008KO-4R; Wed, 28 Jan 2026 15:40:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKK-0007au-Dg for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:50 -0500 Received: from mx0a-00190b01.pphosted.com ([67.231.149.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKH-00084g-4K for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:48 -0500 Received: from pps.filterd (m0409409.ppops.net [127.0.0.1]) by m0409409.ppops.net-00190b01. (8.18.1.11/8.18.1.11) with ESMTP id 60SCrUB43813605; Wed, 28 Jan 2026 20:39:42 GMT Received: from prod-mail-ppoint6 (prod-mail-ppoint6.akamai.com [184.51.33.61]) by m0409409.ppops.net-00190b01. (PPS) with ESMTPS id 4by2u0y6ex-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 28 Jan 2026 20:39:41 +0000 (GMT) Received: from pps.filterd (prod-mail-ppoint6.akamai.com [127.0.0.1]) by prod-mail-ppoint6.akamai.com (8.18.1.2/8.18.1.2) with ESMTP id 60SGBOwZ009288; Wed, 28 Jan 2026 15:39:40 -0500 Received: from prod-mail-relay02.akamai.com ([172.27.118.35]) by prod-mail-ppoint6.akamai.com (PPS) with ESMTP id 4bvta3g7y5-1; Wed, 28 Jan 2026 15:39:40 -0500 Received: from bos-lhvkhf.bos01.corp.akamai.com (bos-lhvkhf.bos01.corp.akamai.com [172.28.220.254]) by prod-mail-relay02.akamai.com (Postfix) with ESMTP id 11EF5AB; Wed, 28 Jan 2026 20:39:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akamai.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=jan2016.eng; bh=EnOnlaaVzC0OpclLnA+dVUJZIShPIfiEyU9wHJb1UAQ=; b=MS7ouQ+LJPia w9n6ImcrRS4/W+SKJrSkigEBKibD6F1ozGlJzktjp10j+I12hW+AsbpT7mcUNzuR yda4rckwsQAYKMuOT3BzD1+If1WxPnkxpmjeY5KJhUB63DichdaIlGphgEFMiBZw Tx2FvfhNeQKqpAlG3LPh23v5II/bgkUrdZ7Mqs6dC2Ts6qdk5rG2I1NzbIlitsMw qIclK2U4jHcpGKDkERaaAw+plJnkctXoNbPt8jP8wV1parkwDczZz9jqVWS22mDn 1gIfnjt41PKcQ9E9J+zYlHt2ipImOt2n5191UwjrVeOJ1txS5aGLKEGKOglJUCVj PAfKdlwT0g== From: Ben Chaney Date: Wed, 28 Jan 2026 15:39:33 -0500 Subject: [PATCH v4 5/8] tap: common return label MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260128-cpr-tap-v4-5-48e334d4216b@akamai.com> References: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> In-Reply-To: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , "Michael S. Tsirkin" , Stefano Garzarella , Jason Wang , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Eric Blake , Markus Armbruster , Stefan Weil , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Paolo Bonzini , Hamza Khan , Mark Kanda , Joshua Hunt , Max Tottenham , Ben Chaney , Steve Sistare X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1769632778; l=5311; i=bchaney@akamai.com; s=20251203; h=from:subject:message-id; bh=2vMdreTfPH40hZnJ0QljVZZ8eyp+SeereXjfUBOb/Xw=; b=wQ5rpcj4JeCcEP5BROYcDM6T2/ShIBJlucf1W6QRnM+6tK4yiFTA3WN3f21x5a8fofyqnep8M fJLtWxo7ko/BkOGVIybjGhdhX6JQcz4OK3boPil5Ht0aFbNUBukXRUR X-Developer-Key: i=bchaney@akamai.com; a=ed25519; pk=6+w9cse5QEeVdy3tjqFxs/4rAaRdQ2/fkTxVFq+lWy4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2601150000 definitions=main-2601280169 X-Authority-Analysis: v=2.4 cv=OOkqHCaB c=1 sm=1 tr=0 ts=697a740d cx=c_pps a=WPLAOKU3JHlOa4eSsQmUFQ==:117 a=WPLAOKU3JHlOa4eSsQmUFQ==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=X7Ea-ya5AAAA:8 a=zPeY32rCmRbJBjnbAY4A:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: K-MOrO30px7SrcOBLViwRNo6ZqOV37Ud X-Proofpoint-GUID: K-MOrO30px7SrcOBLViwRNo6ZqOV37Ud X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI4MDE3MCBTYWx0ZWRfX4ikoEm7KZtIM T9TodWIa0G2x9jRvAmnaJot/KzQaaEX7ehL5UBVAmLOar7z1FRuJgVOCrHhdL6nW68SpHFfNR+X JoHSb5MSsjFj4HdGMqAJL3DGUdoPgVnO0YxKE5C3AXmPH/BVrERwwSE+SAJ8ANBMVhuygz2YiPV GFbfMcdeH1p1gLGv+ID1KDMBTHGNS7cL6fD0iDN0T+k8iFRjbilNYb3qUNdrU5xueGPxSbx+Diy Um8876s/z350ihCdw/INE8W3/IH9FHq1rSmsV6rU0urQWV5nagRkjWN3yCc0xsP8LIf7E9ez4bb Iqzo19xC78uJwXIqiu7PTNIXUxAF0+26XXhYJyUw582CjLIFMgDE0C6wdWcPgFAHhRayfvz6D+0 JOi8kCPFExHPd4lwFlX3j8d5QqyIYtAdRkbG/9wGo8yC2CJz79i8Ul60ouOdxIJcETHEfFhJ2Ff XUoqIXjWZGZWEFC1xrw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 impostorscore=0 clxscore=1011 adultscore=0 priorityscore=1501 spamscore=0 malwarescore=0 bulkscore=0 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601280170 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=lists.gnu.org; Received-SPF: pass client-ip=67.231.149.131; envelope-from=bchaney@akamai.com; helo=mx0a-00190b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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 @akamai.com) X-ZM-MESSAGEID: 1769632828359154100 From: Steve Sistare Modify net_init_tap so every return branches to a common label, for common cleanup in a subsequent patch. No functional change. Signed-off-by: Steve Sistare Signed-off-by: Ben Chaney --- net/tap.c | 55 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/net/tap.c b/net/tap.c index bfba3fd7a7..1847167e4f 100644 --- a/net/tap.c +++ b/net/tap.c @@ -829,7 +829,8 @@ int net_init_tap(const Netdev *netdev, const char *name, * For -netdev, peer is always NULL. */ if (peer && (tap->has_queues || tap->fds || tap->vhostfds)) { error_setg(errp, "Multiqueue tap cannot be used with hubs"); - return -1; + ret =3D -1; + goto out; } =20 if (tap->fd) { @@ -839,23 +840,27 @@ int net_init_tap(const Netdev *netdev, const char *na= me, error_setg(errp, "ifname=3D, script=3D, downscript=3D, vnet_hd= r=3D, " "helper=3D, queues=3D, fds=3D, and vhostfds=3D " "are invalid with fd=3D"); - return -1; + ret =3D -1; + goto out; } =20 fd =3D monitor_fd_param(monitor_cur(), tap->fd, errp); if (fd =3D=3D -1) { - return -1; + ret =3D -1; + goto out; } =20 if (!qemu_set_blocking(fd, false, errp)) { close(fd); - return -1; + ret =3D -1; + goto out; } =20 vnet_hdr =3D tap_probe_vnet_hdr(fd, errp); if (vnet_hdr < 0) { close(fd); - return -1; + ret =3D -1; + goto out; } =20 net_init_tap_one(tap, peer, "tap", name, NULL, @@ -864,7 +869,8 @@ int net_init_tap(const Netdev *netdev, const char *name, if (err) { error_propagate(errp, err); close(fd); - return -1; + ret =3D -1; + goto out; } } else if (tap->fds) { char **fds; @@ -877,7 +883,8 @@ int net_init_tap(const Netdev *netdev, const char *name, error_setg(errp, "ifname=3D, script=3D, downscript=3D, vnet_hd= r=3D, " "helper=3D, queues=3D, and vhostfd=3D " "are invalid with fds=3D"); - return -1; + ret =3D -1; + goto out; } =20 fds =3D g_new0(char *, MAX_TAP_QUEUES); @@ -939,29 +946,35 @@ free_fail: } g_free(fds); g_free(vhost_fds); - return ret; + goto out; + } else if (tap->helper) { if (tap->ifname || tap->script || tap->downscript || tap->has_vnet_hdr || tap->has_queues || tap->vhostfds) { error_setg(errp, "ifname=3D, script=3D, downscript=3D, vnet_hd= r=3D, " "queues=3D, and vhostfds=3D are invalid with helper= =3D"); - return -1; + ret =3D -1; + goto out; } =20 fd =3D net_bridge_run_helper(tap->helper, tap->br ?: DEFAULT_BRIDGE_INTERFACE, errp); if (fd =3D=3D -1) { - return -1; + ret =3D -1; + goto out; } =20 if (!qemu_set_blocking(fd, false, errp)) { - return -1; + close(fd); + ret =3D -1; + goto out; } vnet_hdr =3D tap_probe_vnet_hdr(fd, errp); if (vnet_hdr < 0) { close(fd); - return -1; + ret =3D -1; + goto out; } =20 net_init_tap_one(tap, peer, "bridge", name, ifname, @@ -970,14 +983,16 @@ free_fail: if (err) { error_propagate(errp, err); close(fd); - return -1; + ret =3D -1; + goto out; } } else { g_autofree char *default_script =3D NULL; g_autofree char *default_downscript =3D NULL; if (tap->vhostfds) { error_setg(errp, "vhostfds=3D is invalid if fds=3D wasn't spec= ified"); - return -1; + ret =3D -1; + goto out; } =20 if (!script) { @@ -998,14 +1013,16 @@ free_fail: fd =3D net_tap_init(tap, &vnet_hdr, i >=3D 1 ? "no" : script, ifname, sizeof ifname, queues > 1, errp); if (fd =3D=3D -1) { - return -1; + ret =3D -1; + goto out; } =20 if (queues > 1 && i =3D=3D 0 && !tap->ifname) { if (tap_fd_get_ifname(fd, ifname)) { error_setg(errp, "Fail to get ifname"); close(fd); - return -1; + ret =3D -1; + goto out; } } =20 @@ -1016,12 +1033,14 @@ free_fail: if (err) { error_propagate(errp, err); close(fd); - return -1; + ret =3D -1; + goto out; } } } =20 - return 0; +out: + return ret; } =20 int tap_enable(NetClientState *nc) --=20 2.34.1 From nobody Mon Feb 9 16:03:51 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; dmarc=pass(p=quarantine dis=none) header.from=akamai.com ARC-Seal: i=1; a=rsa-sha256; t=1769632812; cv=none; d=zohomail.com; s=zohoarc; b=nqZvDHhM6+9jZfMO354YRSF59iXqp+N5d5AD8DvFY+5IstugQjOUFkrER8/LutHSXWN0LSFcociXqir4idONYYeOICC1717Q9epd6AEAUUTEWAc9jTEvBYhGzECTKc4mXPJqdLVre9qltGzRvNXuBrdEKkih5MAQSeFD5NpbIsM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769632812; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=yCpZ8OZEmhEYyDVc2aUaUkfZJVu/yc0ND2O/fefPaaY=; b=HnY45397F//EybozTjiuX5EQYKDHQPgu7v7yfQlgeS+H3Q0gph8WeGPmA8razrkQXBceWYeF+DLIPSQnpBYgpKgtHr7j1n9U1uIYIEgnSedfvccSVz8mioUlYn49+JNnzGqt538g2b7NVrUiAjHoOiMhoKXkTKqzzFhuLqDQfXY= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769632812067851.5740306903284; Wed, 28 Jan 2026 12:40:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlCKW-0007qQ-0B; Wed, 28 Jan 2026 15:40:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKK-0007bC-W1 for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:50 -0500 Received: from mx0a-00190b01.pphosted.com ([2620:100:9001:583::1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKH-00084j-4m for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:48 -0500 Received: from pps.filterd (m0122333.ppops.net [127.0.0.1]) by mx0a-00190b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 60SIKVkG2170402; Wed, 28 Jan 2026 20:39:42 GMT Received: from prod-mail-ppoint6 (prod-mail-ppoint6.akamai.com [184.51.33.61]) by mx0a-00190b01.pphosted.com (PPS) with ESMTPS id 4byqnat9w2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 28 Jan 2026 20:39:41 +0000 (GMT) Received: from pps.filterd (prod-mail-ppoint6.akamai.com [127.0.0.1]) by prod-mail-ppoint6.akamai.com (8.18.1.2/8.18.1.2) with ESMTP id 60SI7e9a010430; Wed, 28 Jan 2026 15:39:40 -0500 Received: from prod-mail-relay02.akamai.com ([172.27.118.35]) by prod-mail-ppoint6.akamai.com (PPS) with ESMTP id 4bvta3g7y3-1; Wed, 28 Jan 2026 15:39:40 -0500 Received: from bos-lhvkhf.bos01.corp.akamai.com (bos-lhvkhf.bos01.corp.akamai.com [172.28.220.254]) by prod-mail-relay02.akamai.com (Postfix) with ESMTP id 16240AF; Wed, 28 Jan 2026 20:39:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akamai.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=jan2016.eng; bh=yCpZ8OZEmhEYyDVc2aUaUkfZJVu/yc0ND2O/fefPaaY=; b=elNTkOJP7ZFV H3rhDlMBsykNOiyXMblQuDg/31TyGtyG0r6fvu7G0A5dG5QeOGreswYn6NygFfwt ChKpEOZlNSROUIfd3g4hV52AHfp/bLEfGG0895g76TyHIeGGb+wXQ8LEV5IqSFbT pvSHCypvbSMVPtx0fzsu7BP5+/4yVfUTLGrAtFK9NzJ28vH578V+CVvP2xuPcuYd Z6GGCg/vxZAxOgVkHfjueSu9F9EZpbaO98ZMO6KO8YFSdVHpyQbebjfslWov3rJQ s7PgWVodomURPKELwA5ZesyK5ncfjd48mS5Y3bdn1azBst4X65wf2RMhbxdVaB3F /jy9zhNwug== From: Ben Chaney Date: Wed, 28 Jan 2026 15:39:34 -0500 Subject: [PATCH v4 6/8] tap: cpr support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260128-cpr-tap-v4-6-48e334d4216b@akamai.com> References: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> In-Reply-To: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , "Michael S. Tsirkin" , Stefano Garzarella , Jason Wang , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Eric Blake , Markus Armbruster , Stefan Weil , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Paolo Bonzini , Hamza Khan , Mark Kanda , Joshua Hunt , Max Tottenham , Ben Chaney , Steve Sistare X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1769632778; l=12558; i=bchaney@akamai.com; s=20251203; h=from:subject:message-id; bh=nZna5y7cU4VKMsyHpma5ytnBgdVdvkrBCymbsuiNGLM=; b=6LaIMH4kyy453SwG4R59fbcpzFp4wd/aAcBvm4m42zFCe7incJ3zOGMFOk8foTuoqSZWPtSWf h1ajAqzuZ1gCH2NCL/m6VsNmDpO4rqeFMZfyO1cJBSxKVY8SDbfIkW5 X-Developer-Key: i=bchaney@akamai.com; a=ed25519; pk=6+w9cse5QEeVdy3tjqFxs/4rAaRdQ2/fkTxVFq+lWy4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2601150000 definitions=main-2601280169 X-Proofpoint-GUID: 0uXiCZrp8Xg6MkAt04ifTF8vnPOcUyq1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI4MDE3MCBTYWx0ZWRfXxTgyfnctfS0S BJk0tN0FnUi8rgpkWj4XujGqVsSKpG6Pll099TBP0MdX4/JB/cKPKYISK5iPvsA27JT7izRiPkz U0iv0xO4loSk+WeX+weo9M47a5MflVYfEPQBNCMBAlxbToYOYJ5tIu1rIWFmBDCciv7wiWuFNy8 LgXViM2ItXTtiJwKhBjLWSlyuOnAeos6u1numrUIe/73bY2MZScOoGxcdfUyGGDA4haV8uAvzNM oiSEmFZ1oDlXM5ZFH2BCMNc+7WiRPvPkDrqxEbuQVWbCv1+jA4WkJYOC+bIfbD2+y1TKGg2WKO9 3RsryKQzpMQ8LOAbNgz42psorsHMA2GYqfc4+oQn54hbwCikd60OTpyR9xSNEuQ5g9qOOD3ladp mdFMLpbMRaY3OpFupasasOlDyjf9H3vlT6k+v4q+xNNy3VfGzdKh/8RPf8qF+2jokkFxIx4vU6V F64wmF2q/XuQg4BdZ8A== X-Authority-Analysis: v=2.4 cv=AtTjHe9P c=1 sm=1 tr=0 ts=697a740d cx=c_pps a=WPLAOKU3JHlOa4eSsQmUFQ==:117 a=WPLAOKU3JHlOa4eSsQmUFQ==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=X7Ea-ya5AAAA:8 a=MnPoHshHpnJFf7yz6EoA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: 0uXiCZrp8Xg6MkAt04ifTF8vnPOcUyq1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 impostorscore=0 malwarescore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601280170 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=lists.gnu.org; Received-SPF: pass client-ip=2620:100:9001:583::1; envelope-from=bchaney@akamai.com; helo=mx0a-00190b01.pphosted.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, DKIMWL_WL_HIGH=-0.001, 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 @akamai.com) X-ZM-MESSAGEID: 1769632816518154100 Provide the cpr=3Don option to preserve TAP and vhost descriptors during cpr-transfer, so the management layer does not need to create a new device for the target. Save all tap fd's in order with the tap device fds saved first, and the vhostfd saved after. Example: -netdev tap,id=3Dhostnet2,cpr=3Don Signed-off-by: Steve Sistare Signed-off-by: Ben Chaney Acked-by: Markus Armbruster --- hw/vfio/device.c | 2 +- include/migration/cpr.h | 4 +-- migration/cpr.c | 19 +++++++------ net/tap.c | 74 +++++++++++++++++++++++++++++++++++++++------= ---- qapi/net.json | 6 +++- 5 files changed, 77 insertions(+), 28 deletions(-) diff --git a/hw/vfio/device.c b/hw/vfio/device.c index 086f20f676..cbc8db6a67 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -363,7 +363,7 @@ void vfio_device_free_name(VFIODevice *vbasedev) =20 void vfio_device_set_fd(VFIODevice *vbasedev, const char *str, Error **err= p) { - vbasedev->fd =3D cpr_get_fd_param(vbasedev->dev->id, str, 0, errp); + vbasedev->fd =3D get_fd_param(vbasedev->dev->id, str, 0, true, errp); } =20 static VFIODeviceIOOps vfio_device_io_ops_ioctl; diff --git a/include/migration/cpr.h b/include/migration/cpr.h index d585fadc5b..ded6ceff7c 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -48,8 +48,8 @@ void cpr_state_close(void); struct QIOChannel *cpr_state_ioc(void); =20 bool cpr_incoming_needed(void *opaque); -int cpr_get_fd_param(const char *name, const char *fdname, int index, - Error **errp); +int get_fd_param(const char *cpr_name, const char *fdname, int index, bool= cpr, + Error **errp); =20 QEMUFile *cpr_transfer_output(MigrationChannel *channel, Error **errp); QEMUFile *cpr_transfer_input(MigrationChannel *channel, Error **errp); diff --git a/migration/cpr.c b/migration/cpr.c index c0bf93a7ba..f2c40eeba5 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -311,11 +311,12 @@ bool cpr_incoming_needed(void *opaque) } =20 /* - * cpr_get_fd_param: find a descriptor and return its value. + * get_fd_param: find a descriptor and return its value. * - * @name: CPR name for the descriptor + * @cpr_name: CPR name for the descriptor * @fdname: An integer-valued string, or a name passed to a getfd command * @index: CPR index of the descriptor + * @cpr: cpr is enabled on the associated device * @errp: returned error message * * If CPR is not being performed, then use @fdname to find the fd. @@ -324,23 +325,23 @@ bool cpr_incoming_needed(void *opaque) * * On success returns the fd value, else returns -1. */ -int cpr_get_fd_param(const char *name, const char *fdname, int index, - Error **errp) +int get_fd_param(const char *cpr_name, const char *fdname, int index, + bool cpr, Error **errp) { ERRP_GUARD(); int fd; =20 - if (cpr_is_incoming()) { - fd =3D cpr_find_fd(name, index); + if (cpr && cpr_is_incoming()) { + fd =3D cpr_find_fd(cpr_name, index); if (fd < 0) { error_setg(errp, "cannot find saved value for fd %s", fdname); } } 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) { + cpr_save_fd(cpr_name, index, fd); } } return fd; diff --git a/net/tap.c b/net/tap.c index 1847167e4f..8875498434 100644 --- a/net/tap.c +++ b/net/tap.c @@ -35,6 +35,7 @@ #include "net/eth.h" #include "net/net.h" #include "clients.h" +#include "migration/cpr.h" #include "monitor/monitor.h" #include "system/system.h" #include "qapi/error.h" @@ -80,6 +81,7 @@ typedef struct TAPState { bool has_uso; bool has_tunnel; bool enabled; + bool cpr; VHostNetState *vhost_net; unsigned host_vnet_hdr_len; Notifier exit; @@ -323,6 +325,9 @@ static void tap_cleanup(NetClientState *nc) { TAPState *s =3D DO_UPCAST(TAPState, nc, nc); =20 + if (s->cpr) { + cpr_delete_fd_all(nc->name); + } if (s->vhost_net) { vhost_net_cleanup(s->vhost_net); g_free(s->vhost_net); @@ -690,18 +695,24 @@ static int net_tap_init(const NetdevTapOptions *tap, = int *vnet_hdr, return fd; } =20 +/* CPR fd's for each queue are saved at these indices */ +#define TAP_FD_INDEX(queue) ((queue)) +#define TAP_VHOSTFD_INDEX(queue, total_fds) ((queue) + (total_fds)) + #define MAX_TAP_QUEUES 1024 =20 static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *= peer, const char *model, const char *name, const char *ifname, const char *script, const char *downscript, const char *vhostfdna= me, - int vnet_hdr, int fd, Error **errp) + int vnet_hdr, int fd, int index, Error **errp) { Error *err =3D NULL; TAPState *s =3D net_tap_fd_init(peer, model, name, fd, vnet_hdr); + bool cpr =3D tap->has_cpr ? tap->cpr : false; int vhostfd; =20 + s->cpr =3D cpr; tap_set_sndbuf(s->fd, tap, &err); if (err) { error_propagate(errp, err); @@ -736,7 +747,7 @@ static void net_init_tap_one(const NetdevTapOptions *ta= p, NetClientState *peer, } =20 if (vhostfdname) { - vhostfd =3D monitor_fd_param(monitor_cur(), vhostfdname, &err); + vhostfd =3D get_fd_param(name, vhostfdname, index, cpr, &err); if (vhostfd =3D=3D -1) { error_propagate(errp, err); goto failed; @@ -745,12 +756,21 @@ static void net_init_tap_one(const NetdevTapOptions *= tap, NetClientState *peer, goto failed; } } else { - vhostfd =3D open("/dev/vhost-net", O_RDWR); + vhostfd =3D cpr ? cpr_find_fd(name, index) : -1; + if (vhostfd < 0) { + vhostfd =3D open("/dev/vhost-net", O_RDWR); + if (cpr && vhostfd >=3D 0) { + cpr_save_fd(name, index, vhostfd); + } + } if (vhostfd < 0) { error_setg_file_open(errp, errno, "/dev/vhost-net"); goto failed; } if (!qemu_set_blocking(vhostfd, false, errp)) { + if (!cpr) { + close(vhostfd); + } goto failed; } } @@ -776,6 +796,9 @@ static void net_init_tap_one(const NetdevTapOptions *ta= p, NetClientState *peer, return; =20 failed: + if (cpr) { + cpr_delete_fd_all(name); + } qemu_del_net_client(&s->nc); } =20 @@ -808,7 +831,8 @@ static int get_fds(char *str, char *fds[], int max) int net_init_tap(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp) { - const NetdevTapOptions *tap; + const NetdevTapOptions *tap =3D &netdev->u.tap; + bool cpr =3D tap->has_cpr ? tap->cpr : false; int fd, vnet_hdr =3D 0, i =3D 0, queues; /* for the no-fd, no-helper case */ const char *script; @@ -844,7 +868,7 @@ int net_init_tap(const Netdev *netdev, const char *name, goto out; } =20 - fd =3D monitor_fd_param(monitor_cur(), tap->fd, errp); + fd =3D get_fd_param(name, tap->fd, TAP_FD_INDEX(0), cpr, errp); if (fd =3D=3D -1) { ret =3D -1; goto out; @@ -865,13 +889,15 @@ int net_init_tap(const Netdev *netdev, const char *na= me, =20 net_init_tap_one(tap, peer, "tap", name, NULL, script, downscript, - vhostfdname, vnet_hdr, fd, &err); + vhostfdname, vnet_hdr, fd, + TAP_VHOSTFD_INDEX(0, 1), &err); if (err) { error_propagate(errp, err); close(fd); ret =3D -1; goto out; } + } else if (tap->fds) { char **fds; char **vhost_fds; @@ -902,7 +928,7 @@ int net_init_tap(const Netdev *netdev, const char *name, } =20 for (i =3D 0; i < nfds; i++) { - fd =3D monitor_fd_param(monitor_cur(), fds[i], errp); + fd =3D get_fd_param(name, fds[i], TAP_FD_INDEX(i), cpr, errp); if (fd =3D=3D -1) { ret =3D -1; goto free_fail; @@ -929,7 +955,7 @@ int net_init_tap(const Netdev *netdev, const char *name, net_init_tap_one(tap, peer, "tap", name, ifname, script, downscript, tap->vhostfds ? vhost_fds[i] : NULL, - vnet_hdr, fd, &err); + vnet_hdr, fd, TAP_VHOSTFD_INDEX(i, nfds), &er= r); if (err) { error_propagate(errp, err); ret =3D -1; @@ -957,9 +983,15 @@ free_fail: goto out; } =20 - fd =3D net_bridge_run_helper(tap->helper, - tap->br ?: DEFAULT_BRIDGE_INTERFACE, - errp); + fd =3D cpr ? cpr_find_fd(name, TAP_FD_INDEX(0)) : -1; + if (fd < 0) { + fd =3D net_bridge_run_helper(tap->helper, + tap->br ?: DEFAULT_BRIDGE_INTERFACE, + errp); + if (cpr && fd >=3D 0) { + cpr_save_fd(name, TAP_FD_INDEX(0), fd); + } + } if (fd =3D=3D -1) { ret =3D -1; goto out; @@ -979,13 +1011,14 @@ free_fail: =20 net_init_tap_one(tap, peer, "bridge", name, ifname, script, downscript, vhostfdname, - vnet_hdr, fd, &err); + vnet_hdr, fd, TAP_VHOSTFD_INDEX(0, 1), &err); if (err) { error_propagate(errp, err); close(fd); ret =3D -1; goto out; } + } else { g_autofree char *default_script =3D NULL; g_autofree char *default_downscript =3D NULL; @@ -1010,8 +1043,14 @@ free_fail: } =20 for (i =3D 0; i < queues; i++) { - fd =3D net_tap_init(tap, &vnet_hdr, i >=3D 1 ? "no" : script, - ifname, sizeof ifname, queues > 1, errp); + fd =3D cpr ? cpr_find_fd(name, TAP_FD_INDEX(i)) : -1; + if (fd < 0) { + fd =3D net_tap_init(tap, &vnet_hdr, i >=3D 1 ? "no" : scri= pt, + ifname, sizeof ifname, queues > 1, errp); + if (cpr && fd >=3D 0) { + cpr_save_fd(name, TAP_FD_INDEX(i), fd); + } + } if (fd =3D=3D -1) { ret =3D -1; goto out; @@ -1029,7 +1068,9 @@ free_fail: net_init_tap_one(tap, peer, "tap", name, ifname, i >=3D 1 ? "no" : script, i >=3D 1 ? "no" : downscript, - vhostfdname, vnet_hdr, fd, &err); + vhostfdname, vnet_hdr, + fd, TAP_VHOSTFD_INDEX(i, queues), + &err); if (err) { error_propagate(errp, err); close(fd); @@ -1040,6 +1081,9 @@ free_fail: } =20 out: + if (ret && cpr) { + cpr_delete_fd_all(name); + } return ret; } =20 diff --git a/qapi/net.json b/qapi/net.json index 118bd34965..4b12fca94b 100644 --- a/qapi/net.json +++ b/qapi/net.json @@ -355,6 +355,9 @@ # @poll-us: maximum number of microseconds that could be spent on busy # polling for tap (since 2.7) # +# @cpr: preserve the state of this device and its associated file +# descriptors during cpr-transfer for reduced migration downtime +# # Since: 1.2 ## { 'struct': 'NetdevTapOptions', @@ -373,7 +376,8 @@ '*vhostfds': 'str', '*vhostforce': 'bool', '*queues': 'uint32', - '*poll-us': 'uint32'} } + '*poll-us': 'uint32', + '*cpr': 'bool'} } =20 ## # @NetdevSocketOptions: --=20 2.34.1 From nobody Mon Feb 9 16:03:51 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; dmarc=pass(p=quarantine dis=none) header.from=akamai.com ARC-Seal: i=1; a=rsa-sha256; t=1769632829; cv=none; d=zohomail.com; s=zohoarc; b=a6DfTk4q2huOnXDH9JxHncofQQFkEOXb7vRbJ2fkH6QgUMlgx7ikxZPFLICJXhdjLLJZlc5enrqR8AQiKCsNF0Yh4GVgiAyCsN94MSuqLg2YnHw27ht671u8a+pVZVk0quGVOwdV5S1iqqj6AtR8x2s9peUaDi0BoqkRqK+l9Gw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769632829; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=69oowmfGBBkxto45rQliLKa5kUPav6LIeURmLosLpL4=; b=dfSobSvWXNRK68xEXIUFweuX3OvwEuGw4tEp+Qre2Czj3pzQm7OrEgZpVDWK+p4Laesblsa6YTa0CZJwFnytP0wee6vqQVao5aUlYhOaT4uw6/EBdBKSK7YizmnCr9ndSmPDL4V6QIaQOeCa24+hFSUqAF6KygvqPSp9Nrawx5E= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769632829262931.549225112819; Wed, 28 Jan 2026 12:40:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlCKh-0007zL-Ac; Wed, 28 Jan 2026 15:40:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKK-0007at-C9 for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:50 -0500 Received: from mx0b-00190b01.pphosted.com ([2620:100:9005:57f::1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKG-00084f-UX for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:48 -0500 Received: from pps.filterd (m0050096.ppops.net [127.0.0.1]) by m0050096.ppops.net-00190b01. (8.18.1.11/8.18.1.11) with ESMTP id 60SIs2g12689064; Wed, 28 Jan 2026 20:39:41 GMT Received: from prod-mail-ppoint6 (prod-mail-ppoint6.akamai.com [184.51.33.61]) by m0050096.ppops.net-00190b01. (PPS) with ESMTPS id 4bypguk8pt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 28 Jan 2026 20:39:41 +0000 (GMT) Received: from pps.filterd (prod-mail-ppoint6.akamai.com [127.0.0.1]) by prod-mail-ppoint6.akamai.com (8.18.1.2/8.18.1.2) with ESMTP id 60SIYCkX028880; Wed, 28 Jan 2026 15:39:40 -0500 Received: from prod-mail-relay02.akamai.com ([172.27.118.35]) by prod-mail-ppoint6.akamai.com (PPS) with ESMTP id 4bvta3g7y4-1; Wed, 28 Jan 2026 15:39:40 -0500 Received: from bos-lhvkhf.bos01.corp.akamai.com (bos-lhvkhf.bos01.corp.akamai.com [172.28.220.254]) by prod-mail-relay02.akamai.com (Postfix) with ESMTP id 19F3FB3; Wed, 28 Jan 2026 20:39:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akamai.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=jan2016.eng; bh=69oowmfGBBkxto45rQliLKa5kUPav6LIeURmLosLpL4=; b=lrC6kS2ZHR9t rkpmePePKzSm95WAVJgOm9/rbJncemzoHU+c+AsGVhw+bBP4CNVQyjo7ZQ3+A9hY 7TWisVvmf6H5gITjcxLjRA6yjCQfettnvmbUOy095+/jgz2eK290Ku3GAA+jdknl kdNK3dDripK2spMPtYO7RFV+Yq9pd7MAanz5kKk2rYvDehz4COVJO+XMxlHS5XxB xvmTfrEYwTWH6JoBcDUeb7oQbSWtHSMcoXLSeSCjE9+fDHIF3j2RjVennyZTfvyL TDusvwTwTe0gVm8ffb86DUvlK2oVi6/Yp7PXYg1yfMH61/Qz98oJ9B5QjjDD58CL OV44EzRbcg== From: Ben Chaney Date: Wed, 28 Jan 2026 15:39:35 -0500 Subject: [PATCH v4 7/8] tap: postload fix for cpr MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260128-cpr-tap-v4-7-48e334d4216b@akamai.com> References: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> In-Reply-To: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , "Michael S. Tsirkin" , Stefano Garzarella , Jason Wang , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Eric Blake , Markus Armbruster , Stefan Weil , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Paolo Bonzini , Hamza Khan , Mark Kanda , Joshua Hunt , Max Tottenham , Ben Chaney , Steve Sistare X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1769632778; l=3307; i=bchaney@akamai.com; s=20251203; h=from:subject:message-id; bh=y3Xxt4dRCKG5jHG1T2Jwbz9e9N+8cAe17JOL6mau9ac=; b=xs2C1EDZtANvhWWwZN0TkQtY/feQ6x80qIQlJgXcpAo/ckR8Va0Y1ePgL3bLUmrzV03cZwDsO megkj0AbKksBmeR/FMcAgy9SJbpXWOiJCaUOEDdy+R2CNzAfdh2ZVFR X-Developer-Key: i=bchaney@akamai.com; a=ed25519; pk=6+w9cse5QEeVdy3tjqFxs/4rAaRdQ2/fkTxVFq+lWy4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2601150000 definitions=main-2601280169 X-Proofpoint-GUID: hpNE29YmUXVp6nHI3lXGrEFtCqkL-oZJ X-Authority-Analysis: v=2.4 cv=bfVmkePB c=1 sm=1 tr=0 ts=697a740d cx=c_pps a=WPLAOKU3JHlOa4eSsQmUFQ==:117 a=WPLAOKU3JHlOa4eSsQmUFQ==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=X7Ea-ya5AAAA:8 a=h1OFwVCXqnWUJWdIchYA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: hpNE29YmUXVp6nHI3lXGrEFtCqkL-oZJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI4MDE3MCBTYWx0ZWRfXyLbgko4ZpUKp lHm38TGmI/oYYtTLhGFykhPhsgkUujtkb6yT1nX9nuG4hxW73iJ4nC6FrgwGIBjlVZ3Vk8XHsA5 NU9amzMvavnc9oTrcW9ER4J60Ha0SpC37EjCfQ64P6RXeOa/BIx5/ZB08+bB4corRHybTUb0fA2 IvmzXzjfTrhn3nc6lWq6Qxxy/jXQzC+mFAHq98Wp7i2WnoUXSTtFUVMJC3ZqYO8xQbXj5sWAIiN IVg16Y3i17m8PtwA3ou9G2+r5wKBLl84Z68D5FrmNna2yUd2Yfk3XwY3bVPYXO1QsnRCvLtlKBd V597FCm5j/pWB8D0fLdzaGzHjxcrALpSjXE9xZ4FwXho0A/O58oRB/EraT3dQXiiPD4EQQyqCHh v5X9zHS5cjnpkfZjK/I2lL/OVcRvq0oqJlQt7STr8zDvcTNY09J/ZC237uCXtC4bNbYnWrQaFY8 +e+B2r+99k3YA209rXw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1015 priorityscore=1501 impostorscore=0 lowpriorityscore=0 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 phishscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601280170 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=lists.gnu.org; Received-SPF: pass client-ip=2620:100:9005:57f::1; envelope-from=bchaney@akamai.com; helo=mx0b-00190b01.pphosted.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, DKIMWL_WL_HIGH=-0.001, 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 @akamai.com) X-ZM-MESSAGEID: 1769632832919154100 From: Steve Sistare After cpr of a multi-queue NIC, if any queues are unused, then the corresponding tap is marked enabled in userland, but it is disabled in the kernel for the fd that was preserved. One cannot call tap_disable() during postload, because that eventually calls IFF_DETACH_QUEUE, which fails because the queue is already detached. Define tap_disable_postload to avoid IFF_DETACH_QUEUE. Signed-off-by: Steve Sistare Signed-off-by: Ben Chaney --- hw/net/virtio-net.c | 20 ++++++++++++++++++++ include/net/tap.h | 1 + net/tap-win32.c | 5 +++++ net/tap.c | 17 +++++++++++++++++ 4 files changed, 43 insertions(+) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 317f1ad23b..bb7c8d9b78 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -765,6 +765,25 @@ static int peer_detach(VirtIONet *n, int index) return tap_disable(nc->peer); } =20 +/* + * Set the disabled flag on unused queue pairs after vmstate load, without + * calling IFF_DETACH_QUEUE, which fails because the queue is already deta= ched. + */ +static void virtio_net_postload_queue_pairs(VirtIONet *n) +{ + int i; + MigMode mode =3D migrate_mode(); + + if (mode =3D=3D MIG_MODE_CPR_TRANSFER) { + for (i =3D n->curr_queue_pairs; i < n->max_queue_pairs; i++) { + NetClientState *nc =3D qemu_get_subqueue(n->nic, i); + if (nc->peer && nc->peer->info->type =3D=3D NET_CLIENT_DRIVER_= TAP) { + tap_disable_postload(nc->peer); + } + } + } +} + static void virtio_net_set_queue_pairs(VirtIONet *n) { int i; @@ -3210,6 +3229,7 @@ static int virtio_net_post_load_device(void *opaque, = int version_id) */ n->saved_guest_offloads =3D n->curr_guest_offloads; =20 + virtio_net_postload_queue_pairs(n); virtio_net_set_queue_pairs(n); =20 /* Find the first multicast entry in the saved MAC filter */ diff --git a/include/net/tap.h b/include/net/tap.h index 6f34f13eae..934131f551 100644 --- a/include/net/tap.h +++ b/include/net/tap.h @@ -30,6 +30,7 @@ =20 int tap_enable(NetClientState *nc); int tap_disable(NetClientState *nc); +void tap_disable_postload(NetClientState *nc); =20 int tap_get_fd(NetClientState *nc); =20 diff --git a/net/tap-win32.c b/net/tap-win32.c index 38baf90e0b..efe81c54ee 100644 --- a/net/tap-win32.c +++ b/net/tap-win32.c @@ -766,3 +766,8 @@ int tap_disable(NetClientState *nc) { abort(); } + +void tap_disable_postload(NetClientState *nc) +{ + abort(); +} diff --git a/net/tap.c b/net/tap.c index 8875498434..2961607cda 100644 --- a/net/tap.c +++ b/net/tap.c @@ -1121,3 +1121,20 @@ int tap_disable(NetClientState *nc) return ret; } } + +/* + * On cpr restart, the tap is marked enabled in userland, but it might be + * disabled in the kernel, and IFF_DETACH_QUEUE will fail because it is + * already detached. This function disables without calling IFF_DETACH_QU= EUE. + */ +void tap_disable_postload(NetClientState *nc) +{ + TAPState *s =3D DO_UPCAST(TAPState, nc, nc); + + if (!s->cpr || s->enabled =3D=3D 0) { + return; + } else { + s->enabled =3D false; + tap_update_fd_handler(s); + } +} --=20 2.34.1 From nobody Mon Feb 9 16:03:51 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; dmarc=pass(p=quarantine dis=none) header.from=akamai.com ARC-Seal: i=1; a=rsa-sha256; t=1769632839; cv=none; d=zohomail.com; s=zohoarc; b=KFAaFyj2rLd4GEfXAy0tmS0nUVWZ7qf2DqllonIPJF/dtT0knzvP6TanTK409g38hrxSYkEtHgGWS0NrTWuRk01+8IcU0OoOAiCx0sLbLCBR7Mthn2PG/ee0P7zWV6t4W+wW1CooGq1xepZc90iQ4v1YYnf/tMyinNwhNVBued0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769632839; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=teugPjqMDJr8JyTbcm4vnko9lD40Pv8XxkQ2AbWwh6A=; b=JQTcxfTs5/DqSic4i8mroyvjGXiEdJ6eA6Ut8CE5ILjTA/Bx9ntWxLEntZn4AVpwNeIQWhJ13M6JwNhTX+WDdb7wLfgoq2CZiAQHOgFFmNXWZZIKOWcumj4v16z8liodxK6DvuLpGom3udEp8wVZNq+bRD/eHs3RpbR2X55lB8M= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769632839656523.1787627913862; Wed, 28 Jan 2026 12:40:39 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlCKc-0007sA-Tk; Wed, 28 Jan 2026 15:40:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKM-0007dR-Fx for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:50 -0500 Received: from mx0a-00190b01.pphosted.com ([67.231.149.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlCKI-00084i-ET for qemu-devel@nongnu.org; Wed, 28 Jan 2026 15:39:49 -0500 Received: from pps.filterd (m0409409.ppops.net [127.0.0.1]) by m0409409.ppops.net-00190b01. (8.18.1.11/8.18.1.11) with ESMTP id 60SAGYUs3466844; Wed, 28 Jan 2026 20:39:42 GMT Received: from prod-mail-ppoint5 (prod-mail-ppoint5.akamai.com [184.51.33.60]) by m0409409.ppops.net-00190b01. (PPS) with ESMTPS id 4by2u0y6ey-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 28 Jan 2026 20:39:41 +0000 (GMT) Received: from pps.filterd (prod-mail-ppoint5.akamai.com [127.0.0.1]) by prod-mail-ppoint5.akamai.com (8.18.1.2/8.18.1.2) with ESMTP id 60SKJfQg004968; Wed, 28 Jan 2026 12:39:40 -0800 Received: from prod-mail-relay02.akamai.com ([172.27.118.35]) by prod-mail-ppoint5.akamai.com (PPS) with ESMTP id 4bvvxfyxxa-1; Wed, 28 Jan 2026 12:39:40 -0800 Received: from bos-lhvkhf.bos01.corp.akamai.com (bos-lhvkhf.bos01.corp.akamai.com [172.28.220.254]) by prod-mail-relay02.akamai.com (Postfix) with ESMTP id 1D54DB7; Wed, 28 Jan 2026 20:39:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akamai.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=jan2016.eng; bh=teugPjqMDJr8JyTbcm4vnko9lD40Pv8XxkQ2AbWwh6A=; b=axZdJz8iDqkM QVQH6zQ5auqMRY5svW6qjLM1kAG2pAZKCu9jj0f6ojzMGXQuGVrtf/I2Td1ZrXiB fngQfm5Du+zMiUjUwcBowB8RJn5dqNnqi6VmXE+sEjCP5QDg/obED62pJXT8HDFM fwyiJTrIVDq382DhyvKsx8qgzYUGV+kQlyBd/2l3fXRwdCkjwk6/vW7S3g71NqhS XSpiNjYP1hGJu6ryyKRfrQJleHZC2kVN0TGWFLpkb8TU8x4aakfjpMJr0sLs6zNc JlsIiKpm8CsgSNHhYlui/c5LPpXiVcR6qdqUfijZxUAbiHeXnnV8r6XLN2UTmOai LIe593aKFw== From: Ben Chaney Date: Wed, 28 Jan 2026 15:39:36 -0500 Subject: [PATCH v4 8/8] tap: cpr fixes MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260128-cpr-tap-v4-8-48e334d4216b@akamai.com> References: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> In-Reply-To: <20260128-cpr-tap-v4-0-48e334d4216b@akamai.com> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , "Michael S. Tsirkin" , Stefano Garzarella , Jason Wang , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Eric Blake , Markus Armbruster , Stefan Weil , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Paolo Bonzini , Hamza Khan , Mark Kanda , Joshua Hunt , Max Tottenham , Ben Chaney , Vladimir Sementsov-Ogievskiy , Steve Sistare X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1769632778; l=2369; i=bchaney@akamai.com; s=20251203; h=from:subject:message-id; bh=Djgy+EkuKwl5Gk26qxzLKrDHhSTEbF4DP7c/wKdSHmU=; b=kl4zKJ6j86X4W/S2mGC06hzt4uc85hEp1D2fjlS0fb0nQb9XXvRdj2Hm9WJP7NzCivODc4cK8 +28IljZQ/EsBLKtziEi7PiGdIyatPeXkqhx42j4C6Dg35HGJ6sVddT7 X-Developer-Key: i=bchaney@akamai.com; a=ed25519; pk=6+w9cse5QEeVdy3tjqFxs/4rAaRdQ2/fkTxVFq+lWy4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 mlxscore=0 bulkscore=0 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2601150000 definitions=main-2601280169 X-Authority-Analysis: v=2.4 cv=OOkqHCaB c=1 sm=1 tr=0 ts=697a740d cx=c_pps a=NpDlK6FjLPvvy7XAFEyJFw==:117 a=NpDlK6FjLPvvy7XAFEyJFw==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=X7Ea-ya5AAAA:8 a=6R7veym_AAAA:8 a=yPCof4ZbAAAA:8 a=C-eOVxJW3LoQiB8EbVoA:9 a=QEXdDO2ut3YA:10 a=ILCOIF4F_8SzUMnO7jNM:22 X-Proofpoint-ORIG-GUID: TTCwjWyAjwpsfMyA88YcCWbxPj4vqv02 X-Proofpoint-GUID: TTCwjWyAjwpsfMyA88YcCWbxPj4vqv02 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI4MDE3MCBTYWx0ZWRfX9v5Pet6DO2ON 1skJhqImtiQDhG6+QWdSrrgb39mlOkcfbhQlD1av129h2fLUr1Oh9aEk5qriLFGCBjomaeCDxCJ 9zpK4Zhh0rj9Qh7rXMhl00JxJ1jVNHRrvAfe/tmMYhukQ63bBWCW7mA/GpTTVEZUQZaf83RJ7FI Tlh215XhU8J2+X57pcGtLJK/Ws0H2td9+C0xOhVgiyTxD+MeQsTXBWVyWBfNR0DpCQLxxBZZ5EA 5IjAhui//3PP6KUZwPKsxruJQ9iCDinOk4WTFDF4pl3m6OwxUxc7bsUyyDiQm5yq5bE3hiPbEM5 RJN+uawqVXAqMTETaHRXR0T0zFVrw1pyoG2t8nJcQ2Xv/EoUlsKR7UcaYmkctImJ7Y0zdUig2BK 8hTGJnERKOXnhdrjAKk+zQhoehuedz07bh/oKsVjnVeNBYvhrbI4+OTDMUGj/eV/GyfFB1jVVcK EULrVlsPmwgKpIp9EDA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_06,2026-01-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 impostorscore=0 clxscore=1011 adultscore=0 priorityscore=1501 spamscore=0 malwarescore=0 bulkscore=0 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601280170 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=lists.gnu.org; Received-SPF: pass client-ip=67.231.149.131; envelope-from=bchaney@akamai.com; helo=mx0a-00190b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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 @akamai.com) X-ZM-MESSAGEID: 1769632842578154100 Fix "virtio_net_set_queue_pairs: Assertion `!r' failed." Fix "virtio-net: saved image requires vnet_hdr=3Don" Reported-by: Ben Chaney Reported-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Steve Sistare Signed-off-by: Ben Chaney --- hw/net/virtio-net.c | 6 ++++++ net/tap.c | 2 ++ stubs/cpr.c | 8 ++++++++ stubs/meson.build | 1 + 4 files changed, 17 insertions(+) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index bb7c8d9b78..7e809c37fc 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -37,6 +37,7 @@ #include "qapi/qapi-types-migration.h" #include "qapi/qapi-events-migration.h" #include "hw/virtio/virtio-access.h" +#include "migration/cpr.h" #include "migration/misc.h" #include "standard-headers/linux/ethtool.h" #include "system/system.h" @@ -789,6 +790,11 @@ static void virtio_net_set_queue_pairs(VirtIONet *n) int i; int r; =20 + if (cpr_is_incoming()) { + /* peers are already attached, do nothing */ + return; + } + if (n->nic->peer_deleted) { return; } diff --git a/net/tap.c b/net/tap.c index 2961607cda..b58072db99 100644 --- a/net/tap.c +++ b/net/tap.c @@ -1050,6 +1050,8 @@ free_fail: if (cpr && fd >=3D 0) { cpr_save_fd(name, TAP_FD_INDEX(i), fd); } + } else { + vnet_hdr =3D tap->has_vnet_hdr ? tap->vnet_hdr : 1; } if (fd =3D=3D -1) { ret =3D -1; diff --git a/stubs/cpr.c b/stubs/cpr.c new file mode 100644 index 0000000000..1a4dbbb2d7 --- /dev/null +++ b/stubs/cpr.c @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#include "qemu/osdep.h" +#include "migration/cpr.h" + +bool cpr_is_incoming(void) +{ + return false; +} diff --git a/stubs/meson.build b/stubs/meson.build index 2b5fd8a88a..19c1932bbf 100644 --- a/stubs/meson.build +++ b/stubs/meson.build @@ -10,6 +10,7 @@ stub_ss.add(files('is-daemonized.c')) stub_ss.add(files('monitor-core.c')) stub_ss.add(files('replay-mode.c')) stub_ss.add(files('trace-control.c')) +stub_ss.add(files('cpr.c')) =20 if have_block stub_ss.add(files('bdrv-next-monitor-owned.c')) --=20 2.34.1