From nobody Mon Feb 2 07:32:15 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass(p=none dis=none) header.from=nutanix.com ARC-Seal: i=2; a=rsa-sha256; t=1768388134; cv=pass; d=zohomail.com; s=zohoarc; b=KjThfCw3rYS5GSRuKVBhefbcmsG4pItU6lONomJ1PVe3FNX6X+k2BoBGQudQJW9ypoOC/7HSMx81w089yhr9b8+c1zoZvhjTQnpaKyiOCy0LmQjS0gbiCmXnkB5Cxv5rvN8EIiyqmxabuYR/ndijgFLot+eHNiR9Y4fAuCl3Qz8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768388134; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=/YZr/7ZqiXzugDZohjv2eH8Ggmrew0im9tct6uix0NA=; b=AczztzOCWHuoUC6t8wxKE+1hdAq5ekAQ4TBydNCN1nmZ8aVNfKVvf9Zghq5zWWxf20PazwBHKkONwXW6VsjRpQlVkcPWE8NMQWzfMQ8TTaK83PKOLMYKq9uPS8PNnpohq2nm4gPJE1+tlHauq3Hig7Kn4j37Q7xyEvcuat/zHGw= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1768388134600561.281767679099; Wed, 14 Jan 2026 02:55:34 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 91A484195D; Wed, 14 Jan 2026 05:55:33 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id E1D4D418C3; Wed, 14 Jan 2026 05:54:24 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id A55EC418B9; Wed, 14 Jan 2026 05:54:15 -0500 (EST) Received: from mx0a-002c1b01.pphosted.com (mx0a-002c1b01.pphosted.com [148.163.151.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id BD3A84189D for ; Wed, 14 Jan 2026 05:54:13 -0500 (EST) Received: from pps.filterd (m0127839.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 60E4X9uQ3974439 for ; Wed, 14 Jan 2026 02:42:28 -0800 Received: from bl0pr03cu003.outbound.protection.outlook.com (mail-eastusazon11022143.outbound.protection.outlook.com [52.101.53.143]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4bnthd2g2c-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for ; Wed, 14 Jan 2026 02:42:28 -0800 (PST) Received: from MW6PR02MB9817.namprd02.prod.outlook.com (2603:10b6:303:23b::15) by SA3PR02MB10162.namprd02.prod.outlook.com (2603:10b6:806:396::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Wed, 14 Jan 2026 10:42:26 +0000 Received: from MW6PR02MB9817.namprd02.prod.outlook.com ([fe80::86e5:3449:a3f7:ee4c]) by MW6PR02MB9817.namprd02.prod.outlook.com ([fe80::86e5:3449:a3f7:ee4c%5]) with mapi id 15.20.9499.005; Wed, 14 Jan 2026 10:42:26 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 X-Greylist: delayed 711 seconds by postgrey-1.37 at lists.libvirt.org; Wed, 14 Jan 2026 05:54:13 EST DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=/YZr/7ZqiXzugDZohjv2eH8Ggmrew0im9tct6uix0 NA=; b=x2EQuhFnnRNE7nzrndGp/V+taDvznI1zPl+zw8FvyMvuaAKzjWb3u4Wip exEip4xhnC83c5sQLXw1d+YkLv1lFm1HcI/zbBlAUwZrGT30WG7aDxI+9OG2BGFc rjmRy4+ek2Hd8M7sTTd31i/316v6F0YNJZOesHYKfVD5n6N2rGIFQ2YzfhY6kt8z ICb2WB47lwfNLOvXSvOzvJ6EpXgoQyQ3UXxRaVbbEyNzh2G9E4MvN2FsDY+MjwTO z/9MVFwQAEe1CvCTvKMs4k14gB/TEfuVieE050TpDBa9IF5sGPXp33dSbE+FN8ys CVk3U6uqQMiIwbxVU0/wd4PqRFoqw== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TLbd5XK78lhMWnUbwOQsVr0AeJtCRliOG7vOhykemqgzLO6fKi9ZUmAkikR7dfh+JzriRCdjldDyn8CzsvjgdGB+V+UmP0/+cvSkSIESTMrdlLAUd0ZM24jpTZicf3QV3vzSTEGjrdixPVo6hwEDad4SFkKsdyTXZfhGPu+Kv9IqE4vckrzVLRY3QaWknCNlOkNYZChZmhRv+ahV4jrue03lzm/8EGxMr9GAO7SltOLvZpBkn8W1GH+M4mOT2p+Vzjn093I43PaHDcK1slUdbFvhKgqdkHywjgv/xhdf9slQ8UhqJt1w5Z3m7VmoF+COY5bmVTsij2Z4eidZWeKiVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/YZr/7ZqiXzugDZohjv2eH8Ggmrew0im9tct6uix0NA=; b=lLLKbqkbybjFp39qkooOCqUxsdEW3dEwAgnyyzs/Y5Gb3Z45GGrqOUNQ6VFUYKIxZZJRdopm3q79IFaK0/aLc8amgXMUn+qrUsdh+1HWqE4P6lVY9WObF9iXL3aWhREd10OuM3na8KyqJXRP5yKeZGOkVkeHIzH38dlOyTP2tvgjabX2RlBG1Z/wKTFjz8U+8idCtSmtUadxG9nZwVmdwwUYFK34u3imWKKBRIVx0KGir+JCsBLuWK0ImNIcOsT6VlMEQDQA4Wd8qk9Q+9cog/jAMhN/PiwqIuzppbQa6SWxqvYYysIadSj2FLaK3pJf1cwKdyIW03hSUvyu5fgLxw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/YZr/7ZqiXzugDZohjv2eH8Ggmrew0im9tct6uix0NA=; b=iATv34Vzaa4g73r6O8zU9h2EJXcZ1S6f6EmPjqDHKa8pf/o65ucuAqAJ0XLpraGXFB+zb/c11LjOT43b+WIWgItjYBjLKtTJsq5tjiujqqnPoE14bfvJOVivoaWIhOhm5aOqwyMq2dbSdHF4bsl8g6N2qAUHHpZXk9zFae7K3BLzhtqj8TPNW1CnqJ1T8iAg1D2t32XWW/n79d2GzfH2exfo/MzvSzeo9yUw8IECYoZfCVqxGSVHs/1OD8LZ+46urlNhpvEImjZwdH51DfoJXci0d0nMhPE9c+xPtVIWxmOSiSFrKcYOMeL5cE19FgEBeSu8m/eSnvgLmKWNb28Skg== From: Tejus GK To: devel@lists.libvirt.org Subject: [PATCH v1 4/4] qemu: add support for fd based live migrations Date: Wed, 14 Jan 2026 10:42:04 +0000 Message-ID: <20260114104204.4071940-5-tejus.gk@nutanix.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260114104204.4071940-1-tejus.gk@nutanix.com> References: <20260114104204.4071940-1-tejus.gk@nutanix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P220CA0047.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:32b::6) To MW6PR02MB9817.namprd02.prod.outlook.com (2603:10b6:303:23b::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MW6PR02MB9817:EE_|SA3PR02MB10162:EE_ X-MS-Office365-Filtering-Correlation-Id: 5ef76e82-dc15-4c85-a40e-08de53599ba1 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?9dP5/+xGA4z98EpNUPQMYOOe1oWdCFM6AiFbAmThi7aFp8BviqAmCM6DYViY?= =?us-ascii?Q?uL56RwclAUc5hYoi2qUICfK9fAJlfPtCiuii0Wj4gv1HTAV6VsOjD0hayPT4?= =?us-ascii?Q?Mq9Wpkp5mgJhXEJzM4ukmqBF/ISfQqM/A6jcislyGPF4QoMdB9NsG32XxCY9?= =?us-ascii?Q?fLE5YIhmSZAEf9ynpjaAW46jZU/whNwbw5C7tC1vACLBt+ovbpWMCFt85dmd?= =?us-ascii?Q?iEgsTYckfzGeZN3zjBBwnvzKJZX1R3OuzOF22/LuM05xNh7lgm4H/zmLJHyc?= =?us-ascii?Q?+TqEv/QvVODp9JstFv358q6jl5QS8vDcgaiC26Uu32lSFSgWpEgALNbprZbG?= =?us-ascii?Q?LrJjJOocv2FRqZ8bVqna5Anhjar7Zm7jJgEVwatcPxoKuaEJZzY/o79y/7ek?= =?us-ascii?Q?5HR/vRbPqJoIEEAVfo6JgwS7Y1O0qwJTxqYxqCWSOb+GM776KG7PJ+b4jyY4?= =?us-ascii?Q?iM2/U8pjRAMbsRU/1bbeq3K++StRaUEnVeOeFewC9h/rJUOw2jJTMib4tQu5?= =?us-ascii?Q?IrM/0PpaviTze3D80njpGrgTwl05CLbPVjWVZtFQUlcOsCnmOhBDw8a4tGZi?= =?us-ascii?Q?qmxUFBNk3qI1bpc1qIU9HRio2bkpgXwwmvHR/yx6zt2NkD53e6RKD1lJ/Cb/?= =?us-ascii?Q?QRXCnHsZwOVI92ke7/rYhB1mn28UGvTKs3n034pbt7EgB3OdSOPzoa3Bllrk?= =?us-ascii?Q?OEGgdfHzeYwvCZU2geY1gsBKSprelfGriDnw9kUOkscM8tvdzAKX5SscjvR0?= =?us-ascii?Q?kEnjAiG74dJTcZIAq6QR+MfThSuceDpoIQs7wiQTCJK8w49BWlVCtqRQzNRh?= =?us-ascii?Q?bP9k/uZXwLEEKjfms9u1JMyUo9ZSs+bgl/cRI8sjQqtGtV77UwLfltihDMvG?= =?us-ascii?Q?SyroR7rtUaIag/0ajlTTlTYDTQQI/V1xEFJ9VGcHcUzypccoAvn3ICwMpC1N?= =?us-ascii?Q?6CG+r5DCqOpFNgO3WnbMjaEek4K/niQ6uXXrgqwkmgtcnE5BASMGOrJts7x0?= =?us-ascii?Q?0Da+OlV9uMD556yupvL5VaZzV7YJYMGpUWDq/OQl/IbSbyWnRX4iGiHU4I3/?= =?us-ascii?Q?N7KFMYGbz+kHA9Y2ZIHvTD1Ic3050oh7O9EDPluGk6WW5+nj8LEXKCjgE2+Q?= =?us-ascii?Q?OjDbsE+9iFQSin2U4WKbsfR8qMZpwvmMxh3CghKikK1OupO4fSSyU8az9Ld6?= =?us-ascii?Q?A+Cg7WCQgTG/dHkRrV2Q98J1DpmnJ9wXmHwi1a9amiLhuU12QA2wAVzFa2vR?= =?us-ascii?Q?S0hluHcC6f9ShpyFxDtzTxYcafShMaVO/F+zMLi5qrzIgCAyYG2e7Ci/DrsD?= =?us-ascii?Q?i4jQOI2kHee7zAsrHGC5erYtha+Wh5Fni9pJDjYwjAD/pRS/PGGIUQsgnBHw?= =?us-ascii?Q?iS0rpIS8hp33c4kx7+qJWthuc7dXNt5D02iL/EDuYwrxRSB22OvWRpdQQZYR?= =?us-ascii?Q?hp9jKRD2heCR9pbyIvGMOq6gxON0m2HhJpVfNFB2/IwOCWtcWedeVPoGKBFO?= =?us-ascii?Q?PrJCiRfybFkzf2yjREGOZ0gEj8XlYgMO8wM1fNdIgMqDHX0+fmgbwdqoE4Ut?= =?us-ascii?Q?V4OSRBjFs9nrSPtXQP4aA3F6PD4iOZBRuHhtDlVjh+ISwrj+t8fH7LQmYkit?= =?us-ascii?Q?/PGt1xKcJbiiXtfRr7mILek=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW6PR02MB9817.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?c5I4Ygm820bUjznEfHArh8oGx3nT4ghO4kPsa2FMupSHpgrIy8C9GZeK1NWi?= =?us-ascii?Q?dxcDetMZzr895/dgSjU6Vl6GOF6KYP/5V3JBEEygaZx0SKLzR3XkiYwsNadP?= =?us-ascii?Q?n+iZLf6sCCFQGuXvJyk0bphDPxHAItw8X3GgvXJNKMwi/CwcYKEU8TvzJMqh?= =?us-ascii?Q?IOClpIpFY13FKjiKy4JgLIIxPtAZVjbVImIwrs9Q/8iNYj5VWy7BB3j+iCHx?= =?us-ascii?Q?ZaqYSM5nykLdXZ491C27LLyn9gjj3z5GPFpaajj+hhr+2he9oiluR/epJ1pE?= =?us-ascii?Q?pFipHJdh9fMAVS8w+fX3G+jHXP1Yi8QTxBIOfnrDYyUwlkm1FpTrDr6kDDCE?= =?us-ascii?Q?h+9uwbhz0N4hwTaXw0k5WHN8D6pn3CwTkvv/pRtUEO2FZ91pUtfKs+IdEP4d?= =?us-ascii?Q?x26DUoKIi1SxGosR5jqvjJp6okeMwV3nWXKv9toeqRuzq5TIyaiECXEZCCYL?= =?us-ascii?Q?g7Ed/76FnRNCdKVZqRFHUyUoWzuowf0zVmbLZ5JylXExl9bG1cSrNqVxogys?= =?us-ascii?Q?IwyJX5vWNbf14FnIc6tQl9psQ64u1bTu4sUXZawktoUVyLeVr167qAW8mgkR?= =?us-ascii?Q?OBEB8zigoUnEJ90MZVk19wfNdRqR20pGrI0ePw+SNHP2jjbAqX6lwYdwGg43?= =?us-ascii?Q?ya7lYYW+PJCu09pi1dDfH5wLHKlCo3lPFlZG4JVuuclQCcss0XzVy/lnvDHX?= =?us-ascii?Q?ayggz+7kpX7CvjzumVEq8jTfaVXPWZg/A1Lu+voA7tpiq52+DB1etn2FN1Tr?= =?us-ascii?Q?CWzoeYtZzP/v3w7sEHAanaIizDNFkn2EPUo8mAR094EFBUGaS3qf0LxcwcKC?= =?us-ascii?Q?72ZMbUcpsbDDK4D+6dRZgDdxsisof0MIvwFtR0HeYEXiUVihhrcCJjeuSX3T?= =?us-ascii?Q?ZUAMDaK+XBFeRSZClwiaTNxcSaJvoE/d3Zl4jmahpTuTKtFZeRBM322nCC5l?= =?us-ascii?Q?x83WY/W6SMqDIxBVAAzFl3cnut+hq6nxheQyiAqqvjTDisLx+cnT7GusNR8F?= =?us-ascii?Q?qAVEcP9Ckv8BjkxVAYxtLuLrtlig82SIgAdNCDH3C6D6/+F9TMH06WuZInZo?= =?us-ascii?Q?RBntVawI29UM9uadzqzolQeaqjhiHmR3V0xdKj8ehinzIARTma66GIb+URws?= =?us-ascii?Q?h7yoiSgNR34737rgRyKX2XNOh5UxL3RtzNd4oE5f2inLVyp3AfUy+jJPx8hY?= =?us-ascii?Q?OG7HLhWiobFfXLGVNM0Cfr/0tu5yI3erCA/Y02p9ZSX/z9FFpxPpbFCPpax6?= =?us-ascii?Q?y1jLb7soMWpbx7v+9wy5TOWHEu0a4ypQzmGtja5An7Akp8s+tkTZOhFnaWVE?= =?us-ascii?Q?o0VlLuufL7OO36EP7QELNaF67F+NUNUd77CI7QRKVXpItt4qa/MoQP+lK52K?= =?us-ascii?Q?uKnM9LXs7mPI8+jn9jHcG4YyBOCPZvYebNRBHfjOFNA79R4ihhv7ACpZ7RVO?= =?us-ascii?Q?kmjNGQ4TColekDbzVlI/uhurOZpQLz1k0zePOpmU/LQ30Ja0XcesDVzX452z?= =?us-ascii?Q?j0QML5rWoT7TZnS09OhyyFFlRwHEKuCszLTgfkF3u37RlCGV811adn4i73Sw?= =?us-ascii?Q?IbmOs+8thAdRNe89gskw44nDmw84nr+POZR7SkenWOrTU/aj4nDjExT06Cl9?= =?us-ascii?Q?r8eGm0G7VMctNmpp5RXbn3H2Ib4TNDb9+iKSulCgQo+L1hWDwG8UGDZljEl7?= =?us-ascii?Q?cDRq7KXWE+VWD2TVPlulfX6oPSztYF7NV9NUJbzED2o0WpSbsisesztmlwQ7?= =?us-ascii?Q?DN9BAlyeAw=3D=3D?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5ef76e82-dc15-4c85-a40e-08de53599ba1 X-MS-Exchange-CrossTenant-AuthSource: MW6PR02MB9817.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2026 10:42:26.2455 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KrgIi6re1E7IAIJsgCgA3MGQrOkWs7MR7GP569PVU49kPBo9F3IgACEYplJaC6aSoNkPLF8RpKOy/3HPqF2KNg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR02MB10162 X-Proofpoint-ORIG-GUID: oX8OxbRpvRUgiXiCI8pjxEZwkOybvEhQ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDA4NyBTYWx0ZWRfX4yEBPtfMYiDe 8FJVsTAYPv+lnk21K8i7vumud8UKWUWTebq/yxtNO55TpRiFGbp42qu7utAvghAtm+K/nzSXUjx wzXlY3Fr+yESgJQ/0eny57O4SE/mPRXvps5elc/0tf1YYq4ZRzkpEYTd0Q214wGoD1Y8lcVU8Oc mrBT7TDn/nBJJ4HMMvzZyFFDcsRrBopvfqCRfp8k3HY9AkdPiyjEDJ4bROSji4hAFGLmpPkFZx8 Hq7Qj+bD7sCcH7fsk1sbG0u5QhTpKc7OmhzX27o6Lusq38yQGcqsgkV9DHGj+VhsYpwlvBwq1i/ /yrRsQl0ZlNWYcZWgCfW9z4KBOj65D1PkxWjP83H2KnHJuOyelevpq3/jdkZq3ypE33eve1CXyZ JZ8XAvq+EXAV07TSiJMfr9TASuC3OIE1fWmmbwxAh+iQr9UjemhMYwKKxDPWjNvl3KgiRsjJ3PZ iNKOweYoDT8saVvraJw== X-Authority-Analysis: v=2.4 cv=L/wQguT8 c=1 sm=1 tr=0 ts=69677314 cx=c_pps a=taCrSF+MhsyXuYDq+ZG44w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=vUbySO9Y5rIA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=64Cc0HZtAAAA:8 a=C-Ig0W4o5CX7Ube1sJMA:9 X-Proofpoint-GUID: oX8OxbRpvRUgiXiCI8pjxEZwkOybvEhQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_03,2026-01-09_02,2025-10-01_01 X-Proofpoint-Spam-Reason: safe Message-ID-Hash: 2XAQVCV5D4BK3HFEHEQA6MBTFGPVUGPX X-Message-ID-Hash: 2XAQVCV5D4BK3HFEHEQA6MBTFGPVUGPX X-MailFrom: tejus.gk@nutanix.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Tejus GK X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @nutanix.com) X-ZM-MESSAGEID: 1768388136588158500 Content-Type: text/plain; charset="utf-8" QEMU already supports migration using a file descriptor that is passed to QEMU. As of now, libvirt, uses this path via the tunnelled migration approach, where libvirt creates a set of fds from a pipe, passes those fds to QEMU, and migrates the VM. This patch introduces supports for fd based live migrations in libvirt, where the fds are opened and given to libvirt by the client. Clients are expected to pass the FDs on both source and destination libvirt, via the virDomainFDStore API, with the "fd" key being the domain UUID. If the URI of the migration has been set to "fd", libvirt will try to look for an FD passed to it via the client meant for migrating the VM, and will pass on that FD to QEMU and trigger the migration. Signed-off-by: Tejus GK --- src/qemu/qemu_migration.c | 114 +++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 0cd417c15d..66e1236e6c 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -38,6 +38,7 @@ #include "qemu_security.h" #include "qemu_slirp.h" #include "qemu_block.h" +#include "qemu_fd.h" #include "qemu_tpm.h" #include "qemu_vhost_user.h" =20 @@ -3137,6 +3138,8 @@ qemuMigrationDstPrepare(virQEMUDriver *driver, =20 if (tunnel) { migrateFrom =3D g_strdup("stdio"); + } else if (g_strcmp0(protocol, "fd") =3D=3D 0) { + migrateFrom =3D g_strdup("fd"); } else if (g_strcmp0(protocol, "unix") =3D=3D 0) { migrateFrom =3D g_strdup_printf("%s:%s", protocol, listenAddress); } else { @@ -3301,6 +3304,8 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, unsigned int startFlags; bool relabel =3D false; bool tunnel =3D !!st; + bool useDestFD =3D STREQ_NULLABLE(protocol, "fd"); + int destfd =3D -1; int ret =3D -1; int rv; =20 @@ -3319,6 +3324,37 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, virPipe(dataFD) < 0) goto error; =20 + if (useDestFD) { + qemuFDTuple *fdtuple =3D NULL; + const char *fdName =3D vm->def->uuid; + + VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) { + fdtuple =3D g_hash_table_lookup(driver->domainFDs, fdName); + if (!fdtuple) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("no file descriptor stored for migration = of domain '%1$s'"), + fdName); + goto error; + } + + if (fdtuple->nfds !=3D 1) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("expected a single file descriptor for mi= gration of domain '%1$s'"), + fdName); + goto error; + } + + if ((destfd =3D dup(fdtuple->fds[0])) < 0) { + virReportSystemError(errno, + _("failed to duplicate migration FD f= or domain '%1$s'"), + fdName); + goto error; + } + + g_hash_table_remove(driver->domainFDs, fdName); + } + } + startFlags =3D VIR_QEMU_PROCESS_START_AUTODESTROY; =20 if (qemuProcessInit(driver, vm, mig->cpu, VIR_ASYNC_JOB_MIGRATION_IN, @@ -3328,7 +3364,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, =20 if (!(incoming =3D qemuMigrationDstPrepare(driver, vm, tunnel, protoco= l, listenAddress, port, - &dataFD[0]))) + useDestFD ? destfd : dataFD[0= ]))) goto error; =20 qemuMigrationDstPrepareDiskSeclabels(vm, migrate_disks, flags); @@ -3437,6 +3473,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, =20 cleanup: qemuProcessIncomingDefFree(incoming); + VIR_FORCE_CLOSE(destfd); VIR_FORCE_CLOSE(dataFD[0]); VIR_FORCE_CLOSE(dataFD[1]); virObjectEventStateQueue(driver->domainEventState, event); @@ -3974,7 +4011,8 @@ qemuMigrationDstPrepareDirect(virQEMUDriver *driver, =20 if (STRNEQ(uri->scheme, "tcp") && STRNEQ(uri->scheme, "rdma") && - STRNEQ(uri->scheme, "unix")) { + STRNEQ(uri->scheme, "unix") && + STRNEQ(uri->scheme, "fd")) { virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, _("unsupported scheme %1$s in migration URI %2$= s"), uri->scheme, uri_in); @@ -3984,6 +4022,9 @@ qemuMigrationDstPrepareDirect(virQEMUDriver *driver, if (STREQ(uri->scheme, "unix")) { autoPort =3D false; listenAddress =3D uri->path; + } else if (STREQ(uri->scheme, "fd")) { + autoPort =3D false; + listenAddress =3D NULL; } else { if (uri->server =3D=3D NULL) { virReportError(VIR_ERR_INVALID_ARG, @@ -5411,6 +5452,75 @@ qemuMigrationSrcPerformNative(virQEMUDriver *driver, spec.destType =3D MIGRATION_DEST_CONNECT_SOCKET; =20 spec.dest.socket.path =3D uribits->path; + } else if (STREQ(uribits->scheme, "fd")) { + + if (flags & VIR_MIGRATE_PARALLEL) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("FD-based migration is not supported with mul= ti-fd migrations")); + return -1; + } + + if (flags & VIR_MIGRATE_POSTCOPY) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("FD-based migration is not supported with pos= t-copy migration")); + return -1; + } + if (flags & VIR_MIGRATE_POSTCOPY_RESUME) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("FD-based migration is not supported with pos= t-copy resume")); + return -1; + } + if (flags & VIR_MIGRATE_ZEROCOPY) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("FD-based migration is not supported with zer= o-copy migration")); + return -1; + } + + if (flags & VIR_MIGRATE_TLS) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("FD-based migration is not supported with TLS= migration")); + return -1; + } + + qemuFDTuple *fdtuple =3D NULL; + const char *fdName =3D vm->def->uuid; + int srcfd =3D -1; + + VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) { + fdtuple =3D g_hash_table_lookup(driver->domainFDs, fdName); + if (!fdtuple) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("no file descriptor stored for migration= of domain '%1$s'"), + fdName); + return -1; + } + + if (fdtuple->nfds !=3D 1) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("expected a single file descriptor for m= igration of domain '%1$s'"), + fdName); + return -1; + } + + if ((srcfd =3D dup(fdtuple->fds[0])) < 0) { + virReportSystemError(errno, + _("failed to duplicate migration F= D for domain '%1$s'"), + fdName); + return -1; + } + + g_hash_table_remove(driver->domainFDs, fdName); + } + + if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, = srcfd) < 0) { + VIR_FORCE_CLOSE(srcfd); + return -1; + } + + spec.destType =3D MIGRATION_DEST_FD; + spec.dest.fd.qemu =3D srcfd; + spec.dest.fd.local =3D -1; + } else { /* RDMA, multi-fd, and postcopy-preempt migration require QEMU to * connect to the destination itself. --=20 2.43.7