From nobody Sat Sep 26 20:52:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; 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=1788440985; cv=pass; d=zohomail.com; s=zohoarc; b=R6/VS/z06AcMR73pesUprnox/dNaRuZrs18xukvlg9VO7LU7W/2XMXn5D2J84N6PgkvD43rgyTGFhX3O6yYmpSnVq1g6F1+/JlkFgF0s05DhAeuT5gERaXi4YAIQN2D3GMxnCgbVwJoGxVxCamQKvPy8F3asEJQNMOjR4HhxExU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788440985; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=RUImk/pwuj477MeNCTV9Wif7oNPHk9cD7GTbS/oMDzE=; b=HJwFIRyHlnenekS0kprkwExGIPfUfXWQVMYMihLQ7bguvs+11aIGNq+tFKnzrOElE1yfrBxr3FRUbuj9KNJKGHcqBM7ceCshSCmfJqx7A445H5UBOkJw9C1wUKMfLUZdz7SuYP0Db1LwYigoWIsgNeCPjCfnqgRZXUtWqbmD7B0= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788440985498809.6097287237542; Thu, 3 Sep 2026 06:09:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x27Bb-0004vy-3D; Thu, 03 Sep 2026 09:08:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27BZ-0004uk-AC; Thu, 03 Sep 2026 09:08:57 -0400 Received: from mx0a-002c1b01.pphosted.com ([148.163.151.68]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27BW-0007bL-LV; Thu, 03 Sep 2026 09:08:57 -0400 Received: from pps.filterd (m0127838.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 683AKxgN218317; Thu, 3 Sep 2026 06:08:42 -0700 Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazon11023110.outbound.protection.outlook.com [40.107.201.110]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gf5eq0jua-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 03 Sep 2026 06:08:42 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by PH8PR02MB11926.namprd02.prod.outlook.com (2603:10b6:510:40a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 13:08:40 +0000 Received: from DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd]) by DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd%6]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 13:08:40 +0000 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=RUImk/pwuj477MeNCTV9Wif7oNPHk9cD7GTbS/oMD zE=; b=Pzx/sGaK3BPeUyRsppN5feAKftykI25pHj0ETioRFWlOW240lxEX7YjVk QBWJB8CIhT+f/ggTM/NhhEnBBr5fqJCdDa38f3vWfe9yrTk+w5lQfqlgWEN+VACd RZp3dXlnC+5jUiFvvtF7hTGPu3CEwW2iG0CkieYCyOvovnrYLu/F49zhlx3egU68 JeIXRqQegKsHZhauu0XUiqybjIwdldGdQVx/2ONGsDiWHtL2o5LxBEnV1rHdTxEz kUOzYThdM/EwSsqJURkavAQQypdyiItE4Nie3pv411CuJXH/oFpHN5Bpad4ygu3z Itt+UZ7E5aeDXRRf9XsRWVPoncD9Q== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L3rTTukjhuCtZl6Rm9dqmJc1TvAruqIlxa0weJSIMPkkwGwJa39ckNbLahyg4A2PdhD/qjX8o27vrMMgzWVvFl9+HaqFh7aXkWZnrUX9z1Yf7ShTFTly022obg8nXL6bTQrUtk6RzpM+ODy4TrryPFwvad35hcu0VBy3l08JQnWmVS3DTYeaVBzTL6Sl1fqGiUUZ2zfN/WybZQ4nprJWSe45mH+FR1wlwSQDPIZa1WbOds7QvolGPxxyT35/t3dBVJMHYGOHwWPnV3d4w/zuIU429kO+JkzYiTfp1CbMk96xSE5PdHq2TaZCT1c2Uqf244BFYNoJJPJPD4DGOBYXzw== 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=RUImk/pwuj477MeNCTV9Wif7oNPHk9cD7GTbS/oMDzE=; b=El6nITsLISKMd2Gc0/qO3IEljDHLj+wAOFL4AuuQmJzbH70/iyE4GG6nPv01XdnU2A67ODRp+BePN1MsJJuJPFw5FbQzj8Q4Q6phLOOgnqzal7zuvpP02t6tOahJRzuVf/cactzOZttfacM6bba/XouMBHA0PT7mbCvDlx9y+FMIUKmZcbyOooEE35y0f8HCgDxkhee06u2QM57ypcgNV02yenpFzsOroJub/AV1YKVZle1xbpqcntaRVDSo0k3rYG9fEINhCf2FyiWpfq7S/3vU9OAZqBqev/Yd2CIrjW4CtSrgrVSBrFeHVlzHPSkvjBFKuFE7UW40jE0oHCIqyw== 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=RUImk/pwuj477MeNCTV9Wif7oNPHk9cD7GTbS/oMDzE=; b=sgGvI7BkWgjanYFUbVNfAkClCXcul8Xj4ES78WIri/1Bule9ERQj7vm/EWKKgA3Ppp10epnmJOk4VQ4J3PNy48iHaJ+q71vsz+V9KiRGKztrPUojfESblut8YuKsSF4T0pzCjMki8Ge0OBYXf0C+6Dg+43tZGvf7RiS7zuXoJYLs7u4mqRQooAX6jZEK/k5kDUCNlLWJ0nLznW7uYV1MtRimZfGxoAfHOxes1SdZxcfj0VZ/CEQTMX7WD1me1JWqna+WQAnSbr2Xqlgovfy6JdtpX+/S3kYfklIGAcZF7HBlsU/C1EerW9bVKUNroFLhse4ejvdmpNyAJDm/7aMiBg== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?utf-8?B?Q8OpZHJpYyBMZSBHb2F0ZXI=?= , Cornelia Huck , Eric Farman , Halil Pasic , Jason Herne , John Levon , Mark Cave-Ayland , Matthew Rosato , Pierrick Bouvier , Rafael Castillo , Thanos Makatos , Tony Krowiak Subject: [PATCH 1/8] vfio-user: add live migration to vfio-user protocol specification Thread-Topic: [PATCH 1/8] vfio-user: add live migration to vfio-user protocol specification Thread-Index: AQHdO6VW69FBTOGwZ02zNvZhlzVmoQ== Date: Thu, 3 Sep 2026 13:08:40 +0000 Message-ID: <20260903130833.1437632-2-hugo.komatsu@nutanix.com> References: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR02MB6172:EE_|PH8PR02MB11926:EE_ x-ms-office365-filtering-correlation-id: 23c67e9b-6803-4188-b9eb-08df09bc795f x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|7416014|376014|366016|23010399003|22082099003|56012099006|10067099003|6133799003|3023799007|18002099003|38070700021; x-microsoft-antispam-message-info: WHrmV3m9Ubka854IOR6Z9C+DK9nOmIW4X9ykwDM3xXwygDmNxowsGQxe0HKK1aS7mUDgRlTahIfEN0FfVhAmTUVbYE47dPvW2FavZ/DpBTvDmwN+wXFfuNmIJshxn3XhfoROhcd2AaVSSGjZkgXMXhYZj4NX/PM0iDuGmrExwbqFYrxAZH31xJER1AZtKSQa/K2OMSzTjbCOCz851qu1O3GipUia2WyTEhoDhcxDJhC1mi0+b3f1vzZZOTxcmusAmZC3MBIsvx6idba972+dokjEWRZoQfS8xnhl7froqqloIVq/VAJcJyCB+C5vYmMZPy5VOVxRfUPD8I9HchXWajbs9UDT+ejWc5oLcZFx53GZ8l2Zh0vRNmMge/Z0FHbPgCsvVlIav2ojX6MGvfK7vYO3koLlYem56fnvYlOAq42IpQodHY83T7fOkTKZ1FlaOgFQxBeUiqgy4pbaEVIyCeWcxlkkdJiqWz6EwMZVcPP6Bw83GS3bgQZIdLjvKE8Dm0jbou1Q8PBlYmrNTUZUY/5gHCRHqPXMFI3M96StFWT9NDCQ6Qc+/8kRDRSBBN8qpq0/4MzXGD0osWYRBMDxsJxmZK+X4WgjNzzD4/yyO2YskNhw2e5nxRFtL6UP1PeyQnhsiHu4GFWsSq7jDtrhlIKtW78IhjNuCXjieuNumIoDaqQ+Ad+AYjLtKN+KagescoehM88PYVL7m3dX9o+EPvIeA1MDwrZ2izkbZJzr/4E= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR02MB6172.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(22082099003)(56012099006)(10067099003)(6133799003)(3023799007)(18002099003)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bTJhdS9KcG5CS2hCWG55RG1Gd1FDOXVUOTF2V1FzalVhRUZUTWRsSUhXVW1i?= =?utf-8?B?N05oZVdqUmd3TXMrN25DSkFWVlhFSzBUbzZXVTlkR2ZWcHhKaHlxZ3JidXM3?= =?utf-8?B?UENLcVY1SVdQdEVkNy9pc2doTWhmR1RxYldUT3hTTmFBSXkrMDMwQ1hxMWR6?= =?utf-8?B?dml0ZERtc0NodU5tMlNiZDJtR2xTN0FrVkV4YXljZVFpcjVqYUVFNVVOZ05M?= =?utf-8?B?anBEYmNmQ2ljYjBLVnZrMXAzNWFEOUNQcEtITktJOXRTd0ppdGMyUjhJaUIy?= =?utf-8?B?amxheXVVL1ZYQWJlbXlmUGZ1TXgrQWFMS3NrSzY2VzA5bkhxZGl4b0sxYlIz?= =?utf-8?B?bTNKSDU0dlVLVjJSUHVXdEFJT09BZGFPM2VlY3U4ZWFxN2xOb1BFeVpwdlhS?= =?utf-8?B?N0JNK29DbkZtY2NYR0hGVFVHWlhKWjdqWjFzV3ora1c1TUZycTFyWEltS1ky?= =?utf-8?B?ZitjUzBrWWZCYXdmWHhaWUFmNTNRWUg4eXZrRnJLQkU1RnVjVUlJQ2RDd1VM?= =?utf-8?B?dU9SdE0yK3VWVXVpMzBpcDlPU1o5dEFLZUlxSmpvZzAzQ2NrSFdDN3V6eUtU?= =?utf-8?B?NXJ1RXJYOFBFVkRUajViRng2VURqTHByNVB6YVBDV2VrQkFjV0FFcUtBVlhv?= =?utf-8?B?MEdweEJKd28wZnVhdzRTREhWaW9RVGpNK0Zwcm9SNmd4eENuTGZHTzgxdnhK?= =?utf-8?B?NFExYVdycTh4VlJ4N0xUeFBjR2NhSkk4Y0RVaVlwTTM2UjZxT3JuM2ltSjR6?= =?utf-8?B?alJpUGpYNmV3M2pSOXBnK1hGeHJEM3VoZnI0UEpjbXR0cVhmWkpWSVpqc1Zz?= =?utf-8?B?emRTUTN4Q2x3c09nQkhyRHBJNEd0SzBCWWVzTEhta1dkMWpjSExDSWt0akZj?= =?utf-8?B?dHNIK3JoclQ1cUlsM3FpTmtnVUkzRVpSZVAwYjJMbnpiV1RnU2g0d0h5ZUc3?= =?utf-8?B?N1RtaTh6MnVEWHlnR1lmZjJOUnNOWk9QeElONEZjY2JoQjdaNXpDZC9xU3hq?= =?utf-8?B?RXBuWWFJZ3B3RllYV2wvT09pNHhjUVM2aVFpLzNNZmdJQ1E1SVRoRmhzQkdX?= =?utf-8?B?N0VuOHA3cmpMTUJtb0cxcWlFL1pIL2x1S1Z1WlJyZ3ZoYytlTnlCS1MvQXBP?= =?utf-8?B?MGQyQ1BPejZFWU9MSm55dVVLNFM1ZUpBbVBQZlh0bStkNkh1MVY5VFlHaEtE?= =?utf-8?B?UnlPRE1LNVhHUUhZQ3VEcDMwWnlDZDE1QjVHOTFIUkd4bHdxYWh6cElpSG50?= =?utf-8?B?bjZyUnJyZ1R0ejdEZ1FLYmxxbENpNldFd0NKQ2daZGNYb2ZETEcyd1NkekVD?= =?utf-8?B?NVhoNUZET0V6WGxYekI3SVRiSkt4MDg1RlJUL1Y2a1pPeGJMcGRNNDdRZWRy?= =?utf-8?B?T29VNEJ6a3l2UjJDRVpQN3RieEprYndhcUJGYm9wMXlneEpnMVVSdTBwREtE?= =?utf-8?B?eC9mYlFmaWV1STlRdlF0MnlhV2g2citvUGUrWnVMUW9GZmVQVC9SbEozblRp?= =?utf-8?B?NElsa0F5TkxqT2Zxc09jZnFKaEZFYjZqQytSN3lMN3ZBUDNKN09iZjJBaWt5?= =?utf-8?B?VmZ5L0YxWXg3ZjljZEV1VTFpMlFmZ2Y5MUtDdTV5SnBxYmtGY1VPNWV4eFZH?= =?utf-8?B?ZDNqQ29rbGdaa3UyV1ZteGFBcmpGVmszTUhScXJUM0ZwM3JqbkxYbTdwWnBu?= =?utf-8?B?cDA5MUdMQW4wbmZ1d1lOYVNnT2ltcHdXamNOcEgzbEhnNE1kRnp5dDBSWm8x?= =?utf-8?B?dU1hMXpNcC9MNjFIMXhHTm5WZ2d4eGlnUnI1ZkJGZlIvMUJwQmJtcWNQUTFi?= =?utf-8?B?dWs5RTRrNlc1aW10U3d3aTlPREhkY0NxYVQxcE9FSktWd01lQTZ5UGZZUGkw?= =?utf-8?B?d3lDei9BTUtJQkFZMVFWUXdrc2l5d0p3OERDMlZQNGhtNVRmbS9UY1N5Z3Zl?= =?utf-8?B?ZXBzTkNHRVhoaU82WVZtbm1nNkpBeld1dnNLell4c09jb1RVUDJMN2VrbC9n?= =?utf-8?B?SHprZnFyRDBGbnZHWmZ6RlVqTFA2ZXg0Y0JIRURab2c5UXBteElmb2JYMk9j?= =?utf-8?B?eDdleExEelZmNW13NVAzbmk3VmQ5cXNLdjJKQk9qT1RLWDFwMVJtWWI1eGxr?= =?utf-8?B?cFR4Wkh5alByOVFUTUcwRjlWRHJITE5FTFhTaC9VWHQ3UGFJMnlJbzJnNitP?= =?utf-8?B?NHpWbi9rUjBWUkcxeC9GMmM5NTdjRTBKRFR6bFN2WjFPQU4xbTNNQ0h1blRz?= =?utf-8?B?bzYwSm9LWkJCenhxa2laSHdsMW5iR0NHYVpTY3JWdFFIQmdMQ0J1STVyams5?= =?utf-8?B?dnlFSkpvRWkwUVpIMWRkWFR0ZDEybmxOUGpSbTZxT2xuaHJrVHdZUVNXNmdV?= =?utf-8?Q?2sKeiCH3ohW53+VE=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: s0+87GwNkv6M+BVaAlM/fjtGmNaayViwAXGRgNzttjBLcO+xBSRaeB0vaWX9QdrJL0cubyKXX0vjJib6O4MJewrVnJT7oXvYbePOf447cg+7HZfkXTCzdBHPrRbQmXD/cbVCFMcO60zaeC1fExTlX9VGenPZp492blOCl6gCiDwsAlJbG9axU1e4JDDXW02XfEE8TIvs19ucmGpqW3EDz7FgfRBDkOYBfEVxZ91/msENyuHMFF6Od5htQF5kjleXqD1o3kySKB3XOhlecufSPG7+hyb+srbZFMZL5SrwIcsuw+VdXvIG4xVTw9V2DBC+GImrjhraoevJcTJ/rCfmKw== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR02MB6172.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23c67e9b-6803-4188-b9eb-08df09bc795f X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2026 13:08:40.4518 (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: JaWRATlSQhAqWMUoqhHGJBLnGDZ0weLewmJmlMMSpZqMiiCdiOBBV5ny+Upaqt6ULg8oggci34Wv5X0qu3SamaDLl+kySHkA96+BCygjAII= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR02MB11926 X-Proofpoint-GUID: wKhOI4U0o1ukJZaxe1vBhV7G0pXDstB4 X-Proofpoint-ORIG-GUID: wKhOI4U0o1ukJZaxe1vBhV7G0pXDstB4 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX5n0T7A88LxaY n/gqhOVfP3qHfu19qfHKUfm9cz95rf4X2Mr2WAyn1UfaqEgks/Hnd3x1qoHgYV3JbdvPs9SyNJN OTS+P1BXLGZR6jjkKOpinMxp21OfcWc= X-Authority-Analysis: v=2.4 cv=U6uiy+ru c=1 sm=1 tr=0 ts=6a99715a cx=c_pps a=ALzLegKRD8J3iQ32fiysVg==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=1L6crL_YRTbalZ11mEUO:22 a=VwQbUJbxAAAA:8 a=Ikd4Dj_1AAAA:8 a=64Cc0HZtAAAA:8 a=Q4nSUP2Q8riKaZGk9DwA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX86vYKqffEkix hkEvCablWB4dDpJOkdNmfp9M8n0PSAgy3znuZPlvPM0275eJGlB8j6eA+L+onkburtB8sixPsHs eFX1IEl9M15yqdVXX51uAYXa181g/hahzUYLJrK6CLG/uuxpljU7Z1hvrxxpMcoF5V8RRQyhhQy GJC/cvPXqmQuZE486iYRnxAUEsVMkrR6mDJ9mkWQnmoSJ8KiZMkqSqS+K/9AU0nWycqwEUzcr5y 9p1c2rvH+aWKnm6/aVALk+209sPwOIyexBT5WC04LxIyoSus0hvA8K6PuKzCCBC/zBCTWZyIFdF KXPki/IDsYawona9XUwa6nBzGXGHGalY3gms6diKeqtrG2CXbHXfUpPIvDe+Jd4FxzD2cpE8L/j 8gLYtZ7fcQOsTKcRdXfZ056acMiimdrsoSTB7QP6EJR9ZpQmL41McdcHnAAaH+DIfYumd7oDjb/ GIycf/Kbng/999CtNkQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-03_03,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.151.68; envelope-from=hugo.komatsu@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @nutanix.com) X-ZM-MESSAGEID: 1788440989138158500 From: William Henderson This patch adds live migration to the vfio-user specification, based on the new VFIO migration interface introduced in the kernel here: https://lore.kernel.org/all/20220224142024.147653-10-yishaih@nvidia.com/ We differ from the VFIO protocol in that, while VFIO transfers migration data using a file descriptor, we simply use the already established vfio-user socket with three additional commands: VFIO_USER_MIG_DATA_READ, VFIO_USER_MIG_DATA_WRITE, and VFIO_USER_GET_PRECOPY_INFO, which have stream semantics. We also don't use P2P states as we don't yet have a use-case for them, although this may change in the future. Signed-off-by: William Henderson Reviewed-by: John Levon --- docs/interop/vfio-user.rst | 120 ++++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 47 deletions(-) diff --git a/docs/interop/vfio-user.rst b/docs/interop/vfio-user.rst index 1c92f442d2..73282cd2dd 100644 --- a/docs/interop/vfio-user.rst +++ b/docs/interop/vfio-user.rst @@ -387,6 +387,7 @@ Name Command Requ= est Direction ``VFIO_USER_DEVICE_FEATURE`` 16 client -> server ``VFIO_USER_MIG_DATA_READ`` 17 client -> server ``VFIO_USER_MIG_DATA_WRITE`` 18 client -> server +``VFIO_USER_GET_PRECOPY_INFO`` 19 client -> server =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 Header @@ -1588,26 +1589,22 @@ The request payload for this message is a structure= of the following format. +-------+--------+--------------------------------+ =20 * *argsz* is the maximum size of the reply payload. - * *flags* defines the action to be performed by the server and upon which feature: =20 * The feature index consists of the least significant 16 bits of the fla= gs field, and can be accessed using the ``VFIO_DEVICE_FEATURE_MASK`` bit = mask. - * ``VFIO_DEVICE_FEATURE_GET`` instructs the server to get the data for t= he given feature. - * ``VFIO_DEVICE_FEATURE_SET`` instructs the server to set the feature da= ta to - that given in the ``data`` field of the payload. - + that given in the data field of the payload. * ``VFIO_DEVICE_FEATURE_PROBE`` instructs the server to probe for feature support. If ``VFIO_DEVICE_FEATURE_GET`` and/or ``VFIO_DEVICE_FEATURE_S= ET`` are also set, the probe will only return success if all of the indicat= ed methods are supported. =20 - ``VFIO_DEVICE_FEATURE_GET`` and ``VFIO_DEVICE_FEATURE_SET`` are mutually - exclusive, except for use with ``VFIO_DEVICE_FEATURE_PROBE``. +``VFIO_DEVICE_FEATURE_GET`` and ``VFIO_DEVICE_FEATURE_SET`` are mutually +exclusive, except for use with ``VFIO_DEVICE_FEATURE_PROBE``. =20 * *data* is specific to the particular feature. It is not used for probing. =20 @@ -1729,25 +1726,19 @@ server, a subset of those defined in ```` =20 * ``RUNNING -> STOP``, ``STOP_COPY -> STOP``: Stop the operation of the de= vice. The ``STOP_COPY`` arc terminates the data transfer session. - * ``RESUMING -> STOP``: Terminate the data transfer session. Complete proc= essing of the migration data. Stop the operation of the device. If the delivere= d data is found to be incomplete, inconsistent, or otherwise invalid, fail the ``SET`` command and optionally transition to the ``ERROR`` state. - * ``PRE_COPY -> RUNNING``: Terminate the data transfer session. The device= is now fully operational. - * ``STOP -> RUNNING``: Start the operation of the device. - * ``RUNNING -> PRE_COPY``, ``STOP -> STOP_COPY``: Begin the process of sav= ing the device state. The device operation is unchanged, but data transfer b= egins. ``PRE_COPY`` and ``STOP_COPY`` are referred to as the "saving group" of states. - * ``PRE_COPY -> STOP_COPY``: Continue to transfer migration data, but stop device operation. - * ``STOP -> RESUMING``: Start the process of restoring the device state. T= he internal device state may be changed to prepare the device to receive the migration data. @@ -1771,7 +1762,6 @@ above FSM arcs. As there are multiple paths, the path= should be selected based on the following rules: =20 * Select the shortest path. - * The path cannot have saving group states as interior arcs, only start/end states. =20 @@ -1803,10 +1793,8 @@ The data field of the ``SET`` request is structured = as follows: If the device cannot do the hinted page size then it's the driver's choi= ce which page size to pick based on its support. On output the device will = return the page size it selected. - * *num_ranges* is the number of IOVA ranges to monitor. A value of zero indicates that all writes should be logged. - * *ranges* is an array of ``vfio_user_device_feature_dma_logging_range`` entries: =20 @@ -1818,8 +1806,8 @@ The data field of the ``SET`` request is structured a= s follows: | length | 8 | 8 | +--------+--------+------+ =20 - * *iova* is the base IO virtual address - * *length* is the length of the range to log +* *iova* is the base IO virtual address +* *length* is the length of the range to log =20 Upon success, the response data field will be the same as the request, unl= ess the page size was changed, in which case this will be reflected in the res= ponse. @@ -1844,14 +1832,12 @@ The data field of the request is structured as foll= ows: +-----------+--------+------+ =20 * *iova* is the base IO virtual address - * *length* is the length of the range - * *page_size* is the unit of granularity of the bitmap, and must be a powe= r of two. It doesn't have to match the value given to ``VFIO_DEVICE_FEATURE_DMA_LOGGING_START`` because the driver will format= its internal logging to match the reporting page size possibly by replicatin= g bits - if the internal page size is lower than requested + if the internal page size is lower than requested. =20 The data field of the response is identical, except with the bitmap added = on the end at offset 24. @@ -1861,21 +1847,16 @@ reporting a *page_size* unit of IOVA. The bits outs= ide of the requested range must be zero. =20 The mapping of IOVA to bits is given by: - ``bitmap[(addr - iova)/page_size] & (1ULL << (addr % 64))`` =20 ``VFIO_USER_MIG_DATA_READ`` --------------------------- =20 -This command is used to read data from the source migration server while i= t is -in a saving group state (``PRE_COPY`` or ``STOP_COPY``). +This command is used to read data from the device while it is in a +saving-related migration state. =20 -This command, and ``VFIO_USER_MIG_DATA_WRITE``, are used in place of the -``data_fd`` file descriptor in ```` -(``struct vfio_device_feature_mig_state``) to enable all data transport to= use -the single already-established UNIX socket. Hence, the migration data is -treated like a stream, so the client must continue reading until no more -migration data remains. +This command is analogous to reading from the ``VFIO_MIG_GET_PRECOPY_INFO`` +data_fd. =20 Request ^^^^^^^ @@ -1890,9 +1871,8 @@ The request payload for this message is a structure o= f the following format. | size | 4 | 4 | +-------+--------+------+ =20 -* *argsz* is the maximum size of the reply payload. - -* *size* is the size of the migration data to read. +* *argsz* is the size of the above structure. +* *size* is the amount of data to read. =20 Reply ^^^^^ @@ -1909,21 +1889,18 @@ The reply payload for this message is a structure o= f the following format. | data | 8 | variable | +-------+--------+----------+ =20 -* *argsz* is the size of the above structure, including the size of the da= ta. - -* *size* indicates the size of returned migration data. If this is less th= an the - requested size, there is no more migration data to read. - -* *data* contains the migration data. +* *argsz* is the size of the above structure. +* *size* is the amount of data read. +* *data* is the data read. =20 ``VFIO_USER_MIG_DATA_WRITE`` ---------------------------- =20 -This command is used to write data to the destination migration server whi= le it -is in the ``RESUMING`` state. +This command is used to write data to the device while it is in a +resuming-related migration state. =20 -As above, this replaces the ``data_fd`` file descriptor for transport of -migration data, and as such, the migration data is treated like a stream. +This command is analogous to writing to the ``VFIO_MIG_GET_PRECOPY_INFO`` +data_fd. =20 Request ^^^^^^^ @@ -1940,16 +1917,65 @@ The request payload for this message is a structure= of the following format. | data | 8 | variable | +-------+--------+----------+ =20 -* *argsz* is the maximum size of the reply payload. +* *argsz* is the size of the above structure. +* *size* is the amount of data to write. +* *data* is the data to write. + +Reply +^^^^^ =20 -* *size* is the size of the migration data to be written. +The reply payload for this message is a structure of the following format. =20 -* *data* contains the migration data. ++-------+--------+----------+ +| Name | Offset | Size | ++=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D+ +| argsz | 0 | 4 | ++-------+--------+----------+ +| size | 4 | 4 | ++-------+--------+----------+ + +* *argsz* is the size of the above structure. +* *size* is the amount of data written. + +``VFIO_USER_GET_PRECOPY_INFO`` +------------------------------ + +This command is used to query the migration data transfer progress during = the +``PRE_COPY`` state. + +This command is analogous to the ``VFIO_MIG_GET_PRECOPY_INFO`` ioctl. + +Request +^^^^^^^ + +The request payload for this message is a structure of the following forma= t. + ++---------------+--------+------+ +| Name | Offset | Size | ++=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D+= =3D=3D=3D=3D=3D=3D+ +| argsz | 0 | 4 | ++---------------+--------+------+ +| flags | 4 | 4 | ++---------------+--------+------+ +| initial_bytes | 8 | 8 | ++---------------+--------+------+ +| dirty_bytes | 16 | 8 | ++---------------+--------+------+ + +* *argsz* is the size of the above structure. +* *flags* is unused. +* *initial_bytes* is unused in the request. +* *dirty_bytes* is unused in the request. =20 Reply ^^^^^ =20 -There is no reply payload for this message. +The reply payload has the exact same structure as the request payload. + +* *argsz* is the size of the above structure. +* *flags* is unused. +* *initial_bytes* contains the amount of initial data available for transf= er. +* *dirty_bytes* contains the amount of dirty data available for transfer. =20 Appendices =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --=20 2.39.3 From nobody Sat Sep 26 20:52:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; 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=1788440954; cv=pass; d=zohomail.com; s=zohoarc; b=NOPkyS2Bd7+pFpmpWcvil5jCHlANQLltQq5UgkEuS28vP7pwLc6DBrfqPhcl1C5jyOAlJDpMcubHwlXmLwrA/jZ5/VSjxo3lcDkBixNny29JWJ9iQOc3xZKc6m9w5DnjHjlBpkf/5ErFwlNd+2ZE6s4ktm9d/ktyrWh3EGFkC/0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788440954; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=szINPjXnQrPxkEiqctBBBW/jQ/FyU5dBfAIpWyla2A0=; b=b6atplCto0Xd2gKFrdYCDP6uruWwdP+yEgrtnxGsDds5aR8jvxZW8atarlfbbwePZ8M2OgSE/TWnhptULH8F7gbHVy+vkg9jVBe3U7RFMQBQBFfZNLa3vLvto6+m8/YEzSEAk3h2jhOQ93ewF6khDEbd53ftRn7YVDVLjZ8PQaU= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788440954592926.255471447077; Thu, 3 Sep 2026 06:09:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x27BX-0004tq-28; Thu, 03 Sep 2026 09:08:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27BV-0004su-Q8; Thu, 03 Sep 2026 09:08:53 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27BU-0007b6-3Z; Thu, 03 Sep 2026 09:08:53 -0400 Received: from pps.filterd (m0127842.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 683AIdQw2645119; Thu, 3 Sep 2026 06:08:44 -0700 Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazon11023097.outbound.protection.outlook.com [40.107.201.97]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 4ges3b29g4-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 03 Sep 2026 06:08:44 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by PH8PR02MB11926.namprd02.prod.outlook.com (2603:10b6:510:40a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 13:08:42 +0000 Received: from DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd]) by DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd%6]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 13:08:42 +0000 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=szINPjXnQrPxkEiqctBBBW/jQ/FyU5dBfAIpWyla2 A0=; b=aMynt2XY4cU6WiN4xD5YyZ/3z10Nq/5ynqrJ89FVG7NsUsJj0q0177Ooh eDj5/u3sgfVmYYVzCFYSn9pxVtD3ToPBY3eV+G0RCKFedTNKs1Xlo9TXvMM+HhOA sGmPNc0Z/PHQc4h3TbofZqnd9jjo4VZf5btCuenv671N3mTg0KRxlrf0Acujn6k3 4Kfh1HhaetvQV/+Fi0TWb+x8URja0qmlVNZ3z1ZTKj+62KuQoVY9cyB75REO41kS Kk1dwumh3MIcxdEatGtD574YCw2Zve8qtwAo0x81TauGwrANcB1egrSdpA1DgqWj I+UUMe80yz0vdxQ7okjJUCkEkkh1g== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rzLUGM4YaGzlaWPjRZIQAS1TTKCG/EMmbo37lW5raEO4DPBnrJ+AMUbWFZdo3rcxnXXRnTH8/mifAhnkO26VAdw1jvyXgGsKUTBaBH7INNUaW4GXXa7crOqB1lpved6xeKYc0b2u30rjhW55ZCyojv93dt88CGiHv3uQr1jCLK0A840lNto2NuFNhrINPTTwOCZKUGf8D7KXbtaK3N0vZSZpkf2NTUZGy1tJwgMmhJDhTJVjMfLEJwMlzII78cX5ZUQYh0HtkjnnbcJkvDrNsdL8vk2pjT6V86IqTZDMrYPLA2qANWeb1BAe4duhX2jbr24SHm9Zu6x3/j6NvZXHeg== 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=szINPjXnQrPxkEiqctBBBW/jQ/FyU5dBfAIpWyla2A0=; b=qTvo5AVI+KeQqaf67mh77ozR+HuRrLzbxp+Ku2U2rOmoHxZX3ytpiM8BaqAGKsBizDGtDxOUZkRT3dyuiwj+5vMpkdv4Kfj5SgcyaJkeOsK/lFSjM0DF2cEaI41LqDIpr+rZhhaidjUcuvBdtFMWSZnLwj7zm1ecJrjMRIRYZenoCbEYZq+B28tvvxKr4lwz7jJNCPy3ve9WH/YOnS+/5tn/STZkvvLyxPV+7l+NEht3ly3BpF0vK1d5DmRtMdrty5VKSQK0sHgxvP4GZuVXGo1JoFushOTlPvStlSmL5zlyYbrk3nFh+wc8AI+UeiuUssaaypzZNwTtMhqO3pjADQ== 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=szINPjXnQrPxkEiqctBBBW/jQ/FyU5dBfAIpWyla2A0=; b=Fldcypgw93Cmge27JMRHpw46TrTUMICUTyPKtlG0n7lhgPEn/UpDd8g34FRtTVwIk+UE/SAnIacOrlVZMJ02T7a7y2ti+v4hTdqu5TC/gBAu3dB1H9TIMpGpqLIB7wxbNHwbBRPPDDE4ygsp6V0tudP2mk2vYf/byqkTlfU6TO1hPGqcJvSZDc0FVvKe1T5cOo04M8d+nhoaN7RwsS48d5o3znYx+ngAZgltIo0ITWxQ87xFwSd8LAaTJ6UQmOxNK7pvNijxGnU42HGNoZcnWO8RkDHS0nqqtAkv1is40xve/ZNM4YCb8Z3hfvzi77RV9AlVXd9eXtDeBkQmEI48JQ== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?utf-8?B?Q8OpZHJpYyBMZSBHb2F0ZXI=?= , Cornelia Huck , Eric Farman , Halil Pasic , Jason Herne , John Levon , Mark Cave-Ayland , Matthew Rosato , Pierrick Bouvier , Rafael Castillo , Thanos Makatos , Tony Krowiak Subject: [PATCH 2/8] docs/vfio-user: clarify data_fd and DMA logging behaviors Thread-Topic: [PATCH 2/8] docs/vfio-user: clarify data_fd and DMA logging behaviors Thread-Index: AQHdO6VXjjTpARMQA0KcCLj8dgYOQQ== Date: Thu, 3 Sep 2026 13:08:42 +0000 Message-ID: <20260903130833.1437632-3-hugo.komatsu@nutanix.com> References: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR02MB6172:EE_|PH8PR02MB11926:EE_ x-ms-office365-filtering-correlation-id: 72b83278-4bb6-4083-c182-08df09bc7a6c x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|7416014|376014|366016|23010399003|22082099003|56012099006|10067099003|3023799007|18002099003|38070700021; x-microsoft-antispam-message-info: CG1zE81/51wQD85h0/uLuWb9hC5vo6r+LTnLpzEEtaGZv5IoAhGmRfqAXScNchx8snuIHpOV5lLloo41eNvUnRfdkxmH9WkSc6LIvHszghpNKrsCJ3ZGGI2F+k86TgPO0NSl7QpRocgeVdtYn4wW6009ZGMD7kHE90XOpH7/T6wYLrPqfGT0QJATkfKHQ1YEF5mMSPUnqJujHaqY9ZgjzF753zERP/Ivv+g9JWNlcmwT8kkkX8HNKzHQIroq4VZfKP8ig5FXj5mxmwfWYKGdxYxPzkj0HwRkne8AM94isjJbZAghf5UaVwavKgSA7EvA5rEJl0X1KJ+F6fnfnDYC+y5AMDUMkTTVPCVDKJOxcbgbuMm0a2CLLaSeaFZS9C7Dm47FQJTbGap9pNXMiKIMbuqba7+y/6AVReoR5Rcj3sFUlFhtjwgvLTz26cjSWODMVPiynEPJyLL6pI/ZHopiOGIqJRgWMdoSzJFw//6WLFaFgaHgobSYiqQhnN+oojnJNlZfjabBcaYffB1OiwIGyxm3Zmaf9ch45z+AK5fdNjoccaw5J2ICf4xGZU+K9In5Dt0kdSLzvQBv1NsQ0r3dB1T2Tv82Yx3V1v7ro3j1F3TlxqIzVTPeRB88XxG6x9cxdk/VQNhvBTykY/xWZHRb55LatT/Uch8hYWzUvcdk9KqLvwCpkKzo1qbtNIXD0+rf6VAPROjbF0axDGfMGOScUDuVOhCneXD9eOGcbJX9NvQ= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR02MB6172.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(22082099003)(56012099006)(10067099003)(3023799007)(18002099003)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SG4zTjZXRWVIUlBkUFhIOVg1Nlh3a25YWnhJcWtwM01TZ1pGOHY2RFZhekVs?= =?utf-8?B?aGtwcUNtVndjMGdQQzRGMkNsS2dzUjdrblA1QnNOK24yREFBVGhCdlc0eUsz?= =?utf-8?B?SkcxaGc3dmpnMHg1ZGJnMzZFWUkwak01YmRzNkNGMWJUckZ0b2o2UDFBNlJp?= =?utf-8?B?MUtWV3I1U1o3TnJwZlJnRTBKUncvLzkrSGY3Z0labzA4M0EySTl3Z25YeHMv?= =?utf-8?B?dDczUFh6Q2tBTGVqU3lYNnozOXNYVE5FKzlrTEcrZElrRUJwQjJoYVE1VkFq?= =?utf-8?B?czBPMHhobEpEamxFbUpjb2IycitzQi8vdzMxQWlhMzBSYlVIcmVoOUUrcUxO?= =?utf-8?B?Zi8wa1F5d0ZWMG0yYmtlSFg0bnBQTEtVTXlHRWgvSHdSTXUxdG1RYmFYSEQ0?= =?utf-8?B?REFpbGRYZ05XRWZBVFFQRFdyQ1dobzc4NFkzYXF6NGJrMGxBNWw0Sld3WDNB?= =?utf-8?B?dVRFcjgzcFpnRlM1N3Z6cXhnUkduWGoxWGlHeHZsSllncytBYythK3RqQy80?= =?utf-8?B?aHJ2YkFrY2dGcTVRc2xTRVVDMklMakc4SEYvZjRBY1NrUW5LY3IyNXV5VS96?= =?utf-8?B?N1B5TUFPYytvVnMxbzJxM2kvVENpNVJVWW05YlJwTkN5a2wySzVISmpLTkdQ?= =?utf-8?B?U3dlSWc3UU9kanE5ZFNQS2F6d0NMeUFzRzFlYThUbHh2T29wSmY3YUhBcDh6?= =?utf-8?B?TzkxZHBKYTFPZjF0UmhxMkVDOHJ2T21odTJCS2RSUlNMam1meSthMWV1eGFt?= =?utf-8?B?dnBqb2NTazJVMVN0VTRSeXdQVlFjUWpud0tqamlSYVFVSGdaRUlsM1ZsUmo3?= =?utf-8?B?WDliMjVIc0FJRzE0c2k5eWt5c2w0Rk8zUlRwbGUxYkgvU0lGcFgxeDFianFD?= =?utf-8?B?WXFIZnRGT2w3ZFVqQ1BQTzZORmZIdTZHRXI3NG00dU14YlI1MUlyTFVweXZz?= =?utf-8?B?SXIyNnhaemRlQjRnNGF2SXFkdlZ5MUNaR21rbzc3bGxyb3pROG1LcDhUR2li?= =?utf-8?B?V1BQeEJuazZaMFc1WmkvOFVwS3BGTUkybmlqeTk3TTdnSGxNVTlaclpHMlJu?= =?utf-8?B?ZHd3Z2x6bjMweUVMcGlBU3JWSkZmWWFZSms3NlNvSkxtUWVBVFNzOXBlRjlS?= =?utf-8?B?R3NUTExEYjIrckxQWk1JaXVNbDN4Ujd0U1R5a2lKaVoxNDRaRXJYTUhZZ0Ir?= =?utf-8?B?V01NYXdKblplTlpLWjJTVGZLMTE2aUVzcXBRYVcvdFN4dGJ3MUkvSU1mRUxQ?= =?utf-8?B?ekJvRFY5Y3BmNWZkbk81NVIzQkFRZUxZbDRpdzFiQkRVYk9id3hhNjZvWG5C?= =?utf-8?B?UCtWMjhPbGw0OEZJZ2hKZHg2VFZ2K240dTEyaTczendBSFZaT1lZTGZoYkdW?= =?utf-8?B?Rkd5M3Q4aFFIekZORUt6UHBqaHl4RzEvSWNvcmpYT0hrUm8vZ3NnYjVIT2tY?= =?utf-8?B?Wi9KemhaejNPRUtRNWRpZVpqTjVCYmRVZE1WVWVwcmpkY2c3bXl6bmY0RWlX?= =?utf-8?B?dy9sYUtHZHdkall1QmpwaFA1WkdJZ1hMS3Zic2F4ZlpWZ2ptK1ExM0pmcFhH?= =?utf-8?B?ZUZBQzdmaTRELy9xN2FBMnRyTVFyNVhaS0RGUkkwSFB4cXJQWmh3TldESDJu?= =?utf-8?B?UEFpV0wzWFplV1JldUZCUU9EaUFUMkE3NkdhSnptT0NUdUc0a1Q0dkdLUWFa?= =?utf-8?B?aEd3QlgvNVZKQUd3amQvTjR4M1lhQUVPZUZZMHpRTzIzRVFXNGsxU05vRnFL?= =?utf-8?B?KzYrMjBkY3BrQzZlaXVHZWpGZHpxeHMwNTVxZ0laQmVjeVBkV3BlbDZhZ21M?= =?utf-8?B?RWFld0JTbkx0d0JtS0pweTl3N1p3b093MVFlZDA1WnJRa1RnM01xWlZpVTdj?= =?utf-8?B?WHM2VzRzcjhGOU1PV2k3cm40dmRwY3FVOWM2SVRGdEpXcGpaSHRibzN2NURT?= =?utf-8?B?TElqaUtXekJCeWFtSURveGhlcFBYVE1HN1JXSzQ1ZXdGOXkyUy9BcjJkMk9L?= =?utf-8?B?NWpXdWkzdkgyMmhqM1FTZjMvMEx5Qk84aUYwYlRscnJydCtITldaY3BhbjFI?= =?utf-8?B?RzZBTHZXS0FwbVd1akxqNXBGVkV3anVlVGc0M1EwMyt1bm5lR0V6OUdqT1dL?= =?utf-8?B?Wlpzd3ptc0tEQldlRStZQ0p2Wi9mZGRoeFV6V1U3VGdXUGh4aEtob1dDYTNY?= =?utf-8?B?ME1lQ3RaOEJ1T0pvRG1COVF2TFBleFo4NDVGWHBpNnpZQVNhUWZlNHFabTB3?= =?utf-8?B?dVU3NExPejNDa1dZRzF5L3h6NDF1M3VqZStCdkxRdmdYNENVb1luemxac0hL?= =?utf-8?B?MzV0SlhTTlZYcmdLSTZJS1NDdkhDRHVqUzMyUVJySzE0cjc5SnNlL3ZEUEFK?= =?utf-8?Q?67l+iT/5HVwxL394=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: rJ+5y26Q22PbP22Ijgqe/gDdWPSVSYuTQWJhLMqRzU7BsACjB2sxZrHvkH/xYKbC1VTObRV8/QLyeh+eZpMzVr+FBJ+2J9Tb9IeJJkIsa6evL3txcvRkspgKJs4eS9b5JEGkYyJuR+E7hw7YLTx8Q76azeL+6yWLrXFkDr02PP92VYdAQV63BPjLCPlO2H5TCiBhs/0OU5DTXK4mHPO7MulaAh9khFy1KHvkFtcdsgMHktyIU1ZZJ9rHO4acOqNYev/VKLY+b0nzEjwXWcfqwjYvUUjKnEbajmygrjVuEW+TIuIgFLIlj9SxnkDBz8f+xhg6iUvz5yahn9sy208BYQ== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR02MB6172.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72b83278-4bb6-4083-c182-08df09bc7a6c X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2026 13:08:42.2252 (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: Ko711ryBPpxlm5zAEjIBlwLjMkYPORw0Y8kQZqXAatOihjSb+RSzhFZmgpdNVYfLc4fZvBFICChRBEgexOBnsU/z8Hev7Q/PwTTc74Rnkx8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR02MB11926 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX1ElKk1JYzKCk 1WExjjXiLPcsAkIgu2Gzv8Dx8e24hPKhTYbRyLOghjSBl3JaUl2dJ2+itnOG4t02XZK6rVOJsuF GGFj5Nmiwvxl+RfopYU+9Y/53FJ0W+4= X-Proofpoint-GUID: q1Xibusb9KltLvONHcypOO4LhIKRTYPS X-Authority-Analysis: v=2.4 cv=V8NNF+ni c=1 sm=1 tr=0 ts=6a99715c cx=c_pps a=XVr+MSEQQxWnM56OsALW2Q==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=VUi8bpU7OL1Oj2-RSIOF:22 a=64Cc0HZtAAAA:8 a=4vskkdsKVMauzmvqB8UA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX1ZZ5iJQCpDXQ Tuw7wJanH28y5yfuSptQQFXsO6LTMdlMRs/UhobR5M6bshghKSwTpACVglMNUP2LKCT+1x7baOg YxzIBCV9QztiGcPF9r6bR+CMTbq3Knj9gIlFA/JjujtNwppk6VKm+d0AzpeLm+O6ICNSxBxH71z oGzWjtmZBDXoad98RhpCWErsCjxAU+YsZVkajX43BkgMkdM5VNQszHgjblEWKBOBqVhfkGM33mW a+6e5nAuV3mqaqmKcQnOtE0K1CtRv9hI4ujKxjOF+DIMIHw8VtaqMk7o5CxNcRv+5qeVXFamVgL bQ3jyWy2B+NAU9brU+VHLuN9DvTzA9HncCYEj/1zjA/IILb4cx5HfAik+faGSeYj5h81euch13Y rCfazh5/TrnXzNkTTeFNDjIznQ6uNSlS64mShxFtkIBb4jtmycFk+dGiLSYve2EpaQsMlrhLohO KRxlkrHMMB52H4EhqoQ== X-Proofpoint-ORIG-GUID: q1Xibusb9KltLvONHcypOO4LhIKRTYPS X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-03_03,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.155.12; envelope-from=hugo.komatsu@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, WEIRD_QUOTING=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @nutanix.com) X-ZM-MESSAGEID: 1788440958919158500 Specify that the data_fd field must be explicitly set to -1 by the server, rather than relying on client-side fixups. Clarify that the server must return an empty bitmap rather than an error when reporting dirty pages for unmapped or message-based DMA regions, as the client tracks these natively. Signed-off-by: Hugo Komatsu Reviewed-by: John Levon --- docs/interop/vfio-user.rst | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/interop/vfio-user.rst b/docs/interop/vfio-user.rst index 73282cd2dd..17c0f82355 100644 --- a/docs/interop/vfio-user.rst +++ b/docs/interop/vfio-user.rst @@ -1712,9 +1712,10 @@ structured as follows: | VFIO_DEVICE_STATE_PRE_COPY_P2P | 7 | (not used in vfio-user) = | +--------------------------------+-------+--------------------------------= -------------------------------------+ =20 -* *data_fd* is unused in vfio-user, as the ``VFIO_USER_MIG_DATA_READ`` and - ``VFIO_USER_MIG_DATA_WRITE`` messages are used instead for migration data - transport. +* *data_fd* must be set to -1 in both the request and the response. It + is unused in vfio-user, as the ``VFIO_USER_MIG_DATA_READ`` and + ``VFIO_USER_MIG_DATA_WRITE`` messages are used instead for migration + data transport. =20 Direct State Transitions """""""""""""""""""""""" @@ -1846,6 +1847,11 @@ The bitmap is an array of u64s that holds the output= bitmap, with 1 bit reporting a *page_size* unit of IOVA. The bits outside of the requested ra= nge must be zero. =20 +If the server cannot translate the requested IOVA range (e.g. because it +is unmapped, or accessed via message-based DMA), the server must return +an empty (zeroed) bitmap rather than returning an error. The client +natively tracks dirty pages for message-based DMA operations. + The mapping of IOVA to bits is given by: ``bitmap[(addr - iova)/page_size] & (1ULL << (addr % 64))`` =20 --=20 2.39.3 From nobody Sat Sep 26 20:52:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; 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=1788441011; cv=pass; d=zohomail.com; s=zohoarc; b=n98FMsTY5oMFxFXZ0T9M83U5vj+riGuYVlILjqm+l+KJbFA/PYIIqmR/rTwALIVXmwb8gnW2wJAXKyZdvfo7rK59rcZcYe9xJRiNPdmKtlfbUzTUQwB9c7wJpG68girDZzW/A1K3BDpWXRlXhTcez/ZT/Dxxni8fdfpyH3aXGHY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788441011; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=G4JvIVUy38STgkSmkD9XsYzkIhWsSinfaiNvHo0JXkY=; b=iQ3HfMmTwXbdL8r49zkO7XHngs6dokzz7C7K32kTS8IReH7msKUUEhlH5AiKmZtOWTDQu6Eo02deKNC0K3KuUmQ8bignRMfCK4/B2HOlGqAeUQ5GoHOb2WG05xrttOvopMtqzBuI6vpP0xiPTvPYgJbsa8hahcl+GFyYlIwtnEE= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788441011849292.6288288375463; Thu, 3 Sep 2026 06:10:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x27BY-0004uT-Lg; Thu, 03 Sep 2026 09:08:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27BW-0004sz-2U; Thu, 03 Sep 2026 09:08:54 -0400 Received: from mx0a-002c1b01.pphosted.com ([148.163.151.68]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27BU-0007b4-3Q; Thu, 03 Sep 2026 09:08:53 -0400 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 683CAFiH255409; Thu, 3 Sep 2026 06:08:46 -0700 Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazon11023132.outbound.protection.outlook.com [40.107.201.132]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gf8nm0473-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 03 Sep 2026 06:08:46 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by PH8PR02MB11926.namprd02.prod.outlook.com (2603:10b6:510:40a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 13:08:44 +0000 Received: from DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd]) by DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd%6]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 13:08:44 +0000 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=G4JvIVUy38STgkSmkD9XsYzkIhWsSinfaiNvHo0JX kY=; b=jsT3pnf2TskEJeO13XKsNXqfG+kwTzJdDOLOTbhnXQ9mcl6AUXaNo9hiQ IHC+IQ4i2R1iBWfLh4DIfb/8oIRi4iqInKMmw3EM8k4t2KfrsZOjScS2HtVInJPn CvKGXA3Q6SwAbJd1x4vYrGHg4CAN93BEayyIymx8meCYvc2fDtbbm4tvou6L8pQn 7ra1QutvKh2R1I1GwI9dddR0cZNuqTdmgGqR8nUm60dZ7SPCWqIYNAxNDP9cw2oQ WjEWzfhvf3QJu4Kt2zwomjtf0QC0AChdoMxQQ2GPe46hZSjxDoVolyYv6uKKHWUi BMRRmW9bN/WHLVMxmjp+eCkeWbvxQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fx05eGoxZSr3gR6nTzP+v+b5wHi6bwVgPoS8sKTCSSa0vljaR7cfEBSYh3GnmACyNIwmdJum2Tuz5rXXgnGa9UBOdAo9wA5L+aQ6S0HFESTtIv9iOkodbijdaNIC3tzyN2F+FicJ3VLuE6wzrqe8f7lI+MG4MNSH5c+21J/Yciej42q90HFg56J8rIdfmwwayHH+JUF8QXVpIRIRW4fADm2U5Qd5YPuRQb1tppiIQCTHvdrzZQcW7kDnEgisHuLsS7p2L1vXUqCciTlJ1H6wdlj8Gf5eqm2UTUG/vcfNOO/FyLE4xoBOFNLcasdnBnIW0WJ5d9aVqEiJHc5Fywk2Ew== 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=G4JvIVUy38STgkSmkD9XsYzkIhWsSinfaiNvHo0JXkY=; b=fjlzAN8KTI0uHBalMWB7z6H0k6oK0gJJLk5slVwqnwCbFja4rcMJ3yWFcHeonlqVvVeQCH222FlNbtobY+K0NIOdTa1jY/nMqZTcn+zjxrDWDqiPpSeWtgv14PQBRv0IAVadHruNDEOJeTOllqzH5RKNYapvZnKF20tQylJ947QB4OX2Zrs/hI+ughosMrRCHdUnxLwwyCXH+uriWSN2qufrLbG0Etmk3vTuNCYrivIiBLRWGgSVyFe9cjyFtvCX8nwHZBcfUfxWkSlcvxfzVrw/uzflG38g4pTk3o68SQXl5dTmmuxF4T3h1Ht3+fxoEQ/6aLnWW/LtOyzm/xnasA== 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=G4JvIVUy38STgkSmkD9XsYzkIhWsSinfaiNvHo0JXkY=; b=oWVPZ003PMB8r+iAVRGiMAdoB4/ACR5F186weyHZ1292NXVGwuXIUAGso6H8eo8kEKyXTNzCu0MnfyxEIYWpIsBqFII1h8m7kNquK0otRTZWWRDmDjEzgY0SK+ydm56i/G/Qo7gxxKD+Cr4FMHjmhAEC5jPSeZ0cU/DE+kicq1ocrIm9lsihqOZwozeV90ucFVSDGS2t3X7mNF8KWIbDsFW5GOjiwt4V6iE0PJSPUw5dkriln7hDAnUtejZ2PIAXEtQhr9YJwdpZ3AopSoRT4HpTyn5TjKYvUMUh1p/E7I2CxkJYe7ACroYHLOqbXAIoh+B1GcdvlD2tA3hAA886Qw== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?utf-8?B?Q8OpZHJpYyBMZSBHb2F0ZXI=?= , Cornelia Huck , Eric Farman , Halil Pasic , Jason Herne , John Levon , Mark Cave-Ayland , Matthew Rosato , Pierrick Bouvier , Rafael Castillo , Thanos Makatos , Tony Krowiak Subject: [PATCH 3/8] vfio: route device_feature through io_ops Thread-Topic: [PATCH 3/8] vfio: route device_feature through io_ops Thread-Index: AQHdO6VYcSvndu1zr0SqlsTDC8ckEg== Date: Thu, 3 Sep 2026 13:08:43 +0000 Message-ID: <20260903130833.1437632-4-hugo.komatsu@nutanix.com> References: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR02MB6172:EE_|PH8PR02MB11926:EE_ x-ms-office365-filtering-correlation-id: 716ef00a-d5d0-4b42-8143-08df09bc7b7a x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|7416014|376014|366016|23010399003|22082099003|56012099006|10067099003|18002099003|38070700021; x-microsoft-antispam-message-info: AKiGzLe1kAG6ix8NeAaemjdIJNF9dibxPJE0+2QBqg5uoNRzsqYmTsy8Z8RXGV0sH8ULUL0twzFDwXCAv334qaOHmXb99MLUNbomwnFYBW1Watc3/qQpLj6hIaFlEwH4Kh5Zqr9nnp061G0+QD0HbMFQdFGaaLlEUDvRyg1whJIBv1KevGKgQ17kUrfuQRF1SCoF5e6Ozqy6pzcP2vIrgZfIWEmW+Q0HDNZHlryXEQ6BZ7C9sOzue4NGxE0H9negYGKeu0M/t2PHakbRfzbWOnJsvOMSUEgl2vBf22AjZzHxUy4A+10Tubuk0LtMbTue3Rwr0+zQDpF1Ux/0zuOahJXd9Bnlcz/JVQ9fi4tMMvqsi9VM4BDOFnpcs6PhtaO0CNTN8QBH2TF8ItAuPzsEiOq08j+7D1VLyiReKeMu1vuD1IZ6rnKHYwe5s09yrJqPEMJs+RA5ibJQGUT9xkbda7oE6ErXk9TDV3X51X9xGUSfNRqHuLDkSBxuO48++cP17SJ/FO08CXpfPCmGsaYreQEoJ90uMpNrw7JwmBT59evabaEmhJDpPqll8n6KtuJU7oE2YAYIr4LiVlqx95l1gDfy3ltNLWVCeWmGXdZqKXih/baLxNKyIwgwaTT4r0i79dyZENfjxMbPkMrFSs8Y+SjGgKgi898kVqVP/pFqw7rA5727q3AmAiS+u1oeisS6gD8JdTGZvzCx/BxWDvqODaGzA1BJe/sbke5Nr46seH0= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR02MB6172.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(22082099003)(56012099006)(10067099003)(18002099003)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?RGVCT2Rxa2xFNlRKU1phL2xDM3B1NjkvNENJUW9oYUpnMWE3ZVlZMEFpYmxk?= =?utf-8?B?SWJFakRIYStpQnY2Yy9PRDRCR3RJQ2JHMTNkejRyZ0hIMUg4MUpWcHpWRG5K?= =?utf-8?B?TmJjbUhWdVdWaWcwTWZUbnVjUGc2SHowUXVQNjJ1bW9UVlNmZisrM0RZM1F1?= =?utf-8?B?Njc5L0t0a1haREN2Z3RLWFpVVXZEWU82RC91K1dLS1Y4MzFmWDl4TFcxTVFm?= =?utf-8?B?YUdKcWRWemwrWTBWTzYyeWNUb1FEcEllWkMvS1ZlcnpvRkYrcVd0L2loTTZE?= =?utf-8?B?OVl2ZFlUYzBKRzk0R2tDdXhhNVJtR1lKOGtEK2g0MHVDVzFLTFVSejgyQ1Ix?= =?utf-8?B?K3grOUZVWktiS1ZsZzFlbVAyK3pvUmhFSm9pUVlFb1kwOXV0bTdlZkRzcWc3?= =?utf-8?B?QUxqN1lDMTJFMWNOaFBtRXdHekhVS3cwSFVLbmh3aVBTOXZoVzhOSkxiMmQr?= =?utf-8?B?ZE4wcUZZSHZvUzFsNlJZNVdCWithMjBhY2Y3NndEbUVCM2NIQWFOcHBOUGNI?= =?utf-8?B?cmhPbG9yNWR6cDQ2YU5zMVhHNWJsUEZySk5NbEgyMkZPaGxsa242YnRwSU03?= =?utf-8?B?YnFEcEhuS200Yy9LTEVwZXAvVitKb2sxcmpVUVFMV01ZZTVremJ1SzJyTCtF?= =?utf-8?B?ajVkVldPOURoZklqODRqVXVMMTEvKzVOWVhOeDVBOVBGTFJNVFkvdk12OVdF?= =?utf-8?B?RXRlSkNqWDlPNWF0OXF4Tk9ySEpLZVMvdzJBVmZ2N1Ric3B3SHdmOFdna1ds?= =?utf-8?B?RjBUNThaL2Nta0tsUDNFeGMyUXVISkRmY05JU3pMYUZFZDlMallqQ1FqOXJV?= =?utf-8?B?bFo1T2xQdERJWnpXQk4vTERuSFMyVDZjSHJFSWRCUWxGdEp6c2k0a2pFREda?= =?utf-8?B?VU85d2w3RENGUG11WnhoREsvdkxqRDcyL1kzTVhCU2ErUGpqVS9lK21rbTJZ?= =?utf-8?B?emtYUXo5MTRWNm5ROGljRWR4eGdCTnJDS2RTSFZZZUhXNE5SZjJCNStMVmJZ?= =?utf-8?B?Zm1MSlNnT0pKVENxeS9lalIwS2N0VDNoOExlZlZ1bmpkd0daZ1hBTnNhWlEv?= =?utf-8?B?Ym9qekRvTW1NOU5XU0VMSHBhcGtiQnN6WnNQSEJ5VHB5QmtLRDVvUUFXcXgw?= =?utf-8?B?dUlTTzViKzRhWGlmWVBnMWxSd2llcERxazhvOWpQMmRFUE1vS2J0bDRHem9G?= =?utf-8?B?QnNtRzdGTW5LRDJBa1NKUVd4NlYwL1dwSS9JUTJXWmVpekI4WDNHTEF2bm5r?= =?utf-8?B?cjF4NUh0TWtYNVI0S01RTEkwVUxmRjZ5a2U0WmlIODlqd3JWajlZUGh6SnNF?= =?utf-8?B?SlhIelI1WjhGeGh0OEQvRFk5OTkyV00rckx3cXk5SFhORW9QSVZqUEdFbENu?= =?utf-8?B?dlBDZDJGYU5NR2s0dnJvZWpJS3hnK0oydmQ0cTh5QmVzY0Q2YVNZeDJwVUxE?= =?utf-8?B?ZmlQUEIvTFhjcFlsTmpYS1pETzAzZkRBcjlMRjNQeTFYdGE5T1RYQ2VoMVFR?= =?utf-8?B?bzZUNlVlblRWSVhrWldEU3MxVU05L3dDbEhKTjVob0VITkliTTRSYURWY2xp?= =?utf-8?B?eGQ5M24wMStpVy9iV25FYWlNajExQlJ4Z0Nyd0JyakQ3MUpXZUs1Ni93bndZ?= =?utf-8?B?QVlaQ0ljWmxSVkpMMVBOWlRrSmwxTVRDdEEwWFVXaGFyYVhvNHZwaFVScmxS?= =?utf-8?B?YXh6Ky9yVTUrRUxBeXpBM1VOajBLTmc3c0E2bjl4cWhhMUdmcEdGQWxVWUFT?= =?utf-8?B?b2s0MVE2QSthYk80OWgwQnJWUmRSdUxNTERPKzg0bkJFUmx4Q0pPLzdmS1hQ?= =?utf-8?B?TUdWTkhpL1JJOHVKblh2SCttS0dEMDZGYWt1TEo3bkNDY2JWdGFBTjhVbUd4?= =?utf-8?B?VkdnelYweUN0Qm1vdTFSUDNmcndXMjdJQ3hKMTRNNjg1MzQ5UHk0NW12RVZi?= =?utf-8?B?S2hTT1d6dXZueWVMbFdDcG9RVkwxUmdiWVBITkFNRGl2ZWpqUjdZL25NUWlQ?= =?utf-8?B?anNNQ1oxSFhxaU95dWF1dGswcmxWUTNlUG9ZTEFuRUhSYUNwMmRBZnZUZW1E?= =?utf-8?B?akZvZ1E2WUVpZGpkOWR4Mlp4alFFZEt1bW9saTRJcytJNGN0eTZ5alpGNlpk?= =?utf-8?B?YU1OY05veUw1WjVpVFVzN2pmN2pXQ3V4aGJtaGViVjAwVlY4V1ZaMExib3Qx?= =?utf-8?B?V1hZeFByelFnYlUrTWQwTVlwWXgxQmd2M0hjODRHanFLdjE2ekI3K0hLU0o2?= =?utf-8?B?ZFUwbm5lZSs2eVg2eEdiZ3l6RGV3dG1zUnlLVzlMWUFpNWp3R1NRMmxVVFJX?= =?utf-8?B?cHpoVldZWWF3bWFpeHd3cUlvUVdoSUczNkJBeTdEK2F0ZXMwM2NlUT09?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: hlo0Y2bE8rY+ryvjIq/y7LgfyAbn9i8ROhTWup7a71E1QuHsIbaWsQePHLkEuTIatltZ2xUN9A2WPuO5UPcl/AppuUYsqb74D2WSwOFbYtjDok5kZ+j8o8pqD8KLXlHEMdnZuExpmlP+A1MUVpxC4Cq4lAwKLIVtNtolx/lK3cKmQr9LEeVRkBvKpwUTlKTRo0C7EQmvTMzBlJKkEfqZkSrWqV4vOEDgbTmLOn3Tdk1geoMzRddQxVmp8c4tl6G634IV1P0HpL1y/U7x1SD1Y3fZ+ftMUuMbpNXn7kdiwhfhjf1NEToFzRLIDHegLtCHjplg4Abgi8Z0n751nXRTUQ== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR02MB6172.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 716ef00a-d5d0-4b42-8143-08df09bc7b7a X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2026 13:08:43.9889 (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: d43W9DSDuS0iT+a6N7Uop/3VEE8xHIqdtGjY5W36RQPxtOvGlpqwqoEGvELD+4D2R+n1SmGghIYGVKdDh+8BU2aU5584l34njXJ2RkiOkwM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR02MB11926 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX5dgXCUF7zIt/ D8e0/jVgCdu2MR2CmSAdHNyLE03AlS7FRJJYBC5reqR1tvr39v1qEr8ogWQjnjtFK4ccIv9LjQN qmxYNlqMdFYWI/uJq+Q2npkto0h5mEg= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX4P2sMkESwgLv u/nLC2bMh/Dq+CgULI5mN3wIXj/nEfckZawjm0RsUjv5fkgHX9AOrj3pjeOaal0E/yZJj6aMeY5 21BpDwt92g8huS0ZVOUdRxB/H+C63GOLYzF5ysC5S7Dd7uoGq2IznMR7Xh1EYZc80fWZTN38JRq dVHZvlDaptj9mnfMNO9piut8Ww1Ztk5Yr8eBWtC89jhlbxO4/k4ZTagro/wCLt8ip9JccQy5Yut hfiay24B47ZrW1YeYwjHYiEocIaHBAJAZ3zX52IFoJ+woXNONRD6J+maveTIjCvGIoo7g0hswEb xvJKRXa2SLYKTL0tAWiXUnCfvH1AkQ04tUw7gMWovcC+HiD5T2MeWjkp3mZP3U1hxx6VSN3U3ch yT6aRNbOotHdjAzP4GviAF6F8HrJ0ogtwJLVpBmk9cRKq//MMpEL8s+c/Kt7jRGCJJ8rcOurJF4 IZzLJKtV7IzcTDWinUQ== X-Authority-Analysis: v=2.4 cv=TK11jVla c=1 sm=1 tr=0 ts=6a99715e cx=c_pps a=QUIaisbnC9uoo+9AoKvuvw==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=y4UcunY2MAxhM4LwGdWI:22 a=64Cc0HZtAAAA:8 a=zJUJncWPgEQX1PoTMd4A:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: S8-DcXpIqMjVi--z2oE5qWguxpjIINo4 X-Proofpoint-GUID: S8-DcXpIqMjVi--z2oE5qWguxpjIINo4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-03_03,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.151.68; envelope-from=hugo.komatsu@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @nutanix.com) X-ZM-MESSAGEID: 1788441014476158500 The generic VFIO migration code in hw/vfio/migration.c issue kernel ioctls directly for VFIO_DEVICE_FEATURE. Route these through the existing VFIODeviceIOOps table so an alternate transport (vfio-user) can supply its own implementation. Implement the kernel version as a thin wrapper around the existing ioctl() call. This is a pure preparatory refactor: the kernel path is unchanged. Co-authored-by: Rafael Castillo Signed-off-by: Hugo Komatsu --- hw/vfio/migration.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 73c49d8c24..ea6734823b 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -168,33 +168,30 @@ int vfio_migration_set_state(VFIODevice *vbasedev, feature->flags =3D VFIO_DEVICE_FEATURE_SET | VFIO_DEVICE_FEATURE_MIG_DEVICE_STATE; mig_state->device_state =3D new_state; - if (ioctl(vbasedev->fd, VFIO_DEVICE_FEATURE, feature)) { + ret =3D vbasedev->io_ops->device_feature(vbasedev, feature); + if (ret) { /* Try to set the device in some good state */ - ret =3D -errno; - if (recover_state =3D=3D VFIO_DEVICE_STATE_ERROR) { - error_setg_errno(errp, errno, + error_setg_errno(errp, -ret, "%s Recover state is ERROR. Resetting device", error_prefix); - goto reset_device; } =20 - error_setg_errno(errp, errno, + error_setg_errno(errp, -ret, "%s Setting device in recover state %s", error_prefix, mig_state_to_str(recover_state)); =20 mig_state->device_state =3D recover_state; - if (ioctl(vbasedev->fd, VFIO_DEVICE_FEATURE, feature)) { - ret =3D -errno; + int recover_ret =3D vbasedev->io_ops->device_feature(vbasedev, fea= ture); + if (recover_ret) { /* * If setting the device in recover state fails, report * the error here and propagate the first error. */ error_report( "%s: Failed setting device in recover state, err: %s. Rese= tting device", - vbasedev->name, strerror(errno)); - + vbasedev->name, strerror(-recover_ret)); goto reset_device; } =20 @@ -347,13 +344,13 @@ static int vfio_query_stop_copy_size(VFIODevice *vbas= edev) feature->flags =3D VFIO_DEVICE_FEATURE_GET | VFIO_DEVICE_FEATURE_MIG_DATA_SIZE; =20 - if (ioctl(vbasedev->fd, VFIO_DEVICE_FEATURE, feature)) { + ret =3D vbasedev->io_ops->device_feature(vbasedev, feature); + if (ret) { /* * If getting pending migration size fails, VFIO_MIG_STOP_COPY_SIZE * is reported so downtime limit won't be violated. */ migration->stopcopy_size =3D VFIO_MIG_STOP_COPY_SIZE; - ret =3D -errno; warn_report_once("VFIO device %s ioctl(VFIO_DEVICE_FEATURE) on " "VFIO_DEVICE_FEATURE_MIG_DATA_SIZE failed (%d)", vbasedev->name, ret); @@ -1094,11 +1091,13 @@ static int vfio_migration_query_flags(VFIODevice *v= basedev, uint64_t *mig_flags) struct vfio_device_feature *feature =3D (struct vfio_device_feature *)= buf; struct vfio_device_feature_migration *mig =3D (struct vfio_device_feature_migration *)feature->data; + int ret; =20 feature->argsz =3D sizeof(buf); feature->flags =3D VFIO_DEVICE_FEATURE_GET | VFIO_DEVICE_FEATURE_MIGRA= TION; - if (ioctl(vbasedev->fd, VFIO_DEVICE_FEATURE, feature)) { - return -errno; + ret =3D vbasedev->io_ops->device_feature(vbasedev, feature); + if (ret) { + return ret; } =20 *mig_flags =3D mig->flags; @@ -1137,7 +1136,7 @@ static bool vfio_dma_logging_supported(VFIODevice *vb= asedev) feature->flags =3D VFIO_DEVICE_FEATURE_PROBE | VFIO_DEVICE_FEATURE_DMA_LOGGING_START; =20 - return !ioctl(vbasedev->fd, VFIO_DEVICE_FEATURE, feature); + return !vbasedev->io_ops->device_feature(vbasedev, feature); } =20 static bool vfio_migration_init(VFIODevice *vbasedev, Error **errp) --=20 2.39.3 From nobody Sat Sep 26 20:52:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; 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=1788441020; cv=pass; d=zohomail.com; s=zohoarc; b=VWyhQ1uB1CuXZZ2IpSbXZekK1XMbjabYF7a4EcJ9koUkEHsx5DGBnU61rieaF8WhbtfL+fkxw+kXjXWKz9+9TD+AjJq3SdwnATmn54J/cYTD/jzOaoG4ovmybXZmiOqtSxgDbHnJIwWdlNCEwdzZKv4fN+D9sIslCEIV5r8yo9o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788441020; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Q6hekypY2LJ/ySKwbHBbrCgmvIjmW8XLx6zwnZScVmE=; b=dX5DNCsgt1wmNCohTL4/wZfJ6zILrEGcqcw1TYZGxWMKCUNqWYu+kyFvseeiDWRY7kqSz/KcSnby0GkYpXCKsYKYPJXtlXVtkzGwcqVXNblSZSnMh0BPR/x0Mtbq7RUzExGGtbnU959RY1eExG8YOZxmL5soA72mqzbndqYByLY= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788441020586707.9488222300215; Thu, 3 Sep 2026 06:10:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x27BZ-0004uu-Jw; Thu, 03 Sep 2026 09:08:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27BX-0004tv-KJ; Thu, 03 Sep 2026 09:08:55 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27BV-0007bC-0E; Thu, 03 Sep 2026 09:08:55 -0400 Received: from pps.filterd (m0127844.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 683B08kU135535; Thu, 3 Sep 2026 06:08:47 -0700 Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazon11023129.outbound.protection.outlook.com [40.107.201.129]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 4geduy415m-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 03 Sep 2026 06:08:47 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by PH8PR02MB11926.namprd02.prod.outlook.com (2603:10b6:510:40a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 13:08:46 +0000 Received: from DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd]) by DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd%6]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 13:08:46 +0000 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=Q6hekypY2LJ/ySKwbHBbrCgmvIjmW8XLx6zwnZScV mE=; b=n2IiFY9fWfFPKUKa86P5ZIjD67nluMioJ6I1NTMxgkEORzZJOolph71uu z6tmlTbAKMgpo5juOwMf4j9O1HLUsRN0HjSBEPKOaZVkvPFwPkYgcWDyk4KmCNhH BpfEeyMUWWnmSvGxXcS5uezkH7aIVAQBF+DlhXr3HQSPI5hDcP44o52QOe/vsR5Y HHyFA32BDMR97vM5KgV+Etr6syKDX4fkA3gtpUbzBslpOc5IjVPIyo9o8G1hGc42 4GMXfviKlltT8Nd6CF+3TNhIT7jYylciVC9IcHzb1BVZNDJwZ/866/ryDRvD4ANe 6d/iwQpyjGELAA2ukcfusC/Mr7CgQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aBnEBLvwgo4X/YicZ6MUh50R5i6EIqAKyvZohQCo8x53F9ZxfQhUfDfD3V5iNttNYqHem5IOunt9FSZnRp9PrqdL5XOxIgVcUOjwYtCEnnZbkjCHpM0UUqLK7WAycROP/0aLaPs5O8YQEKTSgX72zfpIJ6nDC1peyncH6vciyA3R67PV7maDNFAqyiYtyYWO+M8Kdo+gbcMSyLGts6cv0VlxV1Do07dEKo/wYZrAd7V1p+rMmpR3krOws1wG4e8VGn9gOGFsLAmC/cNShzmAe9aR78EsquGTzx/WUQG9b8qy+lwer9i5RmoYdN4vLWYdo6J01O7ZZmrVJImvSZ/cwQ== 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=Q6hekypY2LJ/ySKwbHBbrCgmvIjmW8XLx6zwnZScVmE=; b=E80gwmxxzkrOF5EQ2GPA913JXqvD/mYdvP98V+IAAHRQLRsAF/tqpVANUoGhmdQgyBcGYehFmmEiOeMeJpUgCxzNt+mbqHxXVQgCCxnkYUffOtutfOyLvHsghyAhIH4TLjT3xnstXOHYsLlsgz4qre2QjKVYdaG4uUUnjPWTxHjKffroWw/6C89CckX3dIx6PXv/eIEB7deWeASsUMSV3DhczXlUAf5GYc3HUKHJxFP2ctvEM4X/wd2dGOz6JVh9I6ssLb+RvNzD420pMMM/VJ8fGv+57Ugxj1gmQ10IPwDUHqhE1JXIAJFkMuSBKIf4V7PjuYvg6DRYOh2hkXidKA== 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=Q6hekypY2LJ/ySKwbHBbrCgmvIjmW8XLx6zwnZScVmE=; b=zDlo91okCFJF62KzCLmjXdUs4TWANdiJeE++LFuiELtGuqJ7tmdFCjIt00/+zH68ehRf8zIiMlO/Oh1oEfp7B/u6hRX4ybY/SrwNQQ3zb9Mp48tIbRKJTiRv1IKK1WHy1LuEKxnF0gkLpJO2M+BUSaa3WOP8stN6XzDJBHg4TqHV1jGBq8Bm36i4HpVx+Gm68YugTihYtp5GCK+Gb1gsjKCUg4r8LYGHa0/Lf8P1zvZfFGMLWU5SHB6RrcOZLxtbv/lDTlgay0xO1F3qNRLG0+to3nv9wrCOzRp5tiLX70Or+LBkN9wP7Bg0Gs1euUSUJ41578/8Ra+knWw59dscvQ== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?utf-8?B?Q8OpZHJpYyBMZSBHb2F0ZXI=?= , Cornelia Huck , Eric Farman , Halil Pasic , Jason Herne , John Levon , Mark Cave-Ayland , Matthew Rosato , Pierrick Bouvier , Rafael Castillo , Thanos Makatos , Tony Krowiak Subject: [PATCH 4/8] vfio: route device_reset through io_ops Thread-Topic: [PATCH 4/8] vfio: route device_reset through io_ops Thread-Index: AQHdO6Vabc6l4bj+6Eqm5jrrBb4gUQ== Date: Thu, 3 Sep 2026 13:08:45 +0000 Message-ID: <20260903130833.1437632-5-hugo.komatsu@nutanix.com> References: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR02MB6172:EE_|PH8PR02MB11926:EE_ x-ms-office365-filtering-correlation-id: 83be81ad-7cc6-4a4f-8f46-08df09bc7ca4 x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|7416014|376014|366016|23010399003|22082099003|56012099006|10067099003|5023799004|6133799003|18002099003|38070700021; x-microsoft-antispam-message-info: EL/htg5bVfsiBbVV4cSgq6CuCqY5Y3BYzmX56NqHNWzQqF5XM/GEfhAJGbBaKXSQOTJA4DKZ5k10LAlyYHF1HLJ0ST7Dh2NinlRHPPy7w8THub/0fkqL8ISAfaN/SINXYzNboDJPBfIcd6u6cTsTAbtKPfZjPv2jeIZbs4Ub02WN4e6pwp0oJ0/R8GOmnsYgvtBg/e3MAPUpe3kFXXP6hC+lboxOw7nmhoT1A33jss56kFCcVWkd4FPZh/TgGTajNf6DFG+AN93p4LiO4ItTsMnxxlfFepYInpNwNOb+kOpaNJg9Yfae4hk4ge8kXlxUijyBZP3EHk5H+WLgASlzhLK1VZG1rTD83f4nMva0oQhnsX1jaH1QNVeO/rA951VllzUlcAs4+zh1Ftwroa5ainhVvkieSpzIQysWFOwIh1oGnifAyhjpzp6EnlqgXbGK17GAXLSC5hK1vPOn+F4/3hbezZgGjWLhZzs3GPeyEAK5l3x76v9dikkDR9DJDh54ZxJLEn7IOmpNiy9PC0F5tZfg4x4CD6D5pbvkwLcM3ZsOh4sYi4wenFQsJmokoYvU75BjM3KZaEOv4EIYNt8qtb9tgBoX8Wdqa3aDeijM5hPbSOG9x0SCr66ziC1z3grB3/xVpuG5du3ufJ55EOzNQcs0XNja/xGXd729DWYNNLW0zEgmEN8PArdN095EqztIhc/SUYbRoHOJLtlycU42l24ReT9UuFspAcK7JEv/W0U= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR02MB6172.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(22082099003)(56012099006)(10067099003)(5023799004)(6133799003)(18002099003)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VXA3c0JvOW1ETStXbm42NXhUOWJuS3BjOThrdFgxTjY4dHEzeVVkZTRjN1VL?= =?utf-8?B?SUFBQWdsVEt4Rjk4UG4yZnVvZ2EybCtaTjVyQlZlWGF1czRnTTdyTXJ1aVBF?= =?utf-8?B?L1A3SUovN1VsMUZCY2Mzby9QYnZIS0NsQTZCRGpRVFBFckF1SzVZUnRoYkg1?= =?utf-8?B?TUN5TW05TkJJRDNyUUpZem5aTG5heVZJZTdWK0pCM0xiZDZUV3ZSSFVZZytP?= =?utf-8?B?Y0NKQUdadjZDVnBtTzd0cmdQMmRRRHlqNGtVa1lZeFhNQ1g5Ylp5bFhvNVc2?= =?utf-8?B?SXhGSkdXOGdJckExZ2ZMSkovZjd1RytvbWRZb1doNHgvbHRHUHhkQkdrbUdj?= =?utf-8?B?VU1vVkJEdDR0OXBFZkNiTHg4LzBXRzF0eVBsVmx2bG5wb1N0L1Q0UTVYTmxl?= =?utf-8?B?MFNNWkVBV3VWakJQMDE0eXJ1WGpPMHBlcmoxdVJMVzdIaFhiR2V6eXBKTkd2?= =?utf-8?B?NTBFSXRmQ0lJVnd1WlgyOFZLTmpIdnVWb0VHVDZMRjk5dGVEOGRRTzZudWJ1?= =?utf-8?B?VmZlZnBnNHVXOWVzWGZ6a3FOWVRldXdMdjEwZFUzc3NabmxPRTJtc1VFSzYr?= =?utf-8?B?ZmpWQjBKdUtaN255TXRNVlkzVWpKRXVWVDk1aW9ESFVLOHVaYXBwTVFGOW5n?= =?utf-8?B?ZGl6Q0ZRTkxrSi9LTVFFdk1ubWEwZDhNWi9xb0h1TzNMMDUrbGgvYkxaMFpO?= =?utf-8?B?ejR2U2U4cDVUcjdBWHVUcU5DR0R2cWRNM0FCMXJkZGFmbWF0MDZsbjZ4SGVq?= =?utf-8?B?bGtuNUxVWXNOU1Ntc09TYTlkczdRSXdqVHZDUm5BUE5adnFYRENHai9VQ2ln?= =?utf-8?B?blZQbG1DN241RkpTV1h5WDlEWmZaV3RJK2JySTRKeC9oT0NuL2h5RU5GVEIz?= =?utf-8?B?ZFRVZnZXZTE2RFVxeEhEc3BHdFdHS3Y1Z2Z4WWVxeCtMRGdjTnhDU1R0RHo0?= =?utf-8?B?emxBOEpFeUczL0dTblpOU2dNZVBocGRWVGtubGNDUmxZWHovUTk2V2Fha1g5?= =?utf-8?B?eW5jRXloWUVLSmVta3psVExJWUYybTJLdHVycmdhTEJTb1d1b05FQXVENkxI?= =?utf-8?B?czR5TW1JVE1TTTE3SDI5bW5iblJYMVFuWW12WjV0Qk9UbVowS0oyMHljQ1p6?= =?utf-8?B?cjZSTlE1aFJuOWlsVXZhbjhnRHF1MEdlSURwNU93QVhyYjBQeDNKR3N2TnIw?= =?utf-8?B?TGxuTEtQanR1eENsS0xHUmZuZHlJalNXMnh3d2tVNWhpL3ZTNWVEb3p4N01E?= =?utf-8?B?Zi9sWDEvQ2s4QjF4TjIxSDJ0TXJSbXlwcmtpdjdWaHJmZmhadXZOYlVRS1ov?= =?utf-8?B?TGxta1lwWmJqc0w3R2J5dTFyUTdQQVY0SjlkMVgzVGJ4VWhFMDdnUHp4YzRS?= =?utf-8?B?MUFPaXVCRTdDeTh0OThrM2tHMW1ydjZFbGIrSlB4cEZyTGJZYnNheTExaC9D?= =?utf-8?B?L0ZnbytLcFhHbXBVRW5TNmlEc3dvY3poWGZHcDJmZVBSZFZYUTNhV0Jja3hF?= =?utf-8?B?SVBaMUlLb2NOOXJPR25wU3hpVyt3d2RQdnVsMnZDMUFyNWVpTUhoVGl4Zzlr?= =?utf-8?B?cVRyYWpMOHdvN0ppUTV5eFoycWxWNTFUdzIwY3NFTmNIcVI1alJpY2hodnY0?= =?utf-8?B?SXMzMU82b21BdlJ4KzZwL3ZTWGY5bndWYzcwaHYrcjJXMDZna1ZDekJ4UFdi?= =?utf-8?B?dmlrYkVMSDBWcllJL2xLNGROQzlRbk9HRDhmNGFDVi9Dc0wvcExaaXNhdDg0?= =?utf-8?B?U3hPZnJvb05GRVVRNFd3dEhnNjJXamJSYmpDSE9xVTRmcGRaSFpUNWtWd1hl?= =?utf-8?B?MGl6OVRyUm5MVXFoMG5PTjRzRkxqWWR4NmZoNkNJbms4a1VTQ0tab0o2Q0RY?= =?utf-8?B?aGZVMlhHNzBhTm1LbW9oV0hYamVzMlRNUXpIdWNhVysydElsb2F0ZFZsTnor?= =?utf-8?B?K2xTdDJ4SXdKTStvRCtvNE40b0ltOC9oaTdLREVrMEVwMmk1Z1hFZmJhZGtp?= =?utf-8?B?TENBd21WOU9yalJtdkNEdEU0VkxsQWlRSzh6SSs2ZnhkYm5aT0pxbnJDT1Rq?= =?utf-8?B?endXQWl3bFgvak9zR21tWVBOVzRUbmQvZG1HU2N6bWw3MUFOUkRJSmJtTll2?= =?utf-8?B?bkdKSndDVDV5ZDVMUlYxWktrYlo1V01vSjl0bXhPU1ExWndWbDEyMEdWMkV6?= =?utf-8?B?TXJxL3JaY3FmMjlkcy9KNEh2QVExaVBTZFArbkVtenB3bURpS2NZNnlzN0JQ?= =?utf-8?B?VXFxRDdqeERrbjJyVU1aa1I3WG5HV2Qyb3VwcUVGUkRrcm1tYWllN1N4MSs5?= =?utf-8?B?UlA4TVhkY2pOZUd5VDN2Zm1BaGtRbTRzMkx0MDUyUktweVkwcG4wUGNRb0xk?= =?utf-8?Q?kcdeT1BE74JQ1zb4=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: FQW6YHE+p9p3PE/TIMZg/XFavt2rpLLwRTveMX9AFH8ZLC71y6qAvUpDHewBHCKXZ/z4RfrJy63sXWX0wJ7RKs4sSV1u4Siy46BBYlXs2U8OlTM5/CxhpB6QOGcMdCdIDLpNtcaroIxeV97d/aPkCOsNHctVcFliGFybW1u+uE8rxNa7i2r7oPfqyMR98lMk7LcJarFrBGumb58oFOJJMp8xUjrQVPuAWLYQEN5/63Amp4bCUU+6+D9Ai7Ltv7naC6Lah932iKagPm8gJbp7Ys7PXlXjZgbBtEAUmXURMBHm8lMaLoG9zYPFD5KnQk7IseCWWBtlmAEYx35CFNBIMg== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR02MB6172.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 83be81ad-7cc6-4a4f-8f46-08df09bc7ca4 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2026 13:08:45.9089 (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: fkSFPYaOviMbIcbwfoCaRx3zIRjvLgIm8M7tIvpHLsIdfAJJ68FNMmU+Y0tGV9TO+WpmWCzRECcM/olUv7Xkg3ZmNMUUH+ZxRAp+zGK6x9g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR02MB11926 X-Proofpoint-GUID: iL4VF1hjDL1TuuXHM_uxWE2IuKFcTElT X-Proofpoint-ORIG-GUID: iL4VF1hjDL1TuuXHM_uxWE2IuKFcTElT X-Authority-Analysis: v=2.4 cv=SpWgLvO0 c=1 sm=1 tr=0 ts=6a99715f cx=c_pps a=roYWoV4TocsuA6t8t8h9Ow==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=0LlEyIVc8U2lsR7dKhuH:22 a=64Cc0HZtAAAA:8 a=chM7D27z34fU7Nou4gIA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfXxqDNtNT87QHO xr9/88sC/1+YgOyS+RNoNpp+eRFfbEm7Ijk72tKcpXgN8T/BCj92xtsWiuNhJqUFxca0YccsoIN ZUbdmOvLZP/ibSZQPtt+S3xezG5kR14= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX67AhPtXy7uR5 soePr2LLW+OIPJY/Nbz0EHr9tlqyX0ZRz2C3z9B3RnLYPwF1MTWyFrSzw7lmFoMWXPUJHTfbVzW QzuuXzWmr+/qFvSq/HnmRQhUFQ8BJthpgGR1mke+fZj694Ws1MdVLSkLqtDC1PLTE4J/QBEedh6 THISNw8mnTumjKLBnwQCqMACYI5AcN+C5VPD7uLornYdHurWvn+D/1OSJxmhfANwOcC6BCpmhr3 t5Y6oeipx3wPeFIesdB85BO2EmWLcOeUl7IsblKsFOnjX6Nynagqjrft/sfCaYaUnpuj64vlSMI bjUxKpwiHFrD1+aunEKDXE6roKkizkD0v/OX9EDEBTwtGAvNtgOfskdZtHLTnIM6Wtw3cq75//T LoGbV4Gd/BGa1Zv4gABuVTAbO5YqthNaFxDn0Ocxh1T8t1yso8Vu2xHatLsvAXB5Ww+/j1T/uWK zL/HWmN0O9G1U3ht5wg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-03_03,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.155.12; envelope-from=hugo.komatsu@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @nutanix.com) X-ZM-MESSAGEID: 1788441024251158500 Various subsystems across QEMU issue kernel ioctls directly for VFIO_DEVICE_RESET. Route these through a new device_reset slot in the VFIODeviceIOOps table so an alternate transport (vfio-user) can supply its own implementation. Implement the kernel version as a thin wrapper around the existing ioctl() call. This is a pure preparatory refactor: the kernel path is unchanged. Co-authored-by: Rafael Castillo Signed-off-by: Hugo Komatsu --- hw/vfio/ap.c | 4 ++-- hw/vfio/ccw.c | 2 +- hw/vfio/device.c | 13 +++++++++++-- hw/vfio/migration.c | 7 ++++--- hw/vfio/pci.c | 4 ++-- include/hw/vfio/vfio-device.h | 11 +++++++++++ 6 files changed, 31 insertions(+), 10 deletions(-) diff --git a/hw/vfio/ap.c b/hw/vfio/ap.c index 6e2a1223ea..3f7652b4e2 100644 --- a/hw/vfio/ap.c +++ b/hw/vfio/ap.c @@ -288,10 +288,10 @@ static void vfio_ap_reset(DeviceState *dev) int ret; VFIOAPDevice *vapdev =3D VFIO_AP_DEVICE(dev); =20 - ret =3D ioctl(vapdev->vdev.fd, VFIO_DEVICE_RESET); + ret =3D vapdev->vdev.io_ops->device_reset(&vapdev->vdev); if (ret) { error_report("%s: failed to reset %s device: %s", __func__, - vapdev->vdev.name, strerror(errno)); + vapdev->vdev.name, strerror(-ret)); } } =20 diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c index c3dc7c1962..6d5307e568 100644 --- a/hw/vfio/ccw.c +++ b/hw/vfio/ccw.c @@ -241,7 +241,7 @@ static void vfio_ccw_reset(DeviceState *dev) { VFIOCCWDevice *vcdev =3D VFIO_CCW(dev); =20 - ioctl(vcdev->vdev.fd, VFIO_DEVICE_RESET); + vcdev->vdev.io_ops->device_reset(&vcdev->vdev); } =20 static void vfio_ccw_crw_read(VFIOCCWDevice *vcdev) diff --git a/hw/vfio/device.c b/hw/vfio/device.c index 4f11959633..e7d293710e 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -578,9 +578,18 @@ int vfio_device_get_feature(VFIODevice *vbasedev, } =20 /* - * Traditional ioctl() based io + * VFIODeviceIOOps implementation for the kernel VFIO backend. */ =20 +static int vfio_device_io_device_reset(VFIODevice *vbasedev) +{ + int ret; + + ret =3D ioctl(vbasedev->fd, VFIO_DEVICE_RESET); + + return ret < 0 ? -errno : ret; +} + static int vfio_device_io_device_feature(VFIODevice *vbasedev, struct vfio_device_feature *featu= re) { @@ -659,7 +668,7 @@ static int vfio_device_io_region_write(VFIODevice *vbas= edev, uint8_t index, =20 static VFIODeviceIOOps vfio_device_io_ops_ioctl =3D { .capabilities =3D VFIO_IO_CAP_DMA_BUF, - + .device_reset =3D vfio_device_io_device_reset, .device_feature =3D vfio_device_io_device_feature, .get_region_info =3D vfio_device_io_get_region_info, .get_irq_info =3D vfio_device_io_get_irq_info, diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index ea6734823b..1941678e29 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -142,7 +142,7 @@ int vfio_migration_set_state(VFIODevice *vbasedev, struct vfio_device_feature *feature =3D (struct vfio_device_feature *)= buf; struct vfio_device_feature_mig_state *mig_state =3D (struct vfio_device_feature_mig_state *)feature->data; - int ret; + int ret, reset_ret; g_autofree char *error_prefix =3D g_strdup_printf("%s: Failed setting device state to %s.", vbasedev->name, mig_state_to_str(new_state)); @@ -219,9 +219,10 @@ int vfio_migration_set_state(VFIODevice *vbasedev, return 0; =20 reset_device: - if (ioctl(vbasedev->fd, VFIO_DEVICE_RESET)) { + reset_ret =3D vbasedev->io_ops->device_reset(vbasedev); + if (reset_ret) { hw_error("%s: Failed resetting device, err: %s", vbasedev->name, - strerror(errno)); + strerror(-reset_ret)); } =20 vfio_migration_set_device_state(vbasedev, VFIO_DEVICE_STATE_RUNNING); diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 428ab2f069..12f2974d19 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3785,7 +3785,7 @@ static void vfio_pci_reset(DeviceState *dev) =20 if (vdev->vbasedev.reset_works && (vdev->has_flr || !vdev->has_pm_reset) && - !ioctl(vdev->vbasedev.fd, VFIO_DEVICE_RESET)) { + !vdev->vbasedev.io_ops->device_reset(&vdev->vbasedev)) { trace_vfio_pci_reset_flr(vdev->vbasedev.name); goto post_reset; } @@ -3797,7 +3797,7 @@ static void vfio_pci_reset(DeviceState *dev) =20 /* If nothing else works and the device supports PM reset, use it */ if (vdev->vbasedev.reset_works && vdev->has_pm_reset && - !ioctl(vdev->vbasedev.fd, VFIO_DEVICE_RESET)) { + !vdev->vbasedev.io_ops->device_reset(&vdev->vbasedev)) { trace_vfio_pci_reset_pm(vdev->vbasedev.name); goto post_reset; } diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index 8472420d3f..a8fed550eb 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -191,6 +191,17 @@ struct VFIODeviceIOOps { */ uint64_t capabilities; =20 + /** + * @device_reset + * + * Perform a device reset. + * + * @vdev: #VFIODevice to use + * + * Returns 0 on success or -errno. + */ + int (*device_reset)(VFIODevice *vdev); + /** * @device_feature * --=20 2.39.3 From nobody Sat Sep 26 20:52:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; 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=1788441020; cv=pass; d=zohomail.com; s=zohoarc; b=fuT+Y47TjMq8utXGakecmEcyMaHoRZzddP6W7g+WBqtMgK11T3ztsEUZbgBLJNB52iJNriqzgK2eEVveJVq/ckBBAbumRiul5ujWvwgV8UIUf463qDX7e8/kMxIREvHgxPxOdf8dBtX20syUJtkZOAuClWaZtu4IA83UAeUK97s= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788441020; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=u/CTrA4jDyp4JO3aB5qDB/g02ei5IAvsTWwcq1prJpg=; b=GKoO3SxVJOyf7rXb9FuYcoixpUOF3OFA5vUm5OG6up/rWzZWjl4Tf4YsxWqc3zdsbT8lHhm0M8DJLTM45JPJg9K7VnSTqWYKrzjIZxvfJSA2Z64wyp2hE4cmzfEjAEsym6mj3rVRU5HZ1jH+RLLk8+AFw+NfhcRqsiecXS3NSwQ= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788441020815904.1663277244862; Thu, 3 Sep 2026 06:10:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x27BZ-0004uj-4y; Thu, 03 Sep 2026 09:08:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27BX-0004u4-Uz; Thu, 03 Sep 2026 09:08:55 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27BV-0007bP-MI; Thu, 03 Sep 2026 09:08:55 -0400 Received: from pps.filterd (m0127843.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 683AIsZ8230305; Thu, 3 Sep 2026 06:08:49 -0700 Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazon11023138.outbound.protection.outlook.com [40.107.201.138]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 4gf7180c7k-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 03 Sep 2026 06:08:49 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by PH8PR02MB11926.namprd02.prod.outlook.com (2603:10b6:510:40a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 13:08:47 +0000 Received: from DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd]) by DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd%6]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 13:08:47 +0000 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=u/CTrA4jDyp4JO3aB5qDB/g02ei5IAvsTWwcq1prJ pg=; b=hwikXWhNt0dUM8ouXWhrsJIpONv/nee22Aw5H0Wl1T59/JRR66lRYknBG UrkgZGYpt7Ea0xkjtACys1dNwtGNps22wo9Dl1dP2Tu5rXljSGHSRQflO2O/GceH kPchXyIaObRViRGGjUWrq9y6DJYfJTDLN0bJsMcFvmQ2UrrpmiApHMQ8ldK6mRpo Igw/ybphiRa0PEYFt7TKhSB0IxFi1ba7CyS1txzocL7c8o4P0rldrcxKXRnDxVAO cNv/mtvjCBIa+Ug5GfKSO+f+At2QUSFgXw8YvXX0wZwj4N8GuB4GB/KeoQuU2YUc 01pfTlNXtUuc0pSVyAIrp0c5IK1JA== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UrZL/gWuGpwBHO8sHUZGsKZJQZMzgmlLbEDJPEk4LF3ttiMdEIyJoizYMXUDqiqyeXU+VfHPxhMHV15XAwpR4PXopeUGogxP2+t9dMnMpn2TLV5SKOzPgy7DknPcDP1gLff5RH2MlB6GGd6Juf1XNC8P7BXl/9+DOH7dQm/v0YMexVXWaDm7XPxT8ghQkSP0f+TUEbwSF+J+HA5KWf53TRKxU0AIvWcAAhjkwlUDk/xKwNtWRWVkHLIPDi2+zfdLsLzu0ud3Rnzi1OJn3zC0OdFJyFlyTARp5Fe1JQg+lEhxRQv7YrUp4nbHU8dzgj68Z6+mb1A28NMm043GmOPBHw== 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=u/CTrA4jDyp4JO3aB5qDB/g02ei5IAvsTWwcq1prJpg=; b=Dhg7OwvR0ai/+iH3bzUOf0k5/7HC3STtaeeXOjiHj4aPzp7DHViu66rp3z1EMNbgX3z+Dmxhj9ryh9NkimGGG2U44sz/JdR4Fbe6JpUjDySbID6ptGOmMRBFWP0cZw17hQcl2pP+pkCs5043AovRobIgv42+vmsQZSjipIUriXxDy27xCHOtW5mx9r+pdtlhrSLCQxAdfi4HHPe9jGd82MjsZZLhjpZ+40jN80dqvGgqESJ+IS470GN6WPY0MT2BACWSXY2NVCi2Ju0gkAHcT4A7lFliHETM68wpaehbGx9JbhBK0JUqzs9Acqc9IItq5bxTxlvCruKy4bNAN1Aqqw== 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=u/CTrA4jDyp4JO3aB5qDB/g02ei5IAvsTWwcq1prJpg=; b=Oq8aHT2eG95I9G6bHKMkzsn2t2jZEyXRwp4Q1E4Cl5vbJppc5eNTuOOjPP1Gm6IdqOWjqK2FIsnvKBkyTxOVP4eUEp19FHHgTgOA7g3DOmemZKfA1Y1xMHK+MHK4d98hd+a5QmmhNhra9k7L9c7zHO4bTIiRycsSH6Gl3prQlBeLayAgMk34tdxwLNLX0tMjIwnRmpKTTLZPk2J7g89GYLyEGp/Io0ff3ETNIh+HR+T2eqF14xa6WSVOKHYtSQ3/Di7vgL3flnyFYKCfwqz74o5dBPbRBqoKvETQ89wrJgdqXQ79hw8QKOGbKB7GlIx5qv9MHUjTxI2F+ptmzjwssA== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?utf-8?B?Q8OpZHJpYyBMZSBHb2F0ZXI=?= , Cornelia Huck , Eric Farman , Halil Pasic , Jason Herne , John Levon , Mark Cave-Ayland , Matthew Rosato , Pierrick Bouvier , Rafael Castillo , Thanos Makatos , Tony Krowiak Subject: [PATCH 5/8] vfio: use io_ops abstraction for migration related ioctls Thread-Topic: [PATCH 5/8] vfio: use io_ops abstraction for migration related ioctls Thread-Index: AQHdO6Vbi86SFk13E06UiZ7I/RzDqw== Date: Thu, 3 Sep 2026 13:08:47 +0000 Message-ID: <20260903130833.1437632-6-hugo.komatsu@nutanix.com> References: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR02MB6172:EE_|PH8PR02MB11926:EE_ x-ms-office365-filtering-correlation-id: ab290065-bd0c-4dd8-8cc6-08df09bc7dc4 x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|7416014|376014|366016|23010399003|22082099003|56012099006|10067099003|6133799003|18002099003|38070700021; x-microsoft-antispam-message-info: R25Wp/QrjcK9KHU2RG/0b8PSAMiqHUua+6ZJjLDfHqSHD93mU+BXEW6LqQ8UK2pu8XxrZnIcGr1tTqtIZE6gbjoSNuZ4oT2cvMv5t46MZc6yJxkH01hkJcHZvreQZ+qFwkBd0zqkFM8HGUXZqMgYyBBFTIuscNKVyWA1uK3l2XFwP9gtr7gh8Gp8hJdvkqv8lsk6Vt5dKNKaNSx2OgEgLGjpxCoMiD9sQRgkAbxb0nhmGHvDurVa8A+urGvTh3EuPc2ovry7WV8eDtuFgKTWJ0dKdKbxYY3AaIPAvKGE7h4oZorH5rblB4AuxdsSzFwbwJLqZKtkybBl3fIE9ht279KsmbDiSvfYhHXMMeF11hAS92WZ4VlZqr24zK54LPWzR0L9qMwL0fJZPbeIxwO+eccnD0SHPD1CmafBQm4pJLtM4y+qbsvDrF0S8Kz9EnPuzCSYE5n/upt0RNV8OmZqOgsuomRMcj2WExuWQwgSQAe212kyGZf8RmuGaBXR+5Yr0jj1s9yByLafn4XdaGfWKxQdSj38PpDtvR5dlLuiObyV3TsT5/Th6pd8EYukC04r2cUAJQuGj67cs+77dsQv5wgh3pP7thdxCd2btPCx3vY+BFBAjwxJBl5XVnj6Uq86HZR04/7TYlRb8R1xyM0PsagBlU9S6vguH6jwWhewzk5cCKijdu4F7T4w5hDhwx5ftEJuScnERmg6gDc0g5A+vCSpsMi1gvAxxO2DOtuyeZg= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR02MB6172.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(22082099003)(56012099006)(10067099003)(6133799003)(18002099003)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?MFBYdWFFTC9EanlJV1NnOGl2NEdyOVNMcU5Jb3MreGV2eXFXVk9NTXFaQjJQ?= =?utf-8?B?QWF1eXpCWW9ka0RmY0JTdTY3cmNMT1p6aEtJMTBOZ0R3MlIvekU4UnlsN3ZL?= =?utf-8?B?bnE4eUp6R21ubHR0L0krcXA1YjdZY2xqRkZKbTRESkExMnoxcmtzdTluUU4y?= =?utf-8?B?M0xrWmFHUndEcjkzMWNVQktkOXJLaUp2STBjUERlc213Z05yYVpqNW85c3J3?= =?utf-8?B?NG5TZWVNQzJSMlpQc2VTdzFlSytFaStqcmFxMzdRelRRNjZnQzg1RDFMeG5C?= =?utf-8?B?N1hPcTJWa2N1UzdNK3VIQzZNZjNpbUIzWDIyRUpjTTlXZDN4Z1BtL3dZMm9D?= =?utf-8?B?K2xVRjFpVkNVa2N5dW51V01tdlA1SEZEemJhV1dpdlI5YkVUbnF3OXNhUE9t?= =?utf-8?B?WlBnOE9qTUFlekNuQVcwWitCUzdsRWNnUzNMT05lbjlSdU83WXNVRVhmNGY1?= =?utf-8?B?cTRXbTRkK1cvK1pFRW5MK2tUTzhJa2dXZWpTN2ZkYVZoU1JXbXZiV2V3NGNa?= =?utf-8?B?VENHU0hqR3djMUxWU040OWdDY1RHNk5mTnVKSTVIbDhqOVlwZmlSNXJHckdJ?= =?utf-8?B?QWNzb0lFbWJoMlp0N2taMWVJdVdsbEw0RTl3Z1RHK0l0L0ZVVy83RjE0N3Ir?= =?utf-8?B?RG5xTnVLVWQ1OWFwY24raEpYT2I3Nm9YZ29EeXRUeDZ4VWVCd0RlUTZ2NkdN?= =?utf-8?B?Umt1dzdqR3krMjJqeXgzb29qVE5jYjg3TXB6VFo4L3JZdVhJUFk0VmF0alJD?= =?utf-8?B?ZkFQWHlGMDU4dVllSGozZTVtQUJLUmdDejdNMEw3UDB3bEdJZHdEMFJjUHFT?= =?utf-8?B?NjNFTVFKdmZiU01aRy9QT0N4bmllc3dnblRJNUFab0hKTUxKa0pKdHFTbW5F?= =?utf-8?B?MStCZFY5OFlwaDl2ZkxteVhMK2JaWlorMjU1UG9LRTJyZkpuRHp2THBEaUNT?= =?utf-8?B?UEJjbUFsZVJFYW5WMUxkelNHSC81UVBhYzNzRlJTZWErUG4xQlhBM2huM1VR?= =?utf-8?B?Z0VxWWhpZFJmVFRya2h3UTV2eloyQ3V3aFd6SzIyOWlrT3ZqL2ZkTDJVNkNX?= =?utf-8?B?eGlVdFBtalQ2QWdHTHF1d3hSNFpzOGw5bS9sT2h1c3plUkpvaDhDNzkwVXhq?= =?utf-8?B?V0R1d1F5RzJtT3p1dHZ1S2FERS9kejEvR3JRTFA5TFdNQlZuTkZsaVdkQTlX?= =?utf-8?B?UjUvVzZHdFpYbllhay8yS3lkUWx3WktWSTZha2tvZ2pzS2gxVnpxZkpOTW0r?= =?utf-8?B?YktYWmZ6cE5Hd0FzcEprRHNDdkpkdmdqSXpNLzNNUlNGRStaMFc0OG1qNVZF?= =?utf-8?B?NkZFeU1YYnNrZUM3Qk9NeisyZ3ZNOHg3OTV6YTlUa3RFYjZTS0dLbEsxWHNz?= =?utf-8?B?OEVDRk4zTVVObHlUWFpvUHlaY2Y0MERvUUxmS2VCeXZhTUNZbTlqc0V1dlRv?= =?utf-8?B?cWxjaEw1cXM0eHJEbVNwOGRTM2E5R2dIM2lMdzhiMGNoNGx6NlFBejFFVEp3?= =?utf-8?B?T1pNaDhoQTVWeUY2ZnhEVXdlYXVoQWVmb1R4VE9tNThVTUU0Ynh2anQ4b1d1?= =?utf-8?B?ak5mNCt0djYvbHMwUklUWlpoNjdLS0gybUhMeE1KdjJrVldnVUZXYkdJYSsz?= =?utf-8?B?V20zZEVld1FNMWg1S29kZEV0SStCdmlRKzJKUGJYMkoza1N5S1VhNC90VDNk?= =?utf-8?B?c2R2ck1JeU1WcmZzdTNTQTE0SGhtbUdNd0VpS1lmTFNpM1Y4TmoyRi9VdTlF?= =?utf-8?B?TmVna1VrNDk5WDZkZmRqNG9mRUxPUUZ6aG1EUFVoVFpXVXBUSEZ3c1JYUE5H?= =?utf-8?B?RjlrNDJkdmoxR2dFNTV1OHpmSENRUjZKcEMvTnVKZXFOZ2hpTThLQ01wUlky?= =?utf-8?B?Y1UxRU8rVTdpRFMzZE1ReHkrN1RFZkVlbGZ2NkRaUVJiMHZYRUFpMzc3YlFW?= =?utf-8?B?azVReGxoRWg1bnJHUHlTbGNsVVhnTEozc3Myb2xzTHRGZGIra3FQdm1rOHlz?= =?utf-8?B?ZjFpUlFNVnpuOWZnOWNjMUY2VzQwOXQxcElHUUJ3U1F0NFh6OUFFM1lJMmV2?= =?utf-8?B?UGVLandOTHVIN3Q2RS8rcFgzeXhDWFZTb0NhN0F6bU52V2dnWUNqZUJtMkNi?= =?utf-8?B?TzVhSnBpeVdXTHF2YlZRNDRlRUZpZm54dkxVbVUwZkFHZnlzTWx4WndhQjN1?= =?utf-8?B?TmQ4RnVrcEZPVUp4aGZHMHhYQlNWc0lPN3ZRM2RCZGtOVmo3T1k1bHNMekU1?= =?utf-8?B?R1liaFBDSkVVMjN4ZHUvWWpuWnM4WVQyWUMxYzV5bWJUaUdyV3hDd0s3Q3lI?= =?utf-8?B?WTRtcEh5RWdhUFZrVEpJV25pZytxSFJ5aERWUTgzbXBWYi9nVGhZTzAxOUk1?= =?utf-8?Q?AgLTwB1w1F3i4PQk=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: Hbi1tWO6fya7bj1morUl8Gz8pZ+kfMrAkHmL/tgLvEPm2JaGANT/OPDwNZs1wO8m9HKp7J8U+XlyukXnNkY8uVe4Gs8MJvbiTRBxBU1HZwjLI5eXybnIODZVo8sqaPB6j2v+zYAjmJEI2/6PXCGKDmRjgzSu7JbyHWZDoEEOOh5G+Oeaw6eBYsR8RQ/Ef544zMzdzXmNVy/hLxKI4lUU1edz5OEvRTe2eaUSidf3HtFsQAcfGTK0HUA+4aLZmckgr+1Ha2GA93LAO51ih3UyGVcSs0+rUdlp8MXPzFrCqZFXGTYUA19OLAqvoS5AWLLxQWnZ/ynKU+KRaC5GmHxHfw== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR02MB6172.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ab290065-bd0c-4dd8-8cc6-08df09bc7dc4 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2026 13:08:47.8332 (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: ds+82rdzv8xKwc3eAnOx4K2d8IJ45ofhthBYHrGb8VgZHS79uJOSb286FeNEtIBTY7FUpinE6USz5mp8xTo9roOojY3DQPo+R0Ht3VKxXzE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR02MB11926 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX98cEl3Wn3BuZ 9RPqky2l9M019ONJwB1xw1zCBqI8pUwvJkOunz1lfSq457yJEViY/t5HxKwQ1nA3JUgkIZArR9y QAcnbzM7iIkAUyjSVMx0NAEY9pikeLqFeyQW2fybweAmSp828polVx936zW3NjBc6FH2jkSQZD1 Bsywr7zIdKWe3okEhF16hkhqzxd1s/YA6U7FftTmAc5xA6SkNv2YvNkVPq3UEFw/DJh1KQ2pTBs ncaySegotTKZilR2nTVdBSPA6NLgwgFAvGbj6ZHNwPp8hedNT5umV0JQ9DHI0KeVoRpr8RQBC27 TsV7IBaVUI6foKi3299uoD+TAfy42rwC5pDqZ72wliLDbvrCRUyWEeD5W/ji+rrgWYdSHr1nWum LYMG6A3MNiy/NIfoE3tww5qTYNOQ5oPx+gqfqKErZPozJ1zpH4gsEiBnnUC40AZbj25C7KDhnai +o5PcBf/OeMtgCAnwpA== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX7WLsnABOzMjT divULMib72XOimsl7sxhad2nJXQ6xsSJPCre8ixPp/ePUZwYe1iXD5rbe/eTmN7jUNyVeOF2khG c0GpNxlSF5KLRph4mBuCbyD06M0liyE= X-Authority-Analysis: v=2.4 cv=cpirVV4i c=1 sm=1 tr=0 ts=6a997161 cx=c_pps a=PjMtKLFqB+SPhzMRFbua8w==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=dEe9Ve2bX-KnNSUMM2s9:22 a=64Cc0HZtAAAA:8 a=Oy2OcIHXSJHPB1KC8xwA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: nbeEyd8PwdhGVub1UNLhWfVVyy9-TrGW X-Proofpoint-GUID: nbeEyd8PwdhGVub1UNLhWfVVyy9-TrGW X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-03_03,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.155.12; envelope-from=hugo.komatsu@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @nutanix.com) X-ZM-MESSAGEID: 1788441022317158501 The generic VFIO migration code in hw/vfio/migration.c issued read() and qemu_file_get_to_fd() directly, hardcoding the kernel as the only transport. Route these through the VFIODeviceIOOps table so an alternate transport (vfio-user) can supply its own implementations. Add three migration slots - get_precopy_info, mig_data_read, and mig_data_write_from_file - and implement the kernel versions as thin wrappers around the existing calls. vfio_query_precopy_size() and vfio_save_block() now take a VFIODevice so they can reach the table. This is a pure refactor: the kernel path is unchanged. Co-authored-by: Rafael Castillo Change-Id: I714dab654034a285833f033a6a49218462c5f17d Signed-off-by: Hugo Komatsu --- hw/vfio/device.c | 36 ++++++++++++++++++++++++++++++++ hw/vfio/migration.c | 37 ++++++++++++++++----------------- include/hw/vfio/vfio-device.h | 39 +++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 19 deletions(-) diff --git a/hw/vfio/device.c b/hw/vfio/device.c index e7d293710e..ff2d965740 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -30,8 +30,10 @@ #include "qemu/units.h" #include "migration/cpr.h" #include "migration/blocker.h" +#include "migration/qemu-file.h" #include "monitor/monitor.h" #include "vfio-helpers.h" +#include "vfio-migration-internal.h" =20 VFIODeviceList vfio_device_list =3D QLIST_HEAD_INITIALIZER(vfio_device_list); @@ -590,6 +592,37 @@ static int vfio_device_io_device_reset(VFIODevice *vba= sedev) return ret < 0 ? -errno : ret; } =20 +static ssize_t vfio_device_io_mig_data_read(VFIODevice *vbasedev, void *bu= f, + size_t buf_size) +{ + VFIOMigration *migration =3D vbasedev->migration; + ssize_t ret; + + ret =3D read(migration->data_fd, buf, buf_size); + + return ret < 0 ? -errno : ret; +} + +static int vfio_device_io_mig_data_write_from_file(VFIODevice *vbasedev, + QEMUFile *f, + size_t data_size) +{ + VFIOMigration *migration =3D vbasedev->migration; + + return qemu_file_get_to_fd(f, migration->data_fd, data_size); +} + +static int vfio_device_io_get_precopy_info(VFIODevice *vbasedev, + struct vfio_precopy_info *info) +{ + VFIOMigration *migration =3D vbasedev->migration; + int ret; + + ret =3D ioctl(migration->data_fd, VFIO_MIG_GET_PRECOPY_INFO, info); + + return ret < 0 ? -errno : ret; +} + static int vfio_device_io_device_feature(VFIODevice *vbasedev, struct vfio_device_feature *featu= re) { @@ -669,6 +702,9 @@ static int vfio_device_io_region_write(VFIODevice *vbas= edev, uint8_t index, static VFIODeviceIOOps vfio_device_io_ops_ioctl =3D { .capabilities =3D VFIO_IO_CAP_DMA_BUF, .device_reset =3D vfio_device_io_device_reset, + .mig_data_read =3D vfio_device_io_mig_data_read, + .mig_data_write_from_file =3D vfio_device_io_mig_data_write_from_file, + .get_precopy_info =3D vfio_device_io_get_precopy_info, .device_feature =3D vfio_device_io_device_feature, .get_region_info =3D vfio_device_io_get_region_info, .get_irq_info =3D vfio_device_io_get_irq_info, diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 1941678e29..612f9193a5 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -247,10 +247,9 @@ vfio_migration_set_state_or_reset(VFIODevice *vbasedev, static int vfio_load_buffer(QEMUFile *f, VFIODevice *vbasedev, uint64_t data_size) { - VFIOMigration *migration =3D vbasedev->migration; int ret; =20 - ret =3D qemu_file_get_to_fd(f, migration->data_fd, data_size); + ret =3D vbasedev->io_ops->mig_data_write_from_file(vbasedev, f, data_s= ize); trace_vfio_load_state_device_data(vbasedev->name, data_size, ret); =20 return ret; @@ -369,20 +368,20 @@ static int vfio_query_stop_copy_size(VFIODevice *vbas= edev) return ret; } =20 -static int vfio_query_precopy_size(VFIOMigration *migration) +static int vfio_query_precopy_size(VFIODevice *vbasedev) { - VFIODevice *vbasedev =3D migration->vbasedev; + VFIOMigration *migration =3D vbasedev->migration; struct vfio_precopy_info precopy =3D { .argsz =3D sizeof(precopy), }; bool reinit =3D false; int ret =3D 0; =20 - if (ioctl(migration->data_fd, VFIO_MIG_GET_PRECOPY_INFO, &precopy)) { + ret =3D vbasedev->io_ops->get_precopy_info(vbasedev, &precopy); + if (ret) { migration->precopy_init_size =3D 0; migration->precopy_dirty_size =3D 0; - ret =3D -errno; - warn_report_once("VFIO device %s ioctl(VFIO_MIG_GET_PRECOPY_INFO) " + warn_report_once("VFIO device %s get_precopy_info " "failed (%d)", vbasedev->name, ret); } else { bool overflow; @@ -425,18 +424,20 @@ static int vfio_query_precopy_size(VFIOMigration *mig= ration) } =20 /* Returns the size of saved data on success and -errno on error */ -static ssize_t vfio_save_block(QEMUFile *f, VFIOMigration *migration) +static ssize_t vfio_save_block(QEMUFile *f, VFIODevice *vbasedev) { + VFIOMigration *migration =3D vbasedev->migration; ssize_t data_size; =20 - data_size =3D read(migration->data_fd, migration->data_buffer, - migration->data_buffer_size); + data_size =3D vbasedev->io_ops->mig_data_read(vbasedev, + migration->data_buffer, + migration->data_buffer_siz= e); if (data_size < 0) { /* * Pre-copy emptied all the device state for now. For more informa= tion, * please refer to the Linux kernel VFIO uAPI. */ - if (errno =3D=3D ENOMSG) { + if (data_size =3D=3D -ENOMSG) { if (!migration->event_precopy_empty_hit) { trace_vfio_save_block_precopy_empty_hit(migration->vbasede= v->name); migration->event_precopy_empty_hit =3D true; @@ -444,7 +445,7 @@ static ssize_t vfio_save_block(QEMUFile *f, VFIOMigrati= on *migration) return 0; } =20 - return -errno; + return data_size; } if (data_size =3D=3D 0) { return 0; @@ -599,7 +600,7 @@ static int vfio_save_setup(QEMUFile *f, void *opaque, E= rror **errp) return ret; } =20 - vfio_query_precopy_size(migration); + vfio_query_precopy_size(vbasedev); if (migrate_switchover_ack() && !migrate_switchover_ack_legacy= ()) { migration->request_switchover_ack =3D true; } @@ -662,12 +663,10 @@ static void vfio_save_cleanup(void *opaque) =20 static void vfio_state_pending_sync(VFIODevice *vbasedev) { - VFIOMigration *migration =3D vbasedev->migration; - vfio_query_stop_copy_size(vbasedev); =20 if (vfio_device_state_is_precopy(vbasedev)) { - vfio_query_precopy_size(migration); + vfio_query_precopy_size(vbasedev); } } =20 @@ -738,7 +737,7 @@ static int vfio_save_iterate(QEMUFile *f, void *opaque) migration->event_save_iterate_started =3D true; } =20 - data_size =3D vfio_save_block(f, migration); + data_size =3D vfio_save_block(f, vbasedev); if (data_size < 0) { return data_size; } @@ -778,7 +777,7 @@ static int vfio_save_complete_precopy(QEMUFile *f, void= *opaque) } =20 do { - data_size =3D vfio_save_block(f, vbasedev->migration); + data_size =3D vfio_save_block(f, vbasedev); if (data_size < 0) { return data_size; } @@ -975,7 +974,7 @@ static void vfio_final_precopy_reinit_check(VFIODevice = *vbasedev) return; } =20 - ret =3D vfio_query_precopy_size(migration); + ret =3D vfio_query_precopy_size(vbasedev); if (ret) { error_report("%s: Final precopy reinit check failed (err: %d)", vbasedev->name, ret); diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index a8fed550eb..3b13cffbd3 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -202,6 +202,18 @@ struct VFIODeviceIOOps { */ int (*device_reset)(VFIODevice *vdev); =20 + /** + * @get_precopy_info + * + * Get information about pre-copy migration data transfer progress. + * + * @vdev: #VFIODevice to use + * @info: pointer to struct vfio_precopy_info to fill in + * + * Returns 0 on success or -errno. + */ + int (*get_precopy_info)(VFIODevice *vdev, struct vfio_precopy_info *in= fo); + /** * @device_feature * @@ -268,6 +280,33 @@ struct VFIODeviceIOOps { int (*region_read)(VFIODevice *vdev, uint8_t nr, off_t off, uint32_t s= ize, void *data); =20 + /** + * @mig_data_read + * + * Read migration data from the device. + * + * @vdev: #VFIODevice to use + * @buf: buffer to read into + * @buf_size: maximum number of bytes to read + * + * Returns the number of bytes read on success or -errno. + */ + ssize_t (*mig_data_read)(VFIODevice *vdev, void *buf, size_t buf_size); + + /** + * @mig_data_write_from_file + * + * Write migration data to the device, reading the data from a QEMUFil= e. + * + * @vdev: #VFIODevice to use + * @f: source to read the migration data from + * @data_size: number of bytes to write + * + * Returns 0 on success or -errno. + */ + int (*mig_data_write_from_file)(VFIODevice *vdev, QEMUFile *f, + size_t data_size); + /** * @region_write * --=20 2.39.3 From nobody Sat Sep 26 20:52:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; 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=1788440983; cv=pass; d=zohomail.com; s=zohoarc; b=SIQqt8PPKt/5h0Jd5rbFXVcBkAIjhgkp5llyuz0TVDJx/8qZ/NyMuUxYmVYOVd2fq7dTYGB5WHsjcdslIW/kqCrAlrc71AIrOqupln6RTXZW/pEeMkSktuu3dYKEEWl2ez5gW5jnJkQG5N74qL6N6c/Z7DHDYSJafhYbkfl4wN0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788440983; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=p2yces8j/kU0/TJD56T5/zDHeCu/6dZBisPmTnKSlAU=; b=dOvDsQEzvSnN+zqdH6h2S7HiAL0N3fQQ1zvyjRX9Parr3hIlczlot4wmsHZuvnsMac99RGzzJ0Vcl+fm1JTnbLQ3aK/zEunCS0M8sGbhyqfTWSxb3Vv6rTD/kwNFQaPZmpBdIYKenRoFwm9LwsVIgdkNG4kyR060ZjJlngrFqlQ= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788440983131981.7039744277205; Thu, 3 Sep 2026 06:09:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x27Be-0004yW-66; Thu, 03 Sep 2026 09:09:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27Bc-0004xY-Fb; Thu, 03 Sep 2026 09:09:00 -0400 Received: from mx0a-002c1b01.pphosted.com ([148.163.151.68]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27Ba-0007cV-DP; Thu, 03 Sep 2026 09:09:00 -0400 Received: from pps.filterd (m0127838.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 683AL08g218510; Thu, 3 Sep 2026 06:08:52 -0700 Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazon11023123.outbound.protection.outlook.com [40.107.201.123]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gf5eq0juq-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 03 Sep 2026 06:08:51 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by PH8PR02MB11926.namprd02.prod.outlook.com (2603:10b6:510:40a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 13:08:49 +0000 Received: from DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd]) by DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd%6]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 13:08:49 +0000 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=p2yces8j/kU0/TJD56T5/zDHeCu/6dZBisPmTnKSl AU=; b=UwXzw+yHTWIJVYqILxI8Lt9p3GVYlSpxKRisf8fmydisjs+eYvzQKg5rz Kd2GToVsks6cnC7d0P3G4t5Z/aL5sy6jN4mRetnDTurDQY97uds0hFGvkCObyRRG 2Z899uwdi7A+BlCcKLPohwRMm3IWCXMhappAnyJeMP5FKtyWZwURZ/9+zeWMWQJC MzH+wUsu4oeRWvZNYuwdJY57Ansky10zS4gLCk77N0282NRoRVMifaqYYdFGcgbb wJd/lmmX3sT3MBhVZ53et27XjlSlMX1XJirO673wYpEMRjbSMnCZ6BuNdyE7r1/T RBqAD4VPCGZlMVRdNitPYXR6QtgJQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O2Dw7zAqJs5EH9opyFR1xJVU1+6v62CBkaZIjfyLeYdroV26QQ95rNpJ8SqV5aZgO7o9Lz6fxL6E3C7oxHy6z3LvVQpWMOLMCCqKHjVG7XJZavqmEJfApm/QYE3bllruwy5UX70ji3HmWey/mHTPV2v8zcLfNS/GuDVJiSQFw0aFaqri+ysCxneCbkG6rxTxsUjzWugk78y9CN9KKCZE1hPn/KG2YC/6Z3jDHjFceSSP5LUSzY1dwV+S05MAUW/LW5mtUx0m0HwQyqDRBZytfrCh2a9V5PpfceORmw7ZYcy67UR19dbn6ybNYcf/ZhAghobiqdYyhvjfoTlJOTnLFg== 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=p2yces8j/kU0/TJD56T5/zDHeCu/6dZBisPmTnKSlAU=; b=FHbJqMyy5vl1ga+GPnBQhe9ylUnRVJqE81Gg035QX5+MkqtbYhNZfukgNe2EqRitNdGxdG15vigZRub2mBeDljZgQis9I49ON7EYYoWOCpANJLKsn4ZaobuI45qkG+j9fwWt/K1q/0NSfDkzsDWDUz5+ot3R9o59/fprzmvL+X5iesfw/h2BHRtxeSA1o1nqtEfoiwZ3JPNrrz6ZuYeHR/xFZ+pp/p5ITLiz/W10e6qDMxfe8QkmTK4iSK+T/PdkcgtrzvEOw8atD6PGkdJhI1z2Fp+6+1Q1/MgTjG442drRoGn7pLNM4fdZLFKnf9V8HKOvofy6O3ADxV4xXFh1vg== 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=p2yces8j/kU0/TJD56T5/zDHeCu/6dZBisPmTnKSlAU=; b=lglsXPP1w7UdcCd+ViUt1OSxchaXoTObkUBJ5M1paEwgFNZZPITCvKBmFizQIbP7jxbUWgtcgluNJGiK4a0vCu2vo/L6JFxVa5+Jwkh7b1PUqlSawW6mZP59R3m+FOJcUKefYA5/kgh5tjCkFTGAgHpo0eQnR1Gb8KpZm6F1Xwuv30qFY+YiXZGGITGnbdDzlo2LJcF+gdxeKu9DHgBsrLPt2s1dydNS/0AzpTQpvaQhXjf7cb9NFqgfcky9p5l+8Mv6RjDs8qmFOzSy5rtWHEvsvxiyjfARxQPwZVJoT2GXkEylEb7MWfX74h+iU/pGY7nslAc9DrBzvaF/aQ6ZWw== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?utf-8?B?Q8OpZHJpYyBMZSBHb2F0ZXI=?= , Cornelia Huck , Eric Farman , Halil Pasic , Jason Herne , John Levon , Mark Cave-Ayland , Matthew Rosato , Pierrick Bouvier , Rafael Castillo , Thanos Makatos , Tony Krowiak Subject: [PATCH 6/8] vfio-user: enable DMA logging for dirty page tracking Thread-Topic: [PATCH 6/8] vfio-user: enable DMA logging for dirty page tracking Thread-Index: AQHdO6Vcyy5bv0tp0EqQ/oi/6h6KmQ== Date: Thu, 3 Sep 2026 13:08:49 +0000 Message-ID: <20260903130833.1437632-7-hugo.komatsu@nutanix.com> References: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR02MB6172:EE_|PH8PR02MB11926:EE_ x-ms-office365-filtering-correlation-id: a8a8eb7c-ce7b-4a93-427d-08df09bc7eda x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|7416014|376014|366016|23010399003|22082099003|56012099006|10067099003|18002099003|38070700021; x-microsoft-antispam-message-info: Ua5H7Mw8i+zm/5xMMOHU99gxd0UuIzq68TfLuUbYMAA10eApqQwoSpo3Q2yIVDx+9cvkPdgTMBihP97fQK0O1I6WryOxr4Mim82xG1k6ZVn4zDzjNxr05y5W4pfdnrQs+DeD8FLFK53gU2F0EN2QEHPpoPM5/v5Qcq1F2pO18jRgFCW9r8MBwPU43tBjX02GIkoikTOnHczxN9EVeqzQvQ9E+iqF3yb36cfzWX2iofuf6tWzuAalqmjytA3JyAbOI4uETLtjDnuvy3iMg6YqkM/EISJV7sJPVn2Vu1ERAmrPIIBqAn6S87Zi8x/h4WaNq6M/lhP1Jyb/jEHtDpc5B/ipng2dZN5UDedWEln/NMg1rcTnZplqfRyjcMHRSsKG0fP97gKjL0LwWwbAuhdcDdm01Zd8zVk70YQ6fsNDW3FTJ8CO6gKQ+I7JU/sjf+DHQFLjpf1hcFLgbsIA0h7wgKqpzEC0t5CLbfQsojgvrNiNDeelsw9QvJzvQXjm1dZ8lK5H/mZCVzV8ap4KiZ0Plq2gAyvAdzuMTZmsYUNokwvs2D8ZINKzJ7SgY5DAHQ0C1Zi+XdRUk4N0j8L9ueXeih8pC2tuwk+7bQqWd/e/DdAvh/jpFPi+0iWXBonJ8utozpbRaG9xWn/nkvnUeqsGN0ND5vUJuBKFQ72Ls7iiDVjpvpChICVlp9fKhzxijZT4o7tTqmu1oNl9UBqScyCarg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR02MB6172.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(22082099003)(56012099006)(10067099003)(18002099003)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TzZpYytlaFVpN3ZxQ3BJMFBsZEQ5ZkxZVGhsaGNIN01KZEVuRzJDdHlublNK?= =?utf-8?B?SHJldGRxY2JXa1MrOWt0RFpQSlZnOGJwY2paT2ZZbzBSa1FoRXR4VVJlUCtt?= =?utf-8?B?dFFOOG9pemdzUyswVy9Pb2plN1UwTUxxTlJHMm1FMDF5VTZwczZ2WU1JT29X?= =?utf-8?B?cGlYa1J0QkJDbGpNMHgzakp0ZElCZTdxNi8xazMxUkRTVTlveXlNSE5YWjVB?= =?utf-8?B?S0lOTXBzMVZycElVK2o0czRaMmNnTmh2NDAxVGdFU2loOXh5QnM1UXYwTVNm?= =?utf-8?B?N1pTTGdieGtnemswOVJrSUxZZzgrUkFXMEt3WmVqZUw5eDI0emx5QWNjZDNa?= =?utf-8?B?a2tXN0xLM3BUdDhEME5naGduYzRRTjhFVGcxUVliS21aaWJwemtHTEhZVlA2?= =?utf-8?B?ZDVrenpFa3Vhd0d1NkQzcWpXRGxrTmpvdUQ1U3hyOXFiZWo3andPVTBhZU9F?= =?utf-8?B?QTR4RUFtOFRPU0t2eG5RVFBsbmR3TmpzaEYxKzI5dGI4L2NzVndmQ2Znc2Rz?= =?utf-8?B?bVMveUZYejBhUmlmeWgyY2RMY3hxcmRVQWdwZzZmNUttSUc5Mmg1c3kxcXJi?= =?utf-8?B?S0JUcyszaGRyOGxTSy9KVnYrbTROL1dxWTVka003VVBaNWo4Ri9McWZ2NlJO?= =?utf-8?B?bFJkVHV5TEJrZjlXMnBNbFpQREpDR29mUGxnVTRBRVJNeUc0RGw2VnpKTW94?= =?utf-8?B?QStNTUVGWnZzb0Y3QTd2TzNMYkFVYzRzNUFkL3lFTlhxcjhZTFNZdWNub0dT?= =?utf-8?B?NUkvTkc1YytBN0VWTFBzMzNwaFZpTkp5NXlsTzNaNDdudVBoRDFHNGwvQlI5?= =?utf-8?B?Nzl0dFhSRnhmYXpsaXNvN3h5UVRJNE9kdEdlKzQ0ZmVuc3Q5N0lFbHNaK2N6?= =?utf-8?B?dU9oOVNqV2Ric2pDNnZPRkcvZ2gyLzNsZnRNeCtGOENzVHFXTjVDYVh6SDJB?= =?utf-8?B?eEpXa1NieUpzWnI5RUFLQk1nakl0a2JHYmxqTm5DdXpRanRGWEczUktOSnhX?= =?utf-8?B?eTZMZk8zRFFSZThSTjhjdzBBRjUyMU1RRGt5bEp1NEhOeFhjTmJQcjZVNlFE?= =?utf-8?B?bUROV3c5OWgvYmcxVEVtczlzMStiMVVKZnVUMC9xRng0K3o3SnY1NGJwT0ZX?= =?utf-8?B?ZWN3cll0VFlRTjZEV1VsT1NLbUl0ZFVjQ3pqd2U0M0hid0xKUHJWcFFnT3FI?= =?utf-8?B?WWdFYkdLMXFMWEU0anEwK0YyOUlsZ0EzSklLTld5bTJCRXRjQjFKaFJaS1ND?= =?utf-8?B?YWE0cEVVcTdFYnZkZ1FUYitUMEJ0RVpHeTgxZS9KSmVvcGFtNkczVC9wM1cx?= =?utf-8?B?eHVxTDEwNDBURXNrN1dDajUvUnJjdGM0Z1N1ZGhsUXJUZjNzYUlHMmtRbmZa?= =?utf-8?B?cjNlc2JNek9KYUtsWjlVU1dYUmVFZ3VOam56alI4QUdKL2huR0s4bWJVZTBQ?= =?utf-8?B?QlM5K0RVWVRSUURUTW1NNVozaVRJdTBIQ1lPQ1JIbVp4ZkJVNFBUMVQxTVI2?= =?utf-8?B?SXFBNy9HM0RlT3QzS0M0WW5sc1dOY2xGdTlJcVZ6ZWJZNVRFZUdVZThUNlRD?= =?utf-8?B?VnJkVjE3VmhIUGJKdm0yZ1hsSXBUTW0yN3E3ajljZ0lVNW5oU0FNbEtyelVG?= =?utf-8?B?U0hGNFlqV0d3czZrU3FkdFFRQ01VZ3hyWjdkaC9XQ3J1bEg4NEtKSW9uOGs5?= =?utf-8?B?QlpHNUs4ZWw2SDFkWFFRQlR2TSs3R3ZXaHBodHhiNGQvTG1vMWQzR0wxKzdr?= =?utf-8?B?a09OY05PTGJCMGxhenk3bTNYRWlWM3pRb2NkbERSdjJDTGZXeTJ3QUpmM1hk?= =?utf-8?B?L2RxbHM2anhoWFZKTS81N09PTEFDZ0ZpT0NwelpqUDl0SHdEdUtVbmZFa2Js?= =?utf-8?B?UElWaWk5SWtkdjZFMUZNaEpJZ2lYaHBKSFc5eXJRT21Oa3ZaanhIR1Juekhi?= =?utf-8?B?OTNJYUlySGs3ZDIxZytiVURMRlRaSDVEcTRFUldQbDlhSUlHd2w3MG03TUl3?= =?utf-8?B?c09LQm9uUUs4VGVoekNEWDhTdzZ0c2NiMW1RZldPdE8raWljY3RNVlp5cnY4?= =?utf-8?B?azBzdFZUQnFLTTl3TW1IeW5DWGxsVEVkMWw0U1JvN0o1eERGYzFjd25uclY2?= =?utf-8?B?eTdud2hwdTJVTWQ4cXU0L3RBQ2VoSDJoSVFYMFUvS0xoK1VNamtYa3JXUk96?= =?utf-8?B?bUF4NDdLMjJtWDV5VC9uVEE2UVBxaEJoTnUreDRxS3N3VTdBaEh1TjJ2a2Q3?= =?utf-8?B?WmlOblgzb01YdDlkdzRiT2dmUk9CamJnQm9zT1JEMnFvb09QM1lyekpRRmpj?= =?utf-8?B?THVLM1Y5S2tYeFBjOTFvaDJCandpSHM2YVRZZEgybUhiMXZ4VVJ5UT09?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: NEQfv9uPvOPWFGqDs68P0RXpfxTLK6m/gc1J+qgSF3MAi6Z5It+IPiWi1ArhnYXhnpUh0syYwbdCG3sjB4fjlJ09cj5rqgyzM8tN+QhALmQKAlZmHw5q0Ur3fZ6Ml63WR/DotYboZIAdZvLYvk3h6dot//8XZu14R/LBWGcg8Lr1kswiiPveOeHpakbFtdgYWJ/6K0NUkg9npsvcZUYuiLDFURG9xaxb27aRsHmujNmw1FRE06t3gvdxY5h5wfwnEn3BXT8qD3nlJ4AzcEXRvBHLVyxY+dwJ+Sewll5xwN0SlCheSaMiDhpDsAZdEBk2MEKyvvg8gSYaHR6aLYO36Q== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR02MB6172.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8a8eb7c-ce7b-4a93-427d-08df09bc7eda X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2026 13:08:49.6261 (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: 7JbN7IPU50Ie5NZATWqOoxvIYwAfPWQe7XjSl4maz+cJBi73Y6tYBwUXhIi96Mp9DvSVY6rgX6KLBY5I3wWYtgIV5gbLWN3XJlVgImilLGw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR02MB11926 X-Proofpoint-GUID: ZBSIoIisR_Nnt8hru4oW3qCUo2CYnNe8 X-Proofpoint-ORIG-GUID: ZBSIoIisR_Nnt8hru4oW3qCUo2CYnNe8 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX+/lU6gkZoKXR zkMirC6NWQuSWVeQaRbZlvKF1Z9OmflDhHrTg5d04VnfkCMz/uIRdcpSouQSR+MACFfi3N0p9Io qns2T54OMrNkl8yRHm5IDGPTjXLf6Fg= X-Authority-Analysis: v=2.4 cv=U6uiy+ru c=1 sm=1 tr=0 ts=6a997163 cx=c_pps a=MuaoZ+x0jvd2FUwkjOjmXQ==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=1L6crL_YRTbalZ11mEUO:22 a=64Cc0HZtAAAA:8 a=2bJf0PUoz3_qUPpsRd4A:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX08XpLB2tm5WB WsGPLWD/RJE/PGhQko4JJ756OUf/eesFq3J2w9J0h972w90WyqHmbH8GxAtX85Hb3LnJ91qxWVw O/k19k1YPe7dyEytHLYJW432Bc7V36p10RpTnaEE3lC3ILo9N69ssOxYmWTRhGau+owqFyIqI5O CcJwo1qELM+9VRs9gr9VyW9I03nJ//1+4JbvMUrnEkozm2Zc3wFoJXDueaNENp5FI33A55Aea6W R6EbcwSN4brRcwyERtTDo6DUmghVus1gGPhtpygOw8Z4c8aOyDJ05nTrBIFVNDO9ZsbMS7V1Z72 mcN2On1pIpXD733D9YMb/6K9LTR/YAs2ne9Dqgbyfc56C7ZQ7ce0Nt+qONHq0XcAO5dyv/+Sxsl FI6pzR4Xcp4mFEuGhVr+axCjp8Ac6H8FzCOpY4oeW03eTisnkl/M2DqayR+MaW60tFXNzRt3Q5Z RnEpxpJlRV74bsOekgg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-03_03,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.151.68; envelope-from=hugo.komatsu@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @nutanix.com) X-ZM-MESSAGEID: 1788440985986158500 Forward the DMA logging features to the server so QEMU can perform device dirty page tracking. START/STOP and the feature probe map onto the existing device_feature message path. REPORT needs bespoke handling: the kernel struct vfio_device_feature_dma_logging_report carries the dirty bitmap by pointer, whereas over vfio-user the bitmap travels inline after the report header. Translate to the wire layout, size argsz to include the bitmap, and copy the returned bitmap back into the caller buffer. The server only tracks dirty pages for ranges it has DMA-mapped. A range it cannot translate (e.g. firmware/MMIO regions never mapped to the device) cannot have been dirtied by device DMA, so such a report is treated as clean rather than failing the migration. Signed-off-by: Hugo Komatsu Reviewed-by: John Levon --- hw/vfio-user/device.c | 77 +++++++++++++++++++++++++++++++++++++++ hw/vfio-user/trace-events | 1 + 2 files changed, 78 insertions(+) diff --git a/hw/vfio-user/device.c b/hw/vfio-user/device.c index 1a01e748cd..078fd8f2a4 100644 --- a/hw/vfio-user/device.c +++ b/hw/vfio-user/device.c @@ -74,6 +74,66 @@ void vfio_user_device_reset(VFIOUserProxy *proxy) } } =20 +/* + * Fetches a dirty page bitmap from the server for the specified DMA loggi= ng + * range. Over vfio-user, the bitmap is appended directly to the wire mess= age + * instead of being passed by pointer. + */ +static int vfio_user_dma_logging_report(VFIODevice *vbasedev, + struct vfio_device_feature *featur= e) +{ + VFIOUserProxy *proxy =3D vbasedev->proxy; + struct vfio_device_feature_dma_logging_report *report =3D + (struct vfio_device_feature_dma_logging_report *)feature->data; + uint32_t report_hdr_size =3D + offsetof(struct vfio_device_feature_dma_logging_report, bitmap); + void *bitmap =3D (void *)(uintptr_t)report->bitmap; + uint64_t nr_pages, bitmap_size; + uint32_t wire_argsz, msg_size; + g_autofree VFIOUserDeviceFeature *msgp =3D NULL; + Error *local_err =3D NULL; + + if (report->page_size =3D=3D 0) { + return -EINVAL; + } + + nr_pages =3D DIV_ROUND_UP(report->length, report->page_size); + bitmap_size =3D ROUND_UP(nr_pages, 64) / 8; + + wire_argsz =3D sizeof(struct vfio_device_feature) + report_hdr_size + + bitmap_size; + msg_size =3D sizeof(VFIOUserHdr) + wire_argsz; + + if (msg_size > proxy->max_xfer_size) { + error_report("%s: DMA logging report size exceeds max_xfer_size", + vbasedev->name); + return -EINVAL; + } + + msgp =3D g_malloc0(msg_size); + vfio_user_request_msg(&msgp->hdr, VFIO_USER_DEVICE_FEATURE, msg_size, = 0); + msgp->argsz =3D wire_argsz; + msgp->flags =3D feature->flags; + memcpy(msgp->data, report, report_hdr_size); + + if (!vfio_user_send_wait(proxy, &msgp->hdr, NULL, msg_size, &local_err= )) { + error_prepend(&local_err, "%s: ", __func__); + error_report_err(local_err); + return -EFAULT; + } + + if (msgp->hdr.flags & VFIO_USER_ERROR) { + error_report("%s: server returned error %d", __func__, + msgp->hdr.error_reply); + return -msgp->hdr.error_reply; + } + + memcpy(bitmap, msgp->data + report_hdr_size, bitmap_size); + + trace_vfio_user_dma_logging_report(feature->flags, bitmap_size); + return 0; +} + static int vfio_user_device_io_device_feature(VFIODevice *vbasedev, struct vfio_device_feature *feature) @@ -81,12 +141,29 @@ vfio_user_device_io_device_feature(VFIODevice *vbasede= v, g_autofree VFIOUserDeviceFeature *msgp =3D NULL; VFIOUserProxy *proxy =3D vbasedev->proxy; Error *local_err =3D NULL; + uint16_t feat =3D feature->flags & VFIO_DEVICE_FEATURE_MASK; int size; =20 + /* + * DMA (dirty-page) logging report needs bespoke handling. The kernel + * struct vfio_device_feature_dma_logging_report carries the dirty bit= map + * by pointer, but over vfio-user the bitmap travels inline after the + * report header. Translate to the wire layout, size argsz to include = the + * bitmap, send, and copy the returned bitmap back into the caller buf= fer. + * + * START/STOP (and the PROBE) fall through to the generic path below: = the + * server only reads page_size (same offset in both layouts) and ignor= es + * the ranges. + */ + if (feat =3D=3D VFIO_DEVICE_FEATURE_DMA_LOGGING_REPORT) { + return vfio_user_dma_logging_report(vbasedev, feature); + } + if (__builtin_add_overflow(feature->argsz, sizeof(VFIOUserHdr), &size)= ) { error_printf("vfio_user_device_io_device_feature argsz too large\n= "); return -E2BIG; } + if (size > proxy->max_xfer_size) { error_printf("vfio_user_device_io_device_feature argsz too large\n= "); return -E2BIG; diff --git a/hw/vfio-user/trace-events b/hw/vfio-user/trace-events index 503e1c82d4..35341994c5 100644 --- a/hw/vfio-user/trace-events +++ b/hw/vfio-user/trace-events @@ -8,6 +8,7 @@ vfio_user_dma_unmap(uint64_t iova, uint64_t size, uint32_t = flags, bool async_op =20 # device.c vfio_user_device_io_device_feature(uint32_t argsz, uint32_t flags) " argsz= 0x%x flags 0x%x" +vfio_user_dma_logging_report(uint32_t flags, uint64_t bitmap_size) " flags= 0x%"PRIx32" bitmap_size 0x%"PRIx64 vfio_user_get_info(uint32_t nregions, uint32_t nirqs) " #regions %d #irqs = %d" vfio_user_get_irq_info(uint32_t index, uint32_t flags, uint32_t count) " i= ndex %d flags 0x%x count %d" vfio_user_set_irqs(uint32_t index, uint32_t start, uint32_t count, uint32_= t flags) " index %d start %d count %d flags 0x%x" --=20 2.39.3 From nobody Sat Sep 26 20:52:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; 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=1788441005; cv=pass; d=zohomail.com; s=zohoarc; b=YFb1tv3DPISDAv3RMeHtT+lBGQtHxaNjE93oGcsr5Gvk8lbxiYHQ3OYiRi1pYywGj2ZuqhavoxZeTaM7Sa1g6Cr5fM5sOLA3Wca5ewh6iCmWnMPqkpGm5mnxqN+Z+9zO2Mv4LNKtxPbjVowPbl/iK16y++1e0FTEvyFHlMZIbN0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788441005; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=x9GqFtBn4xQl+kptGm+IphKoqiwBUDRW/dgb4GFGUbQ=; b=gqooCH1ApbuqCjyXRkHc8L1lGLIXippeTvt/Dyit2e+H2J9c5iiAQ99Y/sJuIwnmamnSIP1cHmWUXULrEjSceTPtohmRjDwPcjlRlcY2VwgBfv1Q9N0ch+8FQrayztKpnPOXJwcyZE0CSkV3TDui7GPD8EjZV2NveUIlHquiors= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788441005933994.8693892032286; Thu, 3 Sep 2026 06:10:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x27Bf-0004yn-Jv; Thu, 03 Sep 2026 09:09:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27Bc-0004xm-VR; Thu, 03 Sep 2026 09:09:00 -0400 Received: from mx0a-002c1b01.pphosted.com ([148.163.151.68]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27Ba-0007cb-ON; Thu, 03 Sep 2026 09:09:00 -0400 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 683CA0XL255078; Thu, 3 Sep 2026 06:08:53 -0700 Received: from mw6pr02cu001.outbound.protection.outlook.com (mail-westus2azon11022128.outbound.protection.outlook.com [52.101.48.128]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gf8nm047b-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 03 Sep 2026 06:08:53 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by PH8PR02MB11926.namprd02.prod.outlook.com (2603:10b6:510:40a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 13:08:51 +0000 Received: from DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd]) by DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd%6]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 13:08:51 +0000 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=x9GqFtBn4xQl+kptGm+IphKoqiwBUDRW/dgb4GFGU bQ=; b=IzWXITfiyOG9/Tmvke0lcTpbyj7H1CuEKcA+rVfsfvxs4tavoFTYVKuUE Kf4C3tfsvXbcim4MDWG3+bfhXpoo6tSMaOR7mnoWbjEY8kPD/aWoysGwzN2/LMRO niqQ38h81CEMn5BVtxm84jpMeLFAPxBAk1Ftonv4UIvqjdFd3eDvmwnIIu6ti9oP L0xm6lmEPKLIV0+ZUEMdBMJl3rMXmPxreEARyKl8aEuGlbOXf5rM6RQ63j79OLoC aabR5KJ9daMWLZiLFMEv/6BjjlYau7vYKWHmsNjb5htYUnMUVg6pt/T1nr6cOloL FmFK+GMbeWJXDRMOaGmK0A5AUfpOg== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HN4sgRXYI18aoHCy4lnrHBNVzhyjkOGIURuB4jI0U7XKbl7j5gwC8DjEv1Yc9iwy/wWVQGFDaofRziuhMMXoan6q4APEhmNWIoSlqrh812mgaRhAoBk0GNH2YuVRMBLo1CiQF9+12AuZ9p6HanLMasSOoPCqeb++gQQXvWst7vclLlDX4p6NgLj77EnaSfnFcSCQblY/HrVsKFc1GBccb4gwUM68HuFY/vY4foE9Z8wdToNdHgBBc/oTBdIVDPmmecBMKrCOsGrQIcv1XkghPIiUfckn3vGHmcCyIi1QGckbSMLZl4iZHokCZHfQH+j86sy2ocBfTj21YWAe5k3Gaw== 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=x9GqFtBn4xQl+kptGm+IphKoqiwBUDRW/dgb4GFGUbQ=; b=Wz1UZvTv5CzxdnUCg7xtojJXie97TylzfuycU4dhNZIZnr7tRePr1tUbHfGRmxSuhc5w2YZn8qUAgbIJk7ceRzDziJsK8M3nz112rJzCeF6WMZdjmLBmMtN2sa11dnEPs//o7m+TpB/3YW/P8FUCMDiJSI6jXNwwrd4gJV0xgJblypXK5JbuI0htMNFO9tGggakg5f1ijRuzJh0nM0unlAotQCcl/g/OALKQyLE9vFXAMVBtcAkppLu5+Ln+xtBW3ZbtLUvpcBHMkRrLAxN8SUv2DDTPAXE9T1MfAZ6GwoIsydLA+FeqCD2lXhPoJ7KtSDSkA7+t4Y8v08VVu+ivCQ== 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=x9GqFtBn4xQl+kptGm+IphKoqiwBUDRW/dgb4GFGUbQ=; b=Em0d9VdMKsSCElHY+AoEFnPcrbrxWOYHOqZvv1NExQJanIMPRIu9+D/dutODs3zn9kTxXnlincck+YgxOmTkODCJxvYdyTbuQCOn740wlWFgJmqzpMdKaOyKRQr7hDEngzYlwweki+pGdUimoU7o1SIlPY6Yl4fap9ZmSyAectH5z5eW9Urg4cE9Vnn2KLHKiuVUSPHWQYFXsTkF+7t9+VdbncmEVacqMn2ac+f4lP4iJdfC3HDgfY4jvVM67i01u45UATqy+x+bb6CQH1DjtgYBlfsg7vU7WJxwdrVSQa0vvSc2bQLcWTo5S51Cz+xkzZ7Qg8zaK36T1s57f7gGnw== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?utf-8?B?Q8OpZHJpYyBMZSBHb2F0ZXI=?= , Cornelia Huck , Eric Farman , Halil Pasic , Jason Herne , John Levon , Mark Cave-Ayland , Matthew Rosato , Pierrick Bouvier , Rafael Castillo , Thanos Makatos , Tony Krowiak Subject: [PATCH 7/8] vfio-user: implement mig_data read/write socket operations Thread-Topic: [PATCH 7/8] vfio-user: implement mig_data read/write socket operations Thread-Index: AQHdO6VdRbjl9tH7UEG1/w2MOoZMvg== Date: Thu, 3 Sep 2026 13:08:51 +0000 Message-ID: <20260903130833.1437632-8-hugo.komatsu@nutanix.com> References: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR02MB6172:EE_|PH8PR02MB11926:EE_ x-ms-office365-filtering-correlation-id: 6aa23dd9-42d0-445a-f4a8-08df09bc7fcc x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|7416014|376014|366016|23010399003|22082099003|56012099006|10067099003|3023799007|18002099003|38070700021; x-microsoft-antispam-message-info: MtvbKLL+Y4OrTRk+Icm1Rugvj97zCXniFENTkuHTTn8Kgm4ud2V5WIabsQB82SAwZf+zA3hno5BOmvmA4IGdsYtY6elxFxBKWTO3oovdUDBWGEMh866B5zWglNLdHuDyeybM5fIh+ZP8mmGGlVjdWohipqRTBW/HcbDvUG0NM7zuGvm0XYom7QQ0cA+n7nwRmbjM8YGko/RUjt48KpdwUbFyEeG9d0ZisCxhH1a3LF69nSt9tsyG+QBAkBPWkZP6FFCBhzoIK+kjUqogP05ibJHlwoVitfRFGd6SwtKXkXy0oFB6ZCCfQI9qqzGI/ZylwodtxuTRmWFvYdiL2xWv+niQKq0tIjeqCNqK6g3CYIx3iQf/RRJ+BSbo4L5mgOq+nK+pTYc9J5cKZXvrsbDpqm9d9t6BJ80YhYpGfLusy7EHWEw5HBwE5k7BMDpxrKaRErVNfemumgOE2Mi0u/23/pvuLBVCXLLCXEDS40TUd0TnKp4cGbzYR0wkXqBkTRa8u1msPUBS5xpPLJ/tKtrv4/IRVWf4Crn8KXUBSzheJtVhnK2dVNOt6vmVWq8PtaOvsS4Ui4/6R/cst9FkfgMlr8206IGzm6MjfUb4Tt4XCA8mn6/so9uTzP52o0Uulin7m0yLclf8KvUTKsPwKAd+iBHr3nHK/03Ion//gRvbCm4zAu14CYiUM1bkWa7LiVFBHTwsNb7iVx84uX8MiPC8ETcdYZt2LZtgUOB575/utNg= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR02MB6172.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(22082099003)(56012099006)(10067099003)(3023799007)(18002099003)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?RU9yY3ZhVGlvWno0TjUyclBNWmZ4eEd2TGY3bCtMUGcvUE5aN2llTEkzcVhN?= =?utf-8?B?MEtnT2hGckY3bXR4R3BmTDZKaHN2Z1RFRnE3czZ5SmhXRGlwbVdyQ2M2eEh6?= =?utf-8?B?MmNQWXBheGhXVjFxTlArQ3RxRGsvSG05TFgzYk8vS1cvQ09oaG82Nm40ZFlv?= =?utf-8?B?RlNOdWNISUpzUFZyWkJWaG9VeVNvTHdheHd2TFNrZmhnL2kxN0prOHRXcFV3?= =?utf-8?B?Zk0zeFVlbjU5WmhGcCtSOGdkTythdXlpOHc2RXZkeS9DdVZNNkczV1JpSy9m?= =?utf-8?B?RE8yVEgxdDZkeGYydVArMWYwT3ZEb0J4cjJ4WFNrMER3ck5jbUhNbWRVUlYz?= =?utf-8?B?ZnkyY0gvZmRVUTVOTWhiWm5ESmcxZnp5QTQrV0t4amVLUHV5c1JSUXhkTkpU?= =?utf-8?B?alBxeGk0QlpSWDBONmlyTGxwdHdvY2JoWnRReTM3UEczN0JNWXd4OTY3YlVt?= =?utf-8?B?akpTd21lalliS2pVYzF3VWs0clk0SVh6SktXbERBakZWSjZ2Ymx2UWluY3dW?= =?utf-8?B?SHMyK2lyS3ZROE5ES2d5UVdyVGhSNEdJMW5CYWEvaXYrODc4dkcwRCs1VThI?= =?utf-8?B?bHZMK2Q0S0JaQUZyZ09sRFRlZ2d6dTg0WjQzWko5WFV4ZjQwZGN5dDR2MUQ3?= =?utf-8?B?Y1F1UDBWbHdzZlVWT3RWWUlHeEtaWWw0WnNCQTl4NUwzcXl6N1FKeHdNUFNL?= =?utf-8?B?aS9GVGpBVWEzbndZeU1PWkRnSmx2dnlheGhTa1Bsd0ZTTnpvRld4SVdkTUFW?= =?utf-8?B?Kzc2cG4xNExXcU9UUHBQbmhmOURHODQ0L1U2azV6Unk0b1pGUSszdFBPLzFC?= =?utf-8?B?UGR2RWJVRWd5S2FrZWZwRXp5SjgvMmFzS1ZrRVF2dDZ2Q3hjanQvRHhJVTdh?= =?utf-8?B?SE5rTXpOSkJmN0lrWGhyVlZwU1lHR0gySWQrYlVoRlE1Mnh1L2VERTVhTzFa?= =?utf-8?B?SC9XZmMzMXlyemZWTG5ISVNmK084OGw2Vm1pNGxKVlZkUlBjM0ZqWitPQkk3?= =?utf-8?B?Q2NjUU9aQ21wbWhqOFlJMGRkVTBxZWEvUmVrSndCQnN3TkllaWZQcUdDYlFs?= =?utf-8?B?VEoyYyswL2JmQU4vQ3VITS9oT29GVVVybFJObDYwaUpSTldycHA0NmgvSXhX?= =?utf-8?B?eHk5R2RVRk5ReDNYTlo4QUpxRm5sVXlsODg4Q3pwWVhCd3J3NEZDWllwNXVo?= =?utf-8?B?TE1HdnhrYlBtQ3lkRUVIZ3ZEZGlPdU1OVmM2V0QwY1FsYXI5aUp0dHNwU1ph?= =?utf-8?B?RUdKaTFlbEdZQ21uNUk3ZzJBY21TdFU1OG5kTkFQbmtDSmcxcEQ0Q1QrejBQ?= =?utf-8?B?czc5cUpLMzQrZ3JyNnQ3YmgvbFFXblhzQlpnTG14UXl0eWpZQ0tqbUlEemZU?= =?utf-8?B?QlZGTXRBTmc0dERqTDdYTFFUVmp3Y2l6bVZkVWhCSjg3aktsZkRuckcrY0p2?= =?utf-8?B?Rk1BSlB5czFFSlVibE9jNndaNzhWdXJSdlZqditBVEtWY0UyalNDWVFLb1Q4?= =?utf-8?B?UmVQUFNIdjJiWDhMU1R6TTRvSFRsbEVFWnlUYWxHRW80MnpoQkUvZWphVXM1?= =?utf-8?B?WHpqQUNKU0VKdXltb0YyWkNvWXRGcytrNHpEZDJ6T2tUaXlwSi95dEplRTV0?= =?utf-8?B?bk5aY2k2UGJSVlVOMFdiSWtoK2RCSXVXeFJrTjl4R3ZlbjNGNTlDT0w0ZDZp?= =?utf-8?B?OWlmMEEyay96Tzk2LzVmOG4xdEZ3c3hiUWJOQXFuQzJMSXc5bjZlUjBQTnhQ?= =?utf-8?B?YTFISVJLOVJSRUltb2F3R1hvMXAxbGJObTI1bUJIRUpEelkraFA4dUlQTzVJ?= =?utf-8?B?RE9mVzdFZGx0SGhLR0gzL3M1SFVWQWJ5REtVaStVWVFNb3ZXUjNraGRtU2tk?= =?utf-8?B?aG9VOHEwcHNMdXZvVHMrQnJJS1E3eXVrY3NtOXFoWTB6b005UjArZ2VrSlY1?= =?utf-8?B?VnFnTTVRZEt0S3dRTFlNRkdDZjBWVHpKNXhvYVZJMkVXdlJRTFRGMVRpZTB2?= =?utf-8?B?RHczVGwxOUdOTndSc3JockR6UGtxNHRSSmIwNVRHWXFjaTFCOUFJOGVuOFJ1?= =?utf-8?B?aTUvTHdlbmtyY1VwRlNnTnUzaXJYMXlXQWhuR0N5S283K3M3eHR1ZHdTYnAw?= =?utf-8?B?U1Q2YjlwVllkTlFnTnV6UHN6UTVqKzZpRlVobHVEYTM3TzdNUkgwdmVBd3A3?= =?utf-8?B?SG55VGhIb2RNbzJ0YlZ3UXJhRy9BYmVPMlBtUFFKYktVRmlGVjVrVzNmZ01R?= =?utf-8?B?RG9zSUN1VU9laXQzcytJV3Uzb2cwMWNwM2p4dC9ZTlFva1h6YWdGaFZKOW8z?= =?utf-8?B?ckZWNUlZWmF3OTVpeFNjcURxOTJRU1haakd1SUVhVkR0dkQ0cEFqMFR0UHJZ?= =?utf-8?Q?NUcUUEO6oOEpNf+I=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: bI8y8zDflJVd9lclJE1FLoTqWBx9Zxczzl/jMgxeZ0KAu0Zp70lTFAe3QvZDGy4SA1atZlCl9wAua399xDuc078z7ZEoD+BDoXna2s0Hc6cgLaOmdyvtnZfzuS4qJekfpSaq8C1XnGG4SRpU2Lo8eYhOaienCV46GWboWr27SCc2aDhsb2+11gFJCSD+xyofrxdM8TGlTe72o8jbuYyj12bh1cLAl9iwngcCj3iytGoUR8wl8wvErqsS0AMydUV8O+fXcQAhtp8VN3FXJS+6KjNPfOAGAaioy2mMfYHuwU5tnwQ3MG6/ZS9kPQvmfGSRX2Za/Td/oYI1omKXMJTG8A== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR02MB6172.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6aa23dd9-42d0-445a-f4a8-08df09bc7fcc X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2026 13:08:51.2325 (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: ApM2kjl/FkwAop7eCd8W76zKuZgF9+ShtNwulXqG+9AgFkqDVXym35NrowVlaU+hQDnbeGt04yXYi8eB99299zlaWY11vGoHWcIoOJ0impI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR02MB11926 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX+sQSgi0iko6T ZgoWM6SvTLm7t42A7D5JnadBgh6Z/JiK4pkQKJ7Eof08TxclN+0Z82n2Jg6CZ1agsHdBvidXPnw xmtZ1mYkfBxWj2qGpVD0pmeFB4moebE= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfXzmYRTrpVaE2Z /zOWLWLh8kfSoTQ8haAxACZuKmoNN67qvrDvSlOWz64G8GAoguYjaeQVi0g6WbdUZN2xzHwG7fS 2d2jkgLs+0pvhGqvX5hatZ9Hz0HMCxl/vfW4BYq80aJy6E+N33OTMk85z95xORZGF8nprtJFANn j4U1/9rx8D6XYVUQrepAcbIBSSlFENUwvp/Q3fX+Unp2B6o3z/7Ql5XROnuiOjp3bMTNhlLvje6 8m/t7HSUD0V6Xd1icZfmOHEk8Ep7mLbyHafpcKbuSLcUBSHb65z4Kzd7tFjO7uiQaiaguR9VpmP 8gALM83pquROVYt58EHOCh1ft9cnvebq9yj/oN246i2BmLVCJyu08egA8kTA7A3DvoDx1a1YP3p kiQXsCig4sqit5OCM/hu5dLTH09XfypIGg9tTHB0hLImuXcaM/6y8JUsVz9PSxYFY2DUvwxgVxQ IYYhRna6xKLgLaiSifQ== X-Authority-Analysis: v=2.4 cv=TK11jVla c=1 sm=1 tr=0 ts=6a997165 cx=c_pps a=YH7lkWZYaMs4szCCOGs1MA==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=y4UcunY2MAxhM4LwGdWI:22 a=64Cc0HZtAAAA:8 a=IEzzBjLDI9UtbpY5370A:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: cbI-mOJqsv68as6gubyGrvM8H7qknM5A X-Proofpoint-GUID: cbI-mOJqsv68as6gubyGrvM8H7qknM5A X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-03_03,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.151.68; envelope-from=hugo.komatsu@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @nutanix.com) X-ZM-MESSAGEID: 1788441008520158500 Implement the remaining vfio-user (socket) migration io_ops: device_reset, get_precopy_info, mig_data_read, and mig_data_write_from_file. Add the wire definitions (command numbers and message layouts) to hw/vfio-user/protocol.h, mirroring the kernel structs so feature blobs can be copied straight onto the wire. Co-authored-by: Rafael Castillo Signed-off-by: Hugo Komatsu Reviewed-by: John Levon --- hw/vfio-user/device.c | 118 +++++++++++++++++++++++++++++++++++++- hw/vfio-user/protocol.h | 19 ++++++ hw/vfio-user/trace-events | 2 + hw/vfio/migration.c | 6 +- 4 files changed, 140 insertions(+), 5 deletions(-) diff --git a/hw/vfio-user/device.c b/hw/vfio-user/device.c index 078fd8f2a4..6b767e94d3 100644 --- a/hw/vfio-user/device.c +++ b/hw/vfio-user/device.c @@ -11,6 +11,7 @@ #include "qemu/error-report.h" #include "qemu/lockable.h" #include "qemu/thread.h" +#include "migration/qemu-file.h" =20 #include "hw/vfio-user/device.h" #include "hw/vfio-user/trace.h" @@ -592,15 +593,126 @@ static int vfio_user_device_io_region_write(VFIODevi= ce *vbasedev, uint8_t index, return ret; } =20 +static ssize_t vfio_user_device_io_mig_data_read(VFIODevice *vbasedev, + void *buf, + size_t buf_size) +{ + g_autofree VFIOUserMigData *msgp =3D NULL; + VFIOUserProxy *proxy =3D vbasedev->proxy; + Error *local_err =3D NULL; + /* + * We don't need to iterate in chunks here. We clamp the requested + * size to the maximum socket payload and return a "short read" + * (fewer bytes than buf_size). QEMU's generic migration framework + * handles short reads perfectly, and will automatically call this + * function again in a loop to fetch the remaining data. + */ + uint32_t max_payload =3D proxy->max_xfer_size - sizeof(VFIOUserMigData= ); + uint32_t read_size =3D MIN(buf_size, max_payload); + uint32_t msg_size =3D sizeof(VFIOUserMigData) + read_size; + + /* Clamp the requested size to the maximum socket payload */ + msgp =3D g_malloc0(msg_size); + + vfio_user_request_msg(&msgp->hdr, VFIO_USER_MIG_DATA_READ, + sizeof(VFIOUserMigData), 0); + msgp->argsz =3D msg_size - sizeof(VFIOUserHdr); + msgp->size =3D read_size; + + if (!vfio_user_send_wait(proxy, &msgp->hdr, NULL, msg_size, &local_err= )) { + error_prepend(&local_err, "%s: ", __func__); + error_report_err(local_err); + return -EFAULT; + } + + if (msgp->hdr.flags & VFIO_USER_ERROR) { + error_report("%s: server returned error %d", __func__, + msgp->hdr.error_reply); + return -msgp->hdr.error_reply; + } + + /* Bounds check: Ensure server didn't overflow our buffer */ + if (msgp->size > buf_size) { + error_report("%s: server sent more data than requested", __func__); + return -EINVAL; + } + + memcpy(buf, msgp->data, msgp->size); + trace_vfio_user_mig_data_read(msgp->size); + + return msgp->size; +} + +static int vfio_user_device_io_mig_data_write_from_file(VFIODevice *vbased= ev, + QEMUFile *f, + size_t data_size) +{ + VFIOUserProxy *proxy =3D vbasedev->proxy; + uint32_t max_payload =3D proxy->max_xfer_size - sizeof(VFIOUserMigData= ); + size_t remaining =3D data_size; + g_autofree VFIOUserMigData *msgp =3D + g_malloc0(sizeof(VFIOUserMigData) + max_payload); + + while (remaining > 0) { + Error *local_err =3D NULL; + uint32_t chunk_size =3D MIN(remaining, max_payload); + uint32_t msg_size =3D sizeof(VFIOUserMigData) + chunk_size; + + vfio_user_request_msg(&msgp->hdr, VFIO_USER_MIG_DATA_WRITE, + msg_size, 0); + msgp->argsz =3D msg_size - sizeof(VFIOUserHdr); + msgp->size =3D chunk_size; + + if (qemu_get_buffer(f, msgp->data, chunk_size) !=3D chunk_size) { + error_report("%s: failed to read migration data from stream", + __func__); + return -EINVAL; + } + + if (!vfio_user_send_wait(proxy, &msgp->hdr, NULL, msg_size, + &local_err)) { + error_prepend(&local_err, "%s: ", __func__); + error_report_err(local_err); + return -EFAULT; + } + + if (msgp->hdr.flags & VFIO_USER_ERROR) { + error_report("%s: server returned error %d", __func__, + msgp->hdr.error_reply); + return -msgp->hdr.error_reply; + } + + trace_vfio_user_mig_data_write(msgp->size); + remaining -=3D chunk_size; + } + + return 0; +} + +static int vfio_user_device_io_device_reset(VFIODevice *vbasedev) +{ + vfio_user_device_reset(vbasedev->proxy); + return 0; +} + +static int vfio_user_device_io_get_precopy_info(VFIODevice *vbasedev, + struct vfio_precopy_info *= info) +{ + return -ENOTSUP; +} + /* * Socket-based io_ops */ VFIODeviceIOOps vfio_user_device_io_ops_sock =3D { .device_feature =3D vfio_user_device_io_device_feature, .get_region_info =3D vfio_user_device_io_get_region_info, - .get_irq_info =3D vfio_user_device_io_get_irq_info, - .set_irqs =3D vfio_user_device_io_set_irqs, .region_read =3D vfio_user_device_io_region_read, .region_write =3D vfio_user_device_io_region_write, - + .get_irq_info =3D vfio_user_device_io_get_irq_info, + .set_irqs =3D vfio_user_device_io_set_irqs, + .device_reset =3D vfio_user_device_io_device_reset, + .get_precopy_info =3D vfio_user_device_io_get_precopy_info, + .mig_data_read =3D vfio_user_device_io_mig_data_read, + .mig_data_write_from_file =3D vfio_user_device_io_mig_data_write_from_= file, }; diff --git a/hw/vfio-user/protocol.h b/hw/vfio-user/protocol.h index c478d1353f..ed32d73051 100644 --- a/hw/vfio-user/protocol.h +++ b/hw/vfio-user/protocol.h @@ -41,6 +41,9 @@ enum vfio_user_command { VFIO_USER_DIRTY_PAGES =3D 14, VFIO_USER_REGION_WRITE_MULTI =3D 15, VFIO_USER_DEVICE_FEATURE =3D 16, + VFIO_USER_MIG_DATA_READ =3D 17, + VFIO_USER_MIG_DATA_WRITE =3D 18, + VFIO_USER_GET_PRECOPY_INFO =3D 19, VFIO_USER_MAX, }; =20 @@ -251,4 +254,20 @@ typedef struct { char data[]; } VFIOUserDeviceFeature; =20 +/* imported from struct vfio_mig_data */ +typedef struct { + VFIOUserHdr hdr; + uint32_t argsz; + uint32_t size; + uint8_t data[]; +} VFIOUserMigData; + +/* imported from struct vfio_precopy_info */ +typedef struct { + VFIOUserHdr hdr; + uint32_t argsz; + uint32_t flags; + uint64_t initial_bytes; + uint64_t dirty_bytes; +} VFIOUserGetPrecopyInfo; #endif /* VFIO_USER_PROTOCOL_H */ diff --git a/hw/vfio-user/trace-events b/hw/vfio-user/trace-events index 35341994c5..51abd4d738 100644 --- a/hw/vfio-user/trace-events +++ b/hw/vfio-user/trace-events @@ -14,6 +14,8 @@ vfio_user_get_irq_info(uint32_t index, uint32_t flags, ui= nt32_t count) " index % vfio_user_set_irqs(uint32_t index, uint32_t start, uint32_t count, uint32_= t flags) " index %d start %d count %d flags 0x%x" vfio_user_get_region_info(uint32_t index, uint32_t flags, uint64_t size) "= index %d flags 0x%x size 0x%"PRIx64 vfio_user_region_rw(uint32_t region, uint64_t off, uint32_t count) " regio= n %d offset 0x%"PRIx64" count %d" +vfio_user_mig_data_read(uint32_t size) " size %d" +vfio_user_mig_data_write(uint32_t size) " size %d" =20 # proxy.c vfio_user_recv_hdr(const char *name, uint16_t id, uint16_t cmd, uint32_t s= ize, uint32_t flags) " (%s) id 0x%x cmd 0x%x size 0x%x flags 0x%x" diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 612f9193a5..d12d7a2f03 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -313,8 +313,10 @@ static void vfio_migration_cleanup(VFIODevice *vbasede= v) { VFIOMigration *migration =3D vbasedev->migration; =20 - close(migration->data_fd); - migration->data_fd =3D -1; + if (migration->data_fd !=3D -1) { + close(migration->data_fd); + migration->data_fd =3D -1; + } } =20 static bool vfio_migration_check_overflow(VFIODevice *vbasedev, uint64_t s= ize, --=20 2.39.3 From nobody Sat Sep 26 20:52:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; 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=1788440974; cv=pass; d=zohomail.com; s=zohoarc; b=WB4FdfJk1cRCIAwZKWOo6IcW9tpJGBbYMQZIg3Wa/bngN8ljQGuclbwqzfhhFS8UbEbWfdH5tC1Qg5FUrp9MpROjkI7dLaPYzdMwle7mFwq++MSXTCr/BvAFh/pCi1PWIR6yx+QoW0ptVZSm/BrKeeoG2ep8M7QhsxJa9ayXEfw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788440974; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6IhfTWHkqi5xCJhfYuHi4E8YIuBVy/AN0i+4GwH4+Yw=; b=L95lMmMi5QrezhIU9HcWy4zXi3frhz7VbAPlU9Ehv8jDXG+du6w9bu9p7IzyEmTVFLuaMEFy6t7dKMxYSCii1p9WndIm87JQmFqrHiGPMcTAf4tj5jIQeCwJ7++OSrwTXVvHQQwT7OjmA2YAbS6DtmHWW5Ig6rxOLNOwnLAbt+I= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788440974194611.3126772450233; Thu, 3 Sep 2026 06:09:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x27Bg-0004z3-BT; Thu, 03 Sep 2026 09:09:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27Be-0004yZ-J7; Thu, 03 Sep 2026 09:09:02 -0400 Received: from mx0a-002c1b01.pphosted.com ([148.163.151.68]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x27Bc-0007cn-DG; Thu, 03 Sep 2026 09:09:02 -0400 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 683CA5cA255271; Thu, 3 Sep 2026 06:08:54 -0700 Received: from mw6pr02cu001.outbound.protection.outlook.com (mail-westus2azon11022096.outbound.protection.outlook.com [52.101.48.96]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gf8nm047d-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 03 Sep 2026 06:08:54 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by PH8PR02MB11926.namprd02.prod.outlook.com (2603:10b6:510:40a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 13:08:53 +0000 Received: from DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd]) by DM6PR02MB6172.namprd02.prod.outlook.com ([fe80::39c3:beef:21c:b4bd%6]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 13:08:53 +0000 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=6IhfTWHkqi5xCJhfYuHi4E8YIuBVy/AN0i+4GwH4+ Yw=; b=IhsfmKWRSXfe1uo1I765nvB98ENwB3v6dObGGQQ6MyPfZckmqkYfEnrWs Lap9qu40Z1aMyUqvfa7lCDRKnMUHEPy9oYmG4hGIeaZ1LAX516mmXwhwm+fE8B25 eKuAfn1ad/iOv74JCF9lr1f7Zzq4ZEkyaz2YiWBnZVzEAIZc6zap6az4A1ohafPt PZEJsaDiyIIGYo+diwGr73VlQD0q0GxkmWSsD91ZgfdxVPH7vEu1UHCmMYumm3ZN rsFRMxXpLPZ08o6as6L+4+jIm5UekmHXxK4l9VTeHixW/V65B4XoDD/GyDWg3RC+ r0oyuYngq31juG6finZ82VjDd+aCQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U75wgGaLAgYhlY/AO9Eva3gTN9QNL8q1MWoFA9FQPUY12AmEQHvFyc3n7sE19WQetaWZuXArX8IQsSpRAHFhkgjuEubyrxb73Eio/ZvQRW92fKfLeExckM3D428EOPPZzJH2eH4CtP5dkEGTMwaxAeJZjKmdkx7CGFkmP4IxK4qbwLblHycIvy/sJW9S2iheFdsKfkQUk/Cc182itFS3UpiOx+en0GGP47RQ0ToZ1hsv59+WQZqw/uT+lgMeq3MmdxHWWukRDyLsbXBm9pmmJ9wEHCpgCkwBhs9Oam0B90A96TLXq3e+wvLe8sRo7gkQ97YJogpB6MRgyru4szRR/A== 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=6IhfTWHkqi5xCJhfYuHi4E8YIuBVy/AN0i+4GwH4+Yw=; b=d2QbpuEQ9xVfny5ZIs0+1QHzXjtA+3LpGcYiGIQio9TdraM93Oa4s8iij4uf7WcSew3tgyeDgYmxu2+91oanLTc98LczgwL3lPsps5wOVhiAdStJEgynr0vF24h2O5x/lV5j+6e0+je0ac07Ggf4bES6zTdgopOrZasmG2YT+TRCNngOqrSZIehIUihbkkPg66DkU8eusEMPN9drvg75C+T67Y+siYjoAUqspvBaXkkduL/nC+WWuv/zEGjIW51fp+zfa2vynaSv7sa9kmunz7ptTw83U1eMUfkWx9bnPU/L3KY5ke4xORvSCu40ezaozOQ30iGXrrrKTLG2KnLwBw== 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=6IhfTWHkqi5xCJhfYuHi4E8YIuBVy/AN0i+4GwH4+Yw=; b=A2qHuyowxCxLoSRL2q8KxlQ+OVYuwLhfZIHVhRSiOEUTFuISugrzqVzvZbW63ZSTLzP34WS5tYGvC9FG2xzfieqZrlzMaE1diCd7o1gR9sVEVlnIKCI6nk63Hti8epfAzOgZCPh78HghKdBjbcFidsMPPcX7cPHy2RU5hFzc63BNNfLnnZUEquIJg+EvYzRZm0h8NHFwF8RE8uSAhz808LWtWlUDJSLEHOLfKszhSjhxzNz3vDdvi83ACnyE9KsY9rac09EcCqXiSt8zHF4yJSYnzlBAGQM95l8d1kWTNDsBWeotIfnazztIUk5xmRUQf0Ys52yBA3AXiq0HdelbkQ== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?utf-8?B?Q8OpZHJpYyBMZSBHb2F0ZXI=?= , Cornelia Huck , Eric Farman , Halil Pasic , Jason Herne , John Levon , Mark Cave-Ayland , Matthew Rosato , Pierrick Bouvier , Rafael Castillo , Thanos Makatos , Tony Krowiak Subject: [PATCH 8/8] vfio-user: enable live migration for pci devices Thread-Topic: [PATCH 8/8] vfio-user: enable live migration for pci devices Thread-Index: AQHdO6VeaETxjI6wkkCU/vBod+UCgA== Date: Thu, 3 Sep 2026 13:08:52 +0000 Message-ID: <20260903130833.1437632-9-hugo.komatsu@nutanix.com> References: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260903130833.1437632-1-hugo.komatsu@nutanix.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR02MB6172:EE_|PH8PR02MB11926:EE_ x-ms-office365-filtering-correlation-id: 5146105d-2dda-494e-6ea0-08df09bc80d0 x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|7416014|376014|366016|23010399003|22082099003|56012099006|10067099003|6133799003|18002099003|38070700021; x-microsoft-antispam-message-info: HBiEeT6t8WvF/2uv/26B3v/vurVeUwsZaZ0xjjNsAGeizqi8UwTXxfjv/9Xqh51yz2yBg4jpdFBYyEjlLJozh9O0pRCNA4BuXyN33kkd0Ov+s5Jwcai8E06Ivv+YSSsVwuFKpqEQ0KijZw0iRCqD4gYr4Ki4QVgqVyqPdMs0Z/oQFtCG5nnVWcHQpQhsvx1dqO5V6RjCr7EryTAp832qBexWE1zDsMk2kQ6SbTgFZ4VFf+x6JNbRypz7TVUE0DZVLhgRR33Lh6w6FDniGltTBvpcH8sj637BZfKyo0cFXAZW1qI4x0iXQNs6bw8G854HDlduwtXvZRCPMqvJd/oJdGbv2Q1k+ZCVoa1e7wY9AeDfi6Kf4TPF9FaQKJmp41k0+MWcNRFCPWWaiqs31n5P3V3xEiVNPy0UQUX5GW5pwTaYr4qReH/uXp5k2UfTXt3d+i0iq+so2hYhP+oOkdXn8HkfBsvxZvTwCk/zcJvrRiI73HpuN2vXnJibFS+fXHw5ihIG4LOXwl2oK69ERCBP9u1soIOJ79aBeO+5GrV38fFG90lHxOdtmCy5uiFR1yXvEm66rohuAzUNzK4AMxLWB+1mohF/fxeMbZW/6fkwJYPcd8zag/b848qCxw0E6kMSE2Xoz0mJ1eBbghRCzaxtce17QlDxiaRGlnMf2ZlxGHcZm2Xg7YM+84h195AnqC2YoFNK/v6rEp18VHzE5IuKzjIJ0aCRXxgf5ioKWFB06lU= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR02MB6172.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(22082099003)(56012099006)(10067099003)(6133799003)(18002099003)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?UGVHb3RIREtRcGFpbk9pMVhSR3hUZkR3QzhEbmdTTjFRUVRVNU8zYlhDalJS?= =?utf-8?B?VHA0TW1McG45bTB6Y3dIMzN2dE04TEhrNkZOdE5HcmxlZ09NOTd2endHZnNv?= =?utf-8?B?YWNqRWhrVEVOR2daemlOcGw3SVJ3MlFzYkRocEFwbGxDZTRvM1NJRWtsQnFO?= =?utf-8?B?Ryt6VlpHWUhZcTFIM3c0SVQ3TGEvZVFWZG9lMTlVcGVyWVNXYjdwbGdFRHd4?= =?utf-8?B?U3RHN2ZzR25oWjZyd0dVZXhiUWt3dVIvTzNncGRCSjFYK2dNNzNxWEVZV1Uv?= =?utf-8?B?YXdaa25SSE1MS001Zk1wclZ6Z1JyUnRkS0JvZHFMVzNjeDBkVnZVT1pXQ0kw?= =?utf-8?B?MWR3dm9vREYwelI4TmlRc0xxTHhrajN3ejZWcVhmU3ZNLytYcFNWRW5Nd3ZT?= =?utf-8?B?OEpYb0lwRHNVaERqYTFlTitwaU93NTVRcm1ObENmay9DSUpHYW1IVUpGNHhJ?= =?utf-8?B?RmM4ekJkSGZzMHFUMThFbjFiMHcraWUzNnVFai9qUi8yRDdLaElVYkRQYWli?= =?utf-8?B?SVREVW5zM1hKZGNkREFxZlk3T3dWSDRIRno3SFZ1SnEvR24xT2NLT0NKYjhq?= =?utf-8?B?dDh2OXZPTzBoSm5kclhJY1B0WG5oSmVkTldyZTZyZ1BjaFVNSU53cXQwZ0ZH?= =?utf-8?B?ZmJWVHZrNW9RN3RqUlRqMXpnVWtSUG5idFEwWmZKSXdxTWZkWE1zcjV6aGw2?= =?utf-8?B?eDJnTXJFNU53Nm05YTg2MG03akZNUzZZK2VJZDBJZmt1Uk9QbkR6YkxpWUN2?= =?utf-8?B?R0F6eHJnUWk5OWsxM1grUmt0bG5PUFdnOCtmZVZZT2h1R3N2eE9EUm9pMGZE?= =?utf-8?B?UGkxdmlpVUpWdlArbWdSSEx6U2FwOEVWZjdOS3dvSWZwZmlNSUd5NVNsWU1H?= =?utf-8?B?b21mZDJYMlNHTFBCOFUwN1B6OFZEZm11cXA3SGVCS3J4bjk3N1d4S0U4Ull6?= =?utf-8?B?amlKNlBIM0IvNmlhWDVqM25hRTZ5R2xVRDNjNnZqWWNNN0dnaytaRGJMT2tW?= =?utf-8?B?UHhUUkFlcVBITDJYK1lKbjd6aDlGV05BczhHZzRmL28zRGdST25sSE5yb0JI?= =?utf-8?B?TGtBekJjU0JXRzVHRjF0dE10cW4vYVRsbWc2Y2d1NzF4NWJxanN5ZUxHME14?= =?utf-8?B?OGN4dU5SbWxPcHVxcWUxSVErWTQxUmpjNy9rTUZFaUUyVEw4OGtxaXZMQW1O?= =?utf-8?B?U0ZnSGkycVpUd2hxMEEzWDRFNytrckxqUXZTVGVaaVoxc0p2TWJOMVRZenI4?= =?utf-8?B?NklpY3Z0d0lYeHlrRTZZQjgwSVFnanFvWDQ1d0pVcFpETEtTQWFXSFBuY2pY?= =?utf-8?B?MG9nSTMrbEdPS2hqWUVDOTIxYUF0bHVGcEplbzROUHBJdC84akxMQ2hpeEFE?= =?utf-8?B?NUpSeGd1UWNwdFFWbTd0NVJYRjhqeXhaSmIxN1RtTWR5RDdNYXZEQU02RVdk?= =?utf-8?B?SW8rL3J2SUEwM1NFbWx3eGxtN1Q2c3JqTTIrYWxXL0lsVXdFbytaT05iMkJB?= =?utf-8?B?a3VoVGNTNW83RDdWZjNUM3JPK2gySGdjR2x5SWgzUjZXUE5NemlrRmhTQ0Jn?= =?utf-8?B?U2VzMW5mVXA3YnN1dDBadWR1dW5rSWl3K1RVQTNaRGlBeHRWR1RyQTNXTE5q?= =?utf-8?B?c3FGdG5Bamp3c0NWcDgxckVVVG1qWk9vNFNGaXhjSzRKOGdpTGtwTkJBMUUv?= =?utf-8?B?VWpmTzFhVHFYUkNwVEEzbVhBR1BIRzlrbmJiaWJGeXlNNmxubTFqZkhTZDE0?= =?utf-8?B?cHV1UElTNFJoWW5WYjY5cXBrekpqaDMydVhsU2xoTmhaTytrcS84SkVqS2lz?= =?utf-8?B?dUt1OFg4dlg0c2w2MkpqSDVDS0JxR3pQN1FGTVZIRzd5Vk5mNnFqZGszSlNo?= =?utf-8?B?ZGVBWkRzWnhsNkMxUFdYVjRhMTJRYm0vSkt5N1hXK2VOM1A2L3dxV3YrUlUw?= =?utf-8?B?TkVCOWtxbHhqak5xVHV1ZTBvYnNQYUd6bkh6SVk0UXRwVm5oTW9GWXBBaXpn?= =?utf-8?B?THN1Lyt2UXJwY1RLTDRtUzRZR0tmY2s2TStXd0JCeDRsb0FiNmxENzB6a0tE?= =?utf-8?B?UEU1TkdyRXZITnNJZEhYUWQwRUJvdEVGelQxK0xER2c4M2taUDdqTHY2ZzNj?= =?utf-8?B?dXVKUDgzbVdJd2RBZ0V6aVdjM25PWVhKWk12bkEzQjRyS29iK1RpZ3VudllX?= =?utf-8?B?SE1acFRDVUxYZHgyekpYdjVsOHRmV2pOQ2NuQVB4WmlGaUxNZzhGV2FXZE9n?= =?utf-8?B?VWNvVE5vb1lwbGkrT0RqYTFzWTBiQUJJL0VvTGs1andQWVNaV2hyZ21XSGp0?= =?utf-8?B?dHFPSWMxanJObmp5MmFKK2FjSldxMGsrdUtEM0g2b2VtbVMzcUVObE9wcnNt?= =?utf-8?Q?svW0RavaLaq/4PxE=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: bF/Su+NlNkfGHSJ5iuS4jmoudBT8DB72DtQVddNWJTnBkZq3a5hrPIWjGvKhRNDMUA8NcsS8AZdI2763WuKOl0XR8n49G5t54vsJeRxoNUIojv+L3CDESs2UfDsB6RcuDWo6TMUET0EKdbXbw3pJqsJXmtgSS2iesuMR0txOUk595ZNQgSU7JiMAm8Ovby5UtL7tgtVBzRki2R9zS+C4KP2TyEQ3lKzXUIAkrgNJ6nBtTRceOQM6cOyjZjO/eAzjHMbtAt64OFDNJIrA+xMI9XTrHjLMkbeT3CP82ivQbHMuXHKdT41fhRRmrh0IgoZxcdpSJVggdr8MA520mteiwQ== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR02MB6172.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5146105d-2dda-494e-6ea0-08df09bc80d0 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2026 13:08:52.9466 (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: MTmEuQu+xTciwYjQr4ywAz1+oN0/T0i2Iz8C1/6E4sNHry4gGDEcllOuKnyh305j+sNZAVKNqbj/tQBEjpwDS7HPyZgRL0cH68AtTdVlN28= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR02MB11926 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfX5r8UxRFdMrT9 0mgLYFLBVDIUb/nQUlHm4kmthW7QdTDhj/OIZ30BtFqHUb6d+5b9R/U1wMH7zNLCFDUeGmJdhYl awq7k7aI5SHqwOmuF2ZxUH4rcr2aIZ8= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAzMDExMyBTYWx0ZWRfXz4me9LhJLa8t mGpGMC1FX8B16oSU6kF4jobHcz/E3/+Z5yIhuHqL6h6+P+gYei4E3nMPUDQE2htiVlUhDZQBKxa yqt6Q0IuwNNHtXDLLjP/mbB2FXFWeJ6CBS/YNsqzIcdrjWoMQeYxE69/C2FAkUvJAfGSrlUHFxW 6v/IEAcGC6T5oIf+Pjcka2xjWRYAO/RTR2EE74Layn/skff8dDFWXCxv6WOW8L2tXM8W3KrSRLR B+5+MytNfLr2wddFUgL8VH+sk7aqoJU5ZqU6xSUdLeK0t+3HHEV7s3/uyegeIuGf+GfnohUxvWk twJRmLNp+XlFxfS4Mu04YUaR3jBYzkABQPhcZEf8Y6lSmtUtk1z8B/lHJk9PRJ1B8ofYFnHgSzr LlLAKhPtqc2ALzPW7Ko1gHbPR0EQDz7R6uZgU3IG04w+3yasN2YNB3uvG6aqQcqrZY/NQ3RqPx5 JPJYRGQ1vQRmTd0/1sg== X-Authority-Analysis: v=2.4 cv=TK11jVla c=1 sm=1 tr=0 ts=6a997166 cx=c_pps a=9i+TsZ0Ui2ufk0A0iTQi3Q==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=y4UcunY2MAxhM4LwGdWI:22 a=64Cc0HZtAAAA:8 a=p7XhHSwCDMY6iawtdMMA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: Ntzm1NsWbcF1xLfRkUWLqggJ-6aHPAx7 X-Proofpoint-GUID: Ntzm1NsWbcF1xLfRkUWLqggJ-6aHPAx7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-03_03,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.151.68; envelope-from=hugo.komatsu@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_BL_SPAMCOP_NET=1.347, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @nutanix.com) X-ZM-MESSAGEID: 1788440976318158500 Enroll vfio-user PCI devices in QEMU's migration machinery. Export the kernel vfio-pci config save/load helpers (vfio_pci_save_config and vfio_pci_load_config) and reuse them for vfio-user instead of duplicating the logic. Call vfio_migration_realize() from vfio_user_pci_realize() so the device registers its save/load handlers. Expose the enable-migration on/off/auto property, mirroring kernel vfio-pci, so migration can be explicitly opted into. Peer-to-Peer (P2P) migration states are not supported by the libvfio-user server, so P2P migration support is not included. Device state pre-copy is not supported over vfio-user yet. Strip the PRE_COPY bit from the advertised migration flags so the generic migration code never enters the pre-copy path, forcing a plain stop-and-copy migration. Co-authored-by: Rafael Castillo Change-Id: I110499935b883d9436f6335e53bc3783cf530379 Signed-off-by: Hugo Komatsu Reviewed-by: John Levon --- hw/vfio-user/device.c | 11 +++++++++++ hw/vfio-user/pci.c | 13 ++++++++++--- hw/vfio/pci.c | 27 +++++++++++++++++---------- hw/vfio/pci.h | 3 +++ 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/hw/vfio-user/device.c b/hw/vfio-user/device.c index 6b767e94d3..a0c23e1a68 100644 --- a/hw/vfio-user/device.c +++ b/hw/vfio-user/device.c @@ -197,6 +197,17 @@ vfio_user_device_io_device_feature(VFIODevice *vbasede= v, =20 memcpy(feature, &msgp->argsz, feature->argsz); =20 + /* + * Pre-copy is not supported over vfio-user yet. Strip the PRE_COPY bit + * from the advertised migration flags so the generic migration code n= ever + * enters the pre-copy path, forcing a plain stop-and-copy migration. + */ + if (feat =3D=3D VFIO_DEVICE_FEATURE_MIGRATION) { + struct vfio_device_feature_migration *mig =3D + (struct vfio_device_feature_migration *)feature->data; + mig->flags &=3D ~VFIO_MIGRATION_PRE_COPY; + } + trace_vfio_user_device_io_device_feature(msgp->argsz, msgp->flags); =20 return 0; diff --git a/hw/vfio-user/pci.c b/hw/vfio-user/pci.c index e7573d4a9f..b9f65e78ce 100644 --- a/hw/vfio-user/pci.c +++ b/hw/vfio-user/pci.c @@ -13,6 +13,7 @@ =20 #include "hw/core/qdev-properties.h" #include "hw/vfio/pci.h" +#include "hw/vfio/vfio-migration-internal.h" #include "hw/vfio-user/device.h" #include "hw/vfio-user/proxy.h" =20 @@ -239,9 +240,8 @@ static VFIODeviceOps vfio_user_pci_ops =3D { .vfio_compute_needs_reset =3D vfio_user_compute_needs_reset, .vfio_eoi =3D vfio_pci_intx_eoi, .vfio_get_object =3D vfio_user_pci_get_object, - /* No live migration support yet. */ - .vfio_save_config =3D NULL, - .vfio_load_config =3D NULL, + .vfio_save_config =3D vfio_pci_save_config, + .vfio_load_config =3D vfio_pci_load_config, }; =20 static void vfio_user_pci_realize(PCIDevice *pdev, Error **errp) @@ -343,6 +343,11 @@ static void vfio_user_pci_realize(PCIDevice *pdev, Err= or **errp) goto out_teardown; } =20 + if (!vfio_migration_realize(vbasedev, errp)) { + vfio_pci_interrupt_teardown(vdev); + goto out_teardown; + } + vfio_pci_register_err_notifier(vdev); vfio_pci_register_req_notifier(vdev); =20 @@ -426,6 +431,8 @@ static const Property vfio_user_pci_properties[] =3D { DEFINE_PROP_BOOL("x-send-queued", VFIOUserPCIDevice, send_queued, fals= e), DEFINE_PROP_UINT32("x-msg-timeout", VFIOUserPCIDevice, wait_time, 5000= ), DEFINE_PROP_BOOL("x-no-posted-writes", VFIOUserPCIDevice, no_post, fal= se), + DEFINE_PROP_ON_OFF_AUTO("enable-migration", VFIOPCIDevice, + vbasedev.enable_migration, ON_OFF_AUTO_AUTO), }; =20 static void vfio_user_pci_set_socket(Object *obj, Visitor *v, const char *= name, diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 12f2974d19..5363288c61 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -2996,7 +2996,7 @@ static const VMStateDescription vmstate_vfio_pci_conf= ig =3D { } }; =20 -static int vfio_pci_save_config(VFIODevice *vbasedev, QEMUFile *f, Error *= *errp) +int vfio_pci_save_config(VFIODevice *vbasedev, QEMUFile *f, Error **errp) { VFIOPCIDevice *vdev =3D container_of(vbasedev, VFIOPCIDevice, vbasedev= ); =20 @@ -3004,7 +3004,7 @@ static int vfio_pci_save_config(VFIODevice *vbasedev,= QEMUFile *f, Error **errp) errp); } =20 -static int vfio_pci_load_config(VFIODevice *vbasedev, QEMUFile *f) +int vfio_pci_load_config(VFIODevice *vbasedev, QEMUFile *f) { VFIOPCIDevice *vdev =3D container_of(vbasedev, VFIOPCIDevice, vbasedev= ); PCIDevice *pdev =3D PCI_DEVICE(vdev); @@ -3570,6 +3570,20 @@ bool vfio_pci_interrupt_setup(VFIOPCIDevice *vdev, E= rror **errp) return true; } =20 +void vfio_pci_interrupt_teardown(VFIOPCIDevice *vdev) +{ + pci_device_set_intx_routing_notifier(PCI_DEVICE(vdev), NULL); + if (vdev->irqchip_change_notifier.notify) { + kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier); + vdev->irqchip_change_notifier.notify =3D NULL; + } + vfio_disable_interrupts(vdev); + if (vdev->intx.mmap_timer) { + timer_free(vdev->intx.mmap_timer); + vdev->intx.mmap_timer =3D NULL; + } +} + static void vfio_pci_realize(PCIDevice *pdev, Error **errp) { ERRP_GUARD(); @@ -3745,14 +3759,7 @@ static void vfio_exitfn(PCIDevice *pdev) vfio_display_exit(vdev); vfio_unregister_req_notifier(vdev); vfio_unregister_err_notifier(vdev); - pci_device_set_intx_routing_notifier(pdev, NULL); - if (vdev->irqchip_change_notifier.notify) { - kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier); - } - vfio_disable_interrupts(vdev); - if (vdev->intx.mmap_timer) { - timer_free(vdev->intx.mmap_timer); - } + vfio_pci_interrupt_teardown(vdev); vfio_pci_teardown_msi(vdev); vfio_pci_disable_rp_atomics(vdev); vfio_pci_bars_exit(vdev); diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index c9ab949870..9298e0e996 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -221,6 +221,8 @@ bool vfio_pci_intx_enable(VFIOPCIDevice *vdev, Error **= errp); void vfio_pci_intx_set_handler(VFIOPCIDevice *vdev, bool enable); void vfio_pci_msix_set_notifiers(VFIOPCIDevice *vdev); void vfio_pci_msi_set_handler(VFIOPCIDevice *vdev, int nr, bool enable); +int vfio_pci_save_config(VFIODevice *vbasedev, QEMUFile *f, Error **errp); +int vfio_pci_load_config(VFIODevice *vbasedev, QEMUFile *f); =20 uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len); void vfio_pci_write_config(PCIDevice *pdev, @@ -284,6 +286,7 @@ bool vfio_pci_add_capabilities(VFIOPCIDevice *vdev, Err= or **errp); void vfio_pci_config_register_vga(VFIOPCIDevice *vdev); bool vfio_pci_config_setup(VFIOPCIDevice *vdev, Error **errp); bool vfio_pci_interrupt_setup(VFIOPCIDevice *vdev, Error **errp); +void vfio_pci_interrupt_teardown(VFIOPCIDevice *vdev); void vfio_pci_intx_eoi(VFIODevice *vbasedev); void vfio_pci_put_device(VFIOPCIDevice *vdev); bool vfio_pci_populate_device(VFIOPCIDevice *vdev, Error **errp); --=20 2.39.3