From nobody Sat Nov 15 08:50:45 2025 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1752785095; cv=none; d=zohomail.com; s=zohoarc; b=cNrdJpzEdgEbZBkj+f8o7ri9nHjFA4WAM22YJ2E4zE9WBpJd1n2L59MCIgNbQfgWUZEuBKSTdrhVj2rQ+grNRSOEX5KlXSIFzKJ1P1W7PvsWYKMqb0/Hfvv+T804NkH050U0Hyn+MEEw56qYOkhGiIBTFt+KXU/yN9u2vSk0lOI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752785095; h=Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VgprnmZCr3q9J4H2t0odPHCzfj2X9xCle5ED7ksx70k=; b=U/f0Tx6u2rlXp29C/TSHDPdhIQO0gE7hvAJMJ5MUSNMIo6mNaujbrTH0X0dHbPPiGnC8PNU3asY6y0gzarwk5T2J6k2wDQxUuo9CrB9lPjNs20NLAAsh8mKlrenmMGyO2dEYkjO1m8Z51SQv4KSb22LsZEr5VVgnZyEHSbhDsv4= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1752785095618829.3072562845365; Thu, 17 Jul 2025 13:44:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ucVSi-0006uX-Ug; Thu, 17 Jul 2025 16:44:17 -0400 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 1ucTW6-0008Uz-O9 for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:39 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ucTW4-00008E-2F for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:38 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56HH0iXW018940; Thu, 17 Jul 2025 18:39:32 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47uhx83yb8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:31 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56HGxmrQ023785; Thu, 17 Jul 2025 18:39:30 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ue5d2t9d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:30 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56HIcoij007425; Thu, 17 Jul 2025 18:39:29 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 47ue5d2t8q-2; Thu, 17 Jul 2025 18:39:29 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :date:from:in-reply-to:message-id:references:subject:to; s= corp-2025-04-25; bh=VgprnmZCr3q9J4H2t0odPHCzfj2X9xCle5ED7ksx70k=; b= SGqZYH8sniDD4lCBYc+mJ62kZFHOelAQT9zWAkSNjxDuEl4Jb2YLL/cCaEZe6Qar fHxN+5tgDO+o5gaApVr7/6A9z1JkonO9NhC+iP3fyRkrp8Vn/z09sP9QQkQXf3b8 rJVH31fYRTVNWh8YhZxhIWvh6ZWsiHldRsXM/vhA84hayXRhL4WEyQuqVBSdEu0L 156A+DKAsVR5oEXjzu3muoJ9+WBrDA4tMnvYq8d9q1nAapjOX35LFJpq77zS/oc2 CEJfVyJTDIJX9Mi8iF2s/9iHZFT9yGP++aB/EVYCTh0AYyz1pjcRyLyx6ri+g0Fu S+hCNkRW3AHy9pkhjCtxPQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Jason Wang , "Michael S. Tsirkin" , Stefano Garzarella , Peter Xu , Fabiano Rosas , Hamza Khan , Steve Sistare Subject: [RFC V2 1/8] migration: stop vm earlier for cpr Date: Thu, 17 Jul 2025 11:39:21 -0700 Message-Id: <1752777568-236368-2-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> References: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-17_02,2025-07-17_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507170165 X-Authority-Analysis: v=2.4 cv=auKyCTZV c=1 sm=1 tr=0 ts=68794363 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=SpDTNw6YXiUZnQYNxJkA:9 X-Proofpoint-ORIG-GUID: lMa3iabYyk_bQGaBuyJLWQ8WtA237J8Y X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE3MDE2NSBTYWx0ZWRfX/JHB6pMdyKun dW/lEDJdCYpuVEj9WYvgj9ya9tDd9xOxkx7mCglNLSeJeR8RIRjVq98GGvsn375+q6gqX8+BHPV ibhM/YWbZ2ZkxEYl95q/79mMaBZIqvMpeIrIrXc3slhVoNl3tZtXVX8ZAGf3ci6j5ySqKv1DPfT s19MWsxmMS4kBXn/J1HdB4bjMJ4m6n5/8jpN1A6YO0wQ61Iabh/4jqt7LDDGO4+juqm+tv7vwkH HRsdyB+mALTSV5K+ZBat9/JRZ5JQXXKBQprMd+IlybUtDflKSo6sWI944G8EYiq193qgE7gSpSu SGY/BTShiYQpZ/jHU+nI03s6jFokF6IUxf/cG56oxHL0xzSBR9kdl0eb1etxh9c6mKRZ39qGsq5 L+1OUkmXtSZIRiub3/8RtvPb5TYlNok0bFC9+SU0I7tabPZL3QnCFlFemfTF6bkVYeQhHq0/ X-Proofpoint-GUID: lMa3iabYyk_bQGaBuyJLWQ8WtA237J8Y 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=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.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_MED=-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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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: 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 @oracle.com) X-ZM-MESSAGEID: 1752785097487124100 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 Reported-by: Ben Chaney Reported-by: Vladimir Sementsov-Ogievskiy Tested-by: Lei Yang --- migration/migration.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 10c216d..2efe60a 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1662,6 +1662,7 @@ void migration_cancel(void) MIGRATION_STATUS_CANCELLED); cpr_state_close(); migrate_hup_delete(s); + vm_resume(s->vm_old_state); } } =20 @@ -2196,6 +2197,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 @@ -2248,6 +2250,15 @@ void qmp_migrate(const char *uri, bool has_channels, return; } =20 + 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; } @@ -2274,6 +2285,9 @@ out: if (local_err) { migration_connect_set_error(s, local_err); error_propagate(errp, local_err); + if (stopped) { + vm_resume(s->vm_old_state); + } } } =20 @@ -2319,6 +2333,9 @@ static void qmp_migrate_finish(MigrationAddress *addr= , bool resume_requested, } migration_connect_set_error(s, local_err); error_propagate(errp, local_err); + if (migrate_mode_is_cpr(s)) { + vm_resume(s->vm_old_state); + } return; } } @@ -3961,7 +3978,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. @@ -4033,14 +4049,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 1.8.3.1 From nobody Sat Nov 15 08:50:45 2025 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1752785095; cv=none; d=zohomail.com; s=zohoarc; b=QZ7tdIy2YsOzfU4L2BqzwUeVzFOujwvkLR+UhbW/5psxoqrCW0uZjCkSHtzhhHRMjV+bCfEhm82hgcEccnVM9S1EuFURsLR49j6eKW1g2IQdqh62LYyaLBjvaEtFFp7jk3G/tTyolivxcA6FDMrR6WIVU9svbOrZKstimcQyseI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752785095; h=Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CPjLh5gQBfnwSKznR9Oac4ZSf2Y+9lmNJZ/lIKEoDXA=; b=Urp8NqC9ezS5ysv4QpUERssUIht4yfmO9W9vjtDonEWZipu/emh4yBE6SlBi6jnKbmLhpIXN0uAsglT1kNe9AJczulZGuEsuCJ8neW6nKk3pbnfOqz9xya4ykPXPmwt9bwSQsBXUnfbC44Ad2nqchMezJQFb4cPoyP1VuGpUpv0= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1752785095798843.0185673210717; Thu, 17 Jul 2025 13:44:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ucVSv-00073I-Nd; Thu, 17 Jul 2025 16:44:30 -0400 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 1ucTW6-0008Uy-Nz for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:39 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ucTW3-00008R-UN for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:37 -0400 Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56HH0j66010805; Thu, 17 Jul 2025 18:39:32 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47uhjfcad1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:31 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56HGsXuY023941; Thu, 17 Jul 2025 18:39:30 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ue5d2t9p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:30 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56HIcoil007425; Thu, 17 Jul 2025 18:39:30 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 47ue5d2t8q-3; Thu, 17 Jul 2025 18:39:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :date:from:in-reply-to:message-id:references:subject:to; s= corp-2025-04-25; bh=CPjLh5gQBfnwSKznR9Oac4ZSf2Y+9lmNJZ/lIKEoDXA=; b= PIZcTRxOg8HYBVMUJzHJ9Vp+BXQHn8wmG0R/bE2EsrY7BRoYN3g+3c9qVoVp1goX 5pNZub8iKl3bk9IEHskEYpmSlt1M0753nGUPnInlQOwEiTmT+1YDMy5+tnMs2PRq wZpV7jpkxJvDXmSgi0DApC/0j1QjfWkIV3QAjYCPCoS4/YXxjeSBns/FlkFRHInR NQC1WCxbUGOWQxh2rNU+rec6JEnlS/D4jZF1qYZ14hoygcx0BJOnpJB5C9vqh8Dx Olof6D/p/K9h1eLGEgMWY8jC6NtrQVUDDf6p0if801lBNOY9Ut4Ys1S87qud+zHY ONzWzIVkRwQukXkmNzs+Qw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Jason Wang , "Michael S. Tsirkin" , Stefano Garzarella , Peter Xu , Fabiano Rosas , Hamza Khan , Steve Sistare Subject: [RFC V2 2/8] migration: cpr setup notifier Date: Thu, 17 Jul 2025 11:39:22 -0700 Message-Id: <1752777568-236368-3-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> References: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-17_02,2025-07-17_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507170165 X-Proofpoint-GUID: P4GrYe6bmPEe7RQpPF5amFGTalN4MHsm X-Authority-Analysis: v=2.4 cv=O6g5vA9W c=1 sm=1 tr=0 ts=68794363 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=8YgkOPFe86U-wwtjNboA:9 X-Proofpoint-ORIG-GUID: P4GrYe6bmPEe7RQpPF5amFGTalN4MHsm X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE3MDE2NSBTYWx0ZWRfX+x/0f5gL7ahI HJW8UV3LmZS7qWB9DltXIoN4ZJDqgQiItt/zzKYqKNIhvuX4z7b/pntbGuFfA5+y+yCduiQ0ATo /SbaAWUNEJVj0FFPddThU3p0hw0zLeFJXKqxOhIPBZAXpN+bq0NMcILUcj2tSfc2uq8DD4twHQ4 NLu4Xz7E2QW4U2FBFkd61UV1xbs4maAwn8/O7yVXvTHsmOm7ggAIQy56cDjb/zy1t9RB+lzsocB kcwoSsg9bgz3CAquf+vNIO9kEgY9wMvBfUNzDFHZW3ZRaqBIS8N8zrVz0k36cyVQTTVvVR1HeNs oDZ4Dc6F+vGGelMas2wcoXpBHFDAo6y1XcLKs7wwDhuOXMSDBcJegwdQzNKG6xWdbm5+tRCmA3B 0V7fp1wkOV0KU08+rE68+THtqpsr7HzVqh5sCmvdX/qKBIbEf7izpr+09Mg9Hw9Ey1YwBTyG 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=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.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_MED=-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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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: 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 @oracle.com) X-ZM-MESSAGEID: 1752785097434124100 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 Reported-by: Ben Chaney Reported-by: Vladimir Sementsov-Ogievskiy Tested-by: Lei Yang --- migration/migration.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 2efe60a..49d1e7d 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2259,7 +2259,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 @@ -4010,11 +4017,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 1.8.3.1 From nobody Sat Nov 15 08:50:45 2025 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1752785320; cv=none; d=zohomail.com; s=zohoarc; b=f93zdAHtQQx6nfY1190TKnWbkbbP9YcuNoQSoiDczAsNA+WR+EPRhWfyR4PEk3XjnxBLSrOvbsLiYI5qKuYGFxvXE8gixShZFJNZoWUSfGh5Tuzew/WlQ06TmPPAEa0+oVIqEXr8UAhn37YqptHR+2NoJSz/iMmB5zpUlxDwImw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752785320; h=Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=g4cQG70O0Kg5s+vb7pr/SM4gt9CRW62U+GGQNlaa3Mw=; b=D5fFH3fC0hfvaaidMXAsDQvzAH1XWPSa1SsRWI9ClQCC1y2haJVJ5i7y4XYBRlv41fAGrqV/UFzGc1p4MpjSy2bnZsZ3TmJl8gITJJ4VhACH/XpPZJFnYxC8w5GSPt6dh1bvyZokRxt7cLIL3WvRQgqK5r/LY8Fnaeo3W9XxGjE= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175278532060676.07260628624454; Thu, 17 Jul 2025 13:48:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ucVWr-0004Uz-Fs; Thu, 17 Jul 2025 16:48:35 -0400 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 1ucTWC-00009O-Hf for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:44 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ucTW5-00008Q-BE for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:44 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56HH0i2q018938; Thu, 17 Jul 2025 18:39:32 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47uhx83yba-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:32 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56HHnugw023912; Thu, 17 Jul 2025 18:39:31 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ue5d2ta3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:31 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56HIcoin007425; Thu, 17 Jul 2025 18:39:30 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 47ue5d2t8q-4; Thu, 17 Jul 2025 18:39:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :date:from:in-reply-to:message-id:references:subject:to; s= corp-2025-04-25; bh=g4cQG70O0Kg5s+vb7pr/SM4gt9CRW62U+GGQNlaa3Mw=; b= ZPAy147zVqklHm+Sx08fABW1/ERmrBr8u4k5ajxdpjm6BFB5i7RpQ1TePrGdCjSy vWGKwIzaelxcrFSZLvPt2g/wzM/4p1Btw5PCdbnNOQz2h+uzzzWISy92dTZbI4Fz Je1Lmhp4rBc11CMPmadjbkHMD0kUEV9QaUjV1kqMAoCm8WDF+AmUvHla1lk2ja74 +1Nyja0zjXGejWZfbYhopin2tzHn477LzNKdamgtu+Q3n+zBxDCyjRrQm3enUgOy p+7vQ49UNxS33JrLhqo8k5ocbLjyeYNQc+RFkdlE1Ol7+XftTu2C+0OGNc16h7DQ TXnVxjwCI518wv0KIdam7A== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Jason Wang , "Michael S. Tsirkin" , Stefano Garzarella , Peter Xu , Fabiano Rosas , Hamza Khan , Steve Sistare Subject: [RFC V2 3/8] vhost: reset vhost devices for cpr Date: Thu, 17 Jul 2025 11:39:23 -0700 Message-Id: <1752777568-236368-4-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> References: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-17_02,2025-07-17_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507170165 X-Authority-Analysis: v=2.4 cv=auKyCTZV c=1 sm=1 tr=0 ts=68794364 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=XmC3YHyv0GhogxYF6KIA:9 X-Proofpoint-ORIG-GUID: NXD9eTJ9Zd8U_WCSz2X2NyUmdWBrlTnP X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE3MDE2NSBTYWx0ZWRfX1XRjisFGRtqG EAQeBOr9D6PjH2P/GDlm8t5hvywr51xHib8RrNrPvvs2xBufd9DhcUT95q5u0ofbLHq4uDmrSj5 KwWffKNel+PEdwZvH6sQEfPatECDYKen1G9O1J1CwFrdYaR0WUAcDnPCNPFnmmZbuZ9N9n8wjZi Pa+zjytqUNsD5BmM86UjOUeXjKHlbLROTQSBgfeGbAVzW4NBGp1voEiZaER7BSQMuIzY0feozjz 8cuXo4Y6ZWZQlhRcDUo88QM2jMmwf+mNxZt/BMzr33Ep5EE3CJsge40l8hN3k91zzTGtNKjizo7 xHKyZvplU8/kjSrRiT7G9K2kiJ472MkkwKhZYEcAtdR9BLM+9hC9AHcpNZvgbLw08pBxbbdOOtU uzkPYCd4wfx4lhzpq2LuB+XjjRIv+ncU7xsHTfeDtv7PHY7/R8HBtiRcB3GUpUSUdUZZF/Bo X-Proofpoint-GUID: NXD9eTJ9Zd8U_WCSz2X2NyUmdWBrlTnP 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=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.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_MED=-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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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: 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 @oracle.com) X-ZM-MESSAGEID: 1752785322308124100 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" When preserving a vhost fd using CPR, call VHOST_RESET_OWNER prior to CPR in old QEMU. Otherwise, new QEMU will fail when it calls VHOST_SET_OWNER during vhost_dev_init. Signed-off-by: Mark Kanda Signed-off-by: Steve Sistare Reported-by: Ben Chaney Reported-by: Vladimir Sementsov-Ogievskiy Tested-by: Lei Yang --- include/hw/virtio/vhost.h | 1 + hw/virtio/vhost.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 38800a7..88a4838 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -132,6 +132,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 diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index fc43853..a562e0c 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" @@ -1506,6 +1507,32 @@ static void vhost_virtqueue_cleanup(struct vhost_vir= tqueue *vq) } } =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_device(dev); + if (r < 0) { + VHOST_OPS_DEBUG(r, "vhost_reset_device 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) @@ -1516,6 +1543,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); @@ -1616,6 +1644,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 /* @@ -1672,6 +1703,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) { --=20 1.8.3.1 From nobody Sat Nov 15 08:50:45 2025 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1752785505; cv=none; d=zohomail.com; s=zohoarc; b=m7Zs5EnRYdtXFvd8JbV4bFjB7W3Tq2i7CBzVGOuq8Vq9WMsN9MnrWYR57pbd8h5NLJo4B+6nDyqCeMs+piD3mQwfbuuv2dgsh+uxLsfcPHJHJklqQMF4YKClVI9udGGr2JrCtzZmfJA4otAHAGrM6we3gChFf5mP5Ut3ukEsusE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752785505; h=Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Yv7L4OwqL9MTFjfSdoAcXNtPgLe1md+/tBkeCxeUoZc=; b=hnT3fh1O/zUZbAS1iFDRtBUmaBqs92VVd2bosW7dGpMEXH+u8UldqaPPgJ5umF0pkgY5LdZcSjBtLPq+flHzsR0Ni7jJ5ebMIL3R7FtvgUxj/KTv1mjMxkbQTN7fk5FoK/TB3BEkakkirznNYLrT+pCPC+O2oAOCfGYO89DAQxE= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1752785505073604.7519792799701; Thu, 17 Jul 2025 13:51:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ucVZo-0000k9-D2; Thu, 17 Jul 2025 16:51:36 -0400 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 1ucTW8-0008WI-LU for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:41 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ucTW4-00008i-Mf for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:40 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56HH0i2r018938; Thu, 17 Jul 2025 18:39:33 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47uhx83ybb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:32 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56HHgBow023735; Thu, 17 Jul 2025 18:39:31 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ue5d2tac-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:31 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56HIcoip007425; Thu, 17 Jul 2025 18:39:31 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 47ue5d2t8q-5; Thu, 17 Jul 2025 18:39:31 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :date:from:in-reply-to:message-id:references:subject:to; s= corp-2025-04-25; bh=Yv7L4OwqL9MTFjfSdoAcXNtPgLe1md+/tBkeCxeUoZc=; b= WphManCyyzgWaOFQ8kjQ2iFhH7bAFBWQEgca/00ePTgrRau6JYpNevDJeFA8/rSZ R/0KyYUaA0ymOxiyJ0hGYwF4jV5p763JmRCddhwT7COVVITM07AFD7HbufT+Agur fYOm3fn8FdWipAvkpSsOBuKevxkgCyQRG9lWpDEv8EhmXEl7hrAmbHiH3nAtZzgq vWW0LBRoBnBKbn1chaMkJDSB485QbdRazWdl07rxHIQ3vQDDpar4ibkMNtSlPm1W qvJX3zORGOpRpiG3I+c2wWxYHQUkkXoMEFbK6E73xwrB5vt//j7b2yJfuxrwJniX ZfHU2iSz6s5gENkSYnjpnw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Jason Wang , "Michael S. Tsirkin" , Stefano Garzarella , Peter Xu , Fabiano Rosas , Hamza Khan , Steve Sistare Subject: [RFC V2 4/8] cpr: delete all fds Date: Thu, 17 Jul 2025 11:39:24 -0700 Message-Id: <1752777568-236368-5-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> References: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-17_02,2025-07-17_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507170165 X-Authority-Analysis: v=2.4 cv=auKyCTZV c=1 sm=1 tr=0 ts=68794365 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=n655hgSsutws6UkWyQYA:9 X-Proofpoint-ORIG-GUID: t6huPCgt8nWRKANxwO7vM1ybTmNrAKU8 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE3MDE2NSBTYWx0ZWRfX1LlgxG23QrDr B2d09INMNXAWJVBfQAjc7cwsBg8q546pX0Hu5mtF2ECXmsF4zSGNoyfa4MTx2+vh47pRy1DX+vF mLQ/C6maaIS2Uu1ImbuMatyHCVjrZNOOAsttk1sBdW4Ptif+W0myQDQJg0UrQLN9zzj2qO9R44Z A5IgfBC8QBEuJIhbxMMM/U2T1SnsmXcB0ZjL8Gxi9s5XRv8wvcYzrGlTUrE3V+bJkHLBKLDVVWl cJot4JUw1RBO0wtX5lGxNdoqkL5WXCKvXrsUW6NwPYzYH4lm86Z1aU5RJybWa2FMbRtCWycnfCE rqTSJlIZW1EDyjrJWn7VqxgoxE+9HUjcjVpe7OanDIKdh/Hb0qSFIyxJFk3QYsxxKDz49r/yYeQ JbA3iVr5p9aF7jJo3aNyTIWdVuG+PI/4O2ydmakVbf0sDhDEu4VT/kImTx6Nn/LhhMTSTKWL X-Proofpoint-GUID: t6huPCgt8nWRKANxwO7vM1ybTmNrAKU8 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=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.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_MED=-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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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: 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 @oracle.com) X-ZM-MESSAGEID: 1752785506925124100 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add the cpr_delete_fd_all function to delete all fds associated with a device. Signed-off-by: Steve Sistare Reported-by: Ben Chaney Reported-by: Vladimir Sementsov-Ogievskiy Tested-by: Lei Yang --- 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 3fc19a7..0fa57dd 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 42ad0b0..e97be9d 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -83,6 +83,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 1.8.3.1 From nobody Sat Nov 15 08:50:45 2025 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1752785144; cv=none; d=zohomail.com; s=zohoarc; b=gfXPd2VJfpyfcDOERxbcJtVh13+0BXoy7Z5Vf21+DGBtfBiUEiyQwlCsulZBrGmmnXgyFmPhtyW5EwdY5hHm9W1n6BBjhjFGuPC9EMD3lYbfmKtjIFaFZpNURgqarUQr9Jvae1osxzeAS6jWlwNDj/JT9Nx9gkge5dyLTn0qoX8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752785144; h=Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lTkdRg+GBBI4tZWpYzx20rweRuoFZnawHnP0zLPVa+0=; b=Md7lHZ/XkLHhvgie4dC0qD8FsGjdyVG56Xy9foubVaLFG81AWZIc4ab3TpffBLH+RqUnkC+bezMTY60bXjGOO0l6PlvL43aPmmx+MiDu400NPc1aXLPwus6CzTdYbDiDpKcqZAorJUYFG8LmiBSKDBF/qkORPswXgYPkA+/l08U= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1752785144493411.8084751271924; Thu, 17 Jul 2025 13:45:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ucVSz-00079Q-LP; Thu, 17 Jul 2025 16:44:33 -0400 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 1ucTW7-0008Vv-Tc for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:40 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ucTW4-00008x-1d for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:39 -0400 Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56HH0hHE010736; Thu, 17 Jul 2025 18:39:33 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47uhjfcad3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:33 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56HHgYw7024121; Thu, 17 Jul 2025 18:39:32 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ue5d2tas-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:32 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56HIcoir007425; Thu, 17 Jul 2025 18:39:32 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 47ue5d2t8q-6; Thu, 17 Jul 2025 18:39:31 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :date:from:in-reply-to:message-id:references:subject:to; s= corp-2025-04-25; bh=lTkdRg+GBBI4tZWpYzx20rweRuoFZnawHnP0zLPVa+0=; b= jVQSOGR8wJAcIJkWePQcepeVapnskWx5GlE22efSOhQcOYQA1dDPI2pUdCsdv0gx 460BGpw5RA9ki65NHhQtmna9DPwqO+12x32j9th2A/KyUMxJQSjyy555eR1VVKxm +YxBmKp1xve4EwGS9QPlVEoQbJx8/xm2sp4160tQXilYiSIUOpJVKGax3owA2g5S wZUFWZH0nWJfWHcRjqLKKcleLDRym2jcxPyda3pSu7brkmi14kgizeuXazEsZ1bO yrsqZX1B+y0s/KKJ7hsVMZ9Sk5ki6OcJUENWtBrWocanZyVD4L/mS2eFYvyw+RFs Ua2rIu/qqXwR+c1HHU+3XQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Jason Wang , "Michael S. Tsirkin" , Stefano Garzarella , Peter Xu , Fabiano Rosas , Hamza Khan , Steve Sistare Subject: [RFC V2 5/8] Revert "vhost-backend: remove vhost_kernel_reset_device()" Date: Thu, 17 Jul 2025 11:39:25 -0700 Message-Id: <1752777568-236368-6-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> References: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-17_02,2025-07-17_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507170165 X-Proofpoint-GUID: Q22_tzSNJwxA8catDn0cpZMNphkkRCSV X-Authority-Analysis: v=2.4 cv=O6g5vA9W c=1 sm=1 tr=0 ts=68794365 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=hnmyno6qhCV68aGjqbUA:9 X-Proofpoint-ORIG-GUID: Q22_tzSNJwxA8catDn0cpZMNphkkRCSV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE3MDE2NSBTYWx0ZWRfX2qKT8oxIkUht oSRtLMAs3TzwmoXw3zk7+FgVY2Kx/88MVIT520uZZNDXLEGyY67JnLTqmHxLCSGh4in2747rk1c 1KyUw98wnfhO6ts5tWJAgTYVj8SojX/EuObtdM8k7HOx1GKS7BEHimCKRduCA7juvCyTaI5z/Kc ursdrW8s/yPDQBXs05R0zCgAprxh2nBty8prtyCEZ24bECmMPHBSclxzo6QifceqTmFxAFMTr0s xflKLJB0PI+kuHqBanb7diYx4j2V8d6TZhwlQ0uvnfwma9bAVxjlv9SLk8bQeW2v3iw8gYxFG6e hmL+OATbpKXhyAx7Acz7LAt5LSOOV4EDywLeSwcXenkpLSAADAJLkVlK6K1ymWR+g5hu7kfePfS erquqOPHqtcjGuhRPNooxuyPAOjNKae+Su4QcyRsQqk2oXhCeQcMmJ+0udendtDsFmwrnUHH 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=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.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_MED=-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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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: 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 @oracle.com) X-ZM-MESSAGEID: 1752785145598124100 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This reverts commit e6383293eb01928692047e617665a742cca87e23. The reset function is needed for CPR. Signed-off-by: Steve Sistare Reported-by: Ben Chaney Reported-by: Vladimir Sementsov-Ogievskiy Tested-by: Lei Yang --- hw/virtio/vhost-backend.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/virtio/vhost-backend.c b/hw/virtio/vhost-backend.c index 833804d..9b75141 100644 --- a/hw/virtio/vhost-backend.c +++ b/hw/virtio/vhost-backend.c @@ -221,6 +221,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_device(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); @@ -345,6 +350,7 @@ const VhostOps kernel_ops =3D { .vhost_get_features =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_device =3D vhost_kernel_reset_device, .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, --=20 1.8.3.1 From nobody Sat Nov 15 08:50:45 2025 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1752785573; cv=none; d=zohomail.com; s=zohoarc; b=f+I6Y87GyAcbWYM3P2fU5nwKofOBoTws9Lgd5oQcztfQfCBS1KBLttt40lK+iCjqvhHfsXsfmQw4ITZ8SMV3Jiu2K9jIdNLj6uLbWz7I3TqhcFPqyw1AS3PEdvzC02Vb9hZ/J+2ZA92fM8/cfd3HBRnPLxIV0yVUhJReQbmH5Ek= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752785573; h=Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eSNzcugpJDUELIC5DRj7TTBvV/Xir0IRT2uoMB+BwnI=; b=XJiUBZuXiIFlk3RupapGoVm2UIVffN6azKpASc/K4zX/1yeiDx0vZbjahPBa2tZ72dDMTBmeAO/d5ML8XwDvGq5fEX6uzIHdtn0RtAvl7aoT0y/AC7Ft5l9qjQ2bVpXDqthDVf8N+JI+2uwR92QrugR9jC2/K+Jt3BG9ND9VJGg= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1752785573191259.7465592733495; Thu, 17 Jul 2025 13:52:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ucVZq-0000oY-4W; Thu, 17 Jul 2025 16:51:38 -0400 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 1ucTWA-00006u-Im for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:42 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ucTW5-000098-7Z for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:42 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56HH0kGn019010; Thu, 17 Jul 2025 18:39:34 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47uhx83ybd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:34 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56HHZgwK023985; Thu, 17 Jul 2025 18:39:33 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ue5d2tay-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:33 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56HIcoit007425; Thu, 17 Jul 2025 18:39:32 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 47ue5d2t8q-7; Thu, 17 Jul 2025 18:39:32 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :date:from:in-reply-to:message-id:references:subject:to; s= corp-2025-04-25; bh=eSNzcugpJDUELIC5DRj7TTBvV/Xir0IRT2uoMB+BwnI=; b= RaEN3CgBQWMDib62Av8EbVIJl++i5vlhMJc7trRJ8F4fWLyxLSi3jyjmHB+J2ta3 VK20DYQavWoq1dd4hgy0TDsRdTk47ZEBtm0SW1/5sseLhAbCLd1fqbFIWaNhv1mF jtZZoxNGPzzf1cvRCqc+4aWarRTRmh3v+NfxDTsAIKkPL6ZDZ/puiQsJzwlD+8vP VpYf1hYA9Zky5zIhk5XOFcVE8bhN2EvXMsOlOHdnFAVBT3Mn+SueYQ9FOAciglOC J5p+eYorcNxUe7r04B7LYRzPFTq4kb+9CQ11AX2Wgf6Qc373dfyr1n5GiUTPYmpr 7963Xtn2lVa3F45wIiLKzg== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Jason Wang , "Michael S. Tsirkin" , Stefano Garzarella , Peter Xu , Fabiano Rosas , Hamza Khan , Steve Sistare Subject: [RFC V2 6/8] tap: common return label Date: Thu, 17 Jul 2025 11:39:26 -0700 Message-Id: <1752777568-236368-7-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> References: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-17_02,2025-07-17_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507170165 X-Authority-Analysis: v=2.4 cv=auKyCTZV c=1 sm=1 tr=0 ts=68794366 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=zPeY32rCmRbJBjnbAY4A:9 X-Proofpoint-ORIG-GUID: Zgn7E2gluDKCN_Rwgh-UxEcF0aTfhg5L X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE3MDE2NSBTYWx0ZWRfX3RldsngSgD9N 0JLhOJxXVI/PKGMDnjpvtDPswtyhSa7abvBkZ9rREN9paTgqheXuXQj6Gxb7hI2XsUVift4VxNl Xqw3D4q7oeqyBtAfUHefMKMqLJfczOJCElaBex5tBZhQtDa56Qli/DdH3jb9Zm33Ae1+1p3nfIa JA67EQiYW/9aZ/92XjKVcHfwtHZMiyE/Jw7suvKT8fVYpdC79sI+Scg24jY4aCd/jZhD4jRpDYO vY/FBFVKVZEkeq89mvLtJgvgg6rWNfmW4x12igOwzjEnxMIxhd5fX9zO79+q4SYSSDHkTo/arB+ Q4vneTM/xuCioDOPgT1MJ9DnccxU+yXdtzE3y2vf9H7PG+ugaaaQW1sYWKJkEoDOpZa4u+QHE8y lOIejllFErdsD1kW4CPv/X3oPAZDzy/vSx9YUghdwBTQQm/vdw1oN6pl2pdlzUXAQanzulTG X-Proofpoint-GUID: Zgn7E2gluDKCN_Rwgh-UxEcF0aTfhg5L 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=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.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_MED=-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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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: 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 @oracle.com) X-ZM-MESSAGEID: 1752785579375124100 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 Reported-by: Ben Chaney Reported-by: Vladimir Sementsov-Ogievskiy Tested-by: Lei Yang --- net/tap.c | 54 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/net/tap.c b/net/tap.c index 35552c4..1b239fd 100644 --- a/net/tap.c +++ b/net/tap.c @@ -780,7 +780,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) { @@ -790,25 +791,29 @@ 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 (!g_unix_set_fd_nonblocking(fd, true, NULL)) { error_setg_errno(errp, errno, "%s: Can't use file descriptor %= d", name, fd); 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, @@ -817,7 +822,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; @@ -830,7 +836,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); @@ -894,30 +901,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 (!g_unix_set_fd_nonblocking(fd, true, NULL)) { error_setg_errno(errp, errno, "Failed to set FD nonblocking"); - return -1; + 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, @@ -926,14 +938,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) { @@ -954,14 +968,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 @@ -972,12 +988,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 VHostNetState *tap_get_vhost_net(NetClientState *nc) --=20 1.8.3.1 From nobody Sat Nov 15 08:50:45 2025 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1752785111; cv=none; d=zohomail.com; s=zohoarc; b=a/n3vXSPl+n4vzCnVNhSteH/KIdkjTYco7fnaYa3/MJad1LSiTIsYUPpyVlEe454yY6X/qWUO5x43PSwH5cCpDtUPdKoU2XEf5H28ohflP7KYQv97J2N5qQsvUwCDKibwwOqspXh9GXi52GvFJ6iRdIUfaJt/43+ABxi+/NuVCQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752785111; h=Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jEMH++dDedb77qsgBrEOe/ieXuj7ISA+5MLtq4+Sies=; b=c7QnnVtIYwLTmBmH3wV3iUwXvx2adrumZrwDe57p1JGb9yPvEfuBGnzogD2iKGOHB46aolfOA72ZYtv808cX1jOolcgVFax8t0YFpliyLcpuTPnLE7J+R9ul91od7yDjxY9UAKwmbb4wN41K/8vNoLW+d5eKoCLTGh3WMQqp/II= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1752785111273136.63078165284526; Thu, 17 Jul 2025 13:45:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ucVT1-0007Bh-BG; Thu, 17 Jul 2025 16:44:35 -0400 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 1ucTW8-0008WF-Be for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:40 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ucTW4-00009G-5F for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:40 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56HH0iHs027536; Thu, 17 Jul 2025 18:39:35 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47uk1b3s4b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:34 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56HHNQRY023999; Thu, 17 Jul 2025 18:39:33 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ue5d2tba-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:33 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56HIcoiv007425; Thu, 17 Jul 2025 18:39:33 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 47ue5d2t8q-8; Thu, 17 Jul 2025 18:39:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :date:from:in-reply-to:message-id:references:subject:to; s= corp-2025-04-25; bh=jEMH++dDedb77qsgBrEOe/ieXuj7ISA+5MLtq4+Sies=; b= StY7DoXSnMdbB5velfWadQ1tsyYiP6uP9Ku16hgj9BPW5je3vvpWvTlhkD8SReKl wOYuePOOvWcyJ0X6zzGEl2Q82ZipEcpEZDL7EyR9cjymrWa2SLjslxy3M3k9s9fV hS0tNj5euUnRPKQh8BMVXCLvwgRtL4ubv1IUHZPfMcZ88SNQktkpUitwzooivTA3 iWyBzZirFdVXplwpU24AOSegT5xnut79ZHIBfj3xlVt85r2vtQdQHwfEeVqC6I5w wnJLhn2djuQNm6KjqtYI7ar8EOIa0/3c0lYyLwp85l94FFM/pUEXQOMC4jMC1lT8 l+CRDOSEPBwE9UZUgLH9Rg== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Jason Wang , "Michael S. Tsirkin" , Stefano Garzarella , Peter Xu , Fabiano Rosas , Hamza Khan , Steve Sistare Subject: [RFC V2 7/8] tap: cpr support Date: Thu, 17 Jul 2025 11:39:27 -0700 Message-Id: <1752777568-236368-8-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> References: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-17_02,2025-07-17_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507170165 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE3MDE2NSBTYWx0ZWRfX+xFLPmS9IJMl jDh6wl3jEYLbxz5n1NHPoe5nZcqo2QpT7qo4wnihhXvvNXxoNaLSoLOgybsZwkRsMeS1QVBvA+C 7d2QSKZcZNG2qYS4e8agrW/ohFdlE0kZMLNXCP0qx/9RAAC9E2Bas4CFdxY2BhXIi59p/FoNXgN Y2oHkuUgEiSZmSMJl0ITKY9u4e2WjixBNEcQHbP/Ybh6ZdCOmpBuZICy08zEHCogW60bmZLgpru O2685TuWq2eZCtMFKvVzsTgMK0s4KIcBcZL21uacVKLaHo9wq7zZxoOtGyq8Zmt9HCEwDAA2Y0O c/zEusUFH3ecpSyf/+o7eTMnqalBVO6GcHFnexygVhl+oN12eQYM9Pw+W+Yx6XanD0iCvGpnDyR 7ejSV61A3wergECiIIJK9/FyaGdLvxETu0+OtdF/kB1gq822HM/KUdEUyL3YoHdrOwfEU2a7 X-Proofpoint-GUID: JjMflIiwhoPO3hSA330PDfJC50M978U8 X-Proofpoint-ORIG-GUID: JjMflIiwhoPO3hSA330PDfJC50M978U8 X-Authority-Analysis: v=2.4 cv=J8mq7BnS c=1 sm=1 tr=0 ts=68794366 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=zKPUYSCetFGJfgUTIKcA:9 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=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.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_MED=-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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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: 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 @oracle.com) X-ZM-MESSAGEID: 1752785113850124100 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 canonical order, leveraging the index argument of cpr_save_fd. For the i'th queue, the tap device fd is saved at index 2*i, and the vhostfd (if any) at index 2*i+1. tap and vhost fd's are passed by name to the monitor when a NIC is hot plugged, but the name is not known to qemu after cpr. Allow the manager to pass -1 for the fd "name" in the new qemu args to indicate that QEMU should search for a saved value. Example: -netdev tap,id=3Dhostnet2,fds=3D-1:-1,vhostfds=3D-1:-1,cpr=3Don Signed-off-by: Steve Sistare Reported-by: Ben Chaney Reported-by: Vladimir Sementsov-Ogievskiy Tested-by: Lei Yang --- qapi/net.json | 5 +++- include/migration/cpr.h | 2 +- hw/vfio/device.c | 2 +- migration/cpr.c | 11 ++++---- net/tap.c | 70 ++++++++++++++++++++++++++++++++++++++-------= ---- 5 files changed, 67 insertions(+), 23 deletions(-) diff --git a/qapi/net.json b/qapi/net.json index 97ea183..5c7422b 100644 --- a/qapi/net.json +++ b/qapi/net.json @@ -238,6 +238,8 @@ # @poll-us: maximum number of microseconds that could be spent on busy # polling for tap (since 2.7) # +# @cpr: preserve fds and vhostfds during cpr-transfer. +# # Since: 1.2 ## { 'struct': 'NetdevTapOptions', @@ -256,7 +258,8 @@ '*vhostfds': 'str', '*vhostforce': 'bool', '*queues': 'uint32', - '*poll-us': 'uint32'} } + '*poll-us': 'uint32', + '*cpr': 'bool'} } =20 ## # @NetdevSocketOptions: diff --git a/include/migration/cpr.h b/include/migration/cpr.h index 0fa57dd..baff57f 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -45,7 +45,7 @@ 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, +int cpr_get_fd_param(const char *name, const char *fdname, int index, bool= cpr, Error **errp); =20 QEMUFile *cpr_transfer_output(MigrationChannel *channel, Error **errp); diff --git a/hw/vfio/device.c b/hw/vfio/device.c index 96cf214..9eb6699 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -351,7 +351,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 cpr_get_fd_param(vbasedev->dev->id, str, 0, true, err= p); } =20 static VFIODeviceIOOps vfio_device_io_ops_ioctl; diff --git a/migration/cpr.c b/migration/cpr.c index e97be9d..6d01b8c 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -282,6 +282,7 @@ bool cpr_incoming_needed(void *opaque) * @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: use cpr * @errp: returned error message * * If CPR is not being performed, then use @fdname to find the fd. @@ -291,22 +292,22 @@ 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) + bool cpr, Error **errp) { ERRP_GUARD(); int fd; =20 - if (cpr_is_incoming()) { + if (cpr && cpr_is_incoming()) { fd =3D cpr_find_fd(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(name, index, fd); } } return fd; diff --git a/net/tap.c b/net/tap.c index 1b239fd..6a12751 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" @@ -59,6 +60,7 @@ typedef struct TAPState { bool has_ufo; bool has_uso; bool enabled; + bool cpr; VHostNetState *vhost_net; unsigned host_vnet_hdr_len; Notifier exit; @@ -290,6 +292,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); @@ -642,18 +647,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) (2 * (queue) + 0) +#define TAP_VHOSTFD_INDEX(queue) (2 * (queue) + 1) + #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); @@ -688,7 +699,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 cpr_get_fd_param(name, vhostfdname, index, cpr, &e= rr); if (vhostfd =3D=3D -1) { error_propagate(errp, err); goto failed; @@ -699,7 +710,13 @@ static void net_init_tap_one(const NetdevTapOptions *t= ap, 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_errno(errp, errno, "tap: open vhost char device failed"); @@ -727,6 +744,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 @@ -759,7 +779,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; @@ -795,7 +816,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 cpr_get_fd_param(name, tap->fd, TAP_FD_INDEX(0), cpr, errp); if (fd =3D=3D -1) { ret =3D -1; goto out; @@ -818,13 +839,14 @@ 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), = &err); if (err) { error_propagate(errp, err); close(fd); ret =3D -1; goto out; } + } else if (tap->fds) { char **fds; char **vhost_fds; @@ -855,7 +877,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 cpr_get_fd_param(name, fds[i], TAP_FD_INDEX(i), cpr, er= rp); if (fd =3D=3D -1) { ret =3D -1; goto free_fail; @@ -884,7 +906,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), &err); if (err) { error_propagate(errp, err); ret =3D -1; @@ -912,9 +934,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; @@ -934,13 +962,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), &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; @@ -965,8 +994,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; @@ -984,7 +1019,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), + &err); if (err) { error_propagate(errp, err); close(fd); @@ -995,6 +1032,9 @@ free_fail: } =20 out: + if (ret && cpr) { + cpr_delete_fd_all(name); + } return ret; } =20 --=20 1.8.3.1 From nobody Sat Nov 15 08:50:45 2025 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1752785138; cv=none; d=zohomail.com; s=zohoarc; b=I/Rhz50edCD0ztLEw6kjwsErwKEpgxMQrrKNAYYK5Z6DBrJXM+YbZzsIh2Hxe1og56WDVdSy6hkBl5lgAIU78QMaClIFZVlRtpATTl9cnwB6J2LYDQmrvPuzkhxAPXa41Li+YtfGWGmVKg2CRLM7zOE+INz+Y/4Gr+g0SPMjeys= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752785138; h=Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ajpWdz5Bmpx9vi2dQrGhELIFN7Sz7KP+mHjix1dvIRM=; b=gN9ptMnTsbnu+S3FQm1hsfcr3MW+KkQl2X03WaRaP4Pr8C8BuER261gzbaRPG38pEUJI9nWjvDVnxzxQ409v6+X7RvT/enowW1RP6BwCxPhnVCQ+nF0xLh7Jj+JOlW0x1zGFMaKlQh7XhLwI+4ATG0Rcqi0BYUkWLJvb9PeQnx4= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1752785138761561.3190672742646; Thu, 17 Jul 2025 13:45:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ucVSy-00077c-At; Thu, 17 Jul 2025 16:44:32 -0400 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 1ucTW7-0008Vw-VB for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:40 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ucTW4-00009N-RO for qemu-devel@nongnu.org; Thu, 17 Jul 2025 14:39:39 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56HH0i1e027515; Thu, 17 Jul 2025 18:39:35 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47uk1b3s4e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:35 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56HHVq5L024538; Thu, 17 Jul 2025 18:39:34 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ue5d2tbm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Jul 2025 18:39:34 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56HIcoix007425; Thu, 17 Jul 2025 18:39:33 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 47ue5d2t8q-9; Thu, 17 Jul 2025 18:39:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :date:from:in-reply-to:message-id:references:subject:to; s= corp-2025-04-25; bh=ajpWdz5Bmpx9vi2dQrGhELIFN7Sz7KP+mHjix1dvIRM=; b= KeO7OyGca/Pi3e68bfrkDLFXaayViawjl0tluXyxAlVCdJzn7/Ev6BiJTPpj8+iv ywoTZvwmM64MQLFWlnahGTnunmyoS4BNICIwEiSppfOCn3jw3Ke1hAkaXn3Nyb07 GKxEYe6R3xaTjMXpIZm/C1L3ezSQVpDA1Qe/QmgNOQG3rhmuAp8vijaHdw6Nzv++ xCCoY8N5XlKm03i7tHyIDgGSEdhERtb7T8kD1QXQYhejD4WE9xRvcq1f2tRZ0v++ f701JdhHYj2XS1eGXNBJ1DAyaxEp0onU+gV1Zgk9jE5kispXU60HMHjIhCj8k7Vd rF+Pqj+lYPORL8HSPg9j3Q== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Jason Wang , "Michael S. Tsirkin" , Stefano Garzarella , Peter Xu , Fabiano Rosas , Hamza Khan , Steve Sistare Subject: [RFC V2 8/8] tap: postload fix for cpr Date: Thu, 17 Jul 2025 11:39:28 -0700 Message-Id: <1752777568-236368-9-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> References: <1752777568-236368-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-17_02,2025-07-17_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507170165 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE3MDE2NSBTYWx0ZWRfX8yw7Qvt04cTg w0NRc1ZQ1aewDLz6o9Za3EIer+LYPX3MsWwFPlppMW8LslOOKSAZO8Ssrz3CzZOAaGyYYRIQl0d alMcT5d3AwkrzmYz3n/To33U8woOvE9MVHaoH3ZtvNUCnUxb+7HBMW2qF9zBAtg60VQJrDJgLcP Q8p8mU8soTZrDfyDjdWbZGmmd1XtLy6KiFeAH6Xg9BXInx+7Bpv7Tu1B2yJew5uVW/uRmpnAcXv x4sMgqCETlSDWs+4tmbb3MUfJF3WPAZTdTHkmxgqnEUc1PIEWR3WVu/hZDzOYaEg+6r3SMsAGyC CiAJX+RI5OI+oeGQUIM+yUc7gDXKnUd+QQisoARynng2YXDJ+r7Gxa7Uv1QChBy6uedDxQqsd/s uGaBUlKMAz1fEcNlT/EVDDdOQCP3/yJElCxEbIylZuUtsCFg1cwreVHJk3OBrMRIh37kynMK X-Proofpoint-GUID: R1-d_nKOJJzgfFpRDfkSB2ofKPXPCWUf X-Proofpoint-ORIG-GUID: R1-d_nKOJJzgfFpRDfkSB2ofKPXPCWUf X-Authority-Analysis: v=2.4 cv=J8mq7BnS c=1 sm=1 tr=0 ts=68794367 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=h1OFwVCXqnWUJWdIchYA:9 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=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.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_MED=-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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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: 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 @oracle.com) X-ZM-MESSAGEID: 1752785139554124100 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 Reported-by: Ben Chaney Reported-by: Vladimir Sementsov-Ogievskiy Tested-by: Lei Yang --- include/net/tap.h | 1 + hw/net/virtio-net.c | 20 ++++++++++++++++++++ net/tap-win32.c | 5 +++++ net/tap.c | 17 +++++++++++++++++ 4 files changed, 43 insertions(+) diff --git a/include/net/tap.h b/include/net/tap.h index 5d58551..9456abe 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/hw/net/virtio-net.c b/hw/net/virtio-net.c index eb93607..b45128e 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -730,6 +730,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; @@ -3106,6 +3125,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/net/tap-win32.c b/net/tap-win32.c index 671dee9..66be7c9 100644 --- a/net/tap-win32.c +++ b/net/tap-win32.c @@ -771,3 +771,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 6a12751..c7f9023 100644 --- a/net/tap.c +++ b/net/tap.c @@ -1079,3 +1079,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 1.8.3.1