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=1789136502; cv=pass; d=zohomail.com; s=zohoarc; b=BE7H3sd6+HPJLsReRKJvEYQjp2eK2p/aKKc3YhmDNTAtAJiHn3kgDTF8HpvoVmnzA4otyZHuzT4qMGeakaHhYJGxqkssr/fGWCq1mxXD5M6RzUVuFOwEaMgUo9Z+idEyGCqSt08aG909FWHV2LZIjYl02qX8ih36VNjAmZmL5fw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789136502; 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=jbMg9+mfMGyNTrYhy48QqyEvMitoxObC7z0elyEr8qo=; b=SAVOE0dUZ6Ahxwy/CYb3Cgi3fNRBzNS2RZxgsi+xbuIWjg7z/qa2q1x0oJvEySzbk/bKwsONaL3EpxitU8LzDWEcUuZQ6W7yVKHSCIbMz7EE5oHozXz7wdh28r9b7dniYgde/nEd5kalShD6YKFddlLZZPPKhcTx4+Pj3FfI3+0= 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 1789136501716927.4798335710341; Fri, 11 Sep 2026 07:21:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x526p-0006wO-Ny; Fri, 11 Sep 2026 10:20:07 -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 1x526W-0006jP-9K; Fri, 11 Sep 2026 10:19:50 -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 1x526K-00049V-U7; Fri, 11 Sep 2026 10:19:40 -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 68BCh7K2004863; Fri, 11 Sep 2026 07:19:28 -0700 Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11020087.outbound.protection.outlook.com [52.101.193.87]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gkd0157rs-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 11 Sep 2026 07:19:28 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by SJ0PR02MB11781.namprd02.prod.outlook.com (2603:10b6:a03:402::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.9; Fri, 11 Sep 2026 14:19:25 +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.0406.007; Fri, 11 Sep 2026 14:19:24 +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=jbMg9+mfMGyNTrYhy48QqyEvMitoxObC7z0elyEr8 qo=; b=JCclvhNiuC5JkphwJPcd4KsbChO8fw0zes/Nibe3RVfu1Nazr5g6KsMXJ pvCkjKhYqvHzdmphGx4nNcAGooiL3pKALiT10oyKZCRwNq+LKNoWYw9oOTLwVmph HFPlRNbNkNl4xZUCeGbOnfpJw88EtOhPlCmJQaO45CZ5uQD3KYmSi/L+PztD2iZP ULQhdlqwHUNyzDlYavanTMkJWLInQh/yGDczU9o9gjkCMc0LaVu6gLkAWIGygtRV l3g3Sz14oL4mQhUY6io3bNyye7ODsWbWQjSCm54bA8HAKTu6ynD+Vgorfr0CaIcu e9GGltvh0BucAxgor3yLzv4sLxI5A== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=o7mnY/3/QAL8xQ7ECQqf+o+ZA+JuW4PLCUdI/EoXq3Upr8SKx8RmTjDyucEcj23jsnh+nVo9pKZYFuEXVBMPjDXeVSLYaPkSOVTQQYenR+TsnVB1oQ3vhrmo9kqovg3D/HtKDxgFNpQl4PrSaZQE9WhPQQVQ6VwmyAFNReVo+LDK7oQ9cgzapHZ21V7ElOTZYc0zkBowLziN39rlpIGWzC3FKr0lvNqK1ECDPZCOh29ByUy4E+d4z1XDsJ7gmTs7aWg0PCr91KgvpA43p5hGqcXyGnjNjLk8xU6C6JJ7Ib7DYABPnVCtldSxGJ0hkUYnhVA3d3GNXM/bWJgKu0uBvg== 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=jbMg9+mfMGyNTrYhy48QqyEvMitoxObC7z0elyEr8qo=; b=AEwFN9FSlL4PQDMdyAqbMcUjBc/32qvPOoGkDShIMb13A70uNfoHVuOM/sOv43YDfmfSbX2aU2m2XtJladm6nDzTvXmqF3khzZGHk2haU7D5vzzDKlb3tqnbuCFz3gPp6F+heHaSDg2BS4wb9T9AGblEnlkvFKFG8qGVFpfwiG+VvyeLdnJXC+hQeUbB4EA4HUbWbSXueCyWvOGYG7Vd0XqqoSyeVazCt5GWlHBeuxFvud2QHejPdxLACJkT/fMQmmz1X99CjnU+RMjsebUW6b4VyEt+HNFUosPIZ3MgUhKIOQoN/AjtdzzuHS0B4OVFGK/NpKFLlCsSt+KOz8qLVA== 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=jbMg9+mfMGyNTrYhy48QqyEvMitoxObC7z0elyEr8qo=; b=aGpXPNz+jyo/HybVShACmpw+zFLSRIBKh7cJPTtt9VvQB3MAbM0d2FO3IKbbI2Kny3+j3PIoy+ox0WcDwJoyriTSZIv4L/ucjssVQ7y/qsfMf2xdy3dlNqp4EPG+2nb1WZ924EI1V0RPV2s4OsNEyMjH4n3n0zHToGC14SYAzKHVbT0SYgl1G1sa0PnN1BkoFACgEgBuo/kZjCWp1JukNo0k2eX+JGkYaPxtmYWT8oPAifjPsa3YZS/V3o56zdXvxNQnqdnLGfqyMt04lCb0npfzpNpinFevZ9huVqPlDkm6AWdwdoT0Uso+Sez4coDQHLyLHyl1WbFMQaOVRn9gTw== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?iso-8859-1?Q?C=E9dric_Le_Goater?= , 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 v2 1/8] vfio-user: add live migration to vfio-user protocol specification Thread-Topic: [PATCH v2 1/8] vfio-user: add live migration to vfio-user protocol specification Thread-Index: AQHdQfiL/Y4Kz4asc0yhxJe8cqu/8g== Date: Fri, 11 Sep 2026 14:19:24 +0000 Message-ID: <20260911140710.2348139-2-hugo.komatsu@nutanix.com> References: <20260911140710.2348139-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260911140710.2348139-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_|SJ0PR02MB11781:EE_ x-ms-office365-filtering-correlation-id: 60503bf5-55ce-4797-f014-08df100fae0a x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|7416014|376014|1800799024|366016|23010399003|38070700021|6133799003|3023799007|10067099003|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: JWxZ7EW7NvO2NWutmrcCmgBcMnjY4DxVe2/7aQku3gybVBHVyndvBn9bJEBET+8g7YfRq67jE2ImjINbn+U0guEMaUL6ZqnQZl2byrfMaBGJLSma6SU8yRjdkBbd755EEL+lSR46rnE28ggUr7VQYYPoG9gbydVbShJB3gt6xK/aztGI63qn1LmKpVAjxtcIzFPNgIEpivWYL/eXCTbxcaTOW1vzx1EcsNY1ILr9jfg2L6+KrW9TPZw8FvrZDQ5EhUby3ZpYcx1GPujx5d0tFL8sQMR9ypIGNDByE6NzNpaGmEPVhNjPlG4/1cYk4lZZDtGTHPpCljiVScuRbMnMcp5z/PwhIh5BNwlf2whTi+OZSNcFH+ySy/E2weOhzyLlSswZZ0Al/iVHvO75AqfplgwzcW+5yhjiz5PLP7wOmc5Avbsq0uRHtNkSIWqOV99pg6vo5k+UqT4xnpq/MYe0uyeuq5R2k11c+axDb+X81nkYnzySbiDWbSSXdV3/42gAe/LWD/RRYVObhOMna8muapGSF6thtHb51VIkWhC2ZMDrHHFkT8Lk+n80P855IOL4E2annA1ghFhVTzdQ+ra6lXK69FzmAfQdJARsTk/i24FXTh/nniLiz9zGJ9SrYwdUmCyXkZIv8BsmsLAuFQfjBupV4ThXHayWt64qfzV9qcqO6wKnHVryi7qLl/SdDK2itCvvfOweT7y5at3pAYRmWibY9OUsxzrAcY7mt+Q63ns= 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)(7416014)(376014)(1800799024)(366016)(23010399003)(38070700021)(6133799003)(3023799007)(10067099003)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?yaCBPMVSJOp+a6himCmOzl9UWnFPRzjF1u2ZEmquD4JhnetpPio/HiBPIn?= =?iso-8859-1?Q?7FHPonLmO3Bgq0ALP0QDbzsyFqyXmQWAsb8fL7ltJ6J0eHE+IeAqngeDik?= =?iso-8859-1?Q?7bsDfruDjoC8SEbyhyYy8SP0bepBCcP0xoahT2mKBK01EVjg+0K2o+2cNO?= =?iso-8859-1?Q?xzZewLRNteVwft1YiSF7Xg94LWnQqWRz/S2yl8sueAnGlERI5/v/ZXZb8h?= =?iso-8859-1?Q?rlaqQBsEeJzdzvEgeqEqQpQ4F54pDODl2SVgSo3YfiZuJ/nhkbt8fxveeV?= =?iso-8859-1?Q?QZSXrwViXKtAdUw4UvYfjxiby9gjzVClqvGRMmsLOh63EuhAO1ul09osBF?= =?iso-8859-1?Q?wdANrwTxAEtnugkhf3wvznO/9S2fNmreaXEFzadHjrGBEjVQnUPiJ79wZs?= =?iso-8859-1?Q?qh0DMVJpYO77IFWyEROrUUWquVMexmxBoPLVD+UDvn19WWq17hHMJF7x91?= =?iso-8859-1?Q?hW+7rzvN2sRGEZLHe9L5bVf3J9slJn9j6fiR0u/hJVv5HAECGswJUVu8dp?= =?iso-8859-1?Q?1tKGmlLUGhDQdG3t/HbuMyVIBYldPplPENDMMACBORFrE5HeB6RNscDLth?= =?iso-8859-1?Q?8JEAJ5c4G2HdjA31PgpCYlYWHIejeyovkSRtXfV8gqAIQZsnjg2RgQ7O18?= =?iso-8859-1?Q?8bpYH3CSZsaxcszNy2C+6mPE1inkx35NLH5Jlepj6Vp37noDSOfdrCmuq2?= =?iso-8859-1?Q?Kl+cDHtRYw6sHbKL+j4bDwA7XUh+sx6sMFFNwzZIZCgbbJmyoysxgceaZr?= =?iso-8859-1?Q?EllTOsFqka565fmesOZ91rvRunn4C6M1RYNU2bh8OkvFtgwNOzRNi2nYjI?= =?iso-8859-1?Q?cxFS/dMHzi4j47um8dgBfpwwikJWcctPM8ue+SjKuGKddsYqFQiOaHPlGE?= =?iso-8859-1?Q?I320V30z5Ue5on+1cLmNhuy/SNAMK3dZ3F7TLE5K0X+QpNl+T1VbvEIvYw?= =?iso-8859-1?Q?yZ0NxDuWqOFMBeWa9VcM2qVA5JY0s3rgV87F9kRtJpl+qQCVJkN8lw+UEh?= =?iso-8859-1?Q?GoZfaYAjXpYvOZ+vcLhkwdHlUuygNf7rX3rtQFEHPD1IBk2MbPzhMSpncE?= =?iso-8859-1?Q?Lnk9Tra+7AcQ5QfH19dk7R9iYrKjkHgbEybTfU3dqp/b+GgoAYoMR2TkZl?= =?iso-8859-1?Q?PzyIAPIqBwXTyd53EM6CaBgKCbIVWkloXsNumjCxUFBhRwn/ObJV6GeaIU?= =?iso-8859-1?Q?O92l2o0iNWSwbV7oqIk8EtGsFv5WFP4OSdlsDo9GKVtBib3b9uItKSz9Gs?= =?iso-8859-1?Q?TJPBUPehZKAEzVdsf84WfaIT8ChCIaLoS3vd4UiRCBzVrzRGYaEFCbIlM1?= =?iso-8859-1?Q?EFRIcPVVd2IaQb21PvBwCc57WnWseGmDu+Ck/moumjXmWkCKi9fjaLixjF?= =?iso-8859-1?Q?CZtsXF/XU7Wmbz9dlXuOx0Lb5lO9WFpg8hd3OZHEnb8ERfl6jDFVXDE/pz?= =?iso-8859-1?Q?pmuWbi/rzSTuvhvenu5hQ91jdgDPaqG39zzugMR7VJg8zCkFd0aaCcXF7G?= =?iso-8859-1?Q?GeNrdWe/Rn0TE4iGJrLJMg7+5/LXDdPXIrVEm7rGPnWH2q5E6IbiFwwQpT?= =?iso-8859-1?Q?JesAw5HjnHmbHsSTRaGRWQSxawMJIihdzk+pBgjboacUFvKtQ7LZm2bQ34?= =?iso-8859-1?Q?CBm5/iNKFTZ+JT6nauGXyZunjVnZ0M2+eEemvg+b5NrxrjrlmYi/+PWWY5?= =?iso-8859-1?Q?kJ7NIoLfen3CncN3p0WMoUe3PgCmO3aV84W2ujsc6ennuezEzCPqinjWIt?= =?iso-8859-1?Q?9pwy79Z/6ui8vIKtbyTh3msJD6OHO+8Z5a1mPX29r20BfqR8mgGwK2iBe7?= =?iso-8859-1?Q?A0gZSjajLZhkV8z9IMX8RZd8yHZYEhU=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: gOnFQ6r/oo/wfY/ZVqVDz9SSLDWkd404ZlaAA5dprU5apLW5oKan2LLtsSN4oMfiCoLs7vbaFYe58wMcCw9GKqAndHGKN9Nq5SY/QBq95ySIzKv0dYyEOVBtiDjqBnOBB9pAaco2KdrmgbhOEGn+/zvaSr6CIeYitOFB/Bqk6A7NbW2QH8Bg6bLZgxpGRdK4FMfVp1Ytv44PHQ5MoIkjowoevD1Vc+/zlfOamw3JynbKAhBz727zH04j+VFXjcnOo38UroSKzhjrDmreViXDx2YpI1og3Dire6mwicDpDNkIQFPJgqkk51K/d3bTvjEhRH80WpqkFi4YcAhVee1n8g== 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: 60503bf5-55ce-4797-f014-08df100fae0a X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2026 14:19:24.0297 (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: usnbRd30hNk+w9uaQi98whNU2goch7moxDN/YaAIdQ+rY3/KXrES3yJC1DG6xeRM90rsK6g7a60c+1UXEdXRX8AF1scqnPbQiDq8ASBaphs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB11781 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX9fGTLJ2/AyIt D8Vi8f0a+xNtQ/6pXrsDhuyh3wXIwFHGiBDaqio7tn3p/WMgISnryg7OFqXJHzOP/at5MgWQutV hj2tk9u/NvQ0gJuQcflIMFZ22f167WYza78uyMAIkNdqrjagxFn6SO8EQ+APZpBx1DgFhonHpnT bMv3n9haej2fNLolt4bis5LbQkIHasq5TGuL7uP9/R0kQ6iqP8bBz0Ui8KdOLI57+PV3sIn73RL sUvU5bnjRqCzONX84Uf/Rj8zLJxA1QFUpFJmjtU9kQql4ec3B5yNbuZHUa3NMb8uCQlQP0jvkaQ R4TzvkreO2rfiL6xj7iMbvT7b0lt4JRDsjJEsH4cd/eYYjZfxvJxnc+Rm8dgrwuTnhSuhq8HML6 J9UXfkIDyB78x2Pgtjh/NtVUpIT8NVQhmSTU/ummcQApwqilQkW4Cf/QaGhAZL7hiwZtUQ2znp9 DAF1aj9MMlMAPG4fp9w== X-Authority-Analysis: v=2.4 cv=H5hOUOYi c=1 sm=1 tr=0 ts=6aa40df0 cx=c_pps a=kBs6TrnBGiNV6zZMgQ8KSw==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA: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=wPNLvfGTeEIA:10 X-Proofpoint-ORIG-GUID: jq0nuPH18Y4rVvssQwtIZ7eJ6Bzh-IU8 X-Proofpoint-GUID: jq0nuPH18Y4rVvssQwtIZ7eJ6Bzh-IU8 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX4+zqiBB9nqwX EPtmWEfJYAMejfeWNX7x9ueZKcrYqec2boIcH8pvcbiIAnvccsU6v3fwm57FxEjrHsgWyRblZXG Wf9KTh+LQWLe0JpEvtOjt5aMXiDe484= 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-11_04,2026-09-11_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: 1789136509130158500 Content-Type: text/plain; charset="utf-8" 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=1789136505; cv=pass; d=zohomail.com; s=zohoarc; b=P1LYOypYf1IkR8Ol5iqe9kPE+8VWcwDDMS9f1fETF9a2e0IwG5LgtTENRavPjH0IibpHQwPCLPJm8JQsmnVElpEeHFLIqrNKk5LoQt96MWzwrVfi5/9vu+VO0uwqMlrSOIYcLtgkhOE3iDqaJQi0xTL1K6UaDnB+b8LEEC18kA0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789136505; 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=q0tUiR64yb+PdsdqEKqJzXHCMI4d475Ef6q33yg12eU=; b=GVPdJiIPpX0iDw63bo2QLLviPnMpNAfjNMvp+bdwKDmvqem3AihN6mqRVPuk1RyurKYrmdSRBW6F+6qVVyafpXnST9X2IBM1ndiF4QeBZdkqt/LFqD1s151Lo/Rd4VvgG/GTu2osXiR8nYDQGymfkjjZAqRFgzjyP7V3R0Xc7Nc= 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 1789136505542837.8142741386016; Fri, 11 Sep 2026 07:21:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x526r-0006zx-Rj; Fri, 11 Sep 2026 10:20:09 -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 1x526Q-0006j5-SN; Fri, 11 Sep 2026 10:19:50 -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 1x526K-00049T-UT; Fri, 11 Sep 2026 10:19:40 -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 68BCh7K3004863; Fri, 11 Sep 2026 07:19:29 -0700 Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11020087.outbound.protection.outlook.com [52.101.193.87]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gkd0157rs-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 11 Sep 2026 07:19:29 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by SJ0PR02MB11781.namprd02.prod.outlook.com (2603:10b6:a03:402::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.9; Fri, 11 Sep 2026 14:19:25 +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.0406.007; Fri, 11 Sep 2026 14:19:25 +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=q0tUiR64yb+PdsdqEKqJzXHCMI4d475Ef6q33yg12 eU=; b=DKI65zY4b3BdnhEhAfv2aJLnmUiYHA+N544gKEf1PYj+0T0CollxSFuD8 ldGNrzq2me3a5ISyK0AVZSqmGPvAvYzjp9zmkKEISV67aDyXtOeasfP/JGtx00UA ycO4a/h1XXQEYAAR+rhcc+a8/UCK4DpT2sU02QxTLCILuCQOsfNMddBmNpb/DXYZ YeVUPvOwHG4GckhK3KM/v6tsBsUeQJNEQ+cf9qdDpOYKra4+OqSBVg/33zLCcXxa gxpj86yysPaHCyFsGMk1nEkVcl/KibiuNn/qK4swVgLWvm8lzDOSnopD6aGhtWFv ykIARzSwubKv/2gQThfORzbAa5glA== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MTVrNxHOWZRSXL/IyPuIPg4IW9dxTI3ZrJRcHqh8LCJZP2y9yOZ2eJ1cAGr/Q6wUVxuFhAebcgFtW4Fy3s3UMEfesyIHftt6RqfQvdNZb8ZoRTmgHuUtke+op27OG/t6HiqjqjVSdBr7+F0s4WEobfrVirGr6mXpo+/SYOcKn6U/08gV5iNJnB8OHtOLdkG3RtuGyom3GCwuo7YoCYWlaWFyAGFeB0fEoe5UfL0+ed79YhpSAFjT+nY8/lNWwbE9J2qcBT1zRoK2Xg72bgDFiktuIf2nexijboM2+3yd4VP/2cKmp6UqPHmrW+9sDhTXk8xBkQ1CrIMzs8TcOvL1Pg== 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=q0tUiR64yb+PdsdqEKqJzXHCMI4d475Ef6q33yg12eU=; b=VhqRoiFVHCLILBZRlj/B22WZUPhbC8hxFe8EeJVOz3HdobYQXQnPl23iyhy+w1gP3cduj6tpUzcMYX1ABskb8KwCzbZD/07wVsew/hG3Rx1hWyilZFJ+o9K8Rpfgc677e33EoWlUmoAegnCvU3+bIh7g8rsh3l6oSNuyJT3P9vqkJk6yK4VaG0RlrThyplXJWQ+VBee3SkIG/IDjXheKXzP2V8qGcdYiCEEhLuk+auddeCNebaHKk7/GgU7DuapwDD1k6LV2I7Yo8IgEuWTXsNR5qmK7Qm8dzDXHKkAeQXhRNFY8tNeX6dCVvW9xCRRyOgrfC3l80+04rgY03Un5hw== 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=q0tUiR64yb+PdsdqEKqJzXHCMI4d475Ef6q33yg12eU=; b=rVyrDSlOwfhhA7C0Qq9ReemT1eNnoPbiGM7s8c7iNKdzBzL4xF5mE0ZfD8nJNBCxA9jXXrNP1HouwZjv1EGhXpmRIiZBOLphO4/hxEPuuHJ9o+GiVpwH1vRWDrHmMGh8fqSPbxJi6HKzTiqPyfafEvllh2cap8K3tQPK7KCvYericOzaubNHDVJC7lYyXTpAsx8hbjBRPle12apX1sO0T7hrEy1Ks7yLyD9AQMNLuClFMstI5Yg8uY0yNT2NN+X+LTbLdKNgKVP9txL5Usx6yyRPJvg+Amh/sJBuhaC9T56PvVvxfrRRMzIYVnwqnCIcAZu7d1+VDNaavOOqcXAj4A== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?iso-8859-1?Q?C=E9dric_Le_Goater?= , 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 v2 2/8] docs/vfio-user: clarify data_fd and DMA logging behaviors Thread-Topic: [PATCH v2 2/8] docs/vfio-user: clarify data_fd and DMA logging behaviors Thread-Index: AQHdQfiMSazTrWDqLUSrCRnfi8hw5w== Date: Fri, 11 Sep 2026 14:19:25 +0000 Message-ID: <20260911140710.2348139-3-hugo.komatsu@nutanix.com> References: <20260911140710.2348139-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260911140710.2348139-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_|SJ0PR02MB11781:EE_ x-ms-office365-filtering-correlation-id: 7f5d85e1-7c6d-470c-5eb7-08df100faf21 x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|7416014|376014|1800799024|366016|23010399003|38070700021|3023799007|10067099003|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: Y8I8MabsyOmfIjZcHqqOPhmqUnWIHbVJAyAKZg/oWlQ1sylpZvASEd6WKpgyF+PzYJNMvzr9DWnh89l1ic+Lg1zhKgiOOFjfBuOrBU0XBCvjN7ulHXUiexo3WOWIcPuJWHeNasVonD9EH1Ms5o0okLDwpUFt9HaiZHs4Iq3skl3cWj8BuHMMNdMAxPzhl8VwRXdsnW9maV6osWTavH8BkuTsoU0er93QhkKQ7ibaNIpdFz9tnJp1vzlxsXjt8XWDnAujqlXPgBtpi8GIgfcRTs66UKzXdbZZ/2UsX2yL9mkJldX0a3hzSZpTZONy52bnWoy+eNkvCUIp5BIgBcGKU1HTAbugmlnRK9spihV1VuvbwTCoxUmSadPVKBpk8t3+0CTfp74VRSfVjXbPVnov/p2Xxu4wYbXv7eIr+O1fNLqBSDzJzWjFWrH2DtutffyUHxOW1ie4b86XWgu9RH4Kt/hH9h2VFD/c4msAXmRovIpmyW4LzvnVIPYC5cvXsWlIWLUdpMACDJtWs/Bam1j26cd1n8ws86K6tn3i7HMUMYdD9Wu7yauG1x9DCcZnymAV4BBjGnSskRK6Ek3woWXuWb3f7i9DIXuagq0uKP3q7LwruIJL48+Uyr3fT1WLQBTs8XWIsY8LEp1+4WoM9Zaezafl5tbZ7nJ21Mh9bkwXzyOXwmY5VIznoXlOg5Tt1b7AqBlt5hl/CFTdcLIi5CK1dVzgMos9GzzMjdPmZ2kunNk= 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)(7416014)(376014)(1800799024)(366016)(23010399003)(38070700021)(3023799007)(10067099003)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?AHqQXFvQ9enyhOf2GS7LuejwVZp8IfJN78hDoGA9leNEQ2QdrAtte4mECn?= =?iso-8859-1?Q?gh7z05rqgmpGHN0u96fxETSOMS+tEAkCwY8L/u4S+h9Mq6R8R+zTIRooSq?= =?iso-8859-1?Q?XI2CSPgESO68oX1bLnK5aMKeIJUP5CtN/v+sv1p7xwdH/MJZsOzB0FDZVq?= =?iso-8859-1?Q?j15sE2IkJMtPV8ayPnHQfTv7c1afxuphvkRLu79E/YL/6JEsuOCbU9hR2N?= =?iso-8859-1?Q?GQ3qZdQZx6DfEeWWvoSPayn2K6sAXWeIFeXu5aRlEYo/CzIQe0cQq6/dCA?= =?iso-8859-1?Q?ZZiIlxJ1VSg/j6d0Mcuz17l9HDyAlnipFk4vB9tsAkOWdE1XGYboi31Gaf?= =?iso-8859-1?Q?FZMhCrU7D+6G3YYtruk/2njstoLw4aqRl4zhfTWQeHScHfKv7MQDquOpT1?= =?iso-8859-1?Q?BuVKT0yEEGCBbs1889fK45pTgHaDaGDPYYPPcZnnXQUPrhC9d7iTHNrXu0?= =?iso-8859-1?Q?NVoOA6LxalhsBHQ7onSHFfCI/hL7DWVQJqVU1BZ+Jn2BgsIg55S+LUXf1h?= =?iso-8859-1?Q?6/AXMH59dDJldls4vrgocZ37uQHvNXXeWazgZR4lTo8xcrJNBC7Z9v9QQ7?= =?iso-8859-1?Q?EIKIMParRvu2BQmX7V88Pjf1Yi6LVPMZvyROcoSfOicc3+/z9D1joA1xD1?= =?iso-8859-1?Q?WWtiBiLNjgMtNgATQPHwkbIWgM0Wj9WkkI1dB+asUfWV09ZoyIB8v7dqLR?= =?iso-8859-1?Q?4gK9EgHPd/q5SMo04bM1DZidfzHX0YgNjkwBKoNPGN36bJ+QGEzgbr/LtW?= =?iso-8859-1?Q?Zk9vdN4b3JnyY6brJ+B2wrlarAnf20H4EJpbnpxJgw/xhNvwotYgSaTe91?= =?iso-8859-1?Q?yxgeiH9U+io5aWXfa9I/JB/4DYl/s2tNxnGRgB0LhcFfIfGp4TuFkuJq9R?= =?iso-8859-1?Q?GSaT+DW0/TbUpR/RvGZPf5yQ03BnMzqPOlkDPqKG+YyJR+RjZKShGIXtS1?= =?iso-8859-1?Q?Ns28OH/AD8wCei9PlK59+mBXRHDA99WUmJ3LlYb42Nv2viV2G/K1BMesEQ?= =?iso-8859-1?Q?WBGCLfwSRmnia3ABzUDq0T440ZWlLetIJuaYAZFnUJPH6X0uMMMcXP0Cwj?= =?iso-8859-1?Q?s/fiuCcbAAVNOKPqsvtujg7wFvOeK6fAt1810S9lFMTPJHfO0ucnzVGZvY?= =?iso-8859-1?Q?PumL7uka5nPDpI2NSvIRgpL5oQJGTXqSvOsyUthzAAH2jG1z3GZwCdVoL8?= =?iso-8859-1?Q?Xoy1XvuOkpnmb9cDzLgy8NQbr45e6sBRalr2BOIhcATEFg7Pqb8I065/2n?= =?iso-8859-1?Q?SsVhQ5+rS1rsWlTsRZXWKN/7NaHqGx/P0bcsV+8+LCDKb9zq0CL6asaO1h?= =?iso-8859-1?Q?w7SKhRree3K8YhhDgSIqlBRGyf+8STx4PTfS3k0qtlMqfwSVCdHuivkApN?= =?iso-8859-1?Q?iGDd9/0yhMBDaRzev9LnOfX4hydPuw8zfyQN3oUOGTw7Z8ocmp6lIu19AW?= =?iso-8859-1?Q?6WAqPnjEmE+NXXE31BsoHkEv5DzbtRoYENEQlReVcyPH66v71456FY1wXn?= =?iso-8859-1?Q?7ZKvFZw5EvGl3a6hU3aH3yszMtXhyzzWCdFGKyKcKrrJMCvQMXOiKVcy5K?= =?iso-8859-1?Q?SoXkI1cuNQvX6p+C0Bgexjmg8UR4mq6ML59L8rPCqlIhU4rofSkCUnTC4q?= =?iso-8859-1?Q?jkFcFYxw9OsjXSBRhLBZLiu72g0L32RzWNa8tuE6rk1kKhWUEDLed+L0/j?= =?iso-8859-1?Q?oQPw6s/P5wiMF2wlyY7iqdJNo96cXCFHc42Z4JlpN29wcc/Naejr3YyPN9?= =?iso-8859-1?Q?gcvaz+4hFKdkyh2iu22LyVVtrjHpBk1ZLZ78gW5uQc+8cIQglg9RB2zIqU?= =?iso-8859-1?Q?HstKWDORdi7b5YAjExuk+FIBgRp7xHc=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: Hx8lN5GcUoy+TlnkdEVJlqCl9kjS0rHeG0ivhOvMlNj5mU79JFmOo1fQ5SzpgnTToJty01LysZpZJNhT3ybD1D4/X5PvbSeVv1TfMulp1Cl2PsN8QLc/k2M3L0s2tVqNFKzsRs+Bf1+cT0wz8lrifGglPld2Myb7rtnUY9tSPLffppDFvjm1DN8VRmslmJNaX6TV5orPrVGtToUjEeZNBhwSu79A4mb/dgMvyRO6Jrv9cP4RoYoYMtCSbXPOKhoJ+aZSbPPnfdp0pNIi9T9emmhJa9GTuVkAd5F8aW1L04fXbhL4IEqivsNM96hTdqnkMzN2+JFAANDVZTbWnvCpBQ== 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: 7f5d85e1-7c6d-470c-5eb7-08df100faf21 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2026 14:19:25.8229 (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: l4z9OnT8g8150+osAQCUSHJ382+DYkW+pbdWatug4OvSQYKbhu+YzxwoQat7dQ19W1J4G8yI4FKkNo5/rocuA2i84DRG1/fZ5+Auy6qlTvA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB11781 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfXwRanCdMtxaXp SAOMINIAY8cjJZQa3JTwmRE830RTf7yZ6z7rkZmenKJvv4IZ8bM+w6zjDJdjaDg6mwNkVj3X8gW IRD5YHfBO3i4qwimxbnkBq9KeK2JkdEU44wMCByVcizNDP6gZ/ZfbgAX8FdB0XGImNpyvOk5Wdw fMFJHTV1asQvUx5qBRrWf3O7Xfuk9sLcKotWHpixoCb+D24kh+TEFrE+AfBo+7UM5U7+prHFx0B YcrwOPestnRSsd1Dqod4a9R1ef7WZV1EmNp2jVMWwBX19m8jmf5UJei5TqSDt1WdASXpo4E92o+ dOo00sSRcLjAnFmu1AqlG04P/L+Vh39mDyCqqxB0cbQyS8wdCyBOeIy7B7Q3/d7hDFcOd+ixB+G C8yBDfv2HgfqV6lpAPhM6/6U+J99RQiKm1Lw8DhTOvWZO6u9uGzVl3E5/xtsMPhS8JgXp0oz0Yu Dt0dZm0LvCLLeGu9dKw== X-Authority-Analysis: v=2.4 cv=H5hOUOYi c=1 sm=1 tr=0 ts=6aa40df1 cx=c_pps a=kBs6TrnBGiNV6zZMgQ8KSw==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=1L6crL_YRTbalZ11mEUO:22 a=64Cc0HZtAAAA:8 a=4vskkdsKVMauzmvqB8UA:9 a=wPNLvfGTeEIA:10 X-Proofpoint-ORIG-GUID: nYI1rQJ8Yb1GWg8T4iTWtwYT9CicjQC- X-Proofpoint-GUID: nYI1rQJ8Yb1GWg8T4iTWtwYT9CicjQC- X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfXzWywih4rDg04 Sf4TZWmpfzphVGnt4xEhFSOEZo/P/mveiGyc04QKCCNd5Ore2nMqLNpGDYxh0sgabElOZiE3mEy zw9qqu1R1WT0qf+wycyqOcbOUq4V+Lg= 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-11_04,2026-09-11_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, 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: 1789136509046158500 Content-Type: text/plain; charset="utf-8" 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=1789136519; cv=pass; d=zohomail.com; s=zohoarc; b=H3CLCHVNZmSXejj8cHmbGXS00CawbPEim+jjLn1YKiaW0VGMLTMBaVHRwbW3JAPkyiA9T9I7v6bzuqxwf277vVQJv/YhRvhwd+2kZB2/26DgMDeQ8gyTdEWAhWNU4BumtFhD6l75RSadg+KmETBnXGr4flCQa8yljH4I/7KRL+E= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789136519; 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=B7/oK5SypP4K2LUCITRbeb1EuhtJKTRykLemu+G8bDY=; b=DeRxMMSJvx/mtjOOrS39UdF7PbiMYsYeTFycfDaw1ylMVPg23Fr0dXZulJH7jHzmM335/raq5ojn1ptKTXvl+VGdYbRxaAbpZgrPi+N5yRTms0TVTdSZcNQ7rFr5MyfzLSoEslaM+IIHSNsmBLnCfomKhRW8dfWftQpCWgEu56E= 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 1789136519636308.5210426337111; Fri, 11 Sep 2026 07:21:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x526s-00070G-4T; Fri, 11 Sep 2026 10:20:10 -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 1x526W-0006jO-9P; Fri, 11 Sep 2026 10:19:50 -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 1x526L-00049a-0w; Fri, 11 Sep 2026 10:19:41 -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 68BCh7K5004863; Fri, 11 Sep 2026 07:19:30 -0700 Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11020087.outbound.protection.outlook.com [52.101.193.87]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gkd0157rs-4 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 11 Sep 2026 07:19:30 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by SJ0PR02MB11781.namprd02.prod.outlook.com (2603:10b6:a03:402::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.9; Fri, 11 Sep 2026 14:19:27 +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.0406.007; Fri, 11 Sep 2026 14:19:27 +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=B7/oK5SypP4K2LUCITRbeb1EuhtJKTRykLemu+G8b DY=; b=255hbVsRbKXhhVc/+NMQG6T0E3t6TPVfGi5a6QF6xryIN6fr8AgCJI+eV XxY6FemcJ8H/R+RKPvY17DZllRi8ZpRcBqzFP7XJGIJZyocpzG2g8QOkrlrfSVr1 dR1/5CFbtRRxc1Lt+WPKK+hj3RaZUO1WWlJNyX/HD4nnIeoEY9tCotUahJlor8QK VGtHJs1i7nnFbTVbV+yNGzL0oAJ5+EOVeahmid8XyMNsEVk1UqrysId0Y1460AN5 GCwOtdIsxeJmQuBILDXWb0QiS/8CvUA5F8mRUuxUst3U+NS+pqn9f05vATnqRJJC qXPah4KUeT45EeZKRqwhxNUUQKtzw== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GCt3Z4/UHl5lbVfzsdR2CNsvSv+cLOlu32RkyLQwtkSKpz99sK3ZM0DhdipJI6DY7dR03XMEZzqimazVArdo2jgtuWHrPxA+PrNz+dtv7XWW9W/UswpjajPbEEpvlpEK4LkZ+expW3uvX8TYOxsMNW6jvRPAYiORLwPJFZWLwsIDjWPulA4+zLCLSEYCs5PCTh6xYv/kUR7dlTg5WcN501Jr1YoMzYbC03tI8AYRDetNJ3WH5CovFN9CV32XsHYEVVjlplkOMmjLtU1tDhbyk+XuDAu6ijK96RItbwW8UXsCVrS9zm3QquHBE90uvMjfKrtlGjXC752aQoNOYlFevg== 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=B7/oK5SypP4K2LUCITRbeb1EuhtJKTRykLemu+G8bDY=; b=hBNjOx//Qt3/J1EZ+cZ/PI1TkgdzsNB5FjQCCi1B16jNxeyjkQLQABiVV1Z98tSGrguMYLiku7QsanZcHwY7FAiFUc7OyTIc6zEUZwCjZs1vmI7KO7mjMkWu+TDP1tDyR7J6t9Q2t2fYAVMYHSDCAZiTmfZI62g9ywDeszRwYQsfJuZZZEBpHZoc046Pw6njtpaWpJym1Xks6TGzTBuxHT6c148hCuOxSQO2wAwxpNZhw2HVZlOQ7qShPb9T5zsnL9VGsY6O1BT+gmXXcKaD/vVt1rdxmnZcxGTPeJSAp33tLR90rksV3KPkctLjFNRGJsqcnppv2amhh7QdcZLq4w== 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=B7/oK5SypP4K2LUCITRbeb1EuhtJKTRykLemu+G8bDY=; b=SSsJqxD6xEKaqKtMGOYXc8JpEaOKLTUWCuUlTdDPVXH/6Oqv9RLlPRcy4OpLeVSDReWnldV5CV9PNmpdKEXlKtDww3pG2Wu7YuNnb2qU29sMWTLX2yYuDb9IQanBjSxEvpK3iteq04YmP9tEaay1rSMCDMvJ4Y3HOJCPpNROu0572ivG6WbFPeipO7XAib47E6Idw0mfHNkWRL5hpxDDMITCZkoyUrP2lQyFyXW+oICLTDDfRxyNXdOp/UgRnasRkpxQukXDMKCg4GNwkop+8cu7ZkgPt6HhQxdrmb+yXhMVZ9AXapaTByoV1h6GzR5uXFZ3EJaYg2DOge7zaJTJ8g== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?iso-8859-1?Q?C=E9dric_Le_Goater?= , 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 v2 3/8] vfio: route device_feature through io_ops Thread-Topic: [PATCH v2 3/8] vfio: route device_feature through io_ops Thread-Index: AQHdQfiNYDbBgtkelEiha6b1E0hOsQ== Date: Fri, 11 Sep 2026 14:19:27 +0000 Message-ID: <20260911140710.2348139-4-hugo.komatsu@nutanix.com> References: <20260911140710.2348139-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260911140710.2348139-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_|SJ0PR02MB11781:EE_ x-ms-office365-filtering-correlation-id: 33a7a50b-9e97-4062-190a-08df100fb014 x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|7416014|376014|1800799024|366016|23010399003|38070700021|10067099003|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: Ig0hH5u7kUVzM50SKqFajp0cQ9ec0rUsRg5+KaoMpTy0phTowCt0oQ56+Qg8QO/duBx1c0JrF9yIyzYxttMirLt/AYrPtGGa+xcAxlTxF7jkW4kWsMLrKTtp3sQBq9R1gosKEV0bQYmez33hE3XHFEtprmRNLdU5TVdRdibro8BO+0ihWeSjwBSfN0qjg9H9OJsW32aU+08OEOl9OIhu8RAA7U3UugkfAYtEHznFhnmB2BhiZ4SLMRY5uatou/DtjlNUpHugMWtq3ABGACI3eVh2skrHOAE3ZMKDW7+5rGVFCNtBKh/w3mlVDbUUv70JmvjoG1chSHgFyX9gsXre3OlhFxCCOHoesOvvAJ9lfoZkWda/7BjDNM+2KSlteazVGyGOEMM825a3d9RmMcdtBwn6Nr0NeQQyWu7gODyGfuwwAhKfaewEMYCnlRedd9XqY3S+SxKUAm4Hcq+6v6u5wKeSEDqjKrfNY325mjGPH9QD5bJXce/aBUwtNdUaekp5pshhg3EOtBUpkNukjReL2uXKBTEVNbPDvZ6PLLKRBD2E7iqqw7t36EaorWElgQqPK94OZ0JEeM6tuc1MtvRULx7aKqYbd5ZvnGcir9oGXl3XdFpXha7syhCsWb1KyeOzAGXXJqulGC7yGwtqRcyO10YZB7HeEpvBodAaeX3pMLBRvTL9OAzWjkFd6jCWySz3w7GL3zJPwqHCGp/fPT0INt2dmmT2lIlY1xLHQ0pr+u8= 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)(7416014)(376014)(1800799024)(366016)(23010399003)(38070700021)(10067099003)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?IpGvHvMYtdml9VeeANpw4UvaA5e9vJr896NIi5/K2bgZyYhdRRG4IZqojK?= =?iso-8859-1?Q?JG7W1u8MOTpgezB+mEtnmyVDDWdOMywtYB17s8p+725DNRhL6/SzEYvOFk?= =?iso-8859-1?Q?06YsSEK/I7oQsOfegbXXYVFSPtqVNySAbdh9lJ1DKsKHAp8ykDPB7OUZ5y?= =?iso-8859-1?Q?5e4j3/TjL2/+6YmFikRBVBXB79ZzQSdCL++mtTNlvHe14Y8djJFDeiT2BB?= =?iso-8859-1?Q?RdFG/gwMY6Nzabg6a0mp9qr/ttSDI5T3yhSdW74SG9jJZsapgpFAcuiB8u?= =?iso-8859-1?Q?cb0SjGeEgwzXocbj44JLkci8YvmNMO8m8XQBHimwQPmt75lyDlQTKnqS+Q?= =?iso-8859-1?Q?PQZqmnvOzO8iyJCO0OSKWjBQ46DzDF9lS6YazhjvFjzhxzKIs1n3ResSf+?= =?iso-8859-1?Q?nqwBMNoXkpLvTsSSW/rQFAG4/rugR+pAsBbfum688MKYPsNyn1ZY8DhRlL?= =?iso-8859-1?Q?8eIir6gRfmXgIDXj07H4dNtVEEat2LRTrTO2u1/cRu9Zd/0uDK+ObB+HZz?= =?iso-8859-1?Q?JTJDKi3ZfXqpqzMqosQHG4gh/4cRiz/gFXp5bPk4za5/aWwtyt9BgWIT+c?= =?iso-8859-1?Q?GZxgvNEAuIgkOFRKnReXbtc49dMa5TGitGhUlHysn1dpo1pX3j9C8TV2Ir?= =?iso-8859-1?Q?4U1+MNxns3SYWPrZvNU5Kx6AUesL3ZGcoQRtshNJjqlWRnibLPikjFpddO?= =?iso-8859-1?Q?XsPlCITZiOXGFrewR9Obg27fNZcO3NDEraDKUYm9x65TWCWLU5Ki2bmG1L?= =?iso-8859-1?Q?z7Qr3Os1Oq9s4jJX2lp6n+Ms6Zv/NJ9wZCHD8JS0zpffSMELL+a5d3i6bz?= =?iso-8859-1?Q?MtcycvJTEECxjPWAgAl4dS6YofkVbqiNclv/abPrHt7MGgid+jfLIbPWUw?= =?iso-8859-1?Q?WTfNHP4L7samS5t2RZwaIEuJe57Oezg3lG9/GiCDxEJHulkVjqSpOZJlzJ?= =?iso-8859-1?Q?73C5mHenzOwc1NtS84jFsTuZVliutuAfYxxLcdfphJHbIiuFUh/gDlJNGy?= =?iso-8859-1?Q?jZpIugm+EB7Fk+xaTQcpb4vSeZQJzJtOP+ObE3nCjndqzanoWpGe19wBrr?= =?iso-8859-1?Q?4d3LAbc0gsh9PniFegrDAJ1UKk3LsVJCm86KcZN2Le5BQmXuJzKfIQ6tGJ?= =?iso-8859-1?Q?1z22wGjg0n/k5QhT+Oq6KQDSwTdrwLzQ4QpjKAndIBoVvKmyLJWZzsqzmS?= =?iso-8859-1?Q?fQBwOyypuLeia7dTWpgpFaG7W4vJc8rJOU3Bb7v0tfetxk7QPpCPpf8K1y?= =?iso-8859-1?Q?fAMh8LZVfgtphLL9owI57VsuH8ojXtStSJrykipjqoONj4iFqnWc3lqUHk?= =?iso-8859-1?Q?60wJlhCVcdyIziatiHhgBt2vWTh0ZAsF+XHi+09dZur9PqZda8ghgDih/4?= =?iso-8859-1?Q?vUAXrT6KojoZWY0lAjmruQvEMjlg/P9ll9cRqHrRplO7JQ37U3JkWcAnk7?= =?iso-8859-1?Q?zkSaJWEc5v8zXrGPYP8ySK7toF2BqGxF7lWA0hrPBAyISZtJPYu6jJ3xap?= =?iso-8859-1?Q?fOQAuj8XeNLQ3qvSnTIuJauYP1erWxFnRbhu1LW9DFRn8vkTG8Ed6E4yoI?= =?iso-8859-1?Q?kwR2vRJZoMh9XWZy1GT3sV4T53HnWBN3y7AhmqdoCnXZrtSElxQNOZGiDH?= =?iso-8859-1?Q?vewiq45X8gaMHjhe8MhRMYWHw/LrrPklj1gQFYH3PjRA3DfUx6+hOB0BIi?= =?iso-8859-1?Q?mO5F1hrFZBgYPRg7fBff9BFmdaifSv2ntykV19f62D4ismuJyveTtoWvt9?= =?iso-8859-1?Q?Okl6gRteT6r5fKwdglHTFKj8nK5K1fx+5LM0w1Hn+kSbJXtj1lS6ANnJXN?= =?iso-8859-1?Q?CQ0rYp5p3c8How3BuAGAwOUbbbsvFdc=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: iD5QUTpxLxEMgMWOP9Tt2r/KlP3FNhTplr94Ka93lTyjoc2Dse36X5OyKS3DO6oqi/R+OjFpvZIE0YsI1B0zTfkkxfDG+tTEDZRfOxCKj1coa1sRmB8gkTvR9dY6sLfZxTC6I9iGE7VCN5eE+PeGhXeSjdXQUYBdXfTNcj5TQKPO/yvpqVFjWstJsGc+aN67oH+MfwdZG/rTGU9p3t+dvvwKVTFeJsMByZTe6P39DB1IswlSa3sq2TL57BzaMTijmHpG8uTXsWYfzAjAT6YKjT787w4i7AKJBub+O+opCJvRhhoP6O3IPDEVEGdKWPLtf0wYcr10cMxAk1omBh1ixg== 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: 33a7a50b-9e97-4062-190a-08df100fb014 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2026 14:19:27.4010 (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: Y1PKX5VfHJz/1wyaiMxTA+tf6VcY1D1bL2DGpAlhADmx1dyMV2grbcq+9L1VYpevHH+hcsYqdtbKExlShD4iraHUouTmz6thSIFpIRmGayM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB11781 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX16dMWhHSvoIR het/LE8xajr80SE8KclBO2gn7y7mOAHHKgWhnNLfw6nPpaDJKlphBWXCzIvmKmY2fS45tNX9HyN tVWGwfkT+Qg9WSr41/p6/Sxt8jSprzUY//F87OVGi9FUigzjVMmYZ0T/gyS7/bXRzVrhXq0sQpZ KuP6salrvJNZfueQXvY5rD9JD3d54XXykKhMsbtmyLgQ2XniC2Wl68nFot8uhgiwtcW+pMJXoUp UfMrtYMgI6b9G1RV9N+mhxUWmF+B9lDduP/9E7ylxxl0GWatiMXlshOS4r1i7JrieSKkWMQSDrm l/g+1jUutkdNylooi4f4cEM/kXmmasp3/WzSsCQmlkQ0TAgWBo8SFIs6hATw8KtCqMVJJhjHKk4 F0Ztzdn0sCYfxu9jdzPlgvgGtgS5nvIoHG9zl77edaNYOiSlQZLOMjKmpmFMGkna3d9ueyKNUeh 4AtZRWr4zsHz0VPUdXg== X-Authority-Analysis: v=2.4 cv=H5hOUOYi c=1 sm=1 tr=0 ts=6aa40df2 cx=c_pps a=kBs6TrnBGiNV6zZMgQ8KSw==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=1L6crL_YRTbalZ11mEUO:22 a=64Cc0HZtAAAA:8 a=MNwCuWaDSvqgPoS32scA:9 a=wPNLvfGTeEIA:10 X-Proofpoint-ORIG-GUID: 3hsBb0S_ZfRpRTP_nG9DWW3Kzq3n0fbt X-Proofpoint-GUID: 3hsBb0S_ZfRpRTP_nG9DWW3Kzq3n0fbt X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX6NlsoIubFza9 QGqKttddblPyB31e8TrbGbc69YajgJJWCtHZND7WMmUa3AWJDPVRDymRO5H89a2gt8IiTD1Ku5a aJJ7T0TzI1mz2zmJ0z531CKW/tIiMOE= 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-11_04,2026-09-11_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: 1789136520925158501 Content-Type: text/plain; charset="utf-8" The generic VFIO migration code in hw/vfio/migration.c issues kernel ioctls directly for VFIO_DEVICE_FEATURE. Route these through the existing vfio_device_get_feature() wrapper, which dispatches through VFIODeviceIOOps so alternate transports such as vfio-user can supply their own implementation. 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..6db4c2a216 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 vfio_device_get_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 vfio_device_get_feature(vbasedev, feature); + 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 vfio_device_get_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 vfio_device_get_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 !vfio_device_get_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=1789136483; cv=pass; d=zohomail.com; s=zohoarc; b=fEVyWaamM2EK2aBx/ipTo3UrlaG9GZ4Q/pPHsBu2bO3/BwrbEva0Uqd6f4tN4UGyqGNp3lDoNj9rMDBFx3jyI5npNIueSHn09alv42B7pPO6EuuCw5e5/kNhk5aqneYD8SEXWjQ+7oryIOB8aXMnKg4XvbTVNt0hNUs1iLcCqvc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789136483; 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=/dHWypyBeMBGo4jOvIhgHsFRBD+Jqelqw0TFuraLMwY=; b=UjP4zEhnuxQSBp4x8NUkTtL6x8o9Ro7mPaeBoVhzrKOZW9m1Ffj83dK/GBZBb9D2UkS3u8ajKKY/E5NrR31mwYJQgMIHMFMlEOVPUXah9XsmAqnG+3q9nO1QZvEXh1uGD+wQg3M1gGS6bJrcXGrGn8JtU3kJApvWr8sRjXM9yr0= 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 1789136483320779.730413794479; Fri, 11 Sep 2026 07:21:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x526r-0006zL-6X; Fri, 11 Sep 2026 10:20:09 -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 1x526Q-0006j6-SN; Fri, 11 Sep 2026 10:19:50 -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 1x526L-00049p-0k; Fri, 11 Sep 2026 10:19:40 -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 68BCh7K6004863; Fri, 11 Sep 2026 07:19:31 -0700 Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11020087.outbound.protection.outlook.com [52.101.193.87]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gkd0157rs-5 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 11 Sep 2026 07:19:30 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by SJ0PR02MB11781.namprd02.prod.outlook.com (2603:10b6:a03:402::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.9; Fri, 11 Sep 2026 14:19:29 +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.0406.007; Fri, 11 Sep 2026 14:19:29 +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=/dHWypyBeMBGo4jOvIhgHsFRBD+Jqelqw0TFuraLM wY=; b=w0boHeE4UgkwPRPCp3oGSwVvqTXHX14y9I3XiK6ZNUXR5gRr9H64/0Hen tbdhOeg5oy2sDRipXKOMHR2vHN3wjvLF64kvB3MHJqhpRk6fiL0qZRwvaW+FAIx9 qSUnOkQjEff5i4HxFvzqCzBkZj2cKSqbUq+kraa5mh7rWl+r6PUE+D7omJMJyiEr FmebjxcWajUjxkgrgPJHBqGiVVXcLnkpFkEcNIfCUQ1es5xRvXLcERzx79KfsenN D4KEXzotJ8CvON80jBZQ/R5PLx/oCelSG1g/Hjqqf1gdRkVGFEvi+t5CUhKZtLqp v6pBhmwxUcaVCzFt58RgOSKQfBtAA== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gBVfoQfyz/hZnsOvjCAWt6rWb05LPwISHj/7bgProm6pQis4m5l0Zb/7IksemfIP2dvsxPht6V8lU3B62SsqlSN/o0DUbvC0in04RtsWYX5urn8KozuE61PnmkFKbVfAsIAgjXstQg/+2hL32H7QcDjA39t2PDc1XW6iBk3307rLvk7mDe1J2K5vKIMqYhfRYK0BCPCOGPi8cPs22tvLAy3ekxpkz9T5kFQhsK0wW9O+QTMQOIAMNtHF3kj2JrPqUkGV2w4GrLish9mwb/zmW1ttlLa2yfRom3X2GZlDe4tAg2vT/c4yhnWKcQwcjiwRKCvHoxUoa6akaJRrUfrJLw== 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=/dHWypyBeMBGo4jOvIhgHsFRBD+Jqelqw0TFuraLMwY=; b=A5VkBv4xTEdH+QX4DJfFm6qd6Tu/OT1j60X0hGhDWr+vY9eenkM/lMxhNj33gagfYhFiYnoZ1d2zStN7OjSuruD7NtXUu9dALY7lYwrIqMZwtbh/XIaj6DOh2hKWemmHKIvXViCGfQ1BEmqQpy0U5gK6e6CoDRcy2+h8R+hDgQr8HgP1BRTUommjjJ+1UMO5FioVCTAPJOvbbJpsPj5+Tk2BKTvuCnaycJift+S5JM2nTs8Ru9p1Qc+zRFxtjiFee7l881Bm2tavZZQUqB0hrXAOhiWJX8idCf6zQwHxTmgYKO7LKAIR0Flc3LdOPSmjxkpsAxYmnV+DRKnzxJ4hVw== 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=/dHWypyBeMBGo4jOvIhgHsFRBD+Jqelqw0TFuraLMwY=; b=vqVE7sG9rPt6aYWhkBuM2i5dsS1QHz4tINtFTTxzZ0y+sc1UjZEJNR1qtFbyvoCrhXBNl4iMImMjuDNxxHIY+gkMz68KpCeULV5dtRGjCHWfqFBcJTH0oNoOH4njGii8vB/PygwEA7khPozY8yBSLLPdloMZ0zSBBIPi4lFlsunWE/ILjpxQ3xS1ujAN0+xGM7VvpX8lqyaBT07WXF3bTUSqCFQldkk7r48WUq6euZqmD/yG7HmO5YlRTlci2J4F13r6D7NNshRB5xDbcTo5kfkg70YQRYKi1JUOmmvoOYwMJtsCeKa8RRXfY89QvyJbQVl2oS++UcaCwEPhBSBGSQ== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?iso-8859-1?Q?C=E9dric_Le_Goater?= , 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 v2 4/8] vfio: route device_reset through io_ops Thread-Topic: [PATCH v2 4/8] vfio: route device_reset through io_ops Thread-Index: AQHdQfiOnJXcGtgOsESZJy0vxBBkxw== Date: Fri, 11 Sep 2026 14:19:29 +0000 Message-ID: <20260911140710.2348139-5-hugo.komatsu@nutanix.com> References: <20260911140710.2348139-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260911140710.2348139-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_|SJ0PR02MB11781:EE_ x-ms-office365-filtering-correlation-id: 2cab5522-2860-45ac-97d2-08df100fb110 x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|7416014|376014|1800799024|366016|23010399003|38070700021|6133799003|10067099003|5023799004|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: Z3Zib7HJlr5fOokglDpChmZEAktrL4Pbo02Y+lADhPl8QnB5EZsecYQMek7JOYXlFZyxDt3TAy3PY4Qht8gE8VY0ursrjPVkImu8eBuc7OxN3L8NnyVcx7V8HC1pMSgUyQ5xOEElE05Eg5J8Ah6HCzfxOzaFLIi4HVDS7GgDmcXajJesfFC4PKNt5yaNN1HW5hFP14Ln/TufO1L7sjPiWFqRhRuWht2y20MoCn3QcCPXn5Dwl8RKAjugn9AiVpRwW6Q0a3jPiZUPELBTDjsg9lRktz8bTljUp5MQaX22CX10mSHvSmmc5D31GhFlWkmZx17qK5e9hMx/IoIUevOYpMECI6aGNgFtcErjyEPSA+xie9cUBmcPN8Pq1XhoMqyNU29TvxJWJuFc2HTSkI1obUcwCWYqLrosnPqF1o54MBtqPLzQulGXy7XaG5pTU6xLq8ObHoW4yIbr+lg3X6DeAwL5lC+srhPYSsrbxMykCaMdEVtGA8fYF5hLjVOUwZOtBNiSmiT7KjIGql1l7zWMinli9HH+dGQG1Gkp/y8kcMc9OfBZ7AurySgKNKDKN3YEOf0ITqkW1cVmexuLhJD5hPSmJT/ltcN59CsYmW0m4wG6ZQ034xfuScB3Hw+Li5NdCV8OaMSLSS4oKdpwaQVHq815WbF1lc9BhOo+TUKyux0cdf5rrO1zc7AW+/91bZMC2/dlGKGUM0kuE+wmM7sKdBoQ2g81Kqq1/kZQA5NR+m8= 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)(7416014)(376014)(1800799024)(366016)(23010399003)(38070700021)(6133799003)(10067099003)(5023799004)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?ZlwIi0cW6lmMhIsCrp4hnMRLtvhc9rFVuG1Mt6kveM1z77OqttzwkcHBvm?= =?iso-8859-1?Q?Qjs5ERVDjDIRvLX7v0cJEBL0ZhHyJ0XfjzBiAkXBBcU5N4Ki/kRGPtz23v?= =?iso-8859-1?Q?MocQ3OjvGKIdnHRI0C9liijUKZE+bxjSVDuUCKobFWsS1XRs5XwUb46T1e?= =?iso-8859-1?Q?kJICtByoBQ2ivg83Byd5HzikV+q6/3uh/5ZVwVk3ymu1ZVMVSkfATkdBL5?= =?iso-8859-1?Q?gB7wFsuZiQkbLrqXzI082iTP7e5kE2SAmV9YKct2ICTqVsAvux8zH/97qG?= =?iso-8859-1?Q?6x8UPAz/55LVv+p5fCCWyKy9yE7aPZ4aWzIfj98VqJ8rhkHfDcWw3Yxwvq?= =?iso-8859-1?Q?wtqNfx0eOAxc9J+fJkMTkGh2Fkcc9SikYlR79LNY958DcZL7WdDsQ+eebE?= =?iso-8859-1?Q?M1/Tp9X5Eo1aALq5ETr3uYT6Lx71yts/UURhjGxeLCV+waFPTjYbOafgII?= =?iso-8859-1?Q?bhLHJpPmEyyfvVPViqsmRMybXq2vjg6oemjiGjdWmUNamZvMTGUVTFr0Xt?= =?iso-8859-1?Q?CM5+ZzPeViBK8NWhYmNgDoPZFs88JglCLZLf+QIhVl6cteq2MquW95KiBa?= =?iso-8859-1?Q?+sCZgCTXgQH5X+vRD0p7N7XtpUOm+Qpsd3GWthOt25KlR3hvEh/Xv+jeme?= =?iso-8859-1?Q?8PWExVnM78dd5aH6T5AzXnN0mZJgD3NjhjiS0uRhBdXS0GBW+7c2HDv+c9?= =?iso-8859-1?Q?KTtN7sdS/sRN7gq3GOn1UuZ+EhKublsvUuE/Ulg3Ik7XD4oaBHC7UG4qXl?= =?iso-8859-1?Q?0PA/4FaVHVXr/86qlo5A/GaLdmLVOxeRSW2NEgI41P1G4RoosE7pc+tyRm?= =?iso-8859-1?Q?3HSrLldO6iu3obUDNoxeq5OH1MNaHIaVk/IV7HKZxuFKgo5BLqkToCIK9t?= =?iso-8859-1?Q?V7y3pKVo9HAUPVOgSPgiaTg25FSTDHJfUj04/XzSHLDoJ/O3pHRgrgHpqB?= =?iso-8859-1?Q?wizj5iExDajb/cF4ouM/ftm/X/xMLsKlfifSlmzTCvdl5UYA1KqnZ8UYvr?= =?iso-8859-1?Q?VV/ffUAKwO1E0PTtJdlU6TAJlrG8w7AsNd2MAqLa0ME8t2lsnnBB0ZUxKE?= =?iso-8859-1?Q?8l/kZSJpjOs7nVI7B5HutSwGpv187tFsnpT8ic4oiUtngYtLJbqBCuyH2R?= =?iso-8859-1?Q?b18swABsLQVZG6TQwj34xA6RXwwvA0Alvan4YxyHc2iG97Kg4WoZxhCfu3?= =?iso-8859-1?Q?bjYdvjwOwc6MeyY48DbS/bMyYoOOrTfr3T8JbDY+cwpL3cByyyKjganCZd?= =?iso-8859-1?Q?sDYyUqWpCmtP/sGVtSahbCdraD49lFryBq9gZJxV41ZS9Jkh8o019RaC9H?= =?iso-8859-1?Q?UTmqLARAjPyjJ9dPbiRNUC+eAs0gRfL8UJTML7nZAgqw4iwWQDpGl6HcGV?= =?iso-8859-1?Q?GTHwosgbZwPTklZevJlBPcLmcsUEmFUMLyGwe8ED4HMD7Jzv4nmoaa2vMm?= =?iso-8859-1?Q?WseJlSTI8XI8UU9Pp+VB5+d7uP0kxehFWKVf7Z5XUQ0eAqvjiH6SKrJt5c?= =?iso-8859-1?Q?AxYamIjjF1n44Qb1x7XGQT46dEy4oIqTGl3BKIP1n4j3iUg127k8PFBnF3?= =?iso-8859-1?Q?2JnTAinLr7DQmrgtBDO5hb55axcIYLRXc7yv+JnFlfGaFe0pxzkDbz+Wsm?= =?iso-8859-1?Q?ZZMoTqyC72ZbRhpJQ24e1tcnXx86JxzXJ6z+g1W6f1Wqtdhukm3w7CBxFn?= =?iso-8859-1?Q?6s6/vyTsClU6OcQN6Tn+QdMKJDq/h7dlA0o7FaL8l/moz4iqz8RiBUO8iV?= =?iso-8859-1?Q?mfq29XqKAvKiwFrgfHMguCMGEHHyX7SufUPbLP77nwTlynnhq5rzHw91Zg?= =?iso-8859-1?Q?oVt02THGbZ+1lHN8DC1MbFSwVbHthP4=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: TUPtmM/l2wbrHCVYuNNA63JWOxQobipamKo8rtTpnDi2L2ZVFJhYm3E6ESl9d3ySCW8aiQkAXPEEG+mpUTEwluWapBYPSMCgnEGXmPsKuU3uq2ZlVUR04RiWxkNcjGk2qNvcz3aRw5CmZlrXk6nbZhYlxAZTtmfsYvYR7V/nJr42ERzlg6WT8+EWFj4OCZhQbpR/XVGZIoO92+Qq+P0aFdu/NF3sDKF/pzYPbP87aV5/mt3I8OJxNmQRHXJo2HMr+0vKAvRAPUbCuAbZpP5lf8s8NQauoKg365pQZixaemrq7RxlGijkDn5H89907NzOPLMGYz1vBmlHAWBhLnsjPw== 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: 2cab5522-2860-45ac-97d2-08df100fb110 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2026 14:19:29.0560 (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: NBq+fnKvUIvk8bj3bUI5G10P9I5JAFDz9TNptvIb6U+Gvqq+SfnbVedRuwNCaWqfhwJhhZsqUCrF/zah38pN5FzPavOcm1EU0yUl9RXuCSs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB11781 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX7HG9ixDybIQp LK+rFGxhnUVuo2yeQXZ3Qu+WaMXIuzvXKzyLv5RECFB0ZN3PGceVx1+p4YZ/E7vE+5Puit75Q+B I+nDRTFgIyKksWZLxlditLpn0kDc9s9Ahu2phlMrxRAJwhkjlYj7Q0P14AyNra/qf9ZB7xj++r2 8Fe5n8o8LNHk332MjTi+PU465qs7E7FvEciPQ66YJy/fNgUFohzR8gzOZXAeD7dmbVSWaqewy/j 0IRIdZAJyz5oPX4rWlQFyz2E8XQcqaLI7/37GxON++as2GACTIKhQJdu3+P0J5GfBsmAA9GXZEM og5APg1jDgwp1eI0U4t4HZVXQeLbEHyAJKXQktaOf3yDPDlJDF6DmCmyEu/inHULAkhMb4AGpxs PvB3PVcjSQn6UVA1+dm3xJExoPnlmoJYXXS3WnDn3JIrqKV8t+PgRFyzbzky/uSlpr1OYNxJLdb 0HzWl8UBdSmSOnDLpIA== X-Authority-Analysis: v=2.4 cv=H5hOUOYi c=1 sm=1 tr=0 ts=6aa40df2 cx=c_pps a=kBs6TrnBGiNV6zZMgQ8KSw==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=1L6crL_YRTbalZ11mEUO:22 a=64Cc0HZtAAAA:8 a=ECQVcO8gvnFX2F7KducA:9 a=wPNLvfGTeEIA:10 X-Proofpoint-ORIG-GUID: 9yeEQhirKK9AwwntJYWOVzQzaxRCfHtO X-Proofpoint-GUID: 9yeEQhirKK9AwwntJYWOVzQzaxRCfHtO X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX5JvjXkrxPw6M aW7ExUSu9BtTp/dCIiDh0ahx6Si824K8KOONgkTlDXiVrshOKu4Uc3cacJwH4sl2ZNGmr4ZjF1s +Y6/YZ4+vIQ4AnjMKwwUhtf2obV7vIQ= 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-11_04,2026-09-11_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: 1789136485068158500 Content-Type: text/plain; charset="utf-8" Various subsystems across QEMU issue kernel ioctls directly for VFIO_DEVICE_RESET. Add a guarded vfio_device_reset() wrapper and route all callers through a new device_reset slot in VFIODeviceIOOps so an alternate transport such as vfio-user can supply its own implementation. Implement the kernel backend 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 Reviewed-by: C=C3=A9dric Le Goater --- hw/vfio/ap.c | 4 ++-- hw/vfio/ccw.c | 2 +- hw/vfio/device.c | 20 +++++++++++++++++++- hw/vfio/migration.c | 7 ++++--- hw/vfio/pci.c | 4 ++-- include/hw/vfio/vfio-device.h | 12 ++++++++++++ 6 files changed, 40 insertions(+), 9 deletions(-) diff --git a/hw/vfio/ap.c b/hw/vfio/ap.c index 6e2a1223ea..52d67a01ee 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 vfio_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..054121b71d 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); + vfio_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..b2123a0443 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -568,6 +568,14 @@ bool vfio_device_get_host_iommu_quirk_bypass_ro(VFIODe= vice *vbasedev, return false; } =20 +int vfio_device_reset(VFIODevice *vbasedev) +{ + if (!vbasedev->io_ops || !vbasedev->io_ops->device_reset) { + return -EINVAL; + } + return vbasedev->io_ops->device_reset(vbasedev); +} + int vfio_device_get_feature(VFIODevice *vbasedev, struct vfio_device_feature *feature) { @@ -578,9 +586,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) { @@ -660,6 +677,7 @@ 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, =20 + .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 6db4c2a216..25acb6dca4 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 vfio_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..73b4a93fca 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)) { + !vfio_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)) { + !vfio_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..6dc596c9fc 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 * @@ -287,6 +298,7 @@ bool vfio_device_get_host_iommu_quirk_bypass_ro(VFIODev= ice *vbasedev, uint32_t type, void *caps, uint32_t size); =20 +int vfio_device_reset(VFIODevice *vbasedev); int vfio_device_get_feature(VFIODevice *vbasedev, struct vfio_device_feature *feature); =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=1789136516; cv=pass; d=zohomail.com; s=zohoarc; b=TaHJIJYUYc0/fmK6gfAsfEmikFBCAMOhjaRtXzMxwIvVi8KO/6iPr/rPyb246CjCzKW7s1w/Qj0pEAZTx0U3llt+zUpei8Rb4rp8QCGEryO9CeiQOC9m0THng51W/fBQhNFo8loXkf8tuSIsXtPMAkb/10BNSn6w5SWdAyE4aIQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789136516; 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=TGqXWyMjuyIrlax5rsiRzIwT9OEX71JZ2aeHJhTXWoQ=; b=ZEBBbX+YbsxDUvdAZ0/gTVQQqZUzffgKfqIRrGr2lEcqRN/jIF+7H01TIVD8OBX2f88ejPwRsDsDwIyxWzM3QXBSqdH606BpdmbNZYPt3AdoeCwkXgZWNm3N1qrkOseJ5oyjQ9n7PwWuvFBXplIbVqjxAiw+nqbgAUWGAlxbqvY= 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 1789136516903841.6962343307343; Fri, 11 Sep 2026 07:21:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x526t-00071c-V0; Fri, 11 Sep 2026 10:20:12 -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 1x526W-0006jN-8R; Fri, 11 Sep 2026 10:19:50 -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 1x526L-0004A3-Sq; Fri, 11 Sep 2026 10:19:42 -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 68BCh73Z004871; Fri, 11 Sep 2026 07:19:32 -0700 Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022087.outbound.protection.outlook.com [52.101.43.87]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gkd0157s2-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 11 Sep 2026 07:19:32 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by SJ0PR02MB11781.namprd02.prod.outlook.com (2603:10b6:a03:402::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.9; Fri, 11 Sep 2026 14:19:30 +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.0406.007; Fri, 11 Sep 2026 14:19:30 +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=TGqXWyMjuyIrlax5rsiRzIwT9OEX71JZ2aeHJhTXW oQ=; b=g4tah6z7x6fMgCWw5kqSAH7m6UIymVbLsacOn8GYvEoznqwu7Hc67o3nZ IbJ3WfudWItXo7xE6gBgMG1CbRLx20G3a7pwaQtDNd3MZRJ4//RFDWWwUaPCRHq+ //0TeG7Pi5Q+b87ANMr4V49mC/Ngw4nMcSroFE/I/YqqYGidsHTEORxYtm6Zo5rK Qyy9iD/Fe9n0OW3Nm+W+ivf+jaVseIB6aYXXy6PsQJW21x941J6u0gBbaBDjpSh8 ocmWfsg/bWlkMyjJbJ5JRfbYEKsjF/lETuIsUbLfPyZuIDo2qKn4larJWfta48QS iil+bK3LyDXdXT/twQ/Jio5ctJLgg== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FOULTfDYe9kTClb13bteuKJLyln4jrj3OPG2XXTyN+6w0dpnBeRMWwPE/LiPFlLmnbQ0pyNBR/RUNAomSfafqVSx+VhG40zm/3B+BDkk/p6zw3QdqTbNe2BjtQw7TpSDotnajg02eM9Fm6IJyJAmreiZ0ZpFLod5FNs9ESkw1xee0SqLDIpDgVX8dQZ26HtEvJPf49EezrXrp3/LDjv05+9QsDU2+puikJbEs0SmFW0E5Bg0xT0qV3Byx5pe84vnYA8YJR6+IamIlKywPESWZkKvdMeVlKJ3uqwj5PhGON+S0ie/QX7G4Dz6HGhQv+Fk/lE5wQHsmPx6cOlD8fRGgw== 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=TGqXWyMjuyIrlax5rsiRzIwT9OEX71JZ2aeHJhTXWoQ=; b=wSg8czlQY1TsdQLWVx//UwivmRuQFJxWEzgnGOJCT/BV4jqhbpsO8pUyXQOTA34XTwGpDTNnFh5rQ1xBmAVOPVSjqR3ndz+clcY426/EnGV9Ga3PlFJO4Fpk+phhZImW2qDePpDlWxhGdTc8prws8fKHu6hwuHgmUfABvUNXUISagajxZnd7guT7Q61uiGDawiaB3zdk0Chw1o6JpaotSqGL2zQn3YeJu46ACl9CVMdeQP+yyNoMcjsOFKgOE30x50z8Qpj01kIYlRuQ+N45SwPoDK7fnVzPsLLU6tNibU+Jq+XXY7P/N3WldkY9iXzn3155eflMkLOLt5vGVm9hXQ== 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=TGqXWyMjuyIrlax5rsiRzIwT9OEX71JZ2aeHJhTXWoQ=; b=W4lClKdL10eroh0Qvo8jBAXInK0cBibExBqiitg57jPy57+0iJYYr1ifo5hDhawGR2DGJc2e2aciO/Aud8xvULbnt4npqWFs4t6T76cNUeb6qHvmII54o7WcGuWhkM0+XKN8gzL/j6sekLUki3q+Ip1fiesYkPkDKyI5Tz+wP8lMkI2kDELxw+n0RIX8LMFxUiQMaD/Cvm6xOYIGGmGsTDzcZZECQoCmycYX5pLSeo5XUKUV/eOAtr4KTrqDqzPQ4Uu1PsVy2/DttvGSCrbCfy0pQW1LQnaGphqYb3lS+4noPH2KhXns1gJ1OzY/h8XWj92FiVTtDK5iH9U6CTEW2Q== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?iso-8859-1?Q?C=E9dric_Le_Goater?= , 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 v2 5/8] vfio: use io_ops abstraction for migration related ioctls Thread-Topic: [PATCH v2 5/8] vfio: use io_ops abstraction for migration related ioctls Thread-Index: AQHdQfiPVuNgV13eQkaje2LnXJ8GtQ== Date: Fri, 11 Sep 2026 14:19:30 +0000 Message-ID: <20260911140710.2348139-6-hugo.komatsu@nutanix.com> References: <20260911140710.2348139-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260911140710.2348139-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_|SJ0PR02MB11781:EE_ x-ms-office365-filtering-correlation-id: 8ef30d36-b82c-4c6e-2a13-08df100fb1f2 x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|7416014|376014|1800799024|366016|23010399003|38070700021|6133799003|10067099003|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: jMvVFfhiK+LwzZFYwhXIGBsvWNQgnz0T2TTTLcKt7NXiKV4rW37XMTANWvnIwqFkX3L1BN13FOeC/CNUU1Ww4ZEddW4KXPticnyXEE7qyf9hafrz5KsoceuzxqVLFT7P3FpYJvHfF52i4RnYMSUPllvdMc2brQXOstBkjoOqL0/xNIwI43WWpIHnybJ8l9nPkq2O7n1oL/jiqUDj7HkHzBR64KII+rJzCi3nx4Y3CYA45zYhD0wbu7MlGxqqvFCqmm6WXwaIHfpHr4nc8ldkTwjMzfuLn4RwDJGpRmEUjHl6VCw64rjSR9YWEVKD4Y/+fDAh9oZ+mU+ryieEMrV0kr7BxadbPx9mVjzjBPaNY4PMdUgItvIokAG4vxWW7sKBJ/j30I7fxxdcSGzviaqk86H+vBn+8xIfoa/2RB33TMG6ItyIULlR9gF6KuYlydJ74NCdQgUdiuQU/E6halqYbAIvM9YqEf+5YPrFffO+oE4Eq8qGswYdq2adEAXwxV+5sYzsQ1cyAW2KsbWxQLaUsM5liG3TKy1ozwFO86BeSDE7U8CBZKSfEDMb7o9MiSRohc0+jCSbugH7FcBJKMjt82Ugv4kOk7uKSCd9hXtm3BgDWqzveSNHD37FkIHsTVYWT+BIiTDdTKJIoSSTgahNFJUaDRWNpXpj0Ll9Pc7I/Vy9l8iSixBiLCZVjkvHUy0IOgtJcqc9xuJXffoY1ve18/w9XfSQzHBU0eVs1dbcT8I= 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)(7416014)(376014)(1800799024)(366016)(23010399003)(38070700021)(6133799003)(10067099003)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?d9eZdBZqB7Ri2zoaLU7v2Vx+CVP80Yu/zHQd+D14l0qqnOKYSWZ53eiHEj?= =?iso-8859-1?Q?OP+QPP9nmV9dilXVU89lVHieg1ICNWxRbMqR9AYC5ueEtgB+ctxrqpeAt3?= =?iso-8859-1?Q?TwZOTTAMw5RbJexflhyr/Q/oXqv5rgaJHMpelvmeZP9v1Ywl0kvNRPzJQl?= =?iso-8859-1?Q?1bLlX8g5nffgFkjXZ2Fb3UvBgRoG3SnCtjy8CbNK0Mflpsr2ebn/z8AGBO?= =?iso-8859-1?Q?mQc6/J9QKpRS39DumoHBVpYj7Tg0pNcikR1Bgtp2E1xfvI53NrI4DrFeIz?= =?iso-8859-1?Q?+7jqhpAiVYNaPGeUQ00O3H5N8x+8vidVuR4VfYs5eHohoqdy+nB+Ns+H2J?= =?iso-8859-1?Q?+1dRU6lWsH23QNBrQk86y7FW7eDn94LgfllGSaJ6Fmvc2qNRsczTx49s6s?= =?iso-8859-1?Q?iTwZ5N7AFUDy84MnLUf2U4PW060fqsEqGMHr4OC5AS8N27y98jsn1EMgHV?= =?iso-8859-1?Q?zGYYgHoV+IKAIUXyYSPiXkhBD0I2YilGo8xvtLPPE0M9LjujTY8pb8zWPS?= =?iso-8859-1?Q?lebYDSS3HjdjPKthr5N5TTmSADQGVxF8ARuNb76KBOgOdjLkTf5P4t3irs?= =?iso-8859-1?Q?2TEjulw04rN/1T4jZN2WBghXPoA9ZwLMZfjkS49+j0+0YcmfNtuk9UGrxs?= =?iso-8859-1?Q?+BGOQJGP6lwXkecXaq8Hnjn5OtY5qibWC4MfFT1WUG3JWpbLEFLHzncCdP?= =?iso-8859-1?Q?1zE1SGAdGt1wwNhD1nnfNEXP5PxcFN54hbO4qUZWQ2MW2JpjSSQT/jBpgk?= =?iso-8859-1?Q?bhi6ueZn7VDKZsCQibuKyCocqgKHekcq4wopCti/LSqfbHR0VxDvc4vWLB?= =?iso-8859-1?Q?kgybk5AJlHD9ixDS79kknNqYjoQBref6dAdXNVDANHitZKmAwDNC6QuzWv?= =?iso-8859-1?Q?9nzpszQmU5KMyOXq+i/8oEX3le69/4AdR1/rFanRrINJS+aoGxmKNepJn5?= =?iso-8859-1?Q?yicZ4Mn9/AhISkHGI7gnXdJjDp00/JL52E4nzg3x9JmWfxgaxCiGfoIJjb?= =?iso-8859-1?Q?UJDmYtwT1rKYv7YYVDbZrvAIhQ7X8/y28h41SHgYTmbwlmWb2XfDaSXXQR?= =?iso-8859-1?Q?S0lcdlUB5bkQOpgf5vb+KbS2caeRLKypDFE9RqAUnjoqAABAjZrmvn79zg?= =?iso-8859-1?Q?chcKi3GRpTd+IYsj7YtM9hf6X0VuKaUToMruH7lOL/8hUlzk4hqAsNUxZ8?= =?iso-8859-1?Q?ylHDomJYHSQ1OyGdA+rNeCc09Yzm+FNXsy5DmZgJ18/nfWpTOH5hOvZ7ZT?= =?iso-8859-1?Q?cl6iZ2ujXQ9iOSgEo9xpk/MCv2hLzTFz37FcbL4JJrLtqwhICM52JHE5wk?= =?iso-8859-1?Q?TkTEMhhoYrgwpyW7r6QEgJIUMrGD1IZrHVUka1BvgMpu9zbyq8Vyde9MUv?= =?iso-8859-1?Q?uz1kaAagV9a82dZ9dySF06UdI0Gw1G1VRGAL3mlXpdheB7dxYaQ8zVoaQQ?= =?iso-8859-1?Q?pU4r6ezp+TydH+2zYzRhTHXrvPG6zj5h854avxW8rS6//u6bcSQLtmoRX7?= =?iso-8859-1?Q?tVuDhl/FIYWTstLS4lEI3+ftX1XC8XyzPt9Hduiza7vSpNu6FyExVfPjSj?= =?iso-8859-1?Q?4ZzODsJUZ/vSVf5SfE8YDobO8QXL09LfM1Orxfvf1UTjwCAXtgAOtQRHxR?= =?iso-8859-1?Q?Toy0TJHQtguz3IbJvO/gzaPnJacT3pr5W2nbVCPOm397sD4l5BfYuQuSz8?= =?iso-8859-1?Q?c4U+hUI4uBU6qi1c8hUXj7RHPHIvrXxRNsVYN2hB93TlGQfbFHr/AND00a?= =?iso-8859-1?Q?4jogc+Qs0KZO3xK2fp897nhV6X0IOLsHwD3HKjrSo8lAwOouYLVMjMvAVW?= =?iso-8859-1?Q?H3GrmGi7z6NX3zNLxwaXUxxji5NAeDA=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: zmHTqcXWudZ6fb5WHJ6kcL+0cewQam0xFneTi3LODeRNsezcTHCO0BtL4IM1M+A9qx461S4Z4QzRB9XXcjVz7DUqVPh7BAoZvt1yiyw2l3nyM+YEORd94zh5AbiTNyTacI2S6VipZWxE+Ur3+Y3H2dJXE28/vtg0EEBzmFTdLLzigVPw6dTygF/2yNhL/ekmYqbi919peoxKwkHZeRNKw4m/HdEkcokvlTXv873d2tvHzzosnLUmFEY0BostGVhNecnmjG9V7U6/n9kHbuY67uLOBExCQpxTJ8n0nXDj8VRbS4sAEpi/42PvZbwFglKcYfn70YSI8++ku8BeYp2Y8w== 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: 8ef30d36-b82c-4c6e-2a13-08df100fb1f2 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2026 14:19:30.5362 (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: T9qpptKpXU0+gwwuJpoHA5ik0PDqDiL07QWJ8+QwVk32vuLCRvXkthe2vudnKYSRjYIjQUeBSySYnhD6a+IhbI9vH/gMK/iuRsfSgxrVwAo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB11781 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX/YYXa4O6/ueH FbI7jpCJ3iF4+tQrwSn3Si38KcPyICuS9eIMLE/ImjMVj5yFRKhRW8nRoexK4f9QVbyuQhwHD59 r/ZEL0R9krOreh+64r29WBQ7Osse3qMOCRwOF0tgZUN+02LlVVEbqRZi9cG80BPzGlv5rQCVh5X nO/JjdecAUNol4Yx8hiVMyFkN9FXwuTlsPBvTdiLwaLRQ92o5G9BVUHB2pm2/Nxh7p/tT4rLXSq v7nAbsbb87aYJ8J29rd4phq40CrBIRUHI7YHuM7pRREF+V5+lqlGe8br5XpF8Oj/zCD4gjqOu0k H6M35lVtI0MmSn82ATN1v8v0O3+ruwbRuDHTs5acKCGwm2RXSuOEcfUzuvI1DokVOXBjxIgtYcR ACbWHnh5V/Aq7SkgOobVMZ3BuXs6RhighI2aTxHjwxOJz2p8eaTiJ/fXXYZGfLcRKt/T2tv1Y5D WPMiRZe8QFvuyOttS8w== X-Authority-Analysis: v=2.4 cv=H5hOUOYi c=1 sm=1 tr=0 ts=6aa40df4 cx=c_pps a=LzkVVAj3Rd1zMMBobGGGjw==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=1L6crL_YRTbalZ11mEUO:22 a=64Cc0HZtAAAA:8 a=jhpVBWEyHgyra-DUs_sA:9 a=wPNLvfGTeEIA:10 X-Proofpoint-ORIG-GUID: vnfDyxVqtkAAMPvQ-bNctz_Yo6x_oHLI X-Proofpoint-GUID: vnfDyxVqtkAAMPvQ-bNctz_Yo6x_oHLI X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX1iJT52nfaGoH 0xgPQ2JdpiTSJB/E3woQxTF6Uvz3VduA3SH54AjKix5MfPbB6QxrQzB7XfRcNrHcO4AczuvKeTd AJ08R2ns79FPcgPhJMDuMl9YhwVd0y8= 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-11_04,2026-09-11_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: 1789136518870158500 Content-Type: text/plain; charset="utf-8" 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 guarded public wrappers that dispatch to the selected backend. Implement the kernel callbacks around the existing calls. vfio_query_precopy_size() and vfio_save_block() now take a VFIODevice so they can call the wrappers. This is a pure refactor: the kernel path is unchanged. Co-authored-by: Rafael Castillo Signed-off-by: Hugo Komatsu --- hw/vfio/device.c | 64 +++++++++++++++++++++++++++++++++++ hw/vfio/migration.c | 37 ++++++++++---------- include/hw/vfio/vfio-device.h | 45 ++++++++++++++++++++++++ 3 files changed, 127 insertions(+), 19 deletions(-) diff --git a/hw/vfio/device.c b/hw/vfio/device.c index b2123a0443..ddd7508359 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); @@ -576,6 +578,34 @@ int vfio_device_reset(VFIODevice *vbasedev) return vbasedev->io_ops->device_reset(vbasedev); } =20 +int vfio_device_get_precopy_info(VFIODevice *vbasedev, + struct vfio_precopy_info *info) +{ + if (!vbasedev->io_ops || !vbasedev->io_ops->get_precopy_info) { + return -EINVAL; + } + return vbasedev->io_ops->get_precopy_info(vbasedev, info); +} + +ssize_t vfio_device_mig_data_read(VFIODevice *vbasedev, void *buf, + size_t buf_size) +{ + if (!vbasedev->io_ops || !vbasedev->io_ops->mig_data_read) { + return -EINVAL; + } + return vbasedev->io_ops->mig_data_read(vbasedev, buf, buf_size); +} + +int vfio_device_mig_data_write_from_file(VFIODevice *vbasedev, QEMUFile *f, + size_t data_size) +{ + if (!vbasedev->io_ops || + !vbasedev->io_ops->mig_data_write_from_file) { + return -EINVAL; + } + return vbasedev->io_ops->mig_data_write_from_file(vbasedev, f, data_si= ze); +} + int vfio_device_get_feature(VFIODevice *vbasedev, struct vfio_device_feature *feature) { @@ -598,6 +628,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) { @@ -678,6 +739,9 @@ static VFIODeviceIOOps vfio_device_io_ops_ioctl =3D { .capabilities =3D VFIO_IO_CAP_DMA_BUF, =20 .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 25acb6dca4..257f9253aa 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 vfio_device_mig_data_write_from_file(vbasedev, f, data_size); 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 vfio_device_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 vfio_device_mig_data_read(vbasedev, + migration->data_buffer, + migration->data_buffer_size); 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 6dc596c9fc..f0add3fd84 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 * @@ -299,6 +338,12 @@ bool vfio_device_get_host_iommu_quirk_bypass_ro(VFIODe= vice *vbasedev, uint32_t size); =20 int vfio_device_reset(VFIODevice *vbasedev); +int vfio_device_get_precopy_info(VFIODevice *vbasedev, + struct vfio_precopy_info *info); +ssize_t vfio_device_mig_data_read(VFIODevice *vbasedev, void *buf, + size_t buf_size); +int vfio_device_mig_data_write_from_file(VFIODevice *vbasedev, QEMUFile *f, + size_t data_size); int vfio_device_get_feature(VFIODevice *vbasedev, struct vfio_device_feature *feature); =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=1789136525; cv=pass; d=zohomail.com; s=zohoarc; b=QnWZNS0yeIjMMQ8aKyQkr+Uz8UZU78GHfuEnpZPwRqXLOPMCy0+iRhAaEq8PmKlc8vtWY1egPmmvJZLTmw/RjBf7pkU/2T803j/d3IQ28lOtAP2jZm1QR3Tl4TuLiwo1Ep8FE/JT2H+baw+rKrG7frMBQV7aiWHUZEa0V+SUSMY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789136525; 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=HXgyYwzVL7A6g2JnX4s3e5ZItrY0sggvfib2TmVd1CQ=; b=AQqBREEqVXnslErdYBo17JA6kr2DOUMrLcBLYaD0LHfKolGDjhGJaR4loGUvUttf7uyZe8700BfUD4FxYdBJviCoP/6qJqHew9ReP+8O9GeUcN5OrrRPol9ngwlS1GvIL9zreqDqONueSDJ5yjmxswTRqh1eOzEmeCWj6DjhU6M= 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 1789136524994462.3502339211982; Fri, 11 Sep 2026 07:22:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x526r-0006zp-Gx; Fri, 11 Sep 2026 10:20:09 -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 1x526W-0006jS-9e; Fri, 11 Sep 2026 10:19:50 -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 1x526R-0004Ad-0b; Fri, 11 Sep 2026 10:19:44 -0400 Received: from pps.filterd (m0127837.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68BChKPZ4141308; Fri, 11 Sep 2026 07:19:36 -0700 Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022127.outbound.protection.outlook.com [52.101.43.127]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gkcyvn7qm-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 11 Sep 2026 07:19:36 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by SJ0PR02MB11781.namprd02.prod.outlook.com (2603:10b6:a03:402::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.9; Fri, 11 Sep 2026 14:19:32 +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.0406.007; Fri, 11 Sep 2026 14:19:32 +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=HXgyYwzVL7A6g2JnX4s3e5ZItrY0sggvfib2TmVd1 CQ=; b=LF/qswny3sEB9iZnEcQM2LHvSjWGZsXgMJyk9c+MeljNXZd1VThnr9KBN hVNuB0zmelC7/1yjczVr62dTiWtGxK8CpOMHhXoUsP8LbzxTuX0XfROhsC0CX52S WAZyBXwsQiG1XVgQZXWk6YlAecBg5S5S4NlkdeQdHAbkMRmyAsnu3KbZ4xy2w7gl 4DCpJ9NrBY9d1DD0dAOB490Gbet6Omt3ZnrevFz+SKAWqS3F8Eh3l++Z5sn/FJ32 cKcIowOU0QdKs3E8P6/ZpoEwpqJhpwQr7nc3+F5rxkfmmt4e0+dRRv2oSuzhDUMd V/6fMpp84dwOkUtcZ2bly8T+KqMVA== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hkPmQcL1FKM1RO76W/SLMXbbavPI41+Pc048x+UPRyVXwHzAoKmPSIfjewgwzYh+zAN+6AD59MFuHSJ485ClXOzFy8cybNTF/bxxryCazRWotuS64rOt/2ruNT39HxcOa0j3vPaSbeGCQprnCqRIr+C6h8w+3ZWmPaCyoQB4z9hdpaIeSvAyJHOiJ6UYpEDgf5EUr+XyOawi0k4NSw9xeHAjm+N/9rby6RY65necWBsXUUmNz3KDq6w9eIafIRY0ZzBqJefd5IaE79Ny/bGLshPcxLoNnyiTFQsLw22z1XaShljW4Bshy/iT4NiYs9YxtToPrFfWMN50Wg0/fLnc4w== 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=HXgyYwzVL7A6g2JnX4s3e5ZItrY0sggvfib2TmVd1CQ=; b=Z4nwo+pGGtTCDwWvk5BAGfDMmKzo5d7tMuVBG1LHN9VPwQC2IwdIgtrdxAI2y0NDwivNwMKfQnAaYreGBSyHb5ga8bIBQIw7MrCezAYZh8Kvl/DRgZxaiDbIfi+Bv8fATPBgotpGhg3iRtYoDNcEzjQEdf69MtqYdEi4F7msqi4WpSnLEuM754X+hWbp9EhthhXoShTY7MUE9JZmqt7WemYMiRbDtJzTDu/DG5odlmBIvLfZ4RiRe1NeLRFXlCCTziUc12JfBi5esce2IrZKSmFeDyLsFO6UTIwbRI3stTs4WPr0+4/RoIphD3Q/oHB69+YLNTva/JeY83cfsbL0Qg== 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=HXgyYwzVL7A6g2JnX4s3e5ZItrY0sggvfib2TmVd1CQ=; b=YdPW4dt7afwsiesbPYjfByt0O0bFXXDrl5YlwU6xO0YZ9byYOv/TtiUxyYz4MVwiOTx2igSqzz5v+snsEasvmU29dlLu/uyMxI+Gzhb6Ego8tPQZ7wpbLSy2LNUJRjsP48Otch205OzE0hL2b6j0I6eS1vUkzpaAGcYcQBQGUe8xyZb+mODpXkTBCDxcuFcu5AGQmR1Isk2p2WrIgE6AEJ4gtHTARP7sgUpi+tcn3oCoWQaWi1diUyZh46yRvQejF0wusTGV4GzZ9ODlYMVquBa/JQ63A4kg4S9otyhXYe8rC1k3NopVi9ErHu9mHR4c2oeiJ/201mMplgDuvCSoYQ== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?iso-8859-1?Q?C=E9dric_Le_Goater?= , 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 v2 6/8] vfio-user: enable DMA logging for dirty page tracking Thread-Topic: [PATCH v2 6/8] vfio-user: enable DMA logging for dirty page tracking Thread-Index: AQHdQfiQgIvRT0MhSEi/dBXbR1OtnA== Date: Fri, 11 Sep 2026 14:19:31 +0000 Message-ID: <20260911140710.2348139-7-hugo.komatsu@nutanix.com> References: <20260911140710.2348139-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260911140710.2348139-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_|SJ0PR02MB11781:EE_ x-ms-office365-filtering-correlation-id: d76c1c07-eb2c-4acc-da22-08df100fb2ce x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|7416014|376014|1800799024|366016|23010399003|38070700021|10067099003|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: 0BqXHQxyURYpNK0AF1iuxKoOWjn2ItUw12ayBUqxAAHqNaArOVkTC9PsF1lbARyv787sOeps7tX+uOdiSuPuezBJRQU8/k/OyDEmz0AgIUiufoId7dkX1oQ2tJ3YOj+434RNqvezpu9t33IJuqVfR0Z0cB6NPYjZNPTI4itxzcNKKIaEoi4RSPfH8nCdQpYeyALZv+TVJSb/rk6c023Z1UDvYjvNB5GLWrOiSH7MFnUdghzfkO2Uc1C8FXwdtQgpnyamrni5v8jvg7tI7/SecC5dSYOKbEmRdobNraBiSI/IsmJozlVVZf8MJb2ekqqe909WoCV5/ccwvminQCP8LwH3LfG19TkHPodoVjRWILSgeoXmOd53147U0YPy6M9bare65vTlwij4hBo9jYzgNSLS/qpZRJw172w4GBp/VqChYFrhxh+cVeZ8uTdTRMSCAhmZ7G28F0U0AqHaeCXIUqEzpFn9L4DaAJTvMim4JAqnU5LmTX3Cus9EqZJVsRTEF8AlcH4LJyLsvCizBMUDh/GoCG3b+gtLoeON3+BPNZhxzRHzPW/ro++xFM3bqDaQyAx2I3OCBHy7vHlE9F9K+Avx8swF7AIpH6v+tkIFtpfzfAi/DbGNfSy40j96EJu7R5Idt2mRssk/uX+xSDKe0neUW7gFddl3SPGuV675tECgiOtck0cvqkWfm9x/CS5u4i5yCNd1tFaF5jZebV8lFA== 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)(7416014)(376014)(1800799024)(366016)(23010399003)(38070700021)(10067099003)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?89Tvm3L50CKiJBBwbPU00kkSImD28To+ysX4ujKTKd069Du0m3vbPhVNBG?= =?iso-8859-1?Q?D375H1kld/UxwA9R9bhbal6mEShSXLms3WqH+qxDACTC1ZedFQ+gH1yEY6?= =?iso-8859-1?Q?uKsvlqfGEZQxE5FptGYsA4JTvUFz8apYqLLQ+WmkmxLoGbjhXS5SjIl0Fe?= =?iso-8859-1?Q?3+JH1oaFQBfxj10ORRwcGIYsPWVZdPfBs8rjuM/8pe4DI5xEa5A1reKc9W?= =?iso-8859-1?Q?I8BdGxOaErpqC86wB6wS8/3n7HoJomrEAvetrxGllMoXGJ2/vyedRPuE/2?= =?iso-8859-1?Q?0PEW5ep0AHRgxqGGdQlo6DTWvJ6OpLgIcXIra9hHH8HodZl54fdTbFJ8mY?= =?iso-8859-1?Q?KoNRB762JD7aRqmRoGAwa0mPNZTe6cawxA4kQiGO+j6XgPFBmqouXagJKu?= =?iso-8859-1?Q?ji4oUjrgehxwf0fLiATdxehuBxoSxKCtI8SKLjUihaONyllvyUdnHVbDZz?= =?iso-8859-1?Q?kIv+YDrIjqNMtWCnp5aqRqhiL8ukVVnfm8KmooDiEXZ1F/WNS8MJUkRRnk?= =?iso-8859-1?Q?NsunML0MyBYfgrgc25QLFqx3PdJVvN7qPGvYV4GYJgGArE/S0Ou/qow32H?= =?iso-8859-1?Q?b81a8P/gVPvi/Hxg6XKXaQmjWeaSkXI2ld1yTCJURQNnJi/Xnif0qkyBk3?= =?iso-8859-1?Q?BxYHVgAQAr4CRm3X5/uyh/PIEqUiiMDrE63z0Lx1+/IMg18XEt531zppnA?= =?iso-8859-1?Q?u3h4P+51J8BHrT1qBwdgvndDB9Y4qOP075frW8HxGR7hHfwVpUujeKa37I?= =?iso-8859-1?Q?Oapn5/VCjLZfo+AmEM4/jjBdO6Xt2yoghtofg/539elpo5JhTL1IemJVVf?= =?iso-8859-1?Q?eFW9JtceUZyv0vNcjMdIGhE+VeJkf63po2Nrp0+WDs57sinGWsERuVKzq4?= =?iso-8859-1?Q?iFegFSBYYCDUcUOJ0POBeG5x2iaLN4dyzRWOhVohtZEkAF/qLI8MIFqjEx?= =?iso-8859-1?Q?ryH1lJNZUggUSFw6W9aEJmsEW0mhXmu51T8+IJZZKtjlcS5H02jPJx/XyP?= =?iso-8859-1?Q?SE8eoa52sRliYiYvP9Z6nAuJ/YtHmXRXPSE9PRP+VIET3rkVLfxyqG4pOW?= =?iso-8859-1?Q?MlFLEdCVJH10t6pkO/KHPjYHee2rfXLpG8F7mC/uZEjt4eYXgw3Z4qzGh8?= =?iso-8859-1?Q?GffN4dGLTfcY2+JWeSG49tCFtAxVD+l6PigtY2fQTQRnBbJ4FQVUPVUSsH?= =?iso-8859-1?Q?yXq+udTkICN6rwY2R2SY/PMxAQHl6kqWR8xJMUrZR9r8I2Dap5Ma2aENy4?= =?iso-8859-1?Q?l4jnhzH01VPy+LYaErFi2r/yqJrC3jQFyl95TJbb+yig+y+jRZLLpiX/vF?= =?iso-8859-1?Q?ChSzMR6AbYrjSkKgY886amiWGXJTzzNFPLQvZ1YUawH5LHjchlIYbQx16+?= =?iso-8859-1?Q?2iGHSeD3fyJS3aQ8Q2LdbCj5XqgirqpinGjqpFkJLRu2tgGP6zKYldXnl+?= =?iso-8859-1?Q?AIpHXG5sxZp7XPle8xJFqs2I3Ivg6kB8E6o2mSXhdQXt53WbTYkC1ZfKbj?= =?iso-8859-1?Q?f/HoPDlkNbqQmBq+Vu80AkDqWOIYvQH32SJ5vWNvKNIbZt5BJM0QvvX8Cy?= =?iso-8859-1?Q?pXs00uw27IKmPha2Kpa0zpNjeu6kRaULV+iNBDE9vL9A8staHH6X07YPa/?= =?iso-8859-1?Q?hlS98p3TKXdefOTU9pt9f9LLusELcd2/zLGfdba4TLrsutztLYtLwAoIwG?= =?iso-8859-1?Q?FMABwzU9ho+1NpKcJxwy/5Ca5hpbcSi8T7MHCtUl1DM06s6HuLy65qK4SH?= =?iso-8859-1?Q?RypmijJjmaVN89+HBSeO3YiQMECiXizBwziMUnNNaUHaZt2LGcfiTOeYnp?= =?iso-8859-1?Q?F6T6D7NqKQ=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: QKOSBailKBZSGfuncsP7x9Sfp4HuIeAFUHbXfKrF1aihb2G4Yt0vXwwayVtwC553yGT9lUJcIm3WJqKRkPpffwwWbYv3PPuHgkAVISpUetNSZKzjsCXft/p/H45zUAMH4F9jVnXv3zRS8rshZiqO0vRDILGM29qCFGu6proA0V7/mPGc/apimdBbVXysyTlVErmAFPpfj9/q+ub9ZXtPaFkO0xA+KxeZOCXVB/x92Fm+kJcy5ogbZs/5NB3VOYUu3kHRpfMk1VdRuz2p/LbS1yTQuBABQn1MR/FnMpFMHa+DxIhfhNDDccdWBRjNY5sjLlQfTp7bQ70I29c8ZuLKiw== 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: d76c1c07-eb2c-4acc-da22-08df100fb2ce X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2026 14:19:31.9725 (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: VR4iOLZj+hMj1qhC74yWD8PVjGTFmChGuZFzdYKFu5wX57GZGKmgzvPAAyQ7qr5nvZnOecTJmAr8484VnDNgV9b542YFE8ed5F9VV6hpgFA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB11781 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX2MCytFRfDupO 6xtPqeNAHlvGnA3KhHL8KCMMqkNtLRY+r+091ENxQkRsdM30dNp8wucpDukZjHQbE1TaSdxHzvY Kq3g68NrnpeWciwgyIKwBNGmiYVsfAw= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX5etRodNbuJZW KJqUzwFmg9BypO2+h/MFfTP4n7OyuuoWDTa/CK/1M+spi06ccHfPBdBoT2eD2BCIHU4LdD3DUYY RZI8TUgm66awOXMyhweV4e+FSPhWZdI3Iy45RQShtv2zU85HWqTZrhbHMI4g18egipuWjJI3Am5 K7s+SW2rSF1qV/In+t+7wjoTmPiUAeWZCEQ8TVom9Y9tx3yY53eOyjByfhO+eI+CR+gL+FD11Af GxoNzIRAta4AoPhh89ErY4uA0siPaG7HNbhVFigpvQ85hhTA2m7kJ8uUpVNeruZ7fXPXmQYFLvi 3J3UhwFGXBQMI/Asj+ziupM9JVsP99N62ZXofn9zF07ToPhEAxd6jIbXC3YkAJ+tEnmIfjt4kMw hYxJnDrD2Zgv1WtqgdOdFJHwPbC0DZStrhsvc3GRPGasSa7BoYg6rfIYt0qowtM1CQs4DRCD2nT AQ6xDt7fbB2wlRPldlg== X-Authority-Analysis: v=2.4 cv=Ae8kjHXG c=1 sm=1 tr=0 ts=6aa40df8 cx=c_pps a=/+kXZUEK7Fsqfsk0sF7w8w==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=Ap8k9tRZuQ82DLYWQqG7:22 a=64Cc0HZtAAAA:8 a=2bJf0PUoz3_qUPpsRd4A:9 a=wPNLvfGTeEIA:10 X-Proofpoint-GUID: 3hVQrZzHMwql8PjfcmnG695QVB1IGO4d X-Proofpoint-ORIG-GUID: 3hVQrZzHMwql8PjfcmnG695QVB1IGO4d 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-11_04,2026-09-11_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: 1789136527243158500 Content-Type: text/plain; charset="utf-8" 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=1789136465; cv=pass; d=zohomail.com; s=zohoarc; b=j/snDJ2WVFFqsFX03bE99/uXxeMFQV1BLoYVQX+Vqy6dIPnPpWUciT0xApdNO2P7i6Pw7+SF/YiPSg5I3tnqaTyeDHLJqk1smHQpZGZSh9JYxkDCESqbxP2VDQtoMGwQFUdjcvisVDFsHndyhbTTNQdkI/bWtTr9NzQgwS4GRrE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789136465; 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=ro+n1zxLLrE1H2CYr9lqAM6pcWTCrJuCwmebJrBVmeA=; b=K0WJ2bLjHqmUd345NJcV/TsyT5RsuPUFPDzOLzv8s13b1OrVg1Wo3CO4KgBXXm7ciisCdDDphhrUnxIFuambqKz7nq34vPLt2WfqDgJVQgYRj16TLRxXQlCp7FpaVkey6HHvjSQMQKrA6Oo+L9dvjEuWq3CUGyfv6cH1f0Wi9W0= 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 1789136464897324.65271409714126; Fri, 11 Sep 2026 07:21:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x526v-000728-1A; Fri, 11 Sep 2026 10:20:13 -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 1x526W-0006jV-9n; Fri, 11 Sep 2026 10:19:50 -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 1x526R-0004Am-53; Fri, 11 Sep 2026 10:19:46 -0400 Received: from pps.filterd (m0127837.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68BChKPa4141308; Fri, 11 Sep 2026 07:19:37 -0700 Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022127.outbound.protection.outlook.com [52.101.43.127]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gkcyvn7qm-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 11 Sep 2026 07:19:36 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by SJ0PR02MB11781.namprd02.prod.outlook.com (2603:10b6:a03:402::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.9; Fri, 11 Sep 2026 14:19:35 +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.0406.007; Fri, 11 Sep 2026 14:19:35 +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=ro+n1zxLLrE1H2CYr9lqAM6pcWTCrJuCwmebJrBVm eA=; b=K/lbHRpxieQSdbktTB6uzvIAxqZRv32G0YCGWgV73afQtxe2SZIGuu1G6 Ik++Fk1ryRP9VareyxYxIEXN8Lw/2OzEDizpWZUVz31hvNWO+sZO5uIcVRew5vNL sM59ye+bIW0S/bXtARSXuRjTbWOOHAtZ+Gxlo+86CaXiEHy4Hh6ZIYqfv3FJYhNW izmE61v2CfTvBHMR5rtMZ/wBd1FMoKEc/rsqcAZezN2Ko2/9HU9uVbyNpCIdo/L+ QDlS+b1PZPqaPnSkr8ihj49A6Ln7eZ9hTsrYSoaBn/O2GT81FCg/7xzKPYbQoDKP VlsHefYvqQWnO0KcvCa8/OKLk13Pg== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=G/+S2M8nmYFuWoXEzDwRDxIGX4SjsdTo8mkCin8l5uSFw8aKF9q0oLXh8vecgkqtVifpePpIXxqAeMgt3t2U8O3QCDFUPoOuHoVatl6nOGFbUv5yQvXmT8i0IA6icr6x3uoaiO5ZBHn7Y7Yv9AaRuMaxJhPDFwf+HfkuKA4FJxLB1mbuNgv/aGsBlc+2zE3ePTZ/T8kf5ooNq9P6E/zUPRQHpIQYRwdUskSowJxgNXBBRziySTlTO3iqd2B5hkx9EPXuyOFoB/AbPpJ8D7Ou3EwPZktRMSjp4wKVpHC0DqoysNw58pBiMzpdM9B3sZDeoi6M/xfY6XBq3JPd51/Fgw== 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=ro+n1zxLLrE1H2CYr9lqAM6pcWTCrJuCwmebJrBVmeA=; b=W7aBC1+uz2xsJZRjvICkzlQKjQVleEk7iZ2d5DzrPKIcOtJrpUffMdgq5I+DfePvWvhDnDP0H19dbw2OxpknIyWyORUsOn/QqQxF9yb43Q5poG4YiK2WjhMpZEb0LVpVB1P+KAuVAUow1URCfQ1lHnAj+SSl3boaaD8GhZ7jlJxFmui/AAuRsXKsO6y2WplxVnFZk0UbSudpZBtwysxMCjwsTTeg1QrOhlrU4f5VzCKhQ3AU26y0T7qnBxAVqfizEHHuDZwRDrdV/NcLFmmX9/QJXsT6WsXNlSSBvKat74YYC5DIe2gN9IGqMup9PnHWWVfVXavi0thTCGYbuvPCdw== 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=ro+n1zxLLrE1H2CYr9lqAM6pcWTCrJuCwmebJrBVmeA=; b=bHRZmk8WzPe/E2e2+OcmMopwyjVbVZGFxX46HbnCYry9pl2yPzwjpY89Q6sHrG0OCTTXHWXPrb1+hI7QSSokHETdzlSFC5PGtU54NTJvciy7V+utds1meQD8sZG2gwW5Bqq8h2sm9Bo9K7NyY/69AhNRD7j8MfhV+Fii7mZXhQkAMbnDi0fqmhhmBJOguCvwlYs5mkr64lPMlMwM4caJMHjUQX78cqx7V61QRb4YQe3brOx+Esi+kkHhnvSqL6eLHhTww4DudmJxh6EqTcVCgZj3fNn4oAPhsRbEISc1rvSu/To7Eb1xEFr1jWapjvwmMFXaPe9VvuzQXyxrONQ/Kw== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?iso-8859-1?Q?C=E9dric_Le_Goater?= , 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 v2 7/8] vfio-user: implement mig_data read/write socket operations Thread-Topic: [PATCH v2 7/8] vfio-user: implement mig_data read/write socket operations Thread-Index: AQHdQfiRWBCpA4GGm0GZd/DTGMqnXA== Date: Fri, 11 Sep 2026 14:19:33 +0000 Message-ID: <20260911140710.2348139-8-hugo.komatsu@nutanix.com> References: <20260911140710.2348139-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260911140710.2348139-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_|SJ0PR02MB11781:EE_ x-ms-office365-filtering-correlation-id: a71c7146-a301-4cc7-1bfa-08df100fb49e x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|7416014|376014|1800799024|366016|23010399003|38070700021|3023799007|10067099003|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: ekvwOAdFKxzXtbiTjqzIVmuqrxwBqiEu89gbg6gOIIr44aGJnKVHJw+Tt2Lyq03zhF3PMylMrI+o2g9Adac62qS0gsM5jktsGKsPIxdE7KFFvuDHSQ6fudaSdrVX/3Gdky9ww+NEzUE7wLON4MyrNYoSy1wdhVhFaBvjF+jV0T8lG8pla8xDAo6fx3C5XZqMk1xPzau3H0I3IKkstYQE4+pKEfaztbCCHIRspUQoHjFxSALLDVEEL//3Oh4XbowViBnyFIcMn5HxYDBK5pukLqmkpitKHd5WYYs/qECgCWxOtL9cG1OVWphhmoWQZ3Wne32+86V2d5ZLGWDlKwAFjyrv89slE5VxUWp+rBSSnec51USzxq8Xo9LEzRPHBK8or2OCa31NK95zxgqMULSxa07rxBI4tib9d8yocZ6E1/kQumW4VXsGclskI75+ObwKFJoSGlb8EGWyGd86uuROUkzldpedMFqelCng+dK6psOkVpe+TyD69CcYPJxWOxX3lnZY2K/uQQ0hqcTrSFdW77wNyUdxFrGI++ci0o3GVOMIsM+T2h/YpvKIBjAEtzQgxkZdOPDjW5bWPHYAX+Q4q1ausr5gw1P88a0ZhHwouVmxBqAImkvUr28RZzVnV3X2GqxessLUVSGLS4gEGljBsl0Lilsa+YRXb4j60kNLPPx9LA8RkLQggGQA9go1demApLY/2rNT5Z8PpiJMZeOhj6XBy4tUpSyXiW6JFcNQ0Hs= 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)(7416014)(376014)(1800799024)(366016)(23010399003)(38070700021)(3023799007)(10067099003)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?2M59pLjTqxyi6Gw0z2fEzW/QoYq1fCOfTPM7qOXs5GM93P2bXnNsgORwMz?= =?iso-8859-1?Q?XUhWdbPLAvTruFB3qrSccS0X9/xdsnqTMJcLpeP84KCIugZiTwjWGvGt2n?= =?iso-8859-1?Q?jlZzqSZ6I5OBugioYhhkjt2bFEbJkuiH0DkDAJq39B3vCdUjTL6sTsHEdS?= =?iso-8859-1?Q?tqWHoydtXtI3eCccb1M+5McVD1uDctRS7P3gRXpnJPCZW+CIRWdXenICZP?= =?iso-8859-1?Q?ydpNjzKdnugB52Pke/IspK+7xIiYBnyTyef8aEwBHnp09Bm8STc94r3N3M?= =?iso-8859-1?Q?mGTRogPWvTVyXxCUYLD4jlnKCj506e1YLwckwYste6CgnkRn8xfDFt7sN4?= =?iso-8859-1?Q?HCcc4h3dzDcCar+g7mUru1R+2dLSdx3VgZCeq+pzmaxOrr7EhM4pUVlrDU?= =?iso-8859-1?Q?ItbmFBnQbmjhdscq6E4M5drzK7WWiP5nS332TODrIqcYARi5DWJBwK/Zr5?= =?iso-8859-1?Q?fmLEMDv9r/olUjh1D5Do88yoFg16MmSLioR3K6zBF0D19bBs+8mG7Xu5+N?= =?iso-8859-1?Q?RE/Re+0UtxVk+/ZTnkP1pveSyAQ8ZGPxwh6S2FnHwFALIDm9FguX+166kV?= =?iso-8859-1?Q?7Sj+xqcLNmY9/CSeMUTn30rF4tT6eFAqry8kS6z1cAG4puK2mlsacTzSXc?= =?iso-8859-1?Q?BcDxdaBPJgu8few8NQxoqVVH0EFpm82YDnsyAPO9HCf9mSwrV/xKd7a0UA?= =?iso-8859-1?Q?/Ua6qK3hOJb7LNeZE9Vr5lQUvZCEzSGjbKhvXecfX2WpSn4EiubqlU/8AB?= =?iso-8859-1?Q?JqGnUM8rsk5gHyO6XsyvUfigUod9Ki5wvFL482vw5xGQ8hmFxoJpKPNjSd?= =?iso-8859-1?Q?Wzc5bWVfdAmXvGcjAA4mLVk0JsZY67FwlH1fR/lvYlG4p2LFdgyu4ZORfX?= =?iso-8859-1?Q?W+3bnk2PRKizWOJbbfe0hslW5yua/4WRDNCu50HWKA8hEwK1cWI4jMvBJI?= =?iso-8859-1?Q?cqPDzhdW2fZW6yc5jRJS1zlIUC8Wx/OZo+82N1C7ZAXWd0W4stmO7pt7G5?= =?iso-8859-1?Q?yn27Gg3d92Lv/qCeGvbtaeaYpiN2B3Ur8ju5yxNczbdGT+TDtZeZfox0Q8?= =?iso-8859-1?Q?6PQh0D8gi7x+WnSMRtoHz3sDA5zn+P09xSaP3W9WQ/UL+lsq0NsvBN2FFr?= =?iso-8859-1?Q?GX1r6vgQROBfp+oT22oVd/C81N00tdE59lHhx30XZ6j8v5odNHWj9TN44+?= =?iso-8859-1?Q?U0psNvzG4OtaeXa5OG89C1jJcJhGjSx2jH2fSlnb3KlegTM+1un3fISKQ7?= =?iso-8859-1?Q?H3L9Lpff65J+RmqetrOavOFZyLGdcPCvaXh8aNFtSD/6DIYwT05MdNm1Jv?= =?iso-8859-1?Q?rJXEhRblfbM2OS6UrqhnRIk9yWNF3WzTw5UKwHLa1dllR1Rx2JDELg1qBs?= =?iso-8859-1?Q?5rjbSn9phyWXrntbrHgQbtGczlwVYPx2ohmaj5j7JMxJl71cnXFjuw80b1?= =?iso-8859-1?Q?jCTGSs7741p+foandnKOZ4kP7KBnjHPUiphJpSlQbdPDSfUAvK1IusqBU8?= =?iso-8859-1?Q?CY1yiKL4MQu6QiUoDtU6LkQGyCXkA0Qf+Uxap/2NkTiGsEGVtdlgNTzarf?= =?iso-8859-1?Q?lO0PF1Yytw9qhrSaOXkFDlkR6OeRRPg+Ts/THPOjNKRQoDeIP9i1rtnPu0?= =?iso-8859-1?Q?qx5R9Uh8b2I55jQD0FkAQaLDKc3JKYdwi2Vse5RzAq8HF76v0yW501ex5H?= =?iso-8859-1?Q?ColIJ5g8QHxTs6WuxpyT/fEjjbpzDJ6/VYpz+Gt9rkZdNzRE/+8bYZsOK/?= =?iso-8859-1?Q?58NEiZpWWKNRsfJng1Ao9PfcgdIYsNIKmjGB8zz3j1OTgmVdAVRz/Ma/ci?= =?iso-8859-1?Q?gZM0mtp8BjQqexdDliedLd+AoHcNj7g=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: ADhrBpyW6ajs1nqzlqiJ0dyDNoz00zh9UlrRr5bAlBqjcmuNDGb6CpBq7wQ4TanPRCnUavPYdEMrN0hkeuscRi2WpxlQGKFPUL7nvjtEvMiyYYLue4e0F5VraUh+ETfOtnF+jBkuZ57uLM7knHfPXy64pBFblmUN0StnaXXNax9LwZ6qQLd7LS5wal9NfehSvpZW4Q8La2fch7t2tuJIW8K1ZKPjYc9z1tS0BAGfo+cxEqL6MO6J/DR8NSvpam6TiTxkdDNF2g1kzrXJJvtmWDZcUeUrNxZiMwEU8g5ya3YMc3ZndbBc1iICagoV0KbR1GXIHlQ0+Mx2FA28zVBBbQ== 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: a71c7146-a301-4cc7-1bfa-08df100fb49e X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2026 14:19:33.4198 (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: L/XY1WU0ujgctzcGCz1/K7ZSlS8yHacTx0FkUpNf9Yf6+jgOVNeVrBRS6DF/5g4SI2giELR/p4b71ydewTZsoTQHPvxtS9ftYiy4v1dTuA4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB11781 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX+/BXlh/EXhT/ 6+D+aVJj/7Ah+quiyqYdP0j/5K7Ci0+rfZnFvcBAOOe3JOnwPW4I7NhjH7f7uSiUkMNryAkfFmA Nb3XGHl4IeyANPbXl6uFrBjsshBhk5I= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfXw2/s+ENT0VKc vBKLpEF1nQV0HLf81bSSyp17JLbKI9Q/po505CwIs5BKQoyTxd2JkXQL3SIRZBJWVH4tSBCQTh4 mqtoksb6+pJ3Eobq4amEOlH2aUNYoWSpaH1voC22gUlzLF5meT9WL/PecEh0v8eRrimulEKa4Kx gSAJKmZux1mB7FUi1OQMNnNiNRwGkzRjv9Mts6KqgMuiTw+Uy8TQeFwlRTqsPHSAlWmO3kJHfQs Boq0su6T6PU3afpeNvroiNv5lzjzpbZui4Adh3XvavTi4cw6odGeskxBQCQ8obdwllJDnA4HkVv nwVsex4Ipovk4wKQDwgXPRF0KkWdTCaNnLiqkFxpCAMNlEU/r1mtpDps9kuKit4wCm5pty7MtmJ 7H2qsU5GAdr+l4HA/O+BIg2FBOwDC+3beYvSmfdIHlg/f6ffY0iHueiIFRjBrXnUzuUT6SOOY4o j0O1ppul2YAduPO5Xfw== X-Authority-Analysis: v=2.4 cv=Ae8kjHXG c=1 sm=1 tr=0 ts=6aa40df8 cx=c_pps a=/+kXZUEK7Fsqfsk0sF7w8w==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=Ap8k9tRZuQ82DLYWQqG7:22 a=64Cc0HZtAAAA:8 a=IEzzBjLDI9UtbpY5370A:9 a=wPNLvfGTeEIA:10 X-Proofpoint-GUID: CDPYasOihDH2m987JQMzaNB3vXoWHp4V X-Proofpoint-ORIG-GUID: CDPYasOihDH2m987JQMzaNB3vXoWHp4V 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-11_04,2026-09-11_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: 1789136467429158500 Content-Type: text/plain; charset="utf-8" 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 257f9253aa..adf451b772 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=1789136497; cv=pass; d=zohomail.com; s=zohoarc; b=jjU5iyQ8rxmMtlvCuIh2pdbHqrlquudMlCl2iCDi7Pzt2D2+ovGUYv9MAo+CYTEOaGCIfaQxngHZwB/884BQFMmp9z+KIwe5BmjokT3E+qZHk3W1/GYoOEoAxkDymPmaVgmAxmUBPmpPPBtANXJKEwBuIoqa63wxajlrqkOvidA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789136497; 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=kklHRryTG0DxhA46oD4texkkRuG4tORnJOyyQyviuk0=; b=X0kWQS9AvZ8fmYTT8jNWg0ONDHDRSOax1MvSZKK09n247pvahSFD6xrolEFV6iiWEtpIxwDcK6+x70k62X/5+KubL2xWNI1DK5ekB9FJKQSzhGecmCa1HPGBsDwVl9puQmmW/40fu3mmgt4yv6bfDam836X/oC5IjiOnC2NzeOw= 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 1789136497845785.0372977591683; Fri, 11 Sep 2026 07:21:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x526q-0006yJ-OG; Fri, 11 Sep 2026 10:20:08 -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 1x526W-0006jT-8z; Fri, 11 Sep 2026 10:19:50 -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 1x526R-0004Aj-1w; Fri, 11 Sep 2026 10:19:45 -0400 Received: from pps.filterd (m0127837.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68BChKPb4141308; Fri, 11 Sep 2026 07:19:37 -0700 Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022127.outbound.protection.outlook.com [52.101.43.127]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4gkcyvn7qm-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 11 Sep 2026 07:19:37 -0700 (PDT) Received: from DM6PR02MB6172.namprd02.prod.outlook.com (2603:10b6:5:1fe::18) by SJ0PR02MB11781.namprd02.prod.outlook.com (2603:10b6:a03:402::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.9; Fri, 11 Sep 2026 14:19:35 +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.0406.007; Fri, 11 Sep 2026 14:19:35 +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=kklHRryTG0DxhA46oD4texkkRuG4tORnJOyyQyviu k0=; b=BolfADeeYvttbbUmkr1+D+vs7+xybg5BlCGmxMvLaBpUPvh8o60wke2CO /IDSM0DNu+q5rzxTyMMkKqaepEoHu+17uq74zqC4U3Sb8Wy+RqEh6Y1iFcpdkqUW 17lZ2RR2fsHWt8h/arsmVMwrOp/N1/VkuWNQRjG4lhLRxTcjLrPbTdPseWCfe/Z5 wTK5w0bQKslKIHaDKaCYeRARuTNU124xK/zrvdkxVx1eVQnTq03lKSRzkNfGSOsA T1wr81bWBKK1ta9gD3ZrMGzFYv543Q1X31KFSZbvVY3SzHVTsU9d1JJiQfYFIoNi k3bZQWDNQYUDASjNVhiBnSkCThm/A== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KCw7TyWr8WK9Wy/CBGMLnYJQABC37Hq32/CcIjqcG8jTRdHsGwbJZ+iLTd8KmlHO2R1mqLiOVOOImPQM1iMUob/lCj/NPagkrWY6s7h7QugldbKPfWcZ6v85TLKsMVoFf50nOrUGBvbtOo8GUb+xL51BQ0UwYTMWErDXtY4MESf7Y67BgFzWvkSyYHcH/iVRHAssICAa7Qz8HmVkJA16QcRBBrbb+y/Ir13h4iSArYMUknY+TFL6boKhEX3xk7Abe0bW6dQnD0TsruP1WW6nJipgxotdB/hfqUMRN284dm8XK6wvVnKiYJzgAEGB+DOgAToGIIhOuWVM2rJpc8RqjQ== 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=kklHRryTG0DxhA46oD4texkkRuG4tORnJOyyQyviuk0=; b=mkgmbIch0oYXHsB4MNRp5RKfCq9hfgYncTKLQEAt7v5ssMHDNzAv3jwdSscHO2m8b9OY4EHgvp2+60sFJWcxJ0XBRCZ0ZpKsIFCZp0e5yVEqIuiOv/I5XtN4Iy+vWXHwUdooYO4RQlJMDU4g+O0YmeiGmq79uuOAoyhMgEea0Z/RSbTy9qit1Mz72JnI72tiL7tzlsiF3b461XnKfMgv7JiHRoJcIz7ITWeJOY2Pd9y6jvArRt/EM4FdT0LOpn6McRz2lNj8e1zfGU+XPDFBrTubkxE4J1YjvRPO0Xl+dABw72Z9//4FYNWrnDODZRNlRHs/E2Gmnsuk20EtknlZ+Q== 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=kklHRryTG0DxhA46oD4texkkRuG4tORnJOyyQyviuk0=; b=Qw/hyy70Sutp3oAJkzU2CXEOGQuViSb3/rrBlPV9u4aIDdjnOPdaHrknJuXaWwBNrSlwblmZXfuZNKd9pVxxYT0+I6ZeFShDZh8mbq3+6tW7OsjOJahCo4cxMQ/fieBappDJsYQS+S4/4P7PJeVzIh7LuVCy7lmGjjpUmdVj2pH5izZXv74oAVkTunlXKeEMgum1yHy+dgvSkCiJTRIK4FvIruOuKqQL1JkriIrSRwexjwj3ftLeqpjMHTs9qOHUzwVSCDG15wau6441/J2BFHxA2y2ByuWrboRA7PumWodoTZfEOiX0ExDy40DG8EnvgfNQXacR9QLNbsfouhWSZg== From: Hugo Komatsu To: "qemu-devel@nongnu.org" CC: "qemu-s390x@nongnu.org" , Alex Williamson , =?iso-8859-1?Q?C=E9dric_Le_Goater?= , 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 v2 8/8] vfio-user: enable live migration for pci devices Thread-Topic: [PATCH v2 8/8] vfio-user: enable live migration for pci devices Thread-Index: AQHdQfiSDyvys3vGwEeie0u9swkSEA== Date: Fri, 11 Sep 2026 14:19:34 +0000 Message-ID: <20260911140710.2348139-9-hugo.komatsu@nutanix.com> References: <20260911140710.2348139-1-hugo.komatsu@nutanix.com> In-Reply-To: <20260911140710.2348139-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_|SJ0PR02MB11781:EE_ x-ms-office365-filtering-correlation-id: d2eb7bcd-5fed-4127-3f52-08df100fb4dc x-proofpoint-crosstenant: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|7416014|376014|1800799024|366016|23010399003|38070700021|6133799003|10067099003|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: 8d7QFj+tAFTdIf642xyymzFpkf6qae+EIob3H1m0d69elagwBVoKw+fxWHXGNQ7TKt2+6fRZAZvBIpR5YvivqymKhQbAPswV3sWSnPMcKLoM4vXhAmHhpuSPy5H43syzCqmJHifQ/HUtvNIpYqdrYAeVdVEsQT5FzC40l3ATzbfbwQTONLYd+W9ee+zYaSD3HveB5MuE7XQrAWlemf9DGWzTPWg6nJgyHAwfe1j2kr6Lo7QsCItGMaxG53sVw/TuKD4sMwsggN84HMQ2ZVGrv1modSjukktSd4269sP0ZT5O3mT7QVJXl5cEmyNIYYLykHPsdZ7Yp8FZgUjPxSg9yWu1u9F/ktoU6Xo4y6xUHpDbNqgXxMaiHDq7HayvGGvv7HXhK6I76Yi4Fil0UONE517bSPfeUbAvaz02e7iEnWg1gk8VcqgvpPlsH6iZYXc+gRP2+XhEDVmikV3tOZuccSPLSFMRZJtJ5r0l2UMSt1CMNs+rBMmAlLwQLalTNjT0vFasKXuGBw/HFuDtNjRyrRd+VkjAceE25xlAEXeLorxKn7LU/6bvFG4G103XhkUTsEBB7Gk20ezH1xpQQdA5ZPLLzAgL4a3pZGXznm2qrFtf++d/QG8LMoTj1ufdfvpdOGJoE33rtu017/RuUPSzm7sWHYw/P4nVqmqzBSzLMjC6Rj+0soIjV9cqqGHdfhyllCjvtG40lTkHxPM4qTv+Sj8hVwS6RBdXc4Dr0zlzEtE= 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)(7416014)(376014)(1800799024)(366016)(23010399003)(38070700021)(6133799003)(10067099003)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?et115KZsFO7yaK1N39y5/5XTFn1kxr5YJQ0fb5qq7+X0mJSikVJkgZ5deE?= =?iso-8859-1?Q?38mHC0Hncz+lFKVwJ9AW7k68s3YCZ5pJ0wVcxU9GFU9KJ/TwRRll6qmG8W?= =?iso-8859-1?Q?NPK00G+lFQTYVeXp2oJ0RCtYIFaTc3F6nKYPZe1oX5UlAmIHSekYMxCcqS?= =?iso-8859-1?Q?WzNhBuHuz7t54CusIEbNpa2Eat1WDtD66AHWP6ET6JqIeFGrLh+I/wOk0b?= =?iso-8859-1?Q?X9AwuhkpyDdIlu+s8cAMAJLdL77yOX1Q5Y5b+Sbt68ulxRp2oyrrATlQ8g?= =?iso-8859-1?Q?HP8ot9QbqjovmLAfFgzTBCZ2uVejwE3DAO4jhmxVWhK6wV+0k3/Ci6Cfur?= =?iso-8859-1?Q?XeZ8DgjdQvZgcm1uJzajH7bjj2UhGPXEFpGNaxZ7z7TaZJOXgH7YnW+9H0?= =?iso-8859-1?Q?qfy5g3oyy0G9+jKsBXTa6LUyGOeT3r9n/iyudurLFQmgI5f6qz4PM2shHH?= =?iso-8859-1?Q?p3BPu6pxn6X0PzsyOG67KLeZLIRmTxwAYXA6nyFaPr+uAwGA02BBI2dJon?= =?iso-8859-1?Q?vbHdMwRsL2kvOX+qto0XfIiT/zFMk3GLuO0kAN5HfHpKqW4sOWsDnUnWYV?= =?iso-8859-1?Q?WRh/bikwu/ZMc21L8gu38lQv+uKXsw567aqMY3OsGj0PMw3FOoksLGzQlN?= =?iso-8859-1?Q?GJLjWrPTCSYf9WksXEJgJGbqoOQOSdqZ9v7aZwe4Ym9lw1P9gA8vkeHUDp?= =?iso-8859-1?Q?YRLe5TYEbYxxGa06gTayJOcp1k5QU0/MLEfjZAtwnpQ+EdhQPxfLUwJywG?= =?iso-8859-1?Q?jcUONRIZqeT3B6WqXj6UcNwzJR4W52oUxFb2+339/V8fAzUxTZaUl2JySI?= =?iso-8859-1?Q?Ho56rMzWLlZEHulVK0sgdDKZsCzMYxPxUygGq1zGwhNTh6pCFEq2PEEi49?= =?iso-8859-1?Q?FXdr3uOzB2HBKPmAb7wdpjBTrGO2k18KqokvH8VX0EDrucoT4BygtN8qvL?= =?iso-8859-1?Q?I951wnTGYqcUHk+Z1CTwPpcXrl4xAtoZFz5cFaM7tSzaIL/nS0jeLOpQTl?= =?iso-8859-1?Q?lth2TLneq6OW98KwUb4UmdEzAQkXvdsfzwxpgoA24U4zguX8r/loywcLOB?= =?iso-8859-1?Q?GTQCi0w0fP65uGNddeneabi/Ru2FJM2m4YQebrd5oUK/LYEkan7Lt1kIfj?= =?iso-8859-1?Q?so+8l6613nNKmf80vfcwQ8RQY9v9YCWiUBwIqR6Q4DZYRWhWkgFnsSdFQe?= =?iso-8859-1?Q?bJxqPO9HM9JoDfxTQIdCamQg3RCzDbP/NIIu9LRhJ940bW4/ssGjf/i2lX?= =?iso-8859-1?Q?vMXDUIpq+zQGMJ/V+62zl0re8FNqRSksWBWiV0+dQvzQxOH4BSX8Ya59/F?= =?iso-8859-1?Q?gREsP3sK9m5xk5VCNSREuC6D1DXPreIiDhmvvcSSnGDg3VieNPqSTCKU4H?= =?iso-8859-1?Q?J0NuR2hR75yFO0zyqXR+Fn2UXUSS6URIHlYBk9IU/0l0Avf3rutvQVVsqN?= =?iso-8859-1?Q?T4qxBb6HvPK2r48VZp6mDJvlvYyGr96tFnRbGNG1T6svRjS9rfTUpvMBsD?= =?iso-8859-1?Q?HPRkTw4OXwI6Gx4P10kDm8Upcd6tRvuSFBO1jk15KXkvrI92IyV8tUOMrm?= =?iso-8859-1?Q?LkGkwmXYRjco1+IUkMXftAvMYNoqOBrsV6klXO8D1MCchG+qPsglpqn4v0?= =?iso-8859-1?Q?VEtlBBJZ780soL/kewL1sq1/4SCz3lXyxL/7YAzMeXKVMd44Epf49mWYrV?= =?iso-8859-1?Q?Y+EEX4Q6PGeaAq3aHy83K+/aBdooUYCdbP4+6RwoO3EUwUiiRy+woPKpTH?= =?iso-8859-1?Q?RCSW6HPE+cop2+rBzl3oRzbd5xTCR5VAISPZzUeEYuZco7Aftb9rep6h7C?= =?iso-8859-1?Q?6zLrBdp5/fHz3e8iC1/wq4sCn5gTD+Y=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: YcVpcrL8M3cPs+pkIzyPyHtCIGIyKZEhUXvySDX7sxLxs8wXiHJ3Cuq5TsTTAcqH6y0pH/P7C7zFg+z74waKf901x4bPZedCLVi9xcSDlx8S7+8keYWkMiwFHm6eoy4kyJ6ZUoK8WMPXlEOuBGqddv6AxmboL5GgXeRG1dd0eczdd16l6ZNWK7z9s9Um2qwht5B5Rli9R/acolnG5QRV8C2b/x+YQjNafVU4ys61VdOMrqt7T5wT80wgIBe0oLW1ltrErC3ZQ22PJMwXe5d/NZQsbiHUlN2pMVHYhEcqz8/ancTvUO3b1Uex4YDjRrbelC4dBp5uyOIo7iV45hib+w== 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: d2eb7bcd-5fed-4127-3f52-08df100fb4dc X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2026 14:19:34.9925 (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: Kcn37w3yJ5EOC1Nj4ZzDU8U8Z6ZjkljkZeLsJVtLjdnAtaAzmOVS5v/HCVrvECmvrigRCO5XpPxtlQofqXFvyXpdhrVT5JFyoRhG1SXaXeY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB11781 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfXyGhOvhcJiTSt ddd1j1ep6a3W238L4RyqZqjMY1+LWFW+pzFIdPFuXNzU4R47iCPdlv+ybJ75IjFCVmX2fo/mkya 6e37S5RboXpu/FDcDsEx5ccbBHThOOo= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDIwMCBTYWx0ZWRfX8S+UcqJyzUV+ 4Ur0yvHHdRB9vFQP3573vLMGW26sEOupHJm4aFo5UK4KvLgGxzvmVGzJzh2balmmylz3UC74M9v +jkGpI7klJd78rEXHGj7g8/PLBoO3xm9PjIjD9dMt0R60JgYrtXgv09AADiBI3rxGo8TtIX1bPb bhFj0vIz6iSP8SowoGlsIz4vAc6sDlN3mNhov9xMSG47e0x8mhg6ecgrgS0ruzrkUf+KqDRuGTY zBrQvUOTQBAq3bpx90uhlHN/H6F7RbkshcTcw4UQaaXLauHyvuTtcNNnGf5ej1vDcJlfhMv1E/I 0F5eA5zme4bKWbVSPBSq5x05KUxBbEeeIdZpzlden6PIC1lzImQLh8kvPONZZAn1uKSBPmftAl+ BR4ebDgNZywki4NGThLJKSPvGa9aLg9QR+IQSD5LemvL9wEsxVYsYDb553CLPBqNqQfPrhg899H n8EtHIN32eiEcwWI2aA== X-Authority-Analysis: v=2.4 cv=Ae8kjHXG c=1 sm=1 tr=0 ts=6aa40df9 cx=c_pps a=/+kXZUEK7Fsqfsk0sF7w8w==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=VdqzKS8jKosA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=Ap8k9tRZuQ82DLYWQqG7:22 a=64Cc0HZtAAAA:8 a=p7XhHSwCDMY6iawtdMMA:9 a=wPNLvfGTeEIA:10 X-Proofpoint-GUID: IXqqC4EIPRAVJ8ioMIuGOQbKbSmbNJSi X-Proofpoint-ORIG-GUID: IXqqC4EIPRAVJ8ioMIuGOQbKbSmbNJSi 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-11_04,2026-09-11_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: 1789136499104158500 Content-Type: text/plain; charset="utf-8" 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 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 73b4a93fca..838bdeb0c8 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