From patchwork Wed Apr 9 13:48:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044690 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 280E1C36002 for ; Wed, 9 Apr 2025 13:50:19 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2VnB-0006DF-5P; Wed, 09 Apr 2025 09:48:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2Vn9-0006CH-CJ; Wed, 09 Apr 2025 09:48:35 -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 1u2Vn3-0005bH-Kl; Wed, 09 Apr 2025 09:48:35 -0400 Received: from pps.filterd (m0127839.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5396u4sE006456; Wed, 9 Apr 2025 06:48:23 -0700 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=kBd+2MuP3jIbBsdmAwFmAprwdtHHPPi462Dwmamg+ 10=; b=YEJ4La+oNXy6fuC4iH31NP6J4ZGuLTgAOPaLNrI6nuEelaUgEbQF37Hod OPGLHMUkQYU+80RN1aUsAWE+DFRd0dTZiPo0YfOMngp851ndZ7EZJ5L+MziEGe0P yVnWf1KOcMH0IzNxNqxkElonS2+j9ClT62v/sQlie4nAbOrwvbbBot858dbmqeYy F7Jeef57cFihCSHpocTA5xvguMp9vJDNgjBMOZt7BUuQW4kEwyRu9CkNtXbVy9ue noybmG3ZhUSQKVNbRAUhF0L4Zk5x0aGuRYzzvZK6k/kpkGCEdKQM1jj3fQT8EqMq L780QlYjd9sLsToGPscBmCaRjQ/lQ== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazlp17012032.outbound.protection.outlook.com [40.93.1.32]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 45u3kksbh7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=c4HKlHR4+io62ADRO/N3VbB83svPaLjfRPpLiqn0EHGmb0fekbjZM9um6/go8KYSAU+WOz8qFJyKA4UatmJ1C3qsAIOpd1x9hjuv3k/WxOrkY7vacmNsP8rzMX27kyd9JxCn+GSyu3qGuD53DBjdi1PReSa63/2dRFoiHYquScY7v62wxYsThQ4pXrEJ8TiQUx5ON1TWqY9sdomlkOi0i0LJ1jcKfFGPLJLUlyPHn0stx6SRW/8EGQA2vyp4d/2GMEpbLHQ6sZA+sjGG67SCSviCvaOIHCzGk6y13X93DDTlx7SbhFRNBZaiePIBAB/7ppQEVxfbyAo3JyVn9BEj5A== 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=kBd+2MuP3jIbBsdmAwFmAprwdtHHPPi462Dwmamg+10=; b=YmWNtt+ylZcmOTrmUjYlIqzM0wWVKsYUrr6Zgt17at4cUAY7nYmaRua5B+xCEx+daX5W8K9gwwALaMycgL696Sj3vee4tVrlt3jcIoA6R5Mq1KBM08QpT7m3CoGarFUvl+Hg3lqCG8Vmr4Ygjec4I4KYj15plCWGKwZ0VExN4HgUreqk4WiwJHyqfVrN8hoy4fiS2ngvqfYvb8siWUCZg7MOzDN4hxiHZRHRcW4YX1VG54t/Ky3HLeT7Keuv8e3sRmqr8bJNAcfcwIhIq5AZLZwi16EVtCnF24jwtUYG8OwuVpLYkHlY7crgNpw+cs5301VILVPAAs0Twct0DC2eLA== 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=kBd+2MuP3jIbBsdmAwFmAprwdtHHPPi462Dwmamg+10=; b=BYLEbnXojMFXbrXe8G5IjjWWkGxF6GjdSrkekf4QidVrnN/VRB9NFqEEu4GS6LOxCC2tcoS8qYSgY0RjDOKU0uivw/j0mTihiZcx5dEERq5U1VRYHUTSDcDIBqxXmPk0JRho7XmPwaACxuSFxo2Apbmz/mE/kaw8hH/9y3BlyPAgFH6nj9kWOGn4oTVbFVithvusp0VG4iKYP9q7dTRZLR3rTM+kXsZbfbBghKyHTqVsgW1lORpQT7n27XkN5hKD4ly+rST2iojGQ6msfCY259bAxaI09Js8W4WgtDuy59A41MkOm1OK1jJTODeI8tcYTxbr+vrzi6xopqd+vo+/vA== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by MWHPR02MB10356.namprd02.prod.outlook.com (2603:10b6:303:289::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Wed, 9 Apr 2025 13:48:21 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:21 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon Subject: [PATCH 01/14] vfio: refactor out vfio_interrupt_setup() Date: Wed, 9 Apr 2025 15:48:01 +0200 Message-Id: <20250409134814.478903-2-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|MWHPR02MB10356:EE_ X-MS-Office365-Filtering-Correlation-Id: 8a6ef6af-98be-431d-a60d-08dd776d312a x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: i91NLlX0KqRCW986oFsgrBZsnm8FcIj6h3SG4GAhYyRSSfzHXqGO9cwZqYfkLrKAXgv6aInQwcK0LdAfLSyz8zTN6E3yuKlhNXKS4yKe6ze/npFtXglf/okGEG4KWDkLCEmo1IGlVB+jidauHSHr4H0+fOO0xfVWhRI6GHK+P9YxStf3TcuR8IJ3/R5c833DWvpFJX8sGHBJ8sLy47X8PfYZUt+7cWhPp8jQ9a4DvrSg/oXSRxj+EON/ErgdNWKbTQfyLEP+ZghaNFSo5+1QaBMWhBolY0bRVChezXPdeCy0AuE0CLkHGa7B1A/JEhIHq6Medc6jvmQ9pJ755iNia80R+oDoMpAj2t6RRiSz7Qg4UhJCk0qWy6OGFGQEvhOJdni+gZuDPJdMpB/fZJmwSQuknEkMgRodz0AID7NnNyykVy8IkT0IGItwLyZYJNEZEvaiqcPQgnpXCshN4+PGUtPW34kk/1kH7EV5V6+x6zAxAiVWR40q03a2zUiwBxpVC21lMFvmwebdLxkFISmfN7FJViwlek6nkTF9gjkCLf9xlf2Lu48j3WzeyCYJmBi20y7NBfNvRxudBqzfc19D55JQiM8WHXHUmlb1pX5zEaylXI0C1qnXAR34TPgU/M59cFXK1kMBb1aeh4YuYJK1PI0eHY1V90q3v/H78h7XfGas2oOrSViwz8J/MCXr827zbyyBPGcJm96LBqCcy5EIAX7FTzr18UGxilYT8kwGKmDsusx0OMiilA70wkUHA/PRG3QLUKlWOgktQXisCOfdZwN4jNKwdgTOY7buG/CaKD9fuRbwaG3GmzNyygRbI977QLi6JxJ5baewwa3D7BAloA0TKFc8Qlyy9lt/NR85Pw+yX0y/lBbP3aO+ucTkd8ie2mZCC1piJJ+0yXRym+inJElHK4LCEoQ15qJbp3WteF3tiPgrhTh54JpZA3Q6SP8L3PkqIr0viBAthmKrvGNgnuHUGzxM/jQNQ8AWSZYhKo2/Z3RDESORGmpOjIchCruLpzQqS6xtC8pX2m5o9Ex8g9Q0r9phL44axKfdYCSOcJQ2OwbVueJK/wl/3L20KeU1Mm016HVJNvx/rgKElg3PN9DhbTSywcLDySa+p2vfhk/zBRdUgbyPHCVYvE3x4bZQ1YFOjKEbXgnb4bV6SEKCMp14+6D19w1cCm0JcZvuLTELeuMe++i1+T78npxvwqclCsbzkiF+bnmIA4ieKwlgTnL0VYGEMOBlIZI4rb5jObob454y7TIBAu8fXeLcaMTlmefK2zTdjPtr+KTNLkBJuI2sk1mJcOVdkTrUn2WCM+iqveLrm1GB85lHk09KObCWadouotsWOR0uXzfZ6u9p4FKoBFdikIOuTqE92B3A1+XPiUrNnckM48AjvTZzQKxq X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(376014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dcZsY2PGk0qftJiSR40bwut5JEj08OVK/qpD7K9lTUKlx6fOykPZcYYDhn2nQY35XeLgperVDd8idF+8n5TU9tL+f3pTa0ZylL+lQPBYQ5YwT3LfpGQ+Id3WyvVyPIbV1jfaJ+Qci2NXKFbFmWiGmI/Ft11aZeP3YaWJi5QLqsZE/26ylUW2p3AU1df4bAXZ4gTsznxBZw3edSeQhRdDxCK8565aRpiOiCxIMDbz4uk1Fw3gJ0TAir+XuqH/u8F60DHk/Ft0WRUJ0N3Z5jA1wWsKKLuKOTCQsD4ULYh+o1hkQFE5mwYUYFJ2bdhTB5qffNd4gaH1twYntkhRHXjjYEJsl99YCZlvah2zX0Nij9bxXFcvW4jfOFGHrY7fMOHWf9wv4chjY9ShJ/xUBBu8tmAD4vQUYRU9+Xr/0q7L4QDGSg6OFx9RTzaVQljE1Rre4VGfy6onXkENiTVHeKZR0wguF7e8OgJWnklKLXsh0f+f2PfL7fLvDJHh96MAOG0elJpVKxXV+n0qhpc6NOECZIBDiQPOu2O1JEz3ez/V9LBgmKHJ4sqJt9vbIxqdfhLWGz5YuaVbkqAmE3Wi6/bCIb8oOWwTagQvhJVsrqCG4FaXsngKjhjgeqH48SMZ8oWeWIXQvbffJC4d1vPspMW1ri+kMC3ZUK8LwEsD/bTrrIr90eMN1MyCmpcuuM779C25d/12kILpOooRtw9JJL1BBevmSQC3gaXTTtv/Km972d7eaHp2RDoVhrspttO4XXCABVQvbun1f3SuoSoEDroggehf3rKry9BBWxG271Z7uo+9nf/18DZcMJCfevHYAOOPWik/NMsvlQv4KBHvkoc7yABU3YwhcUdwbJcEn21kGJOTLXX7N3m/NtD4Rrop2qo/wGdzq1tu61G8kanrDmW44Ko/rtHylnVXjUxseE5pkyckphMQVjupaoHAy+2eSOmyOnq0JKt/d70gGCd7Gz9nvsgr6hS5FaC2Emd84M9Mw9QXDhTchq56KJdMAh4cypp6fqKJzBUPBmQzpL5br6bXgtYZENRqeZKoCKdkvaAuopePrg9SRxb3xzNBHj+AFvv8E2egZ9dvp0Yst7tbI9TGVb7tP5UgExesm9sqTYHOOiIE8dg1Tfebu7deJz8/irSCuEdPqLbLi3+9zL4bSuzvqScrxfV84Vpqkx6UP9xdfHlWdZ4zbbAOq/qjb6VEH38QebUAWzFP+7Tu+UTBv+4yN5xxOdg8NMRHGHwy24bU1LfgAHIQWCiqaMGlBdfd46RWN+qhkaLUpL6/nEp7VVgBMpOkTVAIgXRZIoO3Nnx8Y2GmTzHyVn587AP0ssgCaEnBi0BtoNrXdxICLjsmdGBJI8jR355QNrCjioBSEdQFi8p4EVqU4Wvmc2z4CBNeczsbacczuU6NwepuUci3ancQw5DF4So6QlCfFsHwLe4va3lfbgikUQ7G6CTeCadYNiiRVX5KdyzA4E/s0tsuTonP6ZoPVcZKimU0N6vtQdTax9i6CNTVs7UmuEYH8sWMslBfEPJGmdtOwVtDVwLDTYpTIcPIMlbxIyWzG7oSj9HauFQdYqZbTMfq2E02JlkrWJUO X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8a6ef6af-98be-431d-a60d-08dd776d312a X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:21.8064 (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: 03PEp0odY3UBe/q2wiRN9zynQxiQrRyIeYUW3ZVyOj2uE4E+n3mkCs/1nVlvRhJPzYp3dJloJqO+vooSLaXgVQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB10356 X-Proofpoint-ORIG-GUID: foCNld5d48-0156yJFYUWA0XVL7g46t1 X-Authority-Analysis: v=2.4 cv=d+b1yQjE c=1 sm=1 tr=0 ts=67f67aa7 cx=c_pps a=fM4bIjZpJamw6RFag0UgWw==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=dhT5AhTmqo_bmTCJ8pQA:9 X-Proofpoint-GUID: foCNld5d48-0156yJFYUWA0XVL7g46t1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.151.68; envelope-from=john.levon@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Refactor the interrupt setup code out of vfio_realize() for readability. Signed-off-by: John Levon --- hw/vfio/pci.c | 55 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 05a7a62204..02f23efaba 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -2963,6 +2963,38 @@ static void vfio_unregister_req_notifier(VFIOPCIDevice *vdev) vdev->req_enabled = false; } +static bool vfio_interrupt_setup(VFIOPCIDevice *vdev, Error **errp) +{ + PCIDevice *pdev = &vdev->pdev; + + /* QEMU emulates all of MSI & MSIX */ + if (pdev->cap_present & QEMU_PCI_CAP_MSIX) { + memset(vdev->emulated_config_bits + pdev->msix_cap, 0xff, + MSIX_CAP_LENGTH); + } + + if (pdev->cap_present & QEMU_PCI_CAP_MSI) { + memset(vdev->emulated_config_bits + pdev->msi_cap, 0xff, + vdev->msi_cap_size); + } + + if (vfio_pci_read_config(&vdev->pdev, PCI_INTERRUPT_PIN, 1)) { + vdev->intx.mmap_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL, + vfio_intx_mmap_enable, vdev); + pci_device_set_intx_routing_notifier(&vdev->pdev, + vfio_intx_routing_notifier); + vdev->irqchip_change_notifier.notify = vfio_irqchip_change; + kvm_irqchip_add_change_notifier(&vdev->irqchip_change_notifier); + if (!vfio_intx_enable(vdev, errp)) { + timer_free(vdev->intx.mmap_timer); + pci_device_set_intx_routing_notifier(&vdev->pdev, NULL); + kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier); + return false; + } + } + return true; +} + static void vfio_realize(PCIDevice *pdev, Error **errp) { ERRP_GUARD(); @@ -3142,27 +3174,8 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) vfio_bar_quirk_setup(vdev, i); } - /* QEMU emulates all of MSI & MSIX */ - if (pdev->cap_present & QEMU_PCI_CAP_MSIX) { - memset(vdev->emulated_config_bits + pdev->msix_cap, 0xff, - MSIX_CAP_LENGTH); - } - - if (pdev->cap_present & QEMU_PCI_CAP_MSI) { - memset(vdev->emulated_config_bits + pdev->msi_cap, 0xff, - vdev->msi_cap_size); - } - - if (vfio_pci_read_config(&vdev->pdev, PCI_INTERRUPT_PIN, 1)) { - vdev->intx.mmap_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL, - vfio_intx_mmap_enable, vdev); - pci_device_set_intx_routing_notifier(&vdev->pdev, - vfio_intx_routing_notifier); - vdev->irqchip_change_notifier.notify = vfio_irqchip_change; - kvm_irqchip_add_change_notifier(&vdev->irqchip_change_notifier); - if (!vfio_intx_enable(vdev, errp)) { - goto out_deregister; - } + if (!vfio_interrupt_setup(vdev, errp)) { + goto out_unset_idev; } if (vdev->display != ON_OFF_AUTO_OFF) { From patchwork Wed Apr 9 13:48:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044678 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1A2BBC36002 for ; Wed, 9 Apr 2025 13:49:13 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2VnA-0006Cy-TX; Wed, 09 Apr 2025 09:48:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2Vn7-0006BR-Ag; Wed, 09 Apr 2025 09:48:33 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2Vn4-0005bZ-Jz; Wed, 09 Apr 2025 09:48:32 -0400 Received: from pps.filterd (m0127844.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 539ABnMi024552; Wed, 9 Apr 2025 06:48:26 -0700 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=BDGBxzzjxLjKnpc5zeTGTq4gng2DG170Yq+BvTZ1X us=; b=O4DCN5ZalE1ovHFqJQWfhxak4jbO6/XxlyoBODSFZ441T0X3GBlz3SnJz a39kZu++kmb7FZ4Q52xfgSoLtA3muR+eMNRdVm/T6jsgNo+YHx0nxQU9uNhJyVEp XDyKRGywcDE56VBwB1s6US6QHSQUnK4VQ5spO/QrtbZSI1YCECYq9q+alpM+mZxr unN0P+ccWQfMJ0kP+TGfPzCmrz4ahsio8cas/deGve/B5z9oWMizB5m4l7lvSVFI oHN3mc4DhbmmCWo3wU0Exaa2dz0jVO5/kV8/IQaipQWbkbClKKPEhiKuBQAcYGid CO+W+egt0UOaZt/6eHgn9rwTo6MZw== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazlp17010002.outbound.protection.outlook.com [40.93.13.2]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 45u420syha-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tZK4SmfllsQjd7tAVgGW+eG8WVO3wF293CZ1mX/5yYkc9CWE5uDz8W7Zu0c6wm1nHQgTcmK/DK9HQ0or5H7isYTIUvF+sEV4lZBf8jB4HFNS0MLoyVUe/yeEW71DRhPFnPYH69N/DuieYQQ8yzhIB2d5WFEWKFfXtCj2s6de87ugmc6trYlmKIWVe+nTwHc9dTXTh5yvx76OOdWoAGhglCFHbxTXz4YgM+vsXNEG/UbvaMJk0igIW8Qwz9GcY++J2SJGDBhkKXlHMVBluIH/XIc6YaPt0A/YSYrivW2R68lEbQgQEHH5HzLrgAr2VzRCjmN38wGoRUCA2mHllSWchA== 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=BDGBxzzjxLjKnpc5zeTGTq4gng2DG170Yq+BvTZ1Xus=; b=Nc/zsslmFZhlpQCNAZoV86Zk3jEaRd/+SKjIQcVnU5IGCTFcwzRPAosbiypTjGxRHP/1G4z/HC/K7FsHVBtpuYN9ju2AXn5CehTo12bu1gND8ETGhqAqr1cy8oJfHX7TSOuDxZxs6mEWyTxi9rHPbeTnxWIgtk/ZMxbD9ywF1lRJIU/k05JwVz41fU7mXfPNV7dzYCkvvx0UT3LjFm78Woi+vy4ha5qXDDSkQLmV8pcF4+abftZb2MI752aBBvx8lmmy2BfmUKm2Fv24fiQsnVuIc3vFOG9kmhVOsBhk0erG6VB46y4vz3Rg+fvIxbC7dN0NwomjKtcPriVLpI3L5A== 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=BDGBxzzjxLjKnpc5zeTGTq4gng2DG170Yq+BvTZ1Xus=; b=WrOL416OyroxaqsR4P6DfwyJhhZckulY1m78pOQXGjdG2UCK7zLjD6aBntUq9ViSFdg3F+ghpaSdRnqDqAz3DsgFr9okC8fWyA4GVZZ41OsDe6gn4lbTyA1cY3MWgvCTN5UfmqJDeBsmoXBqllsFXNy58mZfdRK7nqU25AT/mdmk//AfXVZk+0UUFXjIyXuYhKpBXpI12dVb3IyktksffgDOCqvq2vESXPH2PRbtXJGPZgUCjv8pMTq0JJjDgCkkY56Vt9LdQg6RYCq0Z5TZRe6uv7F5X5WsjUwdPHpwHjGDWxGa/vLZn5McUPobDmeNLiWCnFEytMLuy0sOFg4CDw== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by MWHPR02MB10356.namprd02.prod.outlook.com (2603:10b6:303:289::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Wed, 9 Apr 2025 13:48:24 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:24 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon Subject: [PATCH 02/14] vfio: refactor out vfio_pci_config_setup() Date: Wed, 9 Apr 2025 15:48:02 +0200 Message-Id: <20250409134814.478903-3-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|MWHPR02MB10356:EE_ X-MS-Office365-Filtering-Correlation-Id: 6cd8c039-1fe1-4440-6a24-08dd776d32c3 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?q?fTjINjVcgcaAdq7vZEzc5t02Bx2Gom5?= =?utf-8?q?HX8qYKQTd3PGHi7wqbPiZZf5ls8g7hV/YhOFeDb91cLgkdrTLK/2QvwVyRfyzgpfx?= =?utf-8?q?3h5+Iyqriyp7Q4Kd9hQdec7rrlfn2rtdML39yTgl3Yxnv8aqoMWlVadBpH6aJU43V?= =?utf-8?q?saHbRxgqciu4qY1wDfgH9UjkzGmmZkRklmggNFal6rS1nRKlMZpucpWnPfWR4cbBy?= =?utf-8?q?xVPmr/TL+zFruiFaiLonsNuA/1zgcm8hYtq/fUkcmgskbc8O/rLzVgpred0MvpT/5?= =?utf-8?q?ISY/MBhcrsGI02/kf/d7cqiILUbm13nIMG3rvKcs2TOD4Knq5rioHVv5rT3wtxKIQ?= =?utf-8?q?oPZ3UI2vtx6q9rU/IPxrICG/4zwbnuksrpLfRiqfobVKqQ9kjUmDQBxjPBLQ3k8Pa?= =?utf-8?q?kspWim8nDK7fgAyIsa/e2rGst21gpVrqv02b23GlkRFmhD6HG69Gk0LoFc4qMg+hY?= =?utf-8?q?4WS9MVShvxs/JKPkqDIyV2GT13kcJXjRCfIbq37BHdFGcz8uCiz1cqUhjuzwnh92M?= =?utf-8?q?tL4mCdOe0mlprkj5/sTsJLYxZgNEuW6c0F1faQnLGcDhnz/twsMP60v6WwXLnZ/6/?= =?utf-8?q?s53EZU1yc4K1klv+MGWE7G0sKnUF4E8zSe/VI9PGpIapS0SldZ42W1yyFuKw7cZ1a?= =?utf-8?q?wKvWaFWOA7zXc2F36pBHx45duECjlTSSm4uC1XlVaeOE9Ar/pg7Sb5raMjmw6yHq5?= =?utf-8?q?FVcsLAOaSOrm0Loym+MdjKBnd/YvpMp+/XNOrxi0W2ZjYs/hv6MsQgv6qPlmZgRv7?= =?utf-8?q?tH3OynLjvInm37mI2nsno5WmHFxz3XXYWWI228eTfwehqLf+kTFkD3LGyO0Krs2Iy?= =?utf-8?q?zl7etmzhpuitF6/81PVn8KrwYrQgXqVB8/sMn7BQhMGZ7GVgEWwMtDT262cTHlalT?= =?utf-8?q?R/WpxV3qA1t1AmGVS5hrI0ysRNVyaRfazs9JgEWYshci0ZDL1+jNkqXdMtudhig1t?= =?utf-8?q?k76nmYVvRiJKvplShqmj4Eqa65B23yZgK0rrSttNMyvBh0R79BBa1ukCv8XuSsl7T?= =?utf-8?q?Q7csreYZ8eCNLinbfrgC8r2/5R2Xb+mK8R+g9Xm9CKxb4xlJmZNIC7P4Mxn7Ua7DR?= =?utf-8?q?WwO9OeNSs4LesV3aM3Dw8hrIa/FrHqhbeRcSXmDniUY6CgerXssLAwW+U1F+H4OHC?= =?utf-8?q?Of2q6dnXkE69YeybCz6rUFmIpXwH0v5fSzyR/vjhC/0PU4Iisr6SzVIKt4MCq4SrS?= =?utf-8?q?wM6nstzrQCdAJkeBJ6To/1aRCHNpNMAqB4Lfy3KvJ5idejJphR+HRb2BHZWWvy13D?= =?utf-8?q?2CbZ8IzlhAhlCsOsOXbk6r9TNleKtPwvcwK4Ezt77e+9teTg5gqJpH96XN+01BKCH?= =?utf-8?q?pKmPi6VWdQfo?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(376014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?Y2r7DCZJu6aftTPMCymTUQYXK9Ca?= =?utf-8?q?22UAze/67ohVMG7/xxHS4lJ8jATGma1EzNRRv/pWYKD3JPcJQglRc8x8guyrNiCV3?= =?utf-8?q?5M01D1uXu846VekFrFKui1yy0VtZnQpIOTrMoniPPfpc1LE9cvuugdxIHFvezW1OA?= =?utf-8?q?LuhS2GUQX0tRZD1BxuVYaSAc9Jmb0waM2Z4l/cQFIdjXdCvRmXeKc2yawW5Mhz4eD?= =?utf-8?q?2duHU4i0Zr+eZQKQ90UiO6Z+B9KFPVgJdxSOlU0rfgZ5p/6tu54JhlYxNtNgqcMgH?= =?utf-8?q?Vwg/0Hzdpvd5HGGI87JuuGiotmg8BrZzweq/8mgc0kTkbNEyQpalnewHW/EwYx3mp?= =?utf-8?q?9ohJV3dK+ga0y/19ZiMd5RpRsD85dR7B/COwreNZerwfa6qJPHtJVQhTPZJVLXHSq?= =?utf-8?q?IVbKJnPboTsSHXUADVUKMPt6KMuPiKnNeUnPlhSEPA6cDyC2NZCSTZghhLmyd4Kvl?= =?utf-8?q?0YoOXF3x31GKjMiHO1iS17v4nlUomX7vSwKNmPZ/53ffHM/Lb4J/JLmQl0DQhBOOF?= =?utf-8?q?h7sv3kWMF9j9+7Kq4yTIltCcl65aK5xtTnj9CyGG2zmK6MtHpF0ISVwHt1nwnOktD?= =?utf-8?q?PXeWwsy1hZN0ErrMus+kdgKOXeZj/Ts6KShPTj3LoiWE7sYgWDhehrk8aob4RVzR/?= =?utf-8?q?XVBDTGVyaeBBFPSxjMzsRbigZHvHtTmWRHmdRCIDwZKTmTJUbwddMWkpPwlTDrk+T?= =?utf-8?q?yPaunRdSW1P0xhhbso2m168tJZ4SAU5hNwx7u7JhfVa0lcQDUP9q8OrAVCrdR0066?= =?utf-8?q?kfrlTfqHcZUzKyvTpVqNR0Sl3zU49aqdWYkD9iZFbx350vu9wrry93/gS4y4ZF+Zz?= =?utf-8?q?cIxgonDa6/POmTh/IPVijgsUBsISQ7I4aTeDT/Cz8dQvlHOCs6oBju0oqv2amUaog?= =?utf-8?q?nT9UlO0s8vxMvs3Dzpnid1oddtah713/tCCLKShFvMpm0MeClaKQk7CREF1i/VkDf?= =?utf-8?q?Af8U3/9xK0voRjYHYHx7RfkCbep8BxtzqnbjtxbBG4VWKjLsIvbi4W7mUw1F8xfO8?= =?utf-8?q?xwZAY3zMy8NpWwM8NNKWJo7Dp4E7CsRQgL0SrZmNCUPscYFzonmPvgzHSFb9C4rxX?= =?utf-8?q?AUcPpt3pMfCUSdbF9oRnA3Ck8Z7crtgBnFZkyNN5MmUtI7ESvSUESMQQIxO6MIDhk?= =?utf-8?q?0Zxc7qYi5o/2Lv1CPtV+VrKFIW2hzOAezKMCnlXQe2Lq+VslEtN0jQMP/HIZCJSD0?= =?utf-8?q?msyQpRctj6BN42H+iNCcjZnkBuMYdrT3PvsoETYCVV6R2X2ZGCcDMzPZu8f1PBgOF?= =?utf-8?q?3hMy8AyluhT7mDT9esd8b12M3wV1FaWaYfGKCbBAA5rT2dA0igo2ZKwqQPLwlcKn5?= =?utf-8?q?egTVZdz57wlfu4eeMsOksRFb0D6O7hwXaY1bd4dVxcQI5im8CYt2IS0T/Nx6TKGpU?= =?utf-8?q?pUr4orEwSNZ6fG76DkLjEQ+uNXn7coatsyDiRogik5F/OV8NXLqYDDZhY2ztW77+L?= =?utf-8?q?sCsPKlxOr24Q3TGABhL/VldpAnEkS1zogRjP7hFONj1fDfb9DLlWApksZNwt9OiBU?= =?utf-8?q?6Uh4ssPLZqVm?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6cd8c039-1fe1-4440-6a24-08dd776d32c3 X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:24.5061 (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: knUaxox3Y5YaSUNRduJvgT9mwptRGbg6xEDk43Wv6Gmy0fDPVK3EXBSvxbyCyHoXVH7F7HiNDkebeK12+AsCtA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB10356 X-Proofpoint-ORIG-GUID: VRzeD4_e0Ode4lVNI2dt0UAuzWP-TZBq X-Authority-Analysis: v=2.4 cv=TeGWtQQh c=1 sm=1 tr=0 ts=67f67aaa cx=c_pps a=rknZK0v7KRh+kGA6vhtu4g==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=20KFwNOVAAAA:8 a=64Cc0HZtAAAA:8 a=q3r9P8AP8Ax0Fte6b8AA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-GUID: VRzeD4_e0Ode4lVNI2dt0UAuzWP-TZBq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.155.12; envelope-from=john.levon@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Refactor the PCI config setup code out of vfio_realize() for readability. Reviewed-by: Cédric Le Goater Signed-off-by: John Levon --- hw/vfio/pci.c | 176 +++++++++++++++++++++++++++----------------------- 1 file changed, 94 insertions(+), 82 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 02f23efaba..81bf0dab28 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -2963,6 +2963,99 @@ static void vfio_unregister_req_notifier(VFIOPCIDevice *vdev) vdev->req_enabled = false; } +static bool vfio_pci_config_setup(VFIOPCIDevice *vdev, Error **errp) +{ + PCIDevice *pdev = &vdev->pdev; + VFIODevice *vbasedev = &vdev->vbasedev; + + /* vfio emulates a lot for us, but some bits need extra love */ + vdev->emulated_config_bits = g_malloc0(vdev->config_size); + + /* QEMU can choose to expose the ROM or not */ + memset(vdev->emulated_config_bits + PCI_ROM_ADDRESS, 0xff, 4); + /* QEMU can also add or extend BARs */ + memset(vdev->emulated_config_bits + PCI_BASE_ADDRESS_0, 0xff, 6 * 4); + + /* + * The PCI spec reserves vendor ID 0xffff as an invalid value. The + * device ID is managed by the vendor and need only be a 16-bit value. + * Allow any 16-bit value for subsystem so they can be hidden or changed. + */ + if (vdev->vendor_id != PCI_ANY_ID) { + if (vdev->vendor_id >= 0xffff) { + error_setg(errp, "invalid PCI vendor ID provided"); + return false; + } + vfio_add_emulated_word(vdev, PCI_VENDOR_ID, vdev->vendor_id, ~0); + trace_vfio_pci_emulated_vendor_id(vbasedev->name, vdev->vendor_id); + } else { + vdev->vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID); + } + + if (vdev->device_id != PCI_ANY_ID) { + if (vdev->device_id > 0xffff) { + error_setg(errp, "invalid PCI device ID provided"); + return false; + } + vfio_add_emulated_word(vdev, PCI_DEVICE_ID, vdev->device_id, ~0); + trace_vfio_pci_emulated_device_id(vbasedev->name, vdev->device_id); + } else { + vdev->device_id = pci_get_word(pdev->config + PCI_DEVICE_ID); + } + + if (vdev->sub_vendor_id != PCI_ANY_ID) { + if (vdev->sub_vendor_id > 0xffff) { + error_setg(errp, "invalid PCI subsystem vendor ID provided"); + return false; + } + vfio_add_emulated_word(vdev, PCI_SUBSYSTEM_VENDOR_ID, + vdev->sub_vendor_id, ~0); + trace_vfio_pci_emulated_sub_vendor_id(vbasedev->name, + vdev->sub_vendor_id); + } + + if (vdev->sub_device_id != PCI_ANY_ID) { + if (vdev->sub_device_id > 0xffff) { + error_setg(errp, "invalid PCI subsystem device ID provided"); + return false; + } + vfio_add_emulated_word(vdev, PCI_SUBSYSTEM_ID, vdev->sub_device_id, ~0); + trace_vfio_pci_emulated_sub_device_id(vbasedev->name, + vdev->sub_device_id); + } + + /* QEMU can change multi-function devices to single function, or reverse */ + vdev->emulated_config_bits[PCI_HEADER_TYPE] = + PCI_HEADER_TYPE_MULTI_FUNCTION; + + /* Restore or clear multifunction, this is always controlled by QEMU */ + if (vdev->pdev.cap_present & QEMU_PCI_CAP_MULTIFUNCTION) { + vdev->pdev.config[PCI_HEADER_TYPE] |= PCI_HEADER_TYPE_MULTI_FUNCTION; + } else { + vdev->pdev.config[PCI_HEADER_TYPE] &= ~PCI_HEADER_TYPE_MULTI_FUNCTION; + } + + /* + * Clear host resource mapping info. If we choose not to register a + * BAR, such as might be the case with the option ROM, we can get + * confusing, unwritable, residual addresses from the host here. + */ + memset(&vdev->pdev.config[PCI_BASE_ADDRESS_0], 0, 24); + memset(&vdev->pdev.config[PCI_ROM_ADDRESS], 0, 4); + + vfio_pci_size_rom(vdev); + + vfio_bars_prepare(vdev); + + if (!vfio_msix_early_setup(vdev, errp)) { + return false; + } + + vfio_bars_register(vdev); + + return true; +} + static bool vfio_interrupt_setup(VFIOPCIDevice *vdev, Error **errp) { PCIDevice *pdev = &vdev->pdev; @@ -3067,91 +3160,10 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) goto error; } - /* vfio emulates a lot for us, but some bits need extra love */ - vdev->emulated_config_bits = g_malloc0(vdev->config_size); - - /* QEMU can choose to expose the ROM or not */ - memset(vdev->emulated_config_bits + PCI_ROM_ADDRESS, 0xff, 4); - /* QEMU can also add or extend BARs */ - memset(vdev->emulated_config_bits + PCI_BASE_ADDRESS_0, 0xff, 6 * 4); - - /* - * The PCI spec reserves vendor ID 0xffff as an invalid value. The - * device ID is managed by the vendor and need only be a 16-bit value. - * Allow any 16-bit value for subsystem so they can be hidden or changed. - */ - if (vdev->vendor_id != PCI_ANY_ID) { - if (vdev->vendor_id >= 0xffff) { - error_setg(errp, "invalid PCI vendor ID provided"); - goto error; - } - vfio_add_emulated_word(vdev, PCI_VENDOR_ID, vdev->vendor_id, ~0); - trace_vfio_pci_emulated_vendor_id(vbasedev->name, vdev->vendor_id); - } else { - vdev->vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID); - } - - if (vdev->device_id != PCI_ANY_ID) { - if (vdev->device_id > 0xffff) { - error_setg(errp, "invalid PCI device ID provided"); - goto error; - } - vfio_add_emulated_word(vdev, PCI_DEVICE_ID, vdev->device_id, ~0); - trace_vfio_pci_emulated_device_id(vbasedev->name, vdev->device_id); - } else { - vdev->device_id = pci_get_word(pdev->config + PCI_DEVICE_ID); - } - - if (vdev->sub_vendor_id != PCI_ANY_ID) { - if (vdev->sub_vendor_id > 0xffff) { - error_setg(errp, "invalid PCI subsystem vendor ID provided"); - goto error; - } - vfio_add_emulated_word(vdev, PCI_SUBSYSTEM_VENDOR_ID, - vdev->sub_vendor_id, ~0); - trace_vfio_pci_emulated_sub_vendor_id(vbasedev->name, - vdev->sub_vendor_id); - } - - if (vdev->sub_device_id != PCI_ANY_ID) { - if (vdev->sub_device_id > 0xffff) { - error_setg(errp, "invalid PCI subsystem device ID provided"); - goto error; - } - vfio_add_emulated_word(vdev, PCI_SUBSYSTEM_ID, vdev->sub_device_id, ~0); - trace_vfio_pci_emulated_sub_device_id(vbasedev->name, - vdev->sub_device_id); - } - - /* QEMU can change multi-function devices to single function, or reverse */ - vdev->emulated_config_bits[PCI_HEADER_TYPE] = - PCI_HEADER_TYPE_MULTI_FUNCTION; - - /* Restore or clear multifunction, this is always controlled by QEMU */ - if (vdev->pdev.cap_present & QEMU_PCI_CAP_MULTIFUNCTION) { - vdev->pdev.config[PCI_HEADER_TYPE] |= PCI_HEADER_TYPE_MULTI_FUNCTION; - } else { - vdev->pdev.config[PCI_HEADER_TYPE] &= ~PCI_HEADER_TYPE_MULTI_FUNCTION; - } - - /* - * Clear host resource mapping info. If we choose not to register a - * BAR, such as might be the case with the option ROM, we can get - * confusing, unwritable, residual addresses from the host here. - */ - memset(&vdev->pdev.config[PCI_BASE_ADDRESS_0], 0, 24); - memset(&vdev->pdev.config[PCI_ROM_ADDRESS], 0, 4); - - vfio_pci_size_rom(vdev); - - vfio_bars_prepare(vdev); - - if (!vfio_msix_early_setup(vdev, errp)) { + if (!vfio_pci_config_setup(vdev, errp)) { goto error; } - vfio_bars_register(vdev); - if (!vbasedev->mdev && !pci_device_set_iommu_device(pdev, vbasedev->hiod, errp)) { error_prepend(errp, "Failed to set vIOMMU: "); From patchwork Wed Apr 9 13:48:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044681 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 98CB3C369A4 for ; Wed, 9 Apr 2025 13:49:36 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2VnA-0006Cz-UM; Wed, 09 Apr 2025 09:48:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2Vn9-0006Cg-Q7; Wed, 09 Apr 2025 09:48:35 -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 1u2Vn7-0005c5-N2; Wed, 09 Apr 2025 09:48:35 -0400 Received: from pps.filterd (m0127838.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5394KCkY013833; Wed, 9 Apr 2025 06:48:29 -0700 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=rR9V28JDgt5opNsu9/R0xl+qLHN6JE+OBMZWRsZR4 YA=; b=t7k4uHwqd+4WNADf9xRV4eDG82TQDp1bkLyA+HocIkm+UpR/qR3AUmuz5 joBwhwqgYZaE7Acvhp0RZywunNoNYjVLWID+Wed+tPSTCpCuTUIwNtkzhqYeoBos 1HrYnBqAbl6tEZj7B0dl4+L8ke30VqcwB9eAbbOmlWz4usY/8xUFAO3nq6YWfz5/ MtNkegYRcXq1rCfEJ3clpLvqXtxZpIbCCzFwIL2GI6Tonh2Zzj3ATdMqMT3HXOhe QKsX8jBM43IpbI4muLOr+CLWDkDyTvz+qVSVtR83MZJPuiMMMgO9NAWBqFBCziSw pjUZcJe2ov9tmQOsmwGVKRxy7ZzBQ== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazlp17012033.outbound.protection.outlook.com [40.93.1.33]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 45u42xhapg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=owfV5GBL/MZtd9Z197d5OfTS/uZTTT2oqPwWsstOJzoLtZo6o4pGxk5RWEwKv8H5kBiYq9gCqtcD8f2hIeUSXZviWuBhRt5lB6kh9CJBBD1rS0qTjaeqmlxVMzQhMVoU6xD+DsznssKGRPNx1USo2IgdRdNayCc97W5p4qPkEf0CkVSqiPAcjTHok35+gLcB2L/A2Yo+/YI6Ul52qllawIiqHATMiXfwV29K6TMLTS9DxHFmYPo6YUopouxvJoFqFdI7o+eqXbACfP+n3eYRQXOgwWm5cCFigOd40Wj3c7zQppsG8dmmg+g1ouqoxOx27yybYOPjT8TkVvcM+pTi8g== 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=rR9V28JDgt5opNsu9/R0xl+qLHN6JE+OBMZWRsZR4YA=; b=XpyOgLNNYq9qofeew5xOpGOhbkefRq2r0P2NWAh9GAKBTq9lMlr+my6WaSHdx13ekCHqrm6nPkb1YFQYQUAVo7HpYgQpzpgZYkDBdylYiXRkmUYESSmENLYBlKlWF3gpAwLbYoQqft4yVaXXVplGytXe50fMSW695PNow/Dm9W0nOxBBGWmc/jTM+Flytc8hz/uUxH6aObrIFrDbx9H9VOMeNRzqE3b+iLB5JhaybbzhPBcUBHvMu63HZISJrE/onlQH+mp1DD6fcOxwZvbD/vyeyBmmfQlywBYkaJKcde3dIzu9FTgSxkF4xccbqTquMp6XW8salSBghG32aRgZhQ== 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=rR9V28JDgt5opNsu9/R0xl+qLHN6JE+OBMZWRsZR4YA=; b=zCQbJQ2oszA+huHu1z/0nZ9XSl/OES/XkW9PUgeNCcrkDmQmKj16+u+oEuN8nHNsF/lDi2DH/0qF4JxNe4zCKiB4eO3JFkF5KlfvzLiwxVSEJVc+K9eFpQopS9caa4H/X6U/b3ctBeC2oiya6z60k2QHZ0MEbdGsDyMqS2Y9F5aqj9DQ8jslvsheJv+SIEgrkSUbe9XG2u50Xit8WPKnRDVfPb1j2RJdZgf3ueMWSEM21rDvO6Ffft7a83WqXnzv8uIVq6+f0TTKL0VMGoXrW69Un+UQHQWpfaISjGUBG2/UfF41OgYnt8bph53ThoxKkVZmAXYRckyFOhQIAdcuqw== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by MWHPR02MB10356.namprd02.prod.outlook.com (2603:10b6:303:289::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Wed, 9 Apr 2025 13:48:27 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:27 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon Subject: [PATCH 03/14] vfio: add vfio_prepare_device() Date: Wed, 9 Apr 2025 15:48:03 +0200 Message-Id: <20250409134814.478903-4-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|MWHPR02MB10356:EE_ X-MS-Office365-Filtering-Correlation-Id: 5c4d7640-bdc1-4508-5079-08dd776d3463 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: /zRmNKfUnV9eRVcG5CqtFWfE8SoKJnCGHsSAXZ8i+qO1UFtD73qjr90ko4Uz1um6uZ18I9VASuwhfmbrY5dRNtpSMd0UnPH/yUv9XllC0zAxl8ualhPmBqTHxLbeXP85ftFRDeFgQU5s42eeFv6MYs9vJHQBA0LMLQMc8jaEzuuMxrtjj87NM8IuksRgjWfosTn2JODbCc6mDfC09alkYEMeDDR0oQCVKlXsDJ4uV8hyMcO1unExKgcjVcAP4Alx6aKBlra5XyAopA+zn2+vaKfl8oBHsXpKFbvZyn44IZyu0lFZEi7Zm2z44pJtddJsaS3ldaIqc0K78m4nLEWwmrnDIIYWmp7DOtB+cjyScor1hROfx3qqelKEVWeb4ssi2rqGahAS3jxY6tHBqT6YY62a+i0zbdUMshZxMOQGASMG0PbsHF8EVWJ56ESDUph1Y+Dp0dl56yZwUmdsJ1+d9O2MC0KIYc+ijIszrJ+RA5ZreSPjCh/snpmWFzutXQIoGl/VhsDvO+fCoHX+4HlpagFdXIEviZArWEGCluaJuxC8uK8knHqbOU67Tr5yNbPUFheey9TVbUAEor8+4DkmqYayzq5d0aGJPQ5G+rbC7LvPAMcTTFtT3VPC1hEfm0cJ1iAs9k7VR+WJfBS/20j44gJw4ONjErt7cXWffTya9JJDrD6TwN7E8Dz37NksC2KUQCrDqYVmV0BvjaOSR/klbtR/G8X7c3s/ZE11BVHQE4iDPdVTRAIUZbpAA7I5GvJhciWgSu3NJCKfYVOnuzcLtkdi87uEauGO7xhGurYscLb6vAv/rxko7g3S8YhFZDq4t0yakNl5HRRrxwSJu8iNS0Gpce6xkhx315hKYs75/j/ZCBRiQFeH6d8iyE0O1S5PMSy9gQnIXUApJBNnL10f4TBpOkpYBHW3cAez0DRLhKKVJ9Gr+TlRGDo9UaaxbxAK3LROrT+eGNatwbxFpBT0yLmB2QdV9xkNh9UxeJKs5SF/D5xOD4VwjVUUpiDOpOzE1TOEwfSUHtsXMdyY/OwVroDNfCcahLfNvAXRlc4b4xc+iw3D40AWNrB3ZK44qdeeJ8lVuyNDz/2JXcg767D6d5W803A/qr++IRFVyb7Q9bJ8mz8ZJrg0Tb3/MGvnyPqFzd+PpQSmdaXYPLi+2bexnIhbo5oJzfmJzw1R25L24gZrgvx9N5wUVUmOFE2YUhcWnDOhxE3eeDqslpEo5zpY2XcWo0a4DknIyIqM496ZPNTQsE0QLWzW14tcZBZcJCi0xyxgfByW2+V8A6BgCjRr+oH4LTR1IDBrXV8gPHkuuDV5Zi5Nq+Ibov8kbXStJieVjCWiEvNrhrdFvzCCZqv/KClJvPwjTVs1I6CkVjk3tpeN94mKqeBoiGEfO6BS46Tt X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(376014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: VMpTYSElSRXZhLGn3L69DXxRI4UiEyouXvWawHlESoxn2OJdO6QKGqgzUlS9BPR7MBrQaMjJDsk9MtwFY4eL7U53P8Qnu5xiHQUyRmxioOxI8hyKtWRYBYs3wspn0d5y8oZ9N8th/YjKwpPbn9wQ6MrEQvk9/JAGUYeyLFwK+1iSOj8A1cfP6KvtrRKgD+WmyXtMRsmvjLpWcJJdm6/zGSf5V3M23Uh0wb8Fgur451USTWwf8Sc9g+za5sJE8QbhEbZt/WkS+dpyWG98tvLdFQVoDai9DYXv8zfPBV/A7yqQ3EEEVjYf+aP2rh+bizOVE9c2B803bnvqqSbOI4fsC+SDyISHKAHAa2iAfnG2HYqwQOWPvnsTjYw3cRJdg20nvFbAVKWxY2a6vCOY+eQR6SYwyEB6o4vxx3dMuKJbeDb9js/6IyJ9KSxyeNtsFl3hEK8WUzEPL8oAGZDBhSqSLbj5Yfr0C34RJHrU5qrdvDzVFJt7EA123lw+ki9G+QZ6IFhO2gM0/mUKab2ISmZ5fAmG3aepXLltcx4BCJ9FC1Hh363wxS5QUwjwzSdv/QJ67OyR87KIhEf4XyyrwUuhHyZIBcysvA30k93tMdnAvOfyDQhD3kxQmfhatX0+KFtw7ky8lMMOdaHGBeokBv5qRQurt26oT7JCk05pUWdVZbCyxVq95x7IseC1Uw5Z+UrCDFxhOVNeMY15Tz6UtghxZo6ym5VsRrdhLK7YmXlha1yxi+NYUR97p5s+4TbAUVfJseZEKxGkhDgrW05S/D5s0a6l2fqVDNVD/5kSRgILQyl/3etNc2nDbZ54e7EvteDKmWER/E+oSQuIk/xYTbCXfe0avaupZJM7Q20SW6VrF7N4uMTEg6ZnmQxeEPeCpwnQtTYrdKKWC/Qd1n4ExoA/uUia50bUqYIdOfhJD1wPZ5V6VJwfnJ2FNKMIWKLII7EDGuAtSQMJfvC1KUy64s16cTrMGzdLkVUG7i14Cnj0WRLrR4uS0+hZ1hfD8ZQP8N2xcWwT1EPQbJNoNiR7O2zlAfAk0qenboQGvWMo/cLBWScRdNgNdJ+ehaUTpCfleqVmkNpa/WbKNLI6RzZDQFIOBpm6tc8wCYSpDElnbGgZRruB/QfD3fLiBednzS/Zn9TCQNFp17N5XghlK82sgCOWko82eaLJ3oTCy6rzYeFUG4cQTDWhEvuH9e96DcdJjyqjU8FHe6oKWEJ9VbgoqRq8RPJTgjgAdDKvVd0TswMnXqXwoL9mOl71HcyUd4tBkV1c4IXKPwwuTERfMMN2yLC6fc8YLuiMsYJemFndATaw+vtB9vZI2Wwyfqe9zyAoBJ+SxkfW4ljcEW4D65fZNzBTBAPqbMDokwKpOvSGCrIcWF2sgT8qfy0ZYO1CzIdCXzXVItN+yIiXVOng19azv1rkI0qEbPBZV/QGo3FXYupqA8flB+XSrZsD67aqDHw8YzbnOWLOLCO2FHNi6C1q3nyA98C2x0hzyGMRT9cTjnQlsChrpLhC5+pel4QXI3iB/O4AERTkAYJYfYje3CcmGVvA/CZQZSdSpQcNCPIK6c7pHGpZ2SjAjo03xiK0nfu+1kWX X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5c4d7640-bdc1-4508-5079-08dd776d3463 X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:27.2080 (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: 94/ASm0ilQZUo9UVt+DBVlfkRhTnhwdTTfxq380cid7raIihrrkUCnQTLRuu+2ZjDm6kI0NeYzI615k+oBef9g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB10356 X-Proofpoint-GUID: XthCq4EzMPmiIi7wVMEqtVULCaPtMK9K X-Proofpoint-ORIG-GUID: XthCq4EzMPmiIi7wVMEqtVULCaPtMK9K X-Authority-Analysis: v=2.4 cv=LMxmQIW9 c=1 sm=1 tr=0 ts=67f67aac cx=c_pps a=eo5EBrZojstUK48b9mIPDA==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=PEtKgAuwMexoxjSetS4A:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.151.68; envelope-from=john.levon@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Commonize some initialization code shared by the legacy and iommufd vfio implementations. Signed-off-by: John Levon --- hw/vfio/container.c | 14 ++------------ hw/vfio/device.c | 14 ++++++++++++++ hw/vfio/iommufd.c | 9 +-------- include/hw/vfio/vfio-device.h | 3 +++ 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/hw/vfio/container.c b/hw/vfio/container.c index 23a3373470..4fc181d33b 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -811,18 +811,14 @@ static bool vfio_device_get(VFIOGroup *group, const char *name, } } + vfio_device_prepare(vbasedev, &group->container->bcontainer, info); + vbasedev->fd = fd; vbasedev->group = group; QLIST_INSERT_HEAD(&group->device_list, vbasedev, next); - vbasedev->num_irqs = info->num_irqs; - vbasedev->num_regions = info->num_regions; - vbasedev->flags = info->flags; - trace_vfio_device_get(name, info->flags, info->num_regions, info->num_irqs); - vbasedev->reset_works = !!(info->flags & VFIO_DEVICE_FLAGS_RESET); - return true; } @@ -875,7 +871,6 @@ static bool vfio_legacy_attach_device(const char *name, VFIODevice *vbasedev, int groupid = vfio_device_get_groupid(vbasedev, errp); VFIODevice *vbasedev_iter; VFIOGroup *group; - VFIOContainerBase *bcontainer; if (groupid < 0) { return false; @@ -904,11 +899,6 @@ static bool vfio_legacy_attach_device(const char *name, VFIODevice *vbasedev, return false; } - bcontainer = &group->container->bcontainer; - vbasedev->bcontainer = bcontainer; - QLIST_INSERT_HEAD(&bcontainer->device_list, vbasedev, container_next); - QLIST_INSERT_HEAD(&vfio_device_list, vbasedev, global_next); - return true; } diff --git a/hw/vfio/device.c b/hw/vfio/device.c index 4de6948cf4..4d940ddb3a 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -403,3 +403,17 @@ void vfio_device_detach(VFIODevice *vbasedev) object_unref(vbasedev->hiod); VFIO_IOMMU_GET_CLASS(vbasedev->bcontainer)->detach_device(vbasedev); } + +void vfio_device_prepare(VFIODevice *vbasedev, VFIOContainerBase *bcontainer, + struct vfio_device_info *info) +{ + vbasedev->num_irqs = info->num_irqs; + vbasedev->num_regions = info->num_regions; + vbasedev->flags = info->flags; + vbasedev->reset_works = !!(info->flags & VFIO_DEVICE_FLAGS_RESET); + + vbasedev->bcontainer = bcontainer; + QLIST_INSERT_HEAD(&bcontainer->device_list, vbasedev, container_next); + + QLIST_INSERT_HEAD(&vfio_device_list, vbasedev, global_next); +} diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index 48db105422..1874185fcf 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -587,14 +587,7 @@ found_container: iommufd_cdev_ram_block_discard_disable(false); } - vbasedev->group = 0; - vbasedev->num_irqs = dev_info.num_irqs; - vbasedev->num_regions = dev_info.num_regions; - vbasedev->flags = dev_info.flags; - vbasedev->reset_works = !!(dev_info.flags & VFIO_DEVICE_FLAGS_RESET); - vbasedev->bcontainer = bcontainer; - QLIST_INSERT_HEAD(&bcontainer->device_list, vbasedev, container_next); - QLIST_INSERT_HEAD(&vfio_device_list, vbasedev, global_next); + vfio_device_prepare(vbasedev, bcontainer, &dev_info); trace_iommufd_cdev_device_info(vbasedev->name, devfd, vbasedev->num_irqs, vbasedev->num_regions, vbasedev->flags); diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index 66797b4c92..1a2fe378d0 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -129,6 +129,9 @@ bool vfio_device_attach(char *name, VFIODevice *vbasedev, void vfio_device_detach(VFIODevice *vbasedev); VFIODevice *vfio_get_vfio_device(Object *obj); +void vfio_device_prepare(VFIODevice *vbasedev, VFIOContainerBase *bcontainer, + struct vfio_device_info *info); + typedef QLIST_HEAD(VFIODeviceList, VFIODevice) VFIODeviceList; extern VFIODeviceList vfio_device_list; From patchwork Wed Apr 9 13:48:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044680 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 54223C369A1 for ; Wed, 9 Apr 2025 13:49:30 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2VnD-0006Ef-1A; Wed, 09 Apr 2025 09:48:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnB-0006E6-P2; Wed, 09 Apr 2025 09:48:37 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2Vn9-0005cy-Vs; Wed, 09 Apr 2025 09:48:37 -0400 Received: from pps.filterd (m0127843.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5395qVMw014865; Wed, 9 Apr 2025 06:48:33 -0700 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=mZA2n6ehrTVXpqxxxwJ1IW1hpnQOvilZbBpsRGeOO jk=; b=a1KkDFQF7PUTr+L6p7gnlJsdhBYZchyLYyHyZvklR9z27smcXBECh0POu srv8VRXenpogO4sBeJUMfKJboroEsGk5Kb1I7bN98GUk1igiIcLNMiZZPxMf/RO8 VA9MomoJceevENjVtymNRgIhH2C+2BB+td1QOqgb/bgEKsGYAP41WZN007HDIslH 4toMFAo1Ke6FMII57NGv0+lTb0Uy/KF7whi2ujLkaS2K6m5xT2QQjjolvlcz37Pb 351F9wgYA1zvkbVtXmFzYtJ9077WI/Et/4WL2rw5AyhCtCYa+koSUIiW64rl9kA4 dWyARX9QN4P4BFjb5+lFLl+Fm1IVQ== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazlp17010007.outbound.protection.outlook.com [40.93.13.7]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 45u2mhj3j0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uA/SqNzgu2OAnPjCPcI/PbacBCy/3XU8Amu/cdZXndiQ7iHmg42DGxYTol0F+q6h1JmDr9gYE6jOUO3mZiT8VgINSyGcLX66lCsBprffh0ba1O6MBMUnN5vZzRsD4sqwSbfqqFd45L5lm1IUoXQhOEL9RIbqfj2d76l9d1DX65vT7FciKQtP2QP0qiAsGDghci6aG96yxDr7HtCkQSDShPpaAShQWzTv/E77DBb7I6dXRcBmZrSEx5Ikq8lExFgbhc8adXzuygyez3fgGLqOU9PkbleiTYFGsMhW/T3I/zK+CibbyIl4bnY/u0lw5kH3O6TgOdNvF9NNh7d+XmuIbg== 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=mZA2n6ehrTVXpqxxxwJ1IW1hpnQOvilZbBpsRGeOOjk=; b=NcIilVakMaS9orUQR1cLbtgZZgTp0uHh65sXSuau1/cs6VhP7j3hnOJJytlinFq1xLqCGtVkWv78LU7OuQlfX66WjNpoHQWFl/pRnWQR0fkwYrMpgONXvq0Ygn7yY9fhjaxi3sIyMVsfgEtW9lgoDuIT436TC4ACEMHqHoKgpVfCmHEwrNR1s5tLe+UFD17MfKINhZtBLMbyxU/1sNSXVz9uDpPBXbcwb3xY7+BGIhvt/ZLc5NnJq5nyEe+9HzrO0anxOogbFPo/UAwSyBBF9tT85TgAZJT6pfM/ozXNfMdWDuOtB5E4ldv/cSBT3U3TFhgKCqS9NnPNw2rK3pCFEA== 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=mZA2n6ehrTVXpqxxxwJ1IW1hpnQOvilZbBpsRGeOOjk=; b=KCz1BN0OVDMB7GACHRkk/DJ4Vr+V5gYq3ixOo2v8ZDpmD667SbXHHK5FyMx4BoPC2kBFiqqlg11bYTr67sEkIh8nYAxcEqtuRo517dSCAlcPTvlaea+UYkLKxfHspJ+keV8oX8Or1aFsEEo2GCg6IFZlonjsWTckoi9cJOi97xBQhhurBzjTdqiw3aB6PEVHB7J6AACxTz7QDC2W8esmmCkz9iHw15ZHQQQcXnaQtb4Ej2i44tqd3PtigY+WM5psD2XBV3KkyiJnPvLxJYW5JmJXg3sMZn6cstIwLa9ZYOAkjizQ7AFVwsqeTTZHWgzIH/4nQg3D9sMkI6CD+vKsmA== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by MWHPR02MB10356.namprd02.prod.outlook.com (2603:10b6:303:289::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Wed, 9 Apr 2025 13:48:30 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:30 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon Subject: [PATCH 04/14] vfio: add vfio_attach_device_by_iommu_type() Date: Wed, 9 Apr 2025 15:48:04 +0200 Message-Id: <20250409134814.478903-5-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|MWHPR02MB10356:EE_ X-MS-Office365-Filtering-Correlation-Id: e050a559-507a-4ba0-c396-08dd776d362a x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: 1CsPNWXg793sSXCwgNpWsluB0QsFYIzJpcnu2IbHZq8nlBG6SLIfnUYW3e6bHvHxSqlObRlfaOl/fGUjMqiUUYKcF6fcLazq+A+ZF5r9WCFkQWwA7erCWaW4b2XZkiBsuKS3eQA9rnr1+FSGHAVohw4pD2QMnPd7mFCsrvZEHLFIpctvVUBId+fF1ka3afUKmaW5mUZeb2b66VbsoXtvCMOl6hgU1jo374FNTC07aooYJqie6AZhUZ2tvUf8fMjTdTzVGQFgyUqYsFEkEgEi9se7P+aTqdLD8r12ZAm3kKHYaHCIb1Cjxry3qscMYBvBXbixyOdfEOYu8U8YkrtmT3lIumuO13Xf6896pdvgY4OhXfshzK9FNlXC34ellBGAUFGG9dI57AB2A18WFPUlASjtyotBLUjIkDgCebStIrB+dIWqH2LLl8S6VLj6pE4wJi7MLAxXDFbeHBew1QMoP1pVgooBFIM+8DvBpQXgnXw7Rd4TnEn0s2cc6OQCb/k02Aw3NZ5JYSl7cj85Ypd+tUAYYy2zTbUwPPqLxCCj7CYVwhUSXzP4uXBW9TWq8XYz6GwtUPoVYcnyfA4/2d1kvzJLqAhdPQkDFn67gl+1Fk02CwKjR1nAWrT6cF86dfUhEIXo2SHs8O7o/BIm547XLpSPIjR5O4DufzfyChJ3fzsOQ/OGlWsE6u55FpVlDiHOCM+CSKtZWiL4pJlWEcCLZupk6F9aorqP+HLl9t+SKGbJfH6tTPTWuMzkzJjQ4IRf/yOrUAO07AEC2PxBxzLUy0M+PPQKJEocADqL33IMjgSRel26ON9PxwsSW1QJ8uu/aZZ8ovpyivsJen0WpzSkuLIxdYWIR1sKLBsDzCRRncvMo4RBddn7tGk5MRL3LuB49AyhsvzLZ19JdIuGPOiaqGmKKRYa27W4ash9Ry+nQJ/Zwd077yFwxqzTfN+P0LgRYc5paIYApP4lwbdkxy6nLcVRl2GRikxmVycaORd5XVsfCtKm1xANofYUdo1BjS7bAIVhhE3YDUZJQzwI8goHk/CgeOICDSBwZFcbFF8zG8UtuXKYWGJy7BvLBTDvbi2Cvfov1P/KUpLwGPHNKt+Wr0bXibuI6U9vIPvye8F6SLlIjtUb5caZ/cVPNT0/PXV8b2/eGoWaGoYpAnhVNw8xp1B+TeiF2LWYBSQrTS7LbpGyveNilDYG0fzgKWJ5WsVEXqI6kZsJk0Z8ZchmDqqVZUH+mWbWWD4aiYkBr0JYA2C7imTwL4U1XfvyoCAErm3LGhUnDUmFfhOnVG9z6IsVmcKoWOHGVQLUWC6tm1GnrQrKMSrDvY/IROQuEo84YwAVLFKfhAeLG7BkQU+dG4OsxDO3T8BilKCn4J4Gga8TbuFcYsGCuIb/M+QXXiAehmLz X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(376014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: VA7vayTUQ2swH4LhlqCEr+zMnXXSJArx8CAF9EPGwqD1t6cyVWTvEHHCMwp22P8uObPTUaw5wh/yhswBro+dB261rU1idC1yy5nnfqmr/ZrtLaEh3w+HP3iJWgHv+drV2/MEY4BlEmcyxQm02qfPDpTNOt87+zE3HAx0afW2p/N1N6NLXYv7vuJvgF1uwso2LTyLiIwmKQMluhgV+ldJJII+wcG9C/+fdFdugFJBJ7iGvmTmXtrLPZMdt4hZaWUzkSIw1m37WXpOxZDM4QAHnFMyt8qbrtcjqMdVf/9VNGhWnSedhgfjuT5kCyG4gIN2v/e5vxFdzzoXO8cvbzx8K1+guVBQyITd6vKay+zMot2uhAKLAmx7NS5o32Ri2IMBWVLHbR6j0xpt0sKj5xVTxwytdI6dUeqDp+Ut9DjN+X5JXkppXd09d6Gt3aMvuKw4lSKjbgR0FCJcXJwlrvdUxcH6efGvOp+qIuUSPjEEvJf7e3u24cpDosMY/Bo5Pqix90UAhzMOROAMAwiZFsyWIGudsrQ3x+QkRl8g4OtobJWlBfOi7i5BcgOiW599dlZkzjAx17jK3Jeplv1YW1qSoJ6DephxzP/4EZ23QNhjT2ciDrj/1hmZhv96o/Cy9Y9KfLs5qjfWMPbzuKgW6pTuHntN8rA0Bl8eoy9p2wvIG2qavL2rsyxMyFUmwBB5uWuGDSxl70VDR9DiTuooDmt3QRXn6ouS8YaANuYEWLv8aLYizPKzPtPPHbVr0fWEq30EzZy7KhKHHO/RoDjYeWQL6SZY+z5xkcuAR8NsYKOOfhfwCsiTftMvJrddeRZ1/uch8PePIPvl8KHU258CimLO70aGUV2r0+/abiaBFSOI0UHBL0IdC3NyVaPmsxKVrVRzfumO1T+viZ5Fg1wD1TPbN0kdnnCPTp5O23yq0bq3q6m/7d1GD35kcjGlR14MXucDJ6d+VsWeMg7OLsjljRcYCwFbarv39kFfHB8wqfrfQVWvHGotJjY8OvoJNLOd/HS9D1oh1h0xf72vgzlXdbH1Fgm4MbApG0LWsRAe+MX1zQjyvA6igM7ZYc9k1u/nndAKxTs5rLQk3KyVeu20Ab2eU0I6cIeBuAw4FazxgAwxLuLb7aFTO9gGgmp3rYN/WmnZ6O6o/hatesEykJfPyRSidT0VTanorYoELZHK5lcqZoJYLu6/kTkMNfvY+NIKk5wqykkNI6P01hwC3qUl8ObLqJHflsr5Q0HfkhSucjnZEXem02altBkqVTu4DlKyur9Fw3OwA3PTU9WqbbuFx9BJbLCLnSGGjT0+GINLlN9qr86sGvmeVJJ5fbYHizZSjIkk/w8x1FZEIuIy7VTY7zmp9X6UqMyUz/cOpoACwPAuOM4eoCK5QqfU01BRt7TdNDGDyae+NeTtEMuBNXasNkK/wlkghCY0kuXx164OUPR43qkyfPrA1USL0elvpR59HYzbaMtt/NiWq/yxsRAiXgXFreNhPjYKFMoC0S7LpSt+DF/ARWuaq3i66xMUyKQzPnWllImbcLJDtOT6LeconALtlsqrMO1lHfzDFbgmA5Yq1qwEZwJcbUN+CS9N2Hg389dP X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: e050a559-507a-4ba0-c396-08dd776d362a X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:30.3381 (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: SmsvrJIhZvxrCB+OiCDI80bgjXXEYRb4kBEv2AoLS3IFEvj6VwzR5zfkeiE0aDTiYkapq7CKubHAlTJM+vLENw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB10356 X-Proofpoint-ORIG-GUID: 6ArF63Poiy_p5Eudyha7ylnECJujuTS_ X-Proofpoint-GUID: 6ArF63Poiy_p5Eudyha7ylnECJujuTS_ X-Authority-Analysis: v=2.4 cv=JPI7s9Kb c=1 sm=1 tr=0 ts=67f67ab0 cx=c_pps a=DEmxRycgAktlIQzUTPloew==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=iLcevqm78QRhCGJnTJkA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.155.12; envelope-from=john.levon@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Allow attachment by explicitly passing a TYPE_VFIO_IOMMU_* string; vfio-user will use this later. Signed-off-by: John Levon --- hw/vfio/device.c | 24 ++++++++++++++++-------- include/hw/vfio/vfio-device.h | 3 +++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/hw/vfio/device.c b/hw/vfio/device.c index 4d940ddb3a..f74b9c25ea 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -367,20 +367,17 @@ VFIODevice *vfio_get_vfio_device(Object *obj) } } -bool vfio_device_attach(char *name, VFIODevice *vbasedev, - AddressSpace *as, Error **errp) +bool vfio_device_attach_by_iommu_type(const char *iommu_type, char *name, + VFIODevice *vbasedev, AddressSpace *as, + Error **errp) { - const VFIOIOMMUClass *ops = - VFIO_IOMMU_CLASS(object_class_by_name(TYPE_VFIO_IOMMU_LEGACY)); HostIOMMUDevice *hiod = NULL; - if (vbasedev->iommufd) { - ops = VFIO_IOMMU_CLASS(object_class_by_name(TYPE_VFIO_IOMMU_IOMMUFD)); - } + const VFIOIOMMUClass *ops = + VFIO_IOMMU_CLASS(object_class_by_name(iommu_type)); assert(ops); - if (!vbasedev->mdev) { hiod = HOST_IOMMU_DEVICE(object_new(ops->hiod_typename)); vbasedev->hiod = hiod; @@ -395,6 +392,17 @@ bool vfio_device_attach(char *name, VFIODevice *vbasedev, return true; } +bool vfio_device_attach(char *name, VFIODevice *vbasedev, + AddressSpace *as, Error **errp) +{ + const char *iommu_type = vbasedev->iommufd ? + TYPE_VFIO_IOMMU_IOMMUFD : + TYPE_VFIO_IOMMU_LEGACY; + + return vfio_device_attach_by_iommu_type(iommu_type, name, vbasedev, + as, errp); +} + void vfio_device_detach(VFIODevice *vbasedev) { if (!vbasedev->bcontainer) { diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index 1a2fe378d0..3563a82ede 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -126,6 +126,9 @@ bool vfio_device_is_mdev(VFIODevice *vbasedev); bool vfio_device_hiod_realize(VFIODevice *vbasedev, Error **errp); bool vfio_device_attach(char *name, VFIODevice *vbasedev, AddressSpace *as, Error **errp); +bool vfio_device_attach_by_iommu_type(const char *iommu_type, char *name, + VFIODevice *vbasedev, AddressSpace *as, + Error **errp); void vfio_device_detach(VFIODevice *vbasedev); VFIODevice *vfio_get_vfio_device(Object *obj); From patchwork Wed Apr 9 13:48:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044679 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 92403C36002 for ; Wed, 9 Apr 2025 13:49:29 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2VnG-0006HS-Me; Wed, 09 Apr 2025 09:48:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnF-0006Fh-Fb; Wed, 09 Apr 2025 09:48:41 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnD-0005dV-PO; Wed, 09 Apr 2025 09:48:41 -0400 Received: from pps.filterd (m0127841.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5398qFsb032733; Wed, 9 Apr 2025 06:48:36 -0700 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=v5K//WRt+T/iENZNMiiOBN+Y1xrHhw1qE7oHbMMhN P8=; b=QUSkcgKoUqPzMQoP21KaZONjHlg6sWrNDJ58QCiK4aHikbO/ZszZc7Ruz qRpUN8Ck4nwNtyXIzEkObgG3nuyU6tItBA7cpuq0NTJaULx6569GjT/RmFgF0znE 2ewpeBQZEj255rBQg0kNFhuzCK+FnAM95MIShMV/KVgB4U2RkaNUI+glXisDF7Lf yvtPT439LQuKAfh93ygiEjnX+8bRyZhBsjTEsLkCGzBsxu+ddoWEYPRPhDOrwsF/ egQ/YRcQx+VHwYX21zlUVxv0XFO5txZgBpn4f5FBREjoUbi0TNFlcUg/T8hRx/VW 66eUMzWHNIv6sh05cFWbaJRG63lfA== Received: from byapr05cu005.outbound.protection.outlook.com (mail-westusazlp17010007.outbound.protection.outlook.com [40.93.1.7]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 45u22aj4ug-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cCBvr+q1Cht+XZXGVjqDkUL5jZPEmU+DMqrOFr4EY8irECVuOFV5Y62GUPdQ5yonZiaocYGGpypEuE0f96azdZkZh2Th5hnEG8jknEIZ+yyAMskIkmYuPa2HIB6fv1+demAlPSNnWisc1EatBrvbRxxzcDpwRBm+R3lPVSivGbN2db9jp7vfVrl6uBAx6ZNQ2tMdz2u13mC47iwPMuyyJ7IvVrtQerc9WDMlDTnPP+jebA0wK3f5DONkm/FJVI2CK4Jfco5OPaauwscwOJ22iJ24vPMcafIluK9xpPn2aHARW3K/SXvgaz52eI99MnjZYaTavEDkPpLYHyUYAhq+vA== 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=v5K//WRt+T/iENZNMiiOBN+Y1xrHhw1qE7oHbMMhNP8=; b=SfE0ajlsZ6zeQNxMJ7OiILFWs4WAMnZg7z/0AWvpSpOcjNmH4ecXotVG/EtxpZtMU05H+omxwfPHGtp+22G25HchY8LK7WirJj7nw7pEMvqT3iFzrlrgO0ZsdGg/EXn5B8WQAloj6Iyei4MoBl4t5urCNOhyaUFroBaE3KHY6lt5o0AWj7/LUAdTXNcI48lnt14+/q2L0b+f6h//oBKypIEJ9+FWAS1JVvf6SV+9P6xMcpxAljB+3U9ISeMtl+yeEh3PIzw9Cg9LkmQ15HISOfIXAiXjQJUXtZn6Ywgua6KSn4RA0bnLx22imwa5lZQzqHs6kKnE03ySzBkwn5Y/Wg== 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=v5K//WRt+T/iENZNMiiOBN+Y1xrHhw1qE7oHbMMhNP8=; b=RLk9Fvp75iERcooWUjGpyOL6Da46ndai3sp8TZDtWwQ8eXN2zRkv34rqcUfXfyWuGPoy6tM6rGzkh4H+RW5zxxijZQKgeeABdDAGjf21ZfVKtFUqfCRXV99cOIEsQ2QNeC3GVeycrm1fK0vZaX54oA4qE9nF4j/yY1KOdlCCoLJv/b18vs7yp6hP38d8J9g1U9IiXrokgp7IKjgBKkwY1ZKpKkuvkYYq3Aj9gbps7LpgU7oXLz/cjeW8cy1IEM/Dt5JydCgkd9F5ts1MSQaOIOv3JBwMrqxWdSD79sU4L9awugiZUWXyiWseSnl7wVFSU8tLV7IgGazYSXAM0Yb5QA== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by SJ0PR02MB7486.namprd02.prod.outlook.com (2603:10b6:a03:2a3::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.31; Wed, 9 Apr 2025 13:48:33 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:33 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon Subject: [PATCH 05/14] vfio/container: pass listener_begin/commit callbacks Date: Wed, 9 Apr 2025 15:48:05 +0200 Message-Id: <20250409134814.478903-6-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|SJ0PR02MB7486:EE_ X-MS-Office365-Filtering-Correlation-Id: 768d0c1a-d176-4c2f-0c10-08dd776d37e2 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: fMRRAMj6aG/+MJfaIO/DDhzUzCvyU7Atiqor9/3/84uX5VwvgB9SCwQL9mqmsVX/hWrHmlWqwKWdMRyZWCFbscv5wtzHmFXDeQHcba1vxwB2N1rkSwxKHA1MuS9njMqD5S3nC8eX6WyiRF26ezsisELcfVi4LwlSfLBi4KenlLdwCJIPKp317X7uP5eqjTBHV8HCLI4w6gr8M6suvSMXV7Qm1glCF0iTFTH9gknCRP1k7hyB3osLK9QWtuYFPgEZJgyS7HhyCjIiBh5Np0DUXKiehtRmnFWshzEXN6VrSaLN2ldPnVNZdBFjoEjxvGcyoZV0deXHpBCozne7xNWonpAMQuPet9RVGnIZptDs4gTIWumRLbqjrn5oi0527S5RQOsb0YC34vgP6KBnTZ60g13KQJMbE1oBbVcvpf5tTeQNFbtLmmFdMiFnf6vrVI6OBTE1w0iaXm9dNeU0gyklOqJ029YTqveoGTVE9hmTASZ/MTLBAcVZNLWI5yX3uRSE2sORYLxYA7Q5kABaletCCH5Ti4taBZLFpf0ljxj/yMUTK3CyjuCx5p4fMl358Qy5yABYNemECMZQNoVWkmtHhmk6VMTUZ2WZxxvK+Dh7DVT5y48lT2XnTLGFaWWIQz0enXFB1Nhwkm448TGbFY5Ah+SCnBYcgmjUvxA/EvLPgHj3pFwfAKvX13la14E1q4zDs8tZr4QOyRkPS9s4pd+5MpUj7f1XWZGr5tz+9tEgZZrOvk2ll4HnH/R+KKw9iwSJhWRuFmoJirE+/wa0LuoFFqyNiq8vylBULYgx8JM1yyRSI4IYxapM95O2vzWwKZPUwyqbUJRrhlr/Zjt4HS5KWMvcIwIGxXIMYBtDUngg60ter5du3ckF9NkSwwE5zeVLEI6metXf/OVKTbrlfHNUbTzRCUBo6E8u6+13cKiWizX0y8XEcVxK07zwIZ2G1IDhU2r9FT7ZQe5aatFKE+I2P8c8xLrl3quXb27mMc+dC0YAc3weH45rFc3WniE4w8FLbbjIKxbebmPkebJ5z3rSrg5tyF+ecYDZXEcj7yyFANU5/V+LLpTR+EZ9GxBtxLEObzQ9xH7NOWkhRF20XobA4phecAOw/X4cavzKzv0uGxYYp3DK81fmOkQrdVszG761eDw5TRlf9HhXvGs9ek3RXGOK463Y34LMk/CEdtL2toxy6+oKTzapHPFvWqh5Eb1f7x1a4wWOFDj2Dvn7INofIVQ4n+lMiiUMz4iYHXXR7+hxxkncZT5EMtgddwFkb7wBct0lChonGU9oc2zdAXVaavLXdzgj+g6T77xa0KKQigWCLr5hRFTgio9PSVuFu48ZyrmyUrJjZnWJgLRtTR1toR1mSLAIgl/f5uFIEjwQ2n4WYuGEQDdJx5K1kA1glWdPIAONU51IVP1aT/koMzTL/43JWbZ3KOQP4fLkJe+O4Gk= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(7416014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: havs8ND1xjx3H76t6Yh0OMKLPSBHasYqH0haKyf5TNuKqWP9LUYd8YWtIJt5IUYQhynN96hWCVtdikH5Jr9zYZ9qPWk+KwmoGbrRICB/fTiz8FPsU+ZlW76mCSZnt2UgSbEbvEAZD0FMdZZp2/MVOZy9MkTWU6arlw8mzntBsQAoongkYLga9C+PsN2ZtrDhuJglKTojWo5XZDBU+/FRON+g+HFGDhSb7EAhTm1vNdzlvQQD3h+JMZkKi4jrZ9wUTF/C0ByvDReaiymUoMjVReXAfK00q+f51mgaqAc0nkIoulKhVe+Fetzk9bxH4bzv4rbrKTRqEpPeTd/U6ulyhoCb0QvpD/bke5EaiGOIuTlHRsiZEEka97Pw0QuCAVgmXxK64Ba0eggDYXeUQhJuLTTUXSK2EW3I/+ynt17HVHftjwHNu3bkvmp4nI6dhUfsmEXKY0W+5lp+RDRZ2jNhZ4OFMedhgdCXH4Nmmu0syxD2ry/NpeUQfSteuumOldaJhbzI6r4YwKUnBtABGv9zWs7wkPKKl/c63NuqAG7Jpqzdo6NS7qGdZ1dUK5yIfCNK/t5RXX1HVCzWMNzntIht1j7A+Iw3A8wYLao/C7ODllriMjekBGw9YnaJYUDnpv49MyAlq+65BzPBw0bEIXfHOTrTOWeXr2twe8tAUnsY9raMEaBpnNWZW0HuMQ2DctlREmrVoq2YBsSrjgHbSnhhdP6cbOzfW+jHoKZZoHZXep0rUoadZ1nSHxmgJ6W6iMxseoQo/yyBlu4iDgTeDYEGuUrQwHYOOHB3slp35vxmEh1cf3NgBM50hzX/RJyuOXwWMxsTnEzcangdeJDrmc4kXnJYttsoXaHGVW1j370OGCAmIj6H2QLGoeOGgkPyoL6zM5XairqrD4PWv4Ga9RWPiowLzL1fIFtX2g3QhWhr5dOJy4VZR2SLfEslXameItboqIRLFARjvcvA7U+R/GuGvC115n7zK6R56nKoqBFWOe9n0JwKvpSRR/0bF2tPn0mH7zWp7lXqjFSnCCAf3zeRCObF+Ef/6OyiuMqaKrO4oyUfb8XRF2zrRMAYJeudwOlKxF1oqda3hKvT8B+rE6gPPEH2TWMprYRTrpgn6wYd/u4l019xwM/Fm6wfQwLgCBuiyjW4kt9C0lAFoGEMawQctJfpIf/27TiDJVUlD4i5/sSQywF4ymLv+Dt6eTF0P9lopIDNfKra4VCR3KAsKhwWQJTz6F1MrrqE610/bbPtNrXrQEO7yGmqzLaMfezOo+W4uxNvZ80+5JmolCGKyajKvIsq9AdQg9K8/+PQsuiYLeSzs786mzE77zdGbIUNFPBbkQvtvAQyNclhXgahuC4cQ6w+mBLFNThkQmxnZ1a1M7C70Yh/9sFcK9JhnpI1uwJMPtq3UBVdaNdPtA8Q3Wu6dj4qmIRy1EHQ/eJNH74hE9dFB+5GKI4IA0n+B8Cjd4j+ZXbYl4cdBGjqEvvEYZidAUbkP/+3V2QXyPKhoMTO1sXthLWmxjtheBGyCDqWF0ttxS0SY/TwNk8hLtgQ7lApjvWjus9N79qflh/nCwPmjY9XCzSF7NxPxl4ff6vsVy/E X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 768d0c1a-d176-4c2f-0c10-08dd776d37e2 X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:33.2972 (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: tdYe8u8cUpS0WkkHCLJ1asqyS2R11aWahvo+himCIwbtiJ3XAIGB5SWre4uym4EPWGwZBVd4lbXuTGDDtZGByw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB7486 X-Proofpoint-ORIG-GUID: QyNV2ncRbkr07joRq1AY7s6wyljOpUmX X-Proofpoint-GUID: QyNV2ncRbkr07joRq1AY7s6wyljOpUmX X-Authority-Analysis: v=2.4 cv=Xtf6OUF9 c=1 sm=1 tr=0 ts=67f67ab3 cx=c_pps a=+1/HLBYLL4tv2yjlBWnClw==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=vU0vC_IIgwTtBsNJuTcA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.155.12; envelope-from=john.levon@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The vfio-user container will later need to hook into these callbacks; set up vfio to use them, and optionally pass them through to the container. Signed-off-by: John Levon --- hw/vfio/listener.c | 28 +++++++++++++++++++++++++++ include/hw/vfio/vfio-container-base.h | 2 ++ 2 files changed, 30 insertions(+) diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index 285ca97a8c..9ffc2deb2d 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -412,6 +412,32 @@ static bool vfio_get_section_iova_range(VFIOContainerBase *bcontainer, return true; } +static void vfio_listener_begin(MemoryListener *listener) +{ + VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase, + listener); + void (*listener_begin)(VFIOContainerBase *bcontainer); + + listener_begin = VFIO_IOMMU_GET_CLASS(bcontainer)->listener_begin; + + if (listener_begin) { + listener_begin(bcontainer); + } +} + +static void vfio_listener_commit(MemoryListener *listener) +{ + VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase, + listener); + void (*listener_commit)(VFIOContainerBase *bcontainer); + + listener_commit = VFIO_IOMMU_GET_CLASS(bcontainer)->listener_begin; + + if (listener_commit) { + listener_commit(bcontainer); + } +} + static void vfio_device_error_append(VFIODevice *vbasedev, Error **errp) { /* @@ -1166,6 +1192,8 @@ static void vfio_listener_log_sync(MemoryListener *listener, static const MemoryListener vfio_memory_listener = { .name = "vfio", + .begin = vfio_listener_begin, + .commit = vfio_listener_commit, .region_add = vfio_listener_region_add, .region_del = vfio_listener_region_del, .log_global_start = vfio_listener_log_global_start, diff --git a/include/hw/vfio/vfio-container-base.h b/include/hw/vfio/vfio-container-base.h index a441932be7..67373e8db0 100644 --- a/include/hw/vfio/vfio-container-base.h +++ b/include/hw/vfio/vfio-container-base.h @@ -120,6 +120,8 @@ struct VFIOIOMMUClass { /* basic feature */ bool (*setup)(VFIOContainerBase *bcontainer, Error **errp); + void (*listener_begin)(VFIOContainerBase *bcontainer); + void (*listener_commit)(VFIOContainerBase *bcontainer); int (*dma_map)(const VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, void *vaddr, bool readonly); From patchwork Wed Apr 9 13:48:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044692 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EFB63C369A6 for ; Wed, 9 Apr 2025 13:50:19 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2VnM-0006Qc-BN; Wed, 09 Apr 2025 09:48:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnJ-0006Il-Rh; Wed, 09 Apr 2025 09:48:45 -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 1u2VnH-0005e2-88; Wed, 09 Apr 2025 09:48:45 -0400 Received: from pps.filterd (m0127840.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5393wmNF011859; Wed, 9 Apr 2025 06:48:38 -0700 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=+vs6j2ljEDp01+LRO6q8hF5ca2p4JL4hYf31I1a6i ek=; b=2Gji95F/4wZaUUtaG2f4U1jnpdSy0pduhQm4XdEyfcak3qSpYN5BO/Act ptzUvr0soLFofMC9/GtHOMQaCPfW8yTTQKiAb0xL4HHuYuXdOnxLPBmIzdsn3HTY WobWZjJAckEljjPVfzOeq/wodOmRKtWdfK9oJ/Dt0rR6JFK6BKFFnQyAwgS6R9Wt uGG8T+AoWTVRL0f6tiLJf/SrATgukiiXBC113McSGloKnkPriKOekcqJ7QMUy4Pr Pl48IaW4CcmlF9wRNR6xn6Lz0immEjrm+NKAmccLGIrNubzKCAvCklnJvUNiJEFT 0Fab3XFSsXBxy1J4L3/V9IxiTBZvA== Received: from ch5pr02cu005.outbound.protection.outlook.com (mail-northcentralusazlp17012051.outbound.protection.outlook.com [40.93.20.51]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 45u0ut9jx8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=c0dylAn7PItTs4IjdpPwia4wyUepwqu7mOrq5L9891J//7JB23w9F2jWf3SC0ZEJ1mTPE80qAP+xI7KOqX9jYrDLw3eMOiKdQ64lCzon0Jyp/UqElmueOXNRllteoLzturpDEU4FrA3z5xoaeZke9alf9p6OFbFLHnE/zmOunPZ3loWJ61qf4t8AqTWzl8GtUVYftxBqSmksV9UfRStGCS1IXqBwwTdo+qvAxz6xMUzvAoJHb5/uMWjaD8AIKUzSxQVcUxmJeFpErztUVVFVCv5cAiCFYR98la2mjKssV0IapTX/86kjMVLL+A7Ce6yKGIvOkknQp3DEcb1M1Wzs/g== 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=+vs6j2ljEDp01+LRO6q8hF5ca2p4JL4hYf31I1a6iek=; b=GNJzeIpET7ws8lvJmCJndM81ML+Su1TM4zVq/o0hNXnY6aheP4ieKOk0SwGKCMZpQ7NYbiEmPoJCLjMyNIOFtpO2Sx64qPQ/TbVm8xxodP3JYiL8at/D0GbZ1ePHHuSrCGA6F5WrZrjUuly6LCgkeKX3JQjwkap7wK8Nr1cxLhjZQI6crL8XUom9nEf88vhGMb3F6qzUuELmLlaCvG0FUgzHWUXc5m3v3GtDK0SRDYd8Y9rjil1vDM7h38Lat35ZfGtb2s7Udya+njIE9i/52UqZjLL7Sv4HZ9ZDTaI0wWzxGYgQw9CUc4e88rVY+7IKjxiPiCenZIlq5cuahLnk7w== 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=+vs6j2ljEDp01+LRO6q8hF5ca2p4JL4hYf31I1a6iek=; b=SxMuWPAZqQ8CCcuNxvLz6cx8klQRvMaJDOicXWKARDcUhUKrsRaGQ8K8jAJarKxUPp6zn9DJsDeYalF+8IoY1BD4+ibfmmkSYw3S1bXccoUDLf7LdFw6ReKo4NZ5OinsmbIIv+ip/4aS+LEyMgEPAZ7GqOM/YpXIsXLmokdpNOUX8cJqrh4eyuRqn2Z0t8MW7GSaZqfdFDC6IOdanliAXiCp8Ct6OS/o6vCr/Mme/r7yN9INYGO8sSmIQVM5bil4z+b1qSAM7NfG6g2E2N7gTw2VLlqEz1NsS7J1KfYP3CwCNtyRZSv0hDv6HZrIXERgS6dO2c9OFKRX8OrI+dr6Qw== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by MWHPR02MB10356.namprd02.prod.outlook.com (2603:10b6:303:289::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Wed, 9 Apr 2025 13:48:36 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:36 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon Subject: [PATCH 06/14] vfio: add flags parameter to DMA unmap callback Date: Wed, 9 Apr 2025 15:48:06 +0200 Message-Id: <20250409134814.478903-7-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|MWHPR02MB10356:EE_ X-MS-Office365-Filtering-Correlation-Id: 48198ca5-f840-438a-2a2e-08dd776d39a2 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: 2axyowfBjpSqrWveFFbS0ESedY0wkLbY9HIbWpFvwoFOQwb1xhMMTHwSndsY52NXYbzOh2ysjFyUjGZp2SKPpS+cXuvRia6cbN9RmD/IGl5pt/44IP1mK28dzEbJ3vq46zarEk3DWBtHLY14cldnIBE+pq3d3aNoIddj9Lhyq3Vs97WWe/+EuplU0YWFLvi9s7hf+dtBeesO38/RC4DvWhkKJ802YboVo5bjks6pxdQLnkDERYZhtm4AmeCLhuzzxDqHeLL+/KdkJmXAkOi7CR7MZ2lXA0ljnRCGfDACZpTZR+U4eFgF2Hl3X2QmKEtVJEIfmJDinCzxDb1uBJubYCK1Z0WD6HUKtVoqPe/EPanXUIWTqvlOGQ0NGrQsBzqJBJk0f2FBBuWbnYFt0DV1yspstXYXdrxp63v+KmVPFRjiqwHPyxDhbQsXW+dhNosygeOPZT0WzWV8e0o8ZowGy+tKsA78PYQSnkcWmTI6j7UUSsgfSDLSxF4YePBjYiRN44TYAPKV18e/eZTd7zFl8g09m01WQqwHVgeKKEq691fl4RpTrAd22tsmQqsgnMJhoLW3cr8PymGOhmWBGvrZvKpwkieBba6PUcMFecpBpg7csb7PbCo+WVsVaQFGpo6P77CDBFGpouop78SCr5k2GJe4ZpeY7UcxztEp4MV/RJ9dBWrFoSiIxh0Oz10NVFZFrLygMdA22XIFPa1F0rHFwzozh5MblFtLpOMPbeZjplLRuEVPU1eVfqrBUOzMQZxff31kNZvUrtwFlP1Evo24fuERlONnmnIDt/H+tmBGsYZMj234SJXOpRSZB3ZAJnXRURbiP3e65GavYmt+11mj8zRYU7wfpZwKu5gluYSXKf4l3m4la/95NRu7GQzRNCWKTmOtw5ehnnbQnIO3lMxYzOAU+YNHdrsC9y/ssYfE+a6OcKGdEozSl9q831TWaAu38IyediC3GBx0xzXjXD3LqIeBuX9/a64veT9EshAm3lTQ8a6wTSQbyvHjIICo1hhEe+ZPRYOfYjK102ry+MWyjHypX/U9YpxCjHzewJbE9yGIiKHr+YEMjX3UtwjHudVLZp48V+ul0bKwnWtybjn5Rfh97TAeXMXQqxve7o+/eomUU6rHjsgfga3PR+1bvBFbB9+h4dlmR6UA71GtY/5mcFBjubEZG8YYVy5Cw90P7WkZHz74P8O+VEkfi9t8Ddk7VAGVXzM8y0R4FMda1E3MTedrQKIqHLdjwqPzLjLG06CM4ki76v7NQyEjNX7Vzyz86Wf8JvW5WaMAoSU0IT5CHKvTyewQ0Quedk0TznqJmQtIoTyvMZvy/JEzW4DT5MgHCBL25UrHhR1gMpsRautLLcub4wWtedE0MSTSbWpet7YcXBG5xBCZm7tjgVym5SaE X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(376014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: OhzidXDhwy7S6U4EqfYpL+GWmWyKVal5IQwR3jAb7/FJzKaaZRRg1niaPzINBpC0HXrrFXpzHf4PJizepviXP5pHUEUJtLbUkTxPuQwPkgsvcSkXX81V7udfRpVJbcY2eCRE78GaBbdPRCqDnanunH/NPGoAxYtfFwCuOztp6tS1iAXhEkHC8YgJiDEo58hbORuDyzLQM6t92bPwcPmMtqgWn5jJeU6V7PyyPlpU6kQh+E6FKp6LCxfDWloGp2bH6K3D+d6lgNpcwQLIgV3QtFVTA43Mfg5NlMYob1VQbFC6nz+LsfTSqZU0Ec2oROMu6YV88JFnV2Cxdoz+oGeZ8z4fpETH/d10QLZJIr48daI/zoTRuYlXAxqR4nXyZHc4vJ8cI+2RW51YPJBp4QFWK7IVnfHFU06UUiczUIBremr0OWSzwDTOYuWPIHgdmhotSL+cFbxiqt6NIpe5kvD4/GTrqV9M/6biw+VYB9l36qWhwWpO7g/LI9sqNXBWAfig2yONvOGofMs0KnDC/RvX0v5TkIlphGRy8cUcJHWbdmfDCIhCywC/U698TLYrO5Ktlf5rLQNlxSNIVlhM7RFTa0k51KWTi19k9PHe5B2bLK2qYoVdDZyKbhvqSifFEkpUObISsPSqJZrIoiCyhTw+F5eTK1nESIvvAnk9ZoRu/USBf93bWiyRByLgdN48cAtPqlJqCQkvHhgRZ7Oi3ZQcHFpOQFtIRcJoJq+GI4ZwDY2RWVx2UT0fOig+gYpTctI7Hsbe5pks0cQsEAYN2jWU7NR2tQEP1IohsiX9RpkA/UZQrjLCj+Fysg4JAxC7irW1tqInFLGOl0hmsmE6TNNy95t7hhU1u2MZW9M6sO+qU7+ga4HBWwKd6ze4kqUpasad2GtUBay1U3c5q4IXBxSJNSjJ3VWCf2PAkKmJe/guewFNU5p0VdwFXfKdtmLrz+QTjY11kFVea3CP2FpQFh1cBZhz0XSFAcHVzDklq8buJvkoxTHJecrdwHClXLANf7vhKJpLII3sawTVrHaO4RM8SOYivZ2nmLesvRiXxpvGKo1WBMvB5vwHViMDzvYlGNO8uNcHXn7c6kP3WigvAH0wglTTzQrErKABIDhyInLXEet6ROA3PxdxcGdrTgUwcYmXnB4l3hSMaWlzF76YDyWpJAdEOwuGtrPIp7SrWXE9H99q0rBAAg7eop4cN9Ye5yr1D3hOK4wSQ6FI6hjSzg8UGoBR/r0NCL1X+6MKE9SQxF37QNQ3gau15YHAhHS1sBkXqzqEXU6cc/YbOl50ngihClp8R1dfMnoPhR2xFlv/irc5Z6N1pxgQ2zymKHP3upZMrMfxrH19i6qTChZxUaME7SYu3C1U6JnbTKCCucUl9oSt6xldZsnQCx5oMMtotRqmkZUhIXo9KDQ06SH8glDr3jwNDKV09nRrZAPYIqgDwg/f9sfNfvoZX/p222lSRA6gLxRRoiDXVJGq1L7QQ+KNPgAcPh/6agyeFRE7E5VqzwC14Zvk06soNMUYwyptZTFLzb8ADaZM1Irc1Sml1wPLtDTp1GiCp83XOWzmUbL7bOyMs0kS5N/tpA0HcHPe7hqe X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 48198ca5-f840-438a-2a2e-08dd776d39a2 X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:36.0140 (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: n5GPpVkCdkQpjyVcIzU+HJrvNSr8eX2l/fjIyCHGI7xu+5CjCNSDLP6NXI1r5rlgSxF0g1fcSFw0EqfSMmOqZQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB10356 X-Proofpoint-ORIG-GUID: bQx0jMn3lMVYHta9QGoVTrFT-ZAUYGtd X-Proofpoint-GUID: bQx0jMn3lMVYHta9QGoVTrFT-ZAUYGtd X-Authority-Analysis: v=2.4 cv=SpaQ6OO0 c=1 sm=1 tr=0 ts=67f67ab6 cx=c_pps a=s+CWjU1cAxIdjlq2nM3SAw==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=wam52ssa2_Y8bD6HYSEA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.151.68; envelope-from=john.levon@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org We'll use this parameter shortly; this just adds the plumbing. Signed-off-by: John Levon --- hw/vfio/container-base.c | 4 ++-- hw/vfio/container.c | 8 ++++++-- hw/vfio/iommufd.c | 6 +++++- hw/vfio/listener.c | 8 ++++---- include/hw/vfio/vfio-container-base.h | 4 ++-- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/hw/vfio/container-base.c b/hw/vfio/container-base.c index 726aac9827..613fe1a00d 100644 --- a/hw/vfio/container-base.c +++ b/hw/vfio/container-base.c @@ -85,12 +85,12 @@ int vfio_container_dma_map(VFIOContainerBase *bcontainer, int vfio_container_dma_unmap(VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, - IOMMUTLBEntry *iotlb) + IOMMUTLBEntry *iotlb, int flags) { VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer); g_assert(vioc->dma_unmap); - return vioc->dma_unmap(bcontainer, iova, size, iotlb); + return vioc->dma_unmap(bcontainer, iova, size, iotlb, flags); } bool vfio_container_add_section_window(VFIOContainerBase *bcontainer, diff --git a/hw/vfio/container.c b/hw/vfio/container.c index 4fc181d33b..625bbe82a7 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -124,7 +124,7 @@ unmap_exit: */ static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, - IOMMUTLBEntry *iotlb) + IOMMUTLBEntry *iotlb, int flags) { const VFIOContainer *container = container_of(bcontainer, VFIOContainer, bcontainer); @@ -138,6 +138,10 @@ static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer, int ret; Error *local_err = NULL; + if (flags != 0) { + return -ENOTSUP; + } + if (iotlb && vfio_container_dirty_tracking_is_started(bcontainer)) { if (!vfio_container_devices_dirty_tracking_is_supported(bcontainer) && bcontainer->dirty_pages_supported) { @@ -205,7 +209,7 @@ static int vfio_legacy_dma_map(const VFIOContainerBase *bcontainer, hwaddr iova, */ if (ioctl(container->fd, VFIO_IOMMU_MAP_DMA, &map) == 0 || (errno == EBUSY && - vfio_legacy_dma_unmap(bcontainer, iova, size, NULL) == 0 && + vfio_legacy_dma_unmap(bcontainer, iova, size, NULL, 0) == 0 && ioctl(container->fd, VFIO_IOMMU_MAP_DMA, &map) == 0)) { return 0; } diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index 1874185fcf..07334e65b5 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -46,11 +46,15 @@ static int iommufd_cdev_map(const VFIOContainerBase *bcontainer, hwaddr iova, static int iommufd_cdev_unmap(const VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, - IOMMUTLBEntry *iotlb) + IOMMUTLBEntry *iotlb, int flags) { const VFIOIOMMUFDContainer *container = container_of(bcontainer, VFIOIOMMUFDContainer, bcontainer); + if (flags != 0) { + return -ENOTSUP; + } + /* TODO: Handle dma_unmap_bitmap with iotlb args (migration) */ return iommufd_backend_unmap_dma(container->be, container->ioas_id, iova, size); diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index 9ffc2deb2d..c52d4a52ef 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -173,7 +173,7 @@ static void vfio_iommu_map_notify(IOMMUNotifier *n, IOMMUTLBEntry *iotlb) } } else { ret = vfio_container_dma_unmap(bcontainer, iova, - iotlb->addr_mask + 1, iotlb); + iotlb->addr_mask + 1, iotlb, 0); if (ret) { error_setg(&local_err, "vfio_container_dma_unmap(%p, 0x%"HWADDR_PRIx", " @@ -202,7 +202,7 @@ static void vfio_ram_discard_notify_discard(RamDiscardListener *rdl, int ret; /* Unmap with a single call. */ - ret = vfio_container_dma_unmap(bcontainer, iova, size , NULL); + ret = vfio_container_dma_unmap(bcontainer, iova, size , NULL, 0); if (ret) { error_report("%s: vfio_container_dma_unmap() failed: %s", __func__, strerror(-ret)); @@ -665,7 +665,7 @@ static void vfio_listener_region_del(MemoryListener *listener, /* The unmap ioctl doesn't accept a full 64-bit span. */ llsize = int128_rshift(llsize, 1); ret = vfio_container_dma_unmap(bcontainer, iova, - int128_get64(llsize), NULL); + int128_get64(llsize), NULL, 0); if (ret) { error_report("vfio_container_dma_unmap(%p, 0x%"HWADDR_PRIx", " "0x%"HWADDR_PRIx") = %d (%s)", @@ -675,7 +675,7 @@ static void vfio_listener_region_del(MemoryListener *listener, iova += int128_get64(llsize); } ret = vfio_container_dma_unmap(bcontainer, iova, - int128_get64(llsize), NULL); + int128_get64(llsize), NULL, 0); if (ret) { error_report("vfio_container_dma_unmap(%p, 0x%"HWADDR_PRIx", " "0x%"HWADDR_PRIx") = %d (%s)", diff --git a/include/hw/vfio/vfio-container-base.h b/include/hw/vfio/vfio-container-base.h index 67373e8db0..6eaf2b2430 100644 --- a/include/hw/vfio/vfio-container-base.h +++ b/include/hw/vfio/vfio-container-base.h @@ -81,7 +81,7 @@ int vfio_container_dma_map(VFIOContainerBase *bcontainer, void *vaddr, bool readonly); int vfio_container_dma_unmap(VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, - IOMMUTLBEntry *iotlb); + IOMMUTLBEntry *iotlb, int flags); bool vfio_container_add_section_window(VFIOContainerBase *bcontainer, MemoryRegionSection *section, Error **errp); @@ -127,7 +127,7 @@ struct VFIOIOMMUClass { void *vaddr, bool readonly); int (*dma_unmap)(const VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, - IOMMUTLBEntry *iotlb); + IOMMUTLBEntry *iotlb, int flags); bool (*attach_device)(const char *name, VFIODevice *vbasedev, AddressSpace *as, Error **errp); void (*detach_device)(VFIODevice *vbasedev); From patchwork Wed Apr 9 13:48:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044682 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 74AABC369A4 for ; Wed, 9 Apr 2025 13:49:44 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2VnM-0006RY-Rt; Wed, 09 Apr 2025 09:48:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnK-0006Ix-7c; Wed, 09 Apr 2025 09:48:46 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnI-0005eJ-DX; Wed, 09 Apr 2025 09:48:45 -0400 Received: from pps.filterd (m0127843.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 539DY9VE023160; Wed, 9 Apr 2025 06:48:40 -0700 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=tGX6AyRJDv3d+7JhmMGrrdabwexhRPRK8nrYOtFLn Xg=; b=m9kiMY3+b/4q/jsEI2DsziOnfcWvApLQPLjKnkUNUaM2iw6yKfR1LpmBU 5ytg2swckcUWv+4DoYOg79Ruqp04tPbMeHhCO+RuNmQWwF+eJuMKoJPYlzE9rSVC uWPj53pSGqri69ZKb87vIK5+lR/ic7yhQZnbkqlSR++c0I5cJjkelB2TRiT5jEJH nOh0O5t7hGxrOlFEKeHZMxFD95gDgEnm1rwiyKSeHR9Mljn/78A2rrfMEXHnGCUo R672jI2GvzmybzFpG1Kok5/QlKCLCJ0hbz54LO6QUfajZugYYQcX+1z1VnwTqL0B zwhVUP1i7sNrkynC8d35WYWLmnHBw== Received: from ch5pr02cu005.outbound.protection.outlook.com (mail-northcentralusazlp17012053.outbound.protection.outlook.com [40.93.20.53]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 45u2mhj3jg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cIg60FUtQiYxLWd547YJH2I3rcZ9/8kQBm65NHY+IG62wbJYAzkLkFCKX/J2v0CRklw0JrmZals6COLRmwSpDrNr/J5mnbMeGh8nxRo45tEY1Aux+o6rdVU+ItwMZSKivqjVy2KKpwdMYIV9sFOHkcxVF+XPXlLha0QLr9FA12rCCbQ1izQBhhK7syzP5NQqP3PtrlEDFQIuP9UUZtZsP6EAT9Bg4rsV+TyVxih0RH/zNpi/VGUcKr0pT5Ri3fK1RewpiJpIomT3xQ70+UQIVlRZGw30NHl4qwz37XY1a42E75KkwOFnwWCfQ3/+nD5IL1RwXldGcGw7kCUAnRkPUA== 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=tGX6AyRJDv3d+7JhmMGrrdabwexhRPRK8nrYOtFLnXg=; b=tOENgOFgUF9v8XtU5UZzOaTR0G4wZLVckJRAX0GbtK47gAyrdKnIlQe40biZEuZounrChcfNEBmJhqiG8yVi/PQ2rwN3gPQAVdGFFoAwg2bbon5ZoLUwCa2wLaf/mMA41u0f5wuhlctUdkkwreCiMzByrM2OSME7tKMHT134dOHo/d1BU7C/mgGz05xkl9yVhQQxk1/lYst/WJ2QDMkTFCej4PvdTkv8HRGS4uHT9VIPZDfxr3A5Uf/DjcH6mFqtY+cAeazb8aH3iCVa0Midou/D5J7us6YfQ50RCLzNjtiU+jzgAN3CP29Dw/NRUfl9JWKmfAFEET8i5oDOYDqWbw== 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=tGX6AyRJDv3d+7JhmMGrrdabwexhRPRK8nrYOtFLnXg=; b=dyeBxcyFesMOXYs7o4PjkNYaiuFkWDOCiCQ8A7CSpHxevEaXM1tXqvLOJmpHbXSrdzJHiDDr9N+8nahGbREIkwu0Yg+8gH8jnVeF55WKZrkBQZqyk3r9U+WqwNP2TiSBB4QpQtKRgFn3VpkXsO9+HacgKRAW1QqOBAqywnvTapvPkbj6C5OzuV3zCGG1pl0nI9LMm7MstuPl3MFwhpXBvFzqKEvHLEUn7bNIkoNeERDANfioaAz/lPYQnfGI/VFfycfmnUC+t6SIb1hiOFnN4dKDtk5/JkMZ5QKKgixU5+Hw35BC6y3GUNCxJKxIbYkQkQKrLk6rya6yJkBxR7LBGA== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by MWHPR02MB10356.namprd02.prod.outlook.com (2603:10b6:303:289::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Wed, 9 Apr 2025 13:48:38 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:38 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon Subject: [PATCH 07/14] vfio: specify VFIO_DMA_UNMAP_FLAG_ALL to callback Date: Wed, 9 Apr 2025 15:48:07 +0200 Message-Id: <20250409134814.478903-8-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|MWHPR02MB10356:EE_ X-MS-Office365-Filtering-Correlation-Id: 545e7489-c253-487e-7a78-08dd776d3b44 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: qj4Mxjtv+rF+knU10uYbBkbYBkntTDDtzqrLLR9M8Biaw7IDDEXQaz2u9peryQ9eE4GtulO3Xf//J8q8mF+i6IDaGTaBPNo+KESovFF4vZZ64lX4wF05xT7GFiFqVeT2l50wt2RUg9dYQJ9bqEgDjQnJVwlly4ksOAJIiAMbgi7UoWsI7vfY0ZYy57KVZ6cxnwlooY2ThGZAsOitGaeXQGF6GY7rO8MSK9iS4UaCCSw2e00wze5Kj1gvPg50sHiDkyqiBwVEGLcKx3KVHCy+XLmsZ5fslt0wByVh4rNktpxyeTWrdkguH19uwPACoBsrd9D+j46yoA443lh8hdw6nAnxVtaONJI33Wdb5f2t+poXCYv/e52j3b44cNDzionmnZfVcRUK988/GJYOgVzl/4LPag3GVl6gAmB6J3lzLaqr/O1kesiRAw23duWXhC3GAX28V94ZF9mYjjKW1xyOarFD+V0xiqVvVmhz6zqf5jnO0+aAXRVFG3p/Xa+tk4A1SkSbj68feCy4r9izTDua64RPB2nLQap1o4BmxMUMkmaeWJs9VsaSzaNRaP5p6EkjyZA+P97ICSgUZh00SjU99PZooQKPTRzpwRik2keIdDD0hx+CJ1CwxVFpjLuYQ4kLTM3QJteBwxbY4XzT3uFH8b/DfWOiejSuEf1ecIKTgCRRp8lJCbi87SVCvTY+OD5iaHHKHbOUT93I4zmgCPtY7gpNMmjxse6qze6AOCXHdYhU4g89VoRBA8mv/L1r1NHEGf7xrBVfrUrU1j0IaS0NhBtiE254Mo8U0YMsYxi/9xJBeJy1SSkrBzuhjLNUp6Ir3a8ObEvdB9nya4urZifNgQJYrxRTOvPE/dGQ2new7yFZB6jbH9xFmo14db4QmnGD0fE/TszU2PZQXxyqAyPjaxX7nWa9Rs5kG8hkl7UR5gQz2roZPeToT/CR7KGIdPhlNV72YdgqqB3/kaSmsGclQ34yjCCabXK1BjAJiAsaqmaOczFZidwtgd33aDR7OB4kHg7fKjs12lxbcUh6u4Sh3JwI9B8/YKxTCLoFZhNV7Po+AThkNyKQnqppCvSfCGUJrucEEnCsv+UFgRHi/CpvjKuUI/q2xz0s5nzM1RMcaiumlCUAWLPh85PRGtnAphcmltDl0uk2DnYAss5DpxJRtBq29m5+2fM6iMPvP73bQgAbmvzPm84xNjzniia0b/olRFXZs2qn/pw3xbgRPCDCewvxRos2L21qu5Jyeh0/wHYw/rxC3ciIwVsa7wRAcR/LEA2YF4dyVaeFMTvOscDunbnlH8z655hhfwdTTR6ISIzZ/HyRAINiyGV58UpOypWjfHZ2p79y6MumCIxulCowLH4JxvxA8PI/zQAbKSLNX/DJbQE4Dd4aZL5r5dxJiikE X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(376014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: aBk18F5kOwrfkXuWOMHvyT09LKT0rE2onJKhfwfu90F8IJ2YT4HapgBeBFaqQuC5hpulX7ZyA6sdYedPEQhuGPln7tVpLo0lrkr3rnKVwbeZNpz/hbIcC4wZdAFho7BfSpQFq4gDcD6N2M+x8Qo6CfHENAIjRTv8jMXZ2QYkGrr7oJ5guJDBfYIFHoCRk5vvd4q59MdBebNcOJD+l+HAXK03y6hokYnQwiPjzhNXnRfGopytY1aXPsRBboCgbDjMqVaZ0gBS7IG22khp82JZg1m6kUT1VT1rqdQWdxXw1TWHat1eTYnI31aPZ6T/YvzNoQBsoNjQXGdCoQImg0CDUgZ2jgit/g67//XBwqNx06SfgrBI3u0X5OZQnQfQImQXW2Keig21ekJJYcIyDciG3JL+xhkko20MaZ3k/e/fcyr71BX3JfUo2RhNMhmAH26PRhsaC8R93thgmLjPBjWkxqJenjwQtCsERtPRIo2JgFIKne5qY34l+BkmxVnhCCS3ALzOEdHRjaaQgn+myDTyBc0Qjz60td0BoYRVkyhduFW5PPSd72unc+Zmnq8OnECtWr22r4I/ZFJE8YUAw+if9cir1bwYpf9Cv7YyMuqKyELbyjqgeIuMrj/4IMPHxx3t85X7VulZXibJatDoRhNjGTfBH+2/nQ7/BqGMKioEAmMUT65xK8QEHWlcK+SzYLNB7PIRrjwvLwLc9vIO/1x16BeUPRBBxETetNDcnviRkY0C0sisL03U773mFZ41rJEiX8dduTHC9fF7PijQDK0NbCNWv/pazJwJBQh2t7jBUWWuqcQPMP/OJGqBgaju63neon5lgF8Me8QHR5oqIBk6192O/0eBzYNxM5WS4CAP7n4BtZzzkhITyIqqloXjnVNaBRZ2c2OXfEWgIP/1vhm69xfBxnn3GJT7xYwNReC+BdWPkDT8XK0xERhigB5gQ+LJdyYwqXP9W9I72BNPqiqXAHgF5+zudw2ZYVMCWeryHugqgJYlt0GBuCckCVcpgeqtEzNrItiQaoKFrFEBuNtIcuEMOVxfJSK+7KG/o1lMxV84cKJyAqje3nW7EpxOXyblQNnTnIl8oIxUXRB7Xi+h1ttf/KbTCIz1f852TW1Yrqm+YHSDhHtHDVXNllmfebKE1DQqoMZ3M8HRXx5n8FwVZo+URcmXS3iULmwFFwJOfVPHshdT0kDeaFFFfLGkOaY5OvNZVk9IoUEVronUmgc7HK99H/97shrzBFz48vWiY42RqkjaLof+9Vx78snIgvPdyLBs56II7cq+wHUKxwVE1/nKElnkj4/hL0qyki4DnGSiyuFxra0M0YktIPjFCMo7sGDoJOhlmQ4BiBPGkZAJ3/wTAFJhupu1VmrJzEh5chdggVjrhyX4b/+JivNVOIjvF+C+Isde8Yr1skID4oL5osJUtLFmFzsFwnU+gV+QK34wBTjmft4YuCoFENd9xjcCWSbrIEYrzxZBC0kltDutKqcrrKFuai6mpZVygvbJFo9P+vinxtyMFICF5TCDM5OusKFoKlKvDC+i3XyotohiR6GFOCpYMcsgHgu2Mi05VcAC9rDIOLoW58ObnIOQ59Oo X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 545e7489-c253-487e-7a78-08dd776d3b44 X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:38.7288 (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: Vnaqt3cqz0KcQZwm6ePquQ2z0XXljaplQCXDdJ12d5+GgqyFeiHSsEijc3RNGhHIGZmWVo5NJECE10xER2r/6g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB10356 X-Proofpoint-ORIG-GUID: YDVhwqmK5Iv8Lh8Yzdd-kIwSFgi8KzLc X-Proofpoint-GUID: YDVhwqmK5Iv8Lh8Yzdd-kIwSFgi8KzLc X-Authority-Analysis: v=2.4 cv=JPI7s9Kb c=1 sm=1 tr=0 ts=67f67ab8 cx=c_pps a=sf1zYAMyThzbrKU8SMWnlQ==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=4WNC9uKCzI0CgEDnVfAA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.155.12; envelope-from=john.levon@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Use the new flags parameter to indicate when we want to unmap everything; no functional change is intended. Signed-off-by: John Levon --- hw/vfio/container.c | 49 ++++++++++++++++++++++++++++++++++++--------- hw/vfio/iommufd.c | 19 +++++++++++++++++- hw/vfio/listener.c | 19 ++++++------------ 3 files changed, 63 insertions(+), 24 deletions(-) diff --git a/hw/vfio/container.c b/hw/vfio/container.c index 625bbe82a7..37b1217fd8 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -119,12 +119,9 @@ unmap_exit: return ret; } -/* - * DMA - Mapping and unmapping for the "type1" IOMMU interface used on x86 - */ -static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer, - hwaddr iova, ram_addr_t size, - IOMMUTLBEntry *iotlb, int flags) +static int vfio_legacy_dma_unmap_one(const VFIOContainerBase *bcontainer, + hwaddr iova, ram_addr_t size, + IOMMUTLBEntry *iotlb) { const VFIOContainer *container = container_of(bcontainer, VFIOContainer, bcontainer); @@ -138,10 +135,6 @@ static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer, int ret; Error *local_err = NULL; - if (flags != 0) { - return -ENOTSUP; - } - if (iotlb && vfio_container_dirty_tracking_is_started(bcontainer)) { if (!vfio_container_devices_dirty_tracking_is_supported(bcontainer) && bcontainer->dirty_pages_supported) { @@ -185,6 +178,42 @@ static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer, return 0; } +/* + * DMA - Mapping and unmapping for the "type1" IOMMU interface used on x86 + */ +static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer, + hwaddr iova, ram_addr_t size, + IOMMUTLBEntry *iotlb, int flags) +{ + int ret; + + if ((flags & ~(VFIO_DMA_UNMAP_FLAG_ALL)) != 0) { + return -ENOTSUP; + } + + if (flags & VFIO_DMA_UNMAP_FLAG_ALL) { + /* The unmap ioctl doesn't accept a full 64-bit span. */ + Int128 llsize = int128_rshift(int128_2_64(), 1); + + ret = vfio_legacy_dma_unmap_one(bcontainer, 0, int128_get64(llsize), + iotlb); + + if (ret == 0) { + ret = vfio_legacy_dma_unmap_one(bcontainer, int128_get64(llsize), + int128_get64(llsize), iotlb); + } + + } else { + ret = vfio_legacy_dma_unmap_one(bcontainer, iova, size, iotlb); + } + + if (ret != 0) { + return -errno; + } + + return 0; +} + static int vfio_legacy_dma_map(const VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, void *vaddr, bool readonly) { diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index 07334e65b5..22e5b16967 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -51,10 +51,27 @@ static int iommufd_cdev_unmap(const VFIOContainerBase *bcontainer, const VFIOIOMMUFDContainer *container = container_of(bcontainer, VFIOIOMMUFDContainer, bcontainer); - if (flags != 0) { + if ((flags & ~(VFIO_DMA_UNMAP_FLAG_ALL)) != 0) { return -ENOTSUP; } + /* unmap in halves */ + if (flags & VFIO_DMA_UNMAP_FLAG_ALL) { + Int128 llsize = int128_rshift(int128_2_64(), 1); + int ret; + + ret = iommufd_backend_unmap_dma(container->be, container->ioas_id, + 0, int128_get64(llsize)); + + if (ret == 0) { + ret = iommufd_backend_unmap_dma(container->be, container->ioas_id, + int128_get64(llsize), + int128_get64(llsize)); + } + + return ret; + } + /* TODO: Handle dma_unmap_bitmap with iotlb args (migration) */ return iommufd_backend_unmap_dma(container->be, container->ioas_id, iova, size); diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index c52d4a52ef..bcf2b98e79 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -661,21 +661,14 @@ static void vfio_listener_region_del(MemoryListener *listener, } if (try_unmap) { + int flags = 0; + if (int128_eq(llsize, int128_2_64())) { - /* The unmap ioctl doesn't accept a full 64-bit span. */ - llsize = int128_rshift(llsize, 1); - ret = vfio_container_dma_unmap(bcontainer, iova, - int128_get64(llsize), NULL, 0); - if (ret) { - error_report("vfio_container_dma_unmap(%p, 0x%"HWADDR_PRIx", " - "0x%"HWADDR_PRIx") = %d (%s)", - bcontainer, iova, int128_get64(llsize), ret, - strerror(-ret)); - } - iova += int128_get64(llsize); + flags = VFIO_DMA_UNMAP_FLAG_ALL; + llsize = 0; } - ret = vfio_container_dma_unmap(bcontainer, iova, - int128_get64(llsize), NULL, 0); + ret = vfio_container_dma_unmap(bcontainer, iova, int128_get64(llsize), + NULL, flags); if (ret) { error_report("vfio_container_dma_unmap(%p, 0x%"HWADDR_PRIx", " "0x%"HWADDR_PRIx") = %d (%s)", From patchwork Wed Apr 9 13:48:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044691 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EF455C369A1 for ; Wed, 9 Apr 2025 13:50:19 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2Vnb-0006UP-Ol; Wed, 09 Apr 2025 09:49:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnO-0006Su-BY; Wed, 09 Apr 2025 09:48:50 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnL-0005ew-9B; Wed, 09 Apr 2025 09:48:49 -0400 Received: from pps.filterd (m0127844.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5398ai3I009618; Wed, 9 Apr 2025 06:48:44 -0700 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=oazRZz3xQrkr7hvFHhVeMA+UmiqblYhdJA62AL6OE GA=; b=SlsuM7q1I4iucUX9i+LX7mzi3Ei4L5BYIEG46eC2gjUhK5+hwM49pEahd mpwua3i8mlaK129MqB2KgrHeUGQdyBXHRURpEJsUTgBbCP/44eXaXvD8abbqZt7T xOWPplCKchVeSBGqMKoTU2+eOCExELDXgbfAWmYwXbOwipZrfF86drqtp4+8UdyQ sM5UYsTn7XkM2kRHlrku7AyG7xnzaiQEWdttVtkzR3y3MybRzDnkZ+s8Y94QMrG5 kEreRjDiS8+eUxyE0DcnBk9kITxQrWK/FjeyiHLHV4GUHYUUsd7SklNj6uCriv48 AI4ijI24VnOTZjMCLwUUZcUCZQwTg== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazlp17012039.outbound.protection.outlook.com [40.93.6.39]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 45u420syj5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Q/2Sav4cw5kkVdKfo13qL57bu8dOTv0xc294lcY0m7qpSTbidMqnpBROy7NjCYjPixN7JIp6IAgcShXfc9xdcxtf1YcfoLI4b0Kz8vBB9YFhuUgl70spc5kCSWqcRbMJNkWU6LCpUSlnQqw9qc5ccj9hOQyrdOp6wsOaFPBSJ5H7EpqNBvOr5vK2n31C4+lxGp+95Y4UuFbBUG6l5avEIs8pnDNjhNDn4ifi5yo6RCxK28L3UFIWvtdbn4YnKH8MRJXBfcuS7nZv3kb7xdWq8NSGzpOiAvmbQEhtzuYJ4T0Z+BcfVAC1YgELimJjTQweRhVXc4OL5XdhFcZF5+qbfw== 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=oazRZz3xQrkr7hvFHhVeMA+UmiqblYhdJA62AL6OEGA=; b=DSzfV+JrzmWWn7duTPUu0AsQAyBW7LqaZWJB9W8GmGVWWK+reubarADPV97IwC8oCUMA16x4Hod4UsqQ1Thk9LBO/LllSSMdra9Aqyglgr9BlUQ9uClDooZDqJVZ0Y15tNxCXKoyBSrJtDq97I7rzwOT33QmTuew2pFmoFS1LGhILU0djHzPoKPyfAuE6Py6VeZi79i29/BO3Lk9U+OctimBK/yL8dn8l29qG6UDaKhkz3FrxvaNBkKBmw41ItTOyIvOP1cTZR4ADJv1NP5Kk4WZyPnyKNs490EvpxaDnq2BGIau1KOvlNp9vCmYm38MUxGZh02nXYe/R1Qwlj/9zw== 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=oazRZz3xQrkr7hvFHhVeMA+UmiqblYhdJA62AL6OEGA=; b=dmcOIFL9pK8d+p4aM7fsAT41TA4ZC8Hb3KhM6lHI5hGpgiP+GVjuYL2cFbfm6/mOqsLPaj5pdUv2y/upNTuD8aiHSRGUV+Sg4cyYepbWY7Ap+P7V9Vjd7Bb3EN8a375fGQFl9QSOLX3WPAh6vWLAEpT3Cda0cH6Ktb92D1XujB33GYXIs6SdrwNSGl4QUcijav7qAjFFPaCHZEjz4HvBfretvvh6x3te0bkPSx9btVwTe7xEneL6rQGenczHG6+/W3yKIXaaVqVux8437SZAD2EfJKOZ/xaudw7f/zU4b+WoMqMKleXZ4ZMcrx+20llSM8BfQe9nfXkIzYB50RIUQg== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by MWHPR02MB10356.namprd02.prod.outlook.com (2603:10b6:303:289::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Wed, 9 Apr 2025 13:48:42 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:42 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon , John Johnson , Elena Ufimtseva , Jagannathan Raman Subject: [PATCH 08/14] vfio: add vfio-pci-base class Date: Wed, 9 Apr 2025 15:48:08 +0200 Message-Id: <20250409134814.478903-9-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|MWHPR02MB10356:EE_ X-MS-Office365-Filtering-Correlation-Id: 953380a1-5503-4716-3d9a-08dd776d3d1c x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: 3zI3CBzntcor42KuT+yptRXsC2tkUFOoAv/5fLVRfdSwIbof1xW9Q48Dbpab5TQwsONyWi/Z+MuupWkAmlTfm4NFkv7jl3QaOQ7yaUf0Zq2n4enV08L4MQu5KJKKeBKDV4wM79LBF1QeXXGlhcq6Q+c8cO4mqDAp4TMZBBNCQhM52jdTWLC/x98XDyJjrEU/SCEdU9QPFo9KHwSsZHQN1idDCabguhzDNGvXSEHDGgt3Cv94Jv/cvTAz73TfLJhZXbs0i6j7yI3YQGqCdsUUFbbg5C9CYJwtUpwhetcvOPblfD320f1oU9QLNm0M/eFR81FiqrVXLObf21jwCYKhzbg1I1R+Tq2Aoy5hV9+lRmaNm8w63Vjq//nECMeXAN9cP1GJfdWokLrn/r+xSw8MJ+BKhN5Iz8Ane+kD469Mi7PogEa2mpOVTClWwziXscR+SIKHb/s36Cq4btDQb+Fe3PbuHmpjoHAQQPrIfMl2poIw8x9A3W1AK8m8g+djMW3OPWr4AZ62zfNEZ9MoWCibDCYF3Qb+QGjZXtmaPXMEaTBBatii82pt6MLwypevy4jeV0XONoO4VIU3X92nJ1CMds7loIpLJggbjL5PqDmz7DZBGZ2slKTlMyr+X+vd+TZNUtEZMyw/7umFK+bbJIQWZPqJCap0FYdtbC61+DSCsUF99+yn34sB9mSQ5ceLmfY2rXqg48a0nEYGiYQ8XaBAFCgHegw37o8qOtznLyqkCiE2Nvflui09hZD6yhx8h0FAvBfTIu+YUZskV0vC6ZuI5cT4YebwzfwQB+boPrlvogTIw5w6/0g6lRL+NNFrsnJ0nlL2C9dlBO71/Q4bCYcCXYaKHTa8kC0IsU1LtKnFrtCWi9BTY7nQxUizHXDSG0xIDsJxqkZN86J2T0XYzOnBtlrd4QrcI6GYr3Yr7JogN21Tg5ORQPH5mbQRUiTVF/QLx4Wb5T+9ElEWf5a5EORmkfXKH5OG7U6wXC8yr2f5Of/o1nChmQwXs2KLBNFNJJkbPrL2SQkAechbe/uwt4cXCjt6RIY+EF1qMVIC0GSwJFY+coEwm2Ik01jxDaxCxLrqiuXv6dbVQZhqgER2mY+6ZFNUU8o1VHKcRMtzTu8Eqs1nBZuH8Gb0y4p5mgdb5cMGxA31wGSlmkg+G78gPId57JHo8PO53mOJhDu4uAeiy/R7sK3hFI0H9CBPY7M3MTzcQoSBK0HaIaGL9If02x9Ip9Yyt5oC9Ti/WeW5gettBloCWGpuVUMBiNkSNPJnIGU0c2HN74y31pgncTFLlDcVtlRbfx5DDeyvy13y8NXKJWrCpIry/yAaEH/19ujAydWRf2RLXHnnvpYu0mB+wIqD2WHPZt2xsqVC1vhFCTWnPQRCr30GTzeQ8ljKUIreN8u2 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(376014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2qO2RJ2eM9QiBH/deCghmJn7cIqRt3QCfNSkeKy+nQhrXcU3b0qB7KDpMs+aTrvpwTO2pr3hb8UzjQu1IIMQVHi2gBVv0Ffo8mPE81R7368K5mAY8t8ck3e3p4f2PRzEPx2O3sWMtHSKE1J1AehHVG6CQkqVxZiuZ35k+5fgnOAbKYbdT5p2LS7WUcWDr1ERssGY13zzLwWK4tYjQ8R2VNnh4MVaJg8P7jadkrGUJ0JcP0Bkf0R2pZ0syuw/LoASIrlOgEfIL9kjVLDzzr/C7WSQgn/wwge3n6ew57ACz5MlsYf6jeQVyuslY1IBUhaRduqnV8430B26TApl8PFY7KG0YofSI3ne0gSSvbgUmFjPNGmmozLfWrRXtIgRaRVJ5tk8PcWiFGUKmuSugi7VQ+iOGnFl7lG7pD+lL2JeXGYDw/eSyNkm63o7HYqP+9Vh63c1vfv0IBSqubKrs2YJo2HAxhMz+fIlVMMS1YXnUlNoixMNjva+5w7+b+M+eQ5x5xmuHTwVuItn7oxGuSXumxfE+HZ0kQjIsX2myVEyX8HlTyFnnumAJhlCA9sdMmWdIBiAkY4NgT6ljFOdIfEkRqsqdM31gNZVHGDAHqTclYXt2tEBnByzgUkzDsAUYgoUAGFYorNlR5uvOkZcHZLhz5/SsU5KGogJjkyfvC0TG5mD9Jr99YZdyRnKLcBHhRe2Dqx0ryFFHE6RONTAvgSRMsOqdrKAuMG7iaOKaf3CYNnuf8TILf4WlXnvS1oBwrXY5IMSa2z+ul15colULdisIaxIiZGR7HndtVBIRO15PfP46+nwaSrQPhTWsmHeN6YYhTvVfS7FqMpKUk1nnW5Kz+fVHkqVwRFzPnnViOuGeRgSp4xSXn92vNa/ZTXXQcUaoW5gLq8e7yHRNaILzYkSaA6Xn7vNLXswgjBwgEYPrrbsCENmcmJG4IhjCYFKMczMt0u6dYuZxSflxJGD+3kKGc4XiyI9vdK4juWnA4/djU4yWgL3qkwsYSGq8HlubYDHJeRFY40pfsLkSHDI7HoxqxpkpJ3gVjZgS7pdRx3nOK9vTlbKsHTqbFeTjkXz8jHBa2o48kYvLOAqrla0/XOE5h8O6S+AI0pHcXnUStAdA8r7OEsAkDlm14P6d/hFfWGpJ3oIYszA1rN+2RPGHjsX0QzUsvfa57Iho2REoc6YJ+zgDk9H10ul6kqo+a1k967dhewNiKOvyZL9SKi8eAkYveeoarP3Rj1Vj9uiZyTFcldnqCX4BEsMyvQtJlkVb+k9i9uiVdSnay2TG0Kxm6P+H2ANT1d9wtO8UUimPrdOSnnIMRZFeP4RzySfdM8PfhqOeEAlD0Ae45UtgJDGLBGhBZUwm5ce76PkvptVxdRs/Ma6CiE3g+nBsp96Cgg/DLWmhWHzMCWwquEcX+oUh/ndIq0u+lGzkR61cJavZuY3Gfnm7hgESJ2ZNjXAOMl7fP+kTwa13khhuONXZPIXndU2fqDchJjpbqSUe6kqQW9nQFnogTTh9GcPGk/c6yEB6uXBm5DttSnxi+0g4/qgTjab0Ic2NerOn4T7JlE5iFXUlE9zeu6XHS3PHM16wPlDzj42 X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 953380a1-5503-4716-3d9a-08dd776d3d1c X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:41.9628 (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: pOVfPZVa5ZvZtIT2/X95VgXTAxQKC/5R/wS1LXRyJn4RLmlqyks7ErqgBNp1XxM0TjzSP4M6LTuc1jkZ9O4jCg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB10356 X-Proofpoint-ORIG-GUID: mywOmPImy4QHVBRGhlA6REI2od4smQ8K X-Authority-Analysis: v=2.4 cv=TeGWtQQh c=1 sm=1 tr=0 ts=67f67abc cx=c_pps a=VIUGDxI8SzY5XGtng4SOXg==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=yPCof4ZbAAAA:8 a=64Cc0HZtAAAA:8 a=A9enwp8IFyuUK1rs7oIA:9 X-Proofpoint-GUID: mywOmPImy4QHVBRGhlA6REI2od4smQ8K X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.155.12; envelope-from=john.levon@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Split out parts of TYPE_VFIO_PCI into a base TYPE_VFIO_PCI_BASE. The base type contains properties generic to all vfio-pci implementations (although we have not yet introduced another subclass). Note that currently there is no need for additional data for TYPE_VFIO_PCI, so it shares the same C struct type as TYPE_VFIO_PCI_BASE, VFIOPCIDevice. Originally-by: John Johnson Signed-off-by: Elena Ufimtseva Signed-off-by: Jagannathan Raman Signed-off-by: John Levon --- hw/vfio/device.c | 2 +- hw/vfio/pci.c | 266 ++++++++++++++++++++++++++--------------------- hw/vfio/pci.h | 12 ++- 3 files changed, 156 insertions(+), 124 deletions(-) diff --git a/hw/vfio/device.c b/hw/vfio/device.c index f74b9c25ea..b9473878fc 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -361,7 +361,7 @@ bool vfio_device_hiod_realize(VFIODevice *vbasedev, Error **errp) VFIODevice *vfio_get_vfio_device(Object *obj) { if (object_dynamic_cast(obj, TYPE_VFIO_PCI)) { - return &VFIO_PCI(obj)->vbasedev; + return &VFIO_PCI_BASE(obj)->vbasedev; } else { return NULL; } diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 81bf0dab28..090b2f2ef0 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -241,7 +241,7 @@ static void vfio_intx_update(VFIOPCIDevice *vdev, PCIINTxRoute *route) static void vfio_intx_routing_notifier(PCIDevice *pdev) { - VFIOPCIDevice *vdev = VFIO_PCI(pdev); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev); PCIINTxRoute route; if (vdev->interrupt != VFIO_INT_INTx) { @@ -516,7 +516,7 @@ static void vfio_update_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage msg, static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, MSIMessage *msg, IOHandler *handler) { - VFIOPCIDevice *vdev = VFIO_PCI(pdev); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev); VFIOMSIVector *vector; int ret; bool resizing = !!(vdev->nr_vectors < nr + 1); @@ -621,7 +621,7 @@ static int vfio_msix_vector_use(PCIDevice *pdev, static void vfio_msix_vector_release(PCIDevice *pdev, unsigned int nr) { - VFIOPCIDevice *vdev = VFIO_PCI(pdev); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev); VFIOMSIVector *vector = &vdev->msi_vectors[nr]; trace_vfio_msix_vector_release(vdev->vbasedev.name, nr); @@ -1169,7 +1169,7 @@ static const MemoryRegionOps vfio_vga_ops = { */ static void vfio_sub_page_bar_update_mapping(PCIDevice *pdev, int bar) { - VFIOPCIDevice *vdev = VFIO_PCI(pdev); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev); VFIORegion *region = &vdev->bars[bar].region; MemoryRegion *mmap_mr, *region_mr, *base_mr; PCIIORegion *r; @@ -1215,7 +1215,7 @@ static void vfio_sub_page_bar_update_mapping(PCIDevice *pdev, int bar) */ uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len) { - VFIOPCIDevice *vdev = VFIO_PCI(pdev); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev); uint32_t emu_bits = 0, emu_val = 0, phys_val = 0, val; memcpy(&emu_bits, vdev->emulated_config_bits + addr, len); @@ -1248,7 +1248,7 @@ uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len) void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, uint32_t val, int len) { - VFIOPCIDevice *vdev = VFIO_PCI(pdev); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev); uint32_t val_le = cpu_to_le32(val); trace_vfio_pci_write_config(vdev->vbasedev.name, addr, val, len); @@ -3091,7 +3091,7 @@ static bool vfio_interrupt_setup(VFIOPCIDevice *vdev, Error **errp) static void vfio_realize(PCIDevice *pdev, Error **errp) { ERRP_GUARD(); - VFIOPCIDevice *vdev = VFIO_PCI(pdev); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev); VFIODevice *vbasedev = &vdev->vbasedev; int i, ret; char uuid[UUID_STR_LEN]; @@ -3260,7 +3260,7 @@ error: static void vfio_instance_finalize(Object *obj) { - VFIOPCIDevice *vdev = VFIO_PCI(obj); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(obj); vfio_display_finalize(vdev); vfio_bars_finalize(vdev); @@ -3278,7 +3278,7 @@ static void vfio_instance_finalize(Object *obj) static void vfio_exitfn(PCIDevice *pdev) { - VFIOPCIDevice *vdev = VFIO_PCI(pdev); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev); VFIODevice *vbasedev = &vdev->vbasedev; vfio_unregister_req_notifier(vdev); @@ -3302,7 +3302,7 @@ static void vfio_exitfn(PCIDevice *pdev) static void vfio_pci_reset(DeviceState *dev) { - VFIOPCIDevice *vdev = VFIO_PCI(dev); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(dev); trace_vfio_pci_reset(vdev->vbasedev.name); @@ -3342,7 +3342,7 @@ post_reset: static void vfio_instance_init(Object *obj) { PCIDevice *pci_dev = PCI_DEVICE(obj); - VFIOPCIDevice *vdev = VFIO_PCI(obj); + VFIOPCIDevice *vdev = VFIO_PCI_BASE(obj); VFIODevice *vbasedev = &vdev->vbasedev; device_add_bootindex_property(obj, &vdev->bootindex, @@ -3365,32 +3365,15 @@ static void vfio_instance_init(Object *obj) static PropertyInfo vfio_pci_migration_multifd_transfer_prop; -static const Property vfio_pci_dev_properties[] = { - DEFINE_PROP_PCI_HOST_DEVADDR("host", VFIOPCIDevice, host), - DEFINE_PROP_UUID_NODEFAULT("vf-token", VFIOPCIDevice, vf_token), - DEFINE_PROP_STRING("sysfsdev", VFIOPCIDevice, vbasedev.sysfsdev), +static const Property vfio_pci_base_dev_properties[] = { DEFINE_PROP_ON_OFF_AUTO("x-pre-copy-dirty-page-tracking", VFIOPCIDevice, vbasedev.pre_copy_dirty_page_tracking, ON_OFF_AUTO_ON), DEFINE_PROP_ON_OFF_AUTO("x-device-dirty-page-tracking", VFIOPCIDevice, vbasedev.device_dirty_page_tracking, ON_OFF_AUTO_ON), - DEFINE_PROP_ON_OFF_AUTO("display", VFIOPCIDevice, - display, ON_OFF_AUTO_OFF), - DEFINE_PROP_UINT32("xres", VFIOPCIDevice, display_xres, 0), - DEFINE_PROP_UINT32("yres", VFIOPCIDevice, display_yres, 0), DEFINE_PROP_UINT32("x-intx-mmap-timeout-ms", VFIOPCIDevice, intx.mmap_timeout, 1100), - DEFINE_PROP_BIT("x-vga", VFIOPCIDevice, features, - VFIO_FEATURE_ENABLE_VGA_BIT, false), - DEFINE_PROP_BIT("x-req", VFIOPCIDevice, features, - VFIO_FEATURE_ENABLE_REQ_BIT, true), - DEFINE_PROP_BIT("x-igd-opregion", VFIOPCIDevice, features, - VFIO_FEATURE_ENABLE_IGD_OPREGION_BIT, false), - DEFINE_PROP_BIT("x-igd-lpc", VFIOPCIDevice, features, - VFIO_FEATURE_ENABLE_IGD_LPC_BIT, false), - DEFINE_PROP_ON_OFF_AUTO("x-igd-legacy-mode", VFIOPCIDevice, - igd_legacy_mode, ON_OFF_AUTO_AUTO), DEFINE_PROP_ON_OFF_AUTO("enable-migration", VFIOPCIDevice, vbasedev.enable_migration, ON_OFF_AUTO_AUTO), DEFINE_PROP("x-migration-multifd-transfer", VFIOPCIDevice, @@ -3405,8 +3388,6 @@ static const Property vfio_pci_dev_properties[] = { DEFINE_PROP_BOOL("x-no-kvm-intx", VFIOPCIDevice, no_kvm_intx, false), DEFINE_PROP_BOOL("x-no-kvm-msi", VFIOPCIDevice, no_kvm_msi, false), DEFINE_PROP_BOOL("x-no-kvm-msix", VFIOPCIDevice, no_kvm_msix, false), - DEFINE_PROP_BOOL("x-no-geforce-quirks", VFIOPCIDevice, - no_geforce_quirks, false), DEFINE_PROP_BOOL("x-no-kvm-ioeventfd", VFIOPCIDevice, no_kvm_ioeventfd, false), DEFINE_PROP_BOOL("x-no-vfio-ioeventfd", VFIOPCIDevice, no_vfio_ioeventfd, @@ -3417,61 +3398,55 @@ static const Property vfio_pci_dev_properties[] = { sub_vendor_id, PCI_ANY_ID), DEFINE_PROP_UINT32("x-pci-sub-device-id", VFIOPCIDevice, sub_device_id, PCI_ANY_ID), - DEFINE_PROP_UINT32("x-igd-gms", VFIOPCIDevice, igd_gms, 0), - DEFINE_PROP_UNSIGNED_NODEFAULT("x-nv-gpudirect-clique", VFIOPCIDevice, - nv_gpudirect_clique, - qdev_prop_nv_gpudirect_clique, uint8_t), DEFINE_PROP_OFF_AUTO_PCIBAR("x-msix-relocation", VFIOPCIDevice, msix_relo, OFF_AUTO_PCIBAR_OFF), -#ifdef CONFIG_IOMMUFD - DEFINE_PROP_LINK("iommufd", VFIOPCIDevice, vbasedev.iommufd, - TYPE_IOMMUFD_BACKEND, IOMMUFDBackend *), -#endif - DEFINE_PROP_BOOL("skip-vsc-check", VFIOPCIDevice, skip_vsc_check, true), }; -#ifdef CONFIG_IOMMUFD -static void vfio_pci_set_fd(Object *obj, const char *str, Error **errp) -{ - vfio_device_set_fd(&VFIO_PCI(obj)->vbasedev, str, errp); -} -#endif -static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) +static void vfio_pci_base_dev_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); PCIDeviceClass *pdc = PCI_DEVICE_CLASS(klass); - device_class_set_legacy_reset(dc, vfio_pci_reset); - device_class_set_props(dc, vfio_pci_dev_properties); -#ifdef CONFIG_IOMMUFD - object_class_property_add_str(klass, "fd", NULL, vfio_pci_set_fd); -#endif - dc->desc = "VFIO-based PCI device assignment"; + device_class_set_props(dc, vfio_pci_base_dev_properties); + dc->desc = "VFIO PCI base device"; set_bit(DEVICE_CATEGORY_MISC, dc->categories); - pdc->realize = vfio_realize; pdc->exit = vfio_exitfn; pdc->config_read = vfio_pci_read_config; pdc->config_write = vfio_pci_write_config; - object_class_property_set_description(klass, /* 1.3 */ - "host", - "Host PCI address [domain:] of assigned device"); + object_class_property_set_description(klass, /* 5.2 */ + "x-pre-copy-dirty-page-tracking", + "Disable dirty pages tracking during iterative phase " + "(DEBUG)"); + object_class_property_set_description(klass, /* 9.1 */ + "x-device-dirty-page-tracking", + "Disable device dirty page tracking and use " + "container-based dirty page tracking"); object_class_property_set_description(klass, /* 1.3 */ "x-intx-mmap-timeout-ms", "When EOI is not provided by KVM/QEMU, wait time " "(milliseconds) to re-enable device direct access " "after INTx (DEBUG)"); - object_class_property_set_description(klass, /* 1.5 */ - "x-vga", - "Expose VGA address spaces for device"); - object_class_property_set_description(klass, /* 2.3 */ - "x-req", - "Disable device request notification support (DEBUG)"); + object_class_property_set_description(klass, /* 5.2, 8.0 non-experimetal */ + "enable-migration", + "Enale device migration. Also requires a host VFIO PCI " + "variant or mdev driver with migration support enabled"); + object_class_property_set_description(klass, /* 10.0 */ + "x-migration-multifd-transfer", + "Transfer this device state via " + "multifd channels when live migrating it"); + object_class_property_set_description(klass, /* 9.1 */ + "migration-events", + "Emit VFIO migration QAPI event when a VFIO device " + "changes its migration state. For management applications"); object_class_property_set_description(klass, /* 2.4 and 2.5 */ "x-no-mmap", "Disable MMAP for device. Allows to trace MMIO " "accesses (DEBUG)"); + object_class_property_set_description(klass, /* 3.1 */ + "x-balloon-allowed", + "Override allowing ballooning with device (DEBUG, DANGER)"); object_class_property_set_description(klass, /* 2.5 */ "x-no-kvm-intx", "Disable direct VFIO->KVM INTx injection. Allows to " @@ -3484,6 +3459,13 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) "x-no-kvm-msix", "Disable direct VFIO->KVM MSIx injection. Allows to " "trace MSIx interrupts (DEBUG)"); + object_class_property_set_description(klass, /* 3.0 */ + "x-no-kvm-ioeventfd", + "Disable registration of ioeventfds with KVM (DEBUG)"); + object_class_property_set_description(klass, /* 3.0 */ + "x-no-vfio-ioeventfd", + "Disable linking of KVM ioeventfds to VFIO ioeventfds " + "(DEBUG)"); object_class_property_set_description(klass, /* 2.5 */ "x-pci-vendor-id", "Override PCI Vendor ID with provided value (DEBUG)"); @@ -3498,95 +3480,136 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) "x-pci-sub-device-id", "Override PCI Subsystem Device ID with provided value " "(DEBUG)"); + object_class_property_set_description(klass, /* 2.12 */ + "x-msix-relocation", + "Specify MSI-X MMIO relocation to the end of specified " + "existing BAR or new BAR to avoid virtualization overhead " + "due to adjacent device registers"); +} + +static const TypeInfo vfio_pci_base_dev_info = { + .name = TYPE_VFIO_PCI_BASE, + .parent = TYPE_PCI_DEVICE, + .instance_size = 0, + .abstract = true, + .class_init = vfio_pci_base_dev_class_init, + .interfaces = (InterfaceInfo[]) { + { INTERFACE_PCIE_DEVICE }, + { INTERFACE_CONVENTIONAL_PCI_DEVICE }, + { } + }, +}; + +static const Property vfio_pci_dev_properties[] = { + DEFINE_PROP_PCI_HOST_DEVADDR("host", VFIOPCIDevice, host), + DEFINE_PROP_UUID_NODEFAULT("vf-token", VFIOPCIDevice, vf_token), + DEFINE_PROP_STRING("sysfsdev", VFIOPCIDevice, vbasedev.sysfsdev), + DEFINE_PROP_ON_OFF_AUTO("display", VFIOPCIDevice, + display, ON_OFF_AUTO_OFF), + DEFINE_PROP_UINT32("xres", VFIOPCIDevice, display_xres, 0), + DEFINE_PROP_UINT32("yres", VFIOPCIDevice, display_yres, 0), + DEFINE_PROP_BIT("x-vga", VFIOPCIDevice, features, + VFIO_FEATURE_ENABLE_VGA_BIT, false), + DEFINE_PROP_BIT("x-req", VFIOPCIDevice, features, + VFIO_FEATURE_ENABLE_REQ_BIT, true), + DEFINE_PROP_BIT("x-igd-opregion", VFIOPCIDevice, features, + VFIO_FEATURE_ENABLE_IGD_OPREGION_BIT, false), + DEFINE_PROP_UINT32("x-igd-gms", VFIOPCIDevice, igd_gms, 0), + DEFINE_PROP_BIT("x-igd-lpc", VFIOPCIDevice, features, + VFIO_FEATURE_ENABLE_IGD_LPC_BIT, false), + DEFINE_PROP_ON_OFF_AUTO("x-igd-legacy-mode", VFIOPCIDevice, + igd_legacy_mode, ON_OFF_AUTO_AUTO), + DEFINE_PROP_BOOL("x-no-geforce-quirks", VFIOPCIDevice, + no_geforce_quirks, false), + DEFINE_PROP_UNSIGNED_NODEFAULT("x-nv-gpudirect-clique", VFIOPCIDevice, + nv_gpudirect_clique, + qdev_prop_nv_gpudirect_clique, uint8_t), +#ifdef CONFIG_IOMMUFD + DEFINE_PROP_LINK("iommufd", VFIOPCIDevice, vbasedev.iommufd, + TYPE_IOMMUFD_BACKEND, IOMMUFDBackend *), +#endif + DEFINE_PROP_BOOL("skip-vsc-check", VFIOPCIDevice, skip_vsc_check, true), +}; + +#ifdef CONFIG_IOMMUFD +static void vfio_pci_set_fd(Object *obj, const char *str, Error **errp) +{ + VFIOPCIDevice *vdev = VFIO_PCI_BASE(obj); + vfio_device_set_fd(&vdev->vbasedev, str, errp); +} +#endif + +static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + PCIDeviceClass *pdc = PCI_DEVICE_CLASS(klass); + + device_class_set_legacy_reset(dc, vfio_pci_reset); + device_class_set_props(dc, vfio_pci_dev_properties); +#ifdef CONFIG_IOMMUFD + object_class_property_add_str(klass, "fd", NULL, vfio_pci_set_fd); +#endif + dc->desc = "VFIO-based PCI device assignment"; + pdc->realize = vfio_realize; + + object_class_property_set_description(klass, /* 1.3 */ + "host", + "Host PCI address [domain:] of assigned device"); + object_class_property_set_description(klass, /* 8.1 */ + "vf-token", + "Specify UUID VF token. Required for VF when PF is owned " + "by another VFIO driver"); object_class_property_set_description(klass, /* 2.6 */ "sysfsdev", "Host sysfs path of assigned device"); + object_class_property_set_description(klass, /* 2.12 */ + "display", + "Enable display support for device, ex. vGPU"); + object_class_property_set_description(klass, /* 3.2 */ + "xres", + "Set X display resolution the vGPU should use"); + object_class_property_set_description(klass, /* 3.2 */ + "yres", + "Set Y display resolution the vGPU should use"); + object_class_property_set_description(klass, /* 1.5 */ + "x-vga", + "Expose VGA address spaces for device"); + object_class_property_set_description(klass, /* 2.3 */ + "x-req", + "Disable device request notification support (DEBUG)"); object_class_property_set_description(klass, /* 2.7 */ "x-igd-opregion", "Expose host IGD OpRegion to guest"); object_class_property_set_description(klass, /* 2.7 (See c4c45e943e51) */ "x-igd-gms", "Override IGD data stolen memory size (32MiB units)"); - object_class_property_set_description(klass, /* 2.11 */ - "x-nv-gpudirect-clique", - "Add NVIDIA GPUDirect capability indicating P2P DMA " - "clique for device [0-15]"); object_class_property_set_description(klass, /* 2.12 */ "x-no-geforce-quirks", "Disable GeForce quirks (for NVIDIA Quadro/GRID/Tesla). " "Improves performance"); - object_class_property_set_description(klass, /* 2.12 */ - "display", - "Enable display support for device, ex. vGPU"); - object_class_property_set_description(klass, /* 2.12 */ - "x-msix-relocation", - "Specify MSI-X MMIO relocation to the end of specified " - "existing BAR or new BAR to avoid virtualization overhead " - "due to adjacent device registers"); - object_class_property_set_description(klass, /* 3.0 */ - "x-no-kvm-ioeventfd", - "Disable registration of ioeventfds with KVM (DEBUG)"); - object_class_property_set_description(klass, /* 3.0 */ - "x-no-vfio-ioeventfd", - "Disable linking of KVM ioeventfds to VFIO ioeventfds " - "(DEBUG)"); - object_class_property_set_description(klass, /* 3.1 */ - "x-balloon-allowed", - "Override allowing ballooning with device (DEBUG, DANGER)"); - object_class_property_set_description(klass, /* 3.2 */ - "xres", - "Set X display resolution the vGPU should use"); - object_class_property_set_description(klass, /* 3.2 */ - "yres", - "Set Y display resolution the vGPU should use"); - object_class_property_set_description(klass, /* 5.2 */ - "x-pre-copy-dirty-page-tracking", - "Disable dirty pages tracking during iterative phase " - "(DEBUG)"); - object_class_property_set_description(klass, /* 5.2, 8.0 non-experimetal */ - "enable-migration", - "Enale device migration. Also requires a host VFIO PCI " - "variant or mdev driver with migration support enabled"); - object_class_property_set_description(klass, /* 8.1 */ - "vf-token", - "Specify UUID VF token. Required for VF when PF is owned " - "by another VFIO driver"); + object_class_property_set_description(klass, /* 2.11 */ + "x-nv-gpudirect-clique", + "Add NVIDIA GPUDirect capability indicating P2P DMA " + "clique for device [0-15]"); #ifdef CONFIG_IOMMUFD object_class_property_set_description(klass, /* 9.0 */ "iommufd", "Set host IOMMUFD backend device"); #endif - object_class_property_set_description(klass, /* 9.1 */ - "x-device-dirty-page-tracking", - "Disable device dirty page tracking and use " - "container-based dirty page tracking"); - object_class_property_set_description(klass, /* 9.1 */ - "migration-events", - "Emit VFIO migration QAPI event when a VFIO device " - "changes its migration state. For management applications"); object_class_property_set_description(klass, /* 9.1 */ "skip-vsc-check", "Skip config space check for Vendor Specific Capability. " "Setting to false will enforce strict checking of VSC content " "(DEBUG)"); - object_class_property_set_description(klass, /* 10.0 */ - "x-migration-multifd-transfer", - "Transfer this device state via " - "multifd channels when live migrating it"); } static const TypeInfo vfio_pci_dev_info = { .name = TYPE_VFIO_PCI, - .parent = TYPE_PCI_DEVICE, + .parent = TYPE_VFIO_PCI_BASE, .instance_size = sizeof(VFIOPCIDevice), .class_init = vfio_pci_dev_class_init, .instance_init = vfio_instance_init, .instance_finalize = vfio_instance_finalize, - .interfaces = (InterfaceInfo[]) { - { INTERFACE_PCIE_DEVICE }, - { INTERFACE_CONVENTIONAL_PCI_DEVICE }, - { } - }, }; static const Property vfio_pci_dev_nohotplug_properties[] = { @@ -3632,6 +3655,7 @@ static void register_vfio_pci_dev_type(void) vfio_pci_migration_multifd_transfer_prop = qdev_prop_on_off_auto; vfio_pci_migration_multifd_transfer_prop.realized_set_allowed = true; + type_register_static(&vfio_pci_base_dev_info); type_register_static(&vfio_pci_dev_info); type_register_static(&vfio_pci_nohotplug_dev_info); } diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index cbea3be029..4000ba804c 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -118,8 +118,13 @@ typedef struct VFIOMSIXInfo { bool noresize; } VFIOMSIXInfo; -#define TYPE_VFIO_PCI "vfio-pci" -OBJECT_DECLARE_SIMPLE_TYPE(VFIOPCIDevice, VFIO_PCI) +/* + * TYPE_VFIO_PCI_BASE is an abstract type used to share code + * between VFIO implementations that use a kernel driver + * with those that use user sockets. + */ +#define TYPE_VFIO_PCI_BASE "vfio-pci-base" +OBJECT_DECLARE_SIMPLE_TYPE(VFIOPCIDevice, VFIO_PCI_BASE) struct VFIOPCIDevice { PCIDevice pdev; @@ -187,6 +192,9 @@ struct VFIOPCIDevice { Notifier irqchip_change_notifier; }; +#define TYPE_VFIO_PCI "vfio-pci" +/* TYPE_VFIO_PCI shares struct VFIOPCIDevice. */ + /* Use uin32_t for vendor & device so PCI_ANY_ID expands and cannot match hw */ static inline bool vfio_pci_is(VFIOPCIDevice *vdev, uint32_t vendor, uint32_t device) { From patchwork Wed Apr 9 13:48:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044683 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 80D20C36002 for ; Wed, 9 Apr 2025 13:49:53 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2Vo0-0006rT-OM; Wed, 09 Apr 2025 09:49:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnX-0006Zj-Fa; Wed, 09 Apr 2025 09:49:01 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnT-0005fo-LE; Wed, 09 Apr 2025 09:48:58 -0400 Received: from pps.filterd (m0127841.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 539AOBIw003397; Wed, 9 Apr 2025 06:48:51 -0700 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=icqY+0ndLgLvbnshgprH45yu+aYSHBxbrH53ZmSoB T8=; b=pwIeZxeA/vsjhlhMUABPAPHt4+aWnDyXkwqFjKneFlGqN/QwrjAkxBO4T geUcpr4r66ipCOGg0Oq9dZV7EYAhPGImzfLQCC4K32nYwuTNml9yoL5s/FSemYNX +l055O7DGP0cZPc42W94VQY+tvSCTfDvm97fx2MYLrzOxq9x8CV3cyD8hb9GfPkP CKQqRMMeLvESOpNFJmMuGg8YtkshLJw7zK9afGl/2LV7NVnarexE+nPVj5cDQC7G UvLOAqaSc2ylzRG9WXbdHUoKTSNYuK6tI8JsWnmZtyKArTBJCTM66GmfZqQ9l+Lb ppEirt8m8NhJFS+4jLPMrKBQgQBJA== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazlp17012038.outbound.protection.outlook.com [40.93.1.38]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 45u22aj4ux-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wddFmyhLsElIUNrG9iBowwgzBS8Nl8R8e6LulF4CEYu7b8nRmUMq8mfKKb71E1sTS+iIhZJa3ataXSwYn8oMHDb2Nef8qd/jjCyMADQjpj38NgSX5e8G4Sx32ESNnq+orZ6NVs36mZ/hCgwYmcODELSwRAj/9yiDf/woHaCRAUxBcn0aVi8OxU/UzE0mQpaJwhHB4nTcb5JYabW97BOaWj9szTZhWCQP21CN6uicLs5i0r/B0yPeSSVeMQH+zuWwBvFf93t3oAFKyFK9zp6yLTcpctobW1NnhhFE3TrGcK0AG9QfGsSYw3Qo6FDGw02l3fDNUbd5KzjISZfi2NCX1g== 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=icqY+0ndLgLvbnshgprH45yu+aYSHBxbrH53ZmSoBT8=; b=XSDJGMU0JzAuu4Eyrmw4jvz7FO8t9g7TYsYXgf3LP+EcL41QgscNmnrlLcU0KlrANwOi8uUCC7nvh3QVE7ZbjyvbkrmdtMEqq2gMI303dKmuCXn7dWEKe85a+E5IGClMVbdsQGQCHoMnQSvM0kp92ol5PZYd45d0JjACdpbNXfOrb5cbrSvmsEktHAwRrlDpxVa0HeiMxatr5l3LKMYtJEvcoXsa/XawF35+FvXJvRR7/Z4NzVhNe3nByr9JeAR2uj/OKfu8ptNE4V04mULPcgQNNq5aiBCuMAMf4MnxwJ1AVdotSTu5ngZpNiRqLz3DfcjJuNEXQXiGFHN05VhB8g== 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=icqY+0ndLgLvbnshgprH45yu+aYSHBxbrH53ZmSoBT8=; b=EgEh2i655UxXsSPRJOZgCfzgihuXhUwgx5Dc9Iz1op7HlZimKpAWpg70GhIQionhn1c8K45TmBSMUioENTlkOFV0CtlUtyn8ugBYUjGMrn0lVN+38Um0NavQiNuGEq7+YYzrm8GT29u97q8cFarRUH+O+8/cSd8wWQcWyYWerMch47mawhUGFVxcOKvInpYHoACRCaorBT1xAI+J3oC4SS/REMzy9NjJvzaKmQSqrJgJdL7zBE11gBjgHM5bgfv8kCctl1YOfzVzm7U1Vdgh6iUDJjU3VHdmtTwED3W3QyWmNkMsiYw343GQSruIB2ogTagO3FBuvk5qkq44zSBdWQ== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by MWHPR02MB10356.namprd02.prod.outlook.com (2603:10b6:303:289::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Wed, 9 Apr 2025 13:48:45 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:45 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon Subject: [PATCH 09/14] vfio: add vfio_device_get_irq_info() helper Date: Wed, 9 Apr 2025 15:48:09 +0200 Message-Id: <20250409134814.478903-10-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|MWHPR02MB10356:EE_ X-MS-Office365-Filtering-Correlation-Id: 647d1eb0-3713-45e4-39fb-08dd776d3f18 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: /mkDEUJ9dYzbx7PuEfD7pOPjKmMHnRf1CprmKr6WmYJyGoefjn2uM3pOMhc/9sosDH96D7uFZf5F6pFgoy7T2jOGeYgQSYZMB72k0WJ3WS/4OB6DT/9WpcVGrCNBhLLoS4P3NBL2bQ4bGGpebNmFi7P85hufaV9OIeVmazwn6y4TYbYUjdvg8X4wg35qPEVDvy8wLiwVoYzxzb8z6kASp7mjTEouL4LXWbrhHjxkPGm9iDQ2wmYXhKTo0qhdKw8Nge/lb5FyT41+yXlQTfVjOBIHg4wEpuE5L40KuFyzUYdCCcxlRCjis//J9vaDcpV0oDQioNce6Qk/FuMUC9C23kC+Hp6NQriyJFYJ1Yysd6DRkmSQhICG8tb+IPLPedIsjXqk3C5VQkBPAhTxoJtCdchfDZYZMziH6gAYHlit5upzN5AYUxRmLRAxj6PqII4SHjexLeatRWByBYadvSQHcvgvD/Yg/SlmY0VWNDen7YgCQaUsh+dDuioDEhJl5CJb8Ttdhm70kw9YxQKMC3SUEApRWwb8aIlkZJseFMgJgNGXlkZ3RR1i1OTUBDtSRhXLdcrQv/8KKgh+AILVIi9i7C6+T1CbEkaBS+UMPb3GDCq52FlMXDXcMnieJRZ3KcsrcKjKseuGq4i54hgD7s1RBxcVzkFELexXv3L6/2kkjzayGBYUNUqwZDa5CqKfGynfR7coetc7aF61FHA4K0jELk45sPBkRT2169iEa5nnd6zb08ENbiIXnzv0I235qCG/HOqLHCbiPjmspKdC4Wgvf2orJGcAF4IEAaVmarl/Axhmd5LMyvogZfLKsvH+RSLl5KaVaV+5Xm7xbmu3Gv8OB5v94Phps5qvxXuMlEvVerTwk9lhNfpmwZJSxsU3PhrXm4X4Y+Z+8Pn5qubHmiyz4dotbfWx0EvnF5gHs2IozeSmALqPOLBbKXPI+aJDA2S7A7W8qCf/ZGTrl1+aaD0pqjjFbBbB1AR2DcZZF5X0pxhXBoy8mXWpYjeKTOgq3Uq1HPbP8yxjnelj4/rHVmw5ud28M9lE9FuFXdaZJZy24Sk7qIZ0hYnI3jjTEK3mUDZC7gZ5b9wWyY4PyMeygPBylV9Pv76RDACyO2pFHchGXD4Sh/1QMZg3ad1ZpSRQzsXHSNisooY2PqUdOlFT3nlcQQzWs5BunurKUpYjJIHnVtub4uziwfdP4jIcR0wU1hQkj73H3XvUpJQilzE8smfNlHvCluaQJzL069Ehqo1kqyhOD8zKl4SaxqcLF98YGdeFDoAZPh2uZZbPDmxoeoGkrqBr5rvpuhVZSLO/8G5yYONoPeWdPZNFyoTFosm5Ybbscn+HQUKp2OGpAKyTSzOO4kcKUOJMxZx8SOSki3hH2UyF3Jk7gLbja5dAqq5xxO+K X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(376014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: OIOQF0oEiJLnAbyCt/HW1KjJCHV83935meZTBsSqHYj5u2b17+urNpi0MhbA1qQgY9VNCJEvvtgXFbWizN0UTKR0WIUD4Bhe0BrXFrMzD1NFgU+H1aCZz5gbEefpAj4odL6/mo4L2/8YwpUqt0laxGr5nYZZBdrnsUZNZkrL9lX5F8MmcqAaAb6/gMNC66Cuk0FmKZqY3vHMqHyxvtZh6LdtosUNdwc1/cjsRVTQgVMQ1NN1RrK9oBkh0WXF3z1hS2H9G8zwCm/54vaOEQrjKnkgqGHhXr4U6U8/robZNhD/amO2dIRLJe5wTy5SewYAcRLZ4CvVytDa1f7CFIlaQ2256oPj1vtxBlZv7J11r4EBFP+PdmjXmDZNuJDodosTErz5r3eOVFnzybrtmE5MUrAFGVyrI8hZ8FdFpCyHxmRtUaFv6+jgnxPEJvJ79EANt2eiqmiwU2sB0/NzJOe/OT/8VrK3JE12KQeh/xJOXnNLquo9W7oH+CpTVJi/hVMH9r/7iXCwZCl3SgKhbiouWVIMlyiHHOvIbAosDWSaAuu1ow8Z6e+nWRq0eQYipC7nvF64dvFJr8xVvsvB23wZ/DuokuTwGNy75+rVk8IkRrtveZsKYeuhiDVm9Q9VKTQM9Cyshz26vTlur3Y82STtgp63Z7zrzViC4yXEH3rsf9wqi+RNDrPCBECc23HAC3pdKc7u6CYufxA8Yd8wiZEoq3E7uTzQn77UaroxxMmoDYdU3Zp/j/WnrQeArn5GH/upk9HyhL9lK1H1G3Xrwx79FrMZ5EqoLY1p3i8AgvTKJUova960mahVhfHvy6ypDNxVKV1WG1PSrWvzVdRY9WxTsOGIetn/qOJ696rUIvmmBsISjlSCP/oiiXRD8lsUE09NRooJ7mCdPCuwz3uKZHbF56DnLvxMaTuRwrmWZcncyWn26knbs4w28gW9O9nsPueAkbUlFqJ6trwT+zezqV4ozgo6lE9IB2B/rKRef8uCeVcAlXTJTSZ4Grjugc0IB68U31w3CR/R9Er4hD6BdQoDqV/s9n4XWPO3hew9+FuOAWzEwUGdmKPewEWHH2JRggQozZGTAy7f5MBGDw1sY2gwPcFenhvXls88ICnozd3GTMx4sakfh1VsTYv+/AFOznHh7aiZuEE3IjmZfPvAQ+42nsrpvWhhDhxwKW9IXyNMhPzR4LVDraNuAa3z8GVQi+JNjRxmtaFroXNWfZWA2npAP3rAyIoujPAzR4gm7a+lnuNKCijfez3Pir1t95ettk3eqpUW4MDYRvLuAeXVcOiK8XyODoy2vDiOdCIoNA+jyA3r+H0FklUsnDV8w9CiiFe1Ppua6TLK7mF68zhCyI24suTumXfjKcyqH04CQb6FiOfynHzVG9FoBN4DiSqTLa5jRyIulmY4OkdA6KRNAGa2VbhjTdKWDY4w3epL5Mfwia/7VRdeQdyP0/4tTgJ94L4QToymzY9u94/MInKuYEj+FcI3aB+cgHe1SPTCvMECTKyphnLWGdcfDd0Dr0mmt0l4uDBHfqmEtVMBEeMPKsDKLFU76KxMCwFw08GWFDPbifRW83t+84ycUoJuKzifwBLz X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 647d1eb0-3713-45e4-39fb-08dd776d3f18 X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:45.1627 (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: V1pcjSTL5EoPvAFUwGvSM9/nLQnhCVvgxgX/fwiyNOeNJbaiNpljEDlcnO4vG002jZQT4VcDUJLXe07f7JRXiQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB10356 X-Proofpoint-ORIG-GUID: 4HP9G15rMBbMBzSF_wu8oy9rxqzdgKkX X-Proofpoint-GUID: 4HP9G15rMBbMBzSF_wu8oy9rxqzdgKkX X-Authority-Analysis: v=2.4 cv=Xtf6OUF9 c=1 sm=1 tr=0 ts=67f67ac0 cx=c_pps a=a0mreH8AhMfks3Nq6fhO9Q==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=vT2z2tywOHHVet3RVBQA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.155.12; envelope-from=john.levon@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Add a helper similar to vfio_device_get_region_info() and use it everywhere. Replace a couple of needless allocations with stack variables. As a side-effect, this fixes a minor error reporting issue in the call from vfio_msix_early_setup(). Signed-off-by: John Levon --- hw/vfio/ap.c | 19 ++++++++++--------- hw/vfio/ccw.c | 20 +++++++++++--------- hw/vfio/device.c | 15 +++++++++++++++ hw/vfio/pci.c | 23 +++++++++++------------ hw/vfio/platform.c | 6 +++--- include/hw/vfio/vfio-device.h | 3 +++ 6 files changed, 53 insertions(+), 33 deletions(-) diff --git a/hw/vfio/ap.c b/hw/vfio/ap.c index 4af7379d4f..f311bca5b6 100644 --- a/hw/vfio/ap.c +++ b/hw/vfio/ap.c @@ -74,10 +74,10 @@ static bool vfio_ap_register_irq_notifier(VFIOAPDevice *vapdev, unsigned int irq, Error **errp) { int fd; - size_t argsz; + int ret; IOHandler *fd_read; EventNotifier *notifier; - g_autofree struct vfio_irq_info *irq_info = NULL; + struct vfio_irq_info irq_info; VFIODevice *vdev = &vapdev->vdev; switch (irq) { @@ -96,14 +96,15 @@ static bool vfio_ap_register_irq_notifier(VFIOAPDevice *vapdev, return false; } - argsz = sizeof(*irq_info); - irq_info = g_malloc0(argsz); - irq_info->index = irq; - irq_info->argsz = argsz; + ret = vfio_device_get_irq_info(vdev, irq, &irq_info); + + if (ret < 0) { + error_setg_errno(errp, -ret, "vfio: Error getting irq info"); + return false; + } - if (ioctl(vdev->fd, VFIO_DEVICE_GET_IRQ_INFO, - irq_info) < 0 || irq_info->count < 1) { - error_setg_errno(errp, errno, "vfio: Error getting irq info"); + if (irq_info.count < 1) { + error_setg_errno(errp, EINVAL, "vfio: Error getting irq info, count=0"); return false; } diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c index 98aa0000da..dac8769925 100644 --- a/hw/vfio/ccw.c +++ b/hw/vfio/ccw.c @@ -376,8 +376,8 @@ static bool vfio_ccw_register_irq_notifier(VFIOCCWDevice *vcdev, Error **errp) { VFIODevice *vdev = &vcdev->vdev; - g_autofree struct vfio_irq_info *irq_info = NULL; - size_t argsz; + struct vfio_irq_info irq_info; + int ret; int fd; EventNotifier *notifier; IOHandler *fd_read; @@ -406,13 +406,15 @@ static bool vfio_ccw_register_irq_notifier(VFIOCCWDevice *vcdev, return false; } - argsz = sizeof(*irq_info); - irq_info = g_malloc0(argsz); - irq_info->index = irq; - irq_info->argsz = argsz; - if (ioctl(vdev->fd, VFIO_DEVICE_GET_IRQ_INFO, - irq_info) < 0 || irq_info->count < 1) { - error_setg_errno(errp, errno, "vfio: Error getting irq info"); + ret = vfio_device_get_irq_info(vdev, irq, &irq_info); + + if (ret < 0) { + error_setg_errno(errp, -ret, "vfio: Error getting irq info"); + return false; + } + + if (irq_info.count < 1) { + error_setg_errno(errp, EINVAL, "vfio: Error getting irq info, count=0"); return false; } diff --git a/hw/vfio/device.c b/hw/vfio/device.c index b9473878fc..2966171118 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -185,6 +185,21 @@ bool vfio_device_irq_set_signaling(VFIODevice *vbasedev, int index, int subindex return false; } +int vfio_device_get_irq_info(VFIODevice *vbasedev, int index, + struct vfio_irq_info *info) +{ + int ret; + + memset(info, 0, sizeof(*info)); + + info->argsz = sizeof(*info); + info->index = index; + + ret = ioctl(vbasedev->fd, VFIO_DEVICE_GET_IRQ_INFO, info); + + return ret < 0 ? -errno : ret; +} + int vfio_device_get_region_info(VFIODevice *vbasedev, int index, struct vfio_region_info **info) { diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 090b2f2ef0..ac53c43f2b 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -1555,8 +1555,7 @@ static bool vfio_msix_early_setup(VFIOPCIDevice *vdev, Error **errp) uint16_t ctrl; uint32_t table, pba; int ret, fd = vdev->vbasedev.fd; - struct vfio_irq_info irq_info = { .argsz = sizeof(irq_info), - .index = VFIO_PCI_MSIX_IRQ_INDEX }; + struct vfio_irq_info irq_info; VFIOMSIXInfo *msix; pos = pci_find_capability(&vdev->pdev, PCI_CAP_ID_MSIX); @@ -1593,7 +1592,8 @@ static bool vfio_msix_early_setup(VFIOPCIDevice *vdev, Error **errp) msix->pba_offset = pba & ~PCI_MSIX_FLAGS_BIRMASK; msix->entries = (ctrl & PCI_MSIX_FLAGS_QSIZE) + 1; - ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info); + ret = vfio_device_get_irq_info(&vdev->vbasedev, VFIO_PCI_MSIX_IRQ_INDEX, + &irq_info); if (ret < 0) { error_setg_errno(errp, -ret, "failed to get MSI-X irq info"); g_free(msix); @@ -2737,7 +2737,7 @@ static bool vfio_populate_device(VFIOPCIDevice *vdev, Error **errp) { VFIODevice *vbasedev = &vdev->vbasedev; g_autofree struct vfio_region_info *reg_info = NULL; - struct vfio_irq_info irq_info = { .argsz = sizeof(irq_info) }; + struct vfio_irq_info irq_info; int i, ret = -1; /* Sanity check device */ @@ -2798,12 +2798,10 @@ static bool vfio_populate_device(VFIOPCIDevice *vdev, Error **errp) } } - irq_info.index = VFIO_PCI_ERR_IRQ_INDEX; - - ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info); + ret = vfio_device_get_irq_info(vbasedev, VFIO_PCI_ERR_IRQ_INDEX, &irq_info); if (ret) { /* This can fail for an old kernel or legacy PCI dev */ - trace_vfio_populate_device_get_irq_info_failure(strerror(errno)); + trace_vfio_populate_device_get_irq_info_failure(strerror(-ret)); } else if (irq_info.count == 1) { vdev->pci_aer = true; } else { @@ -2912,17 +2910,18 @@ static void vfio_req_notifier_handler(void *opaque) static void vfio_register_req_notifier(VFIOPCIDevice *vdev) { - struct vfio_irq_info irq_info = { .argsz = sizeof(irq_info), - .index = VFIO_PCI_REQ_IRQ_INDEX }; + struct vfio_irq_info irq_info; Error *err = NULL; int32_t fd; + int ret; if (!(vdev->features & VFIO_FEATURE_ENABLE_REQ)) { return; } - if (ioctl(vdev->vbasedev.fd, - VFIO_DEVICE_GET_IRQ_INFO, &irq_info) < 0 || irq_info.count < 1) { + ret = vfio_device_get_irq_info(&vdev->vbasedev, VFIO_PCI_REQ_IRQ_INDEX, + &irq_info); + if (ret < 0 || irq_info.count < 1) { return; } diff --git a/hw/vfio/platform.c b/hw/vfio/platform.c index 877d69b7aa..fd176c18a4 100644 --- a/hw/vfio/platform.c +++ b/hw/vfio/platform.c @@ -475,10 +475,10 @@ static bool vfio_populate_device(VFIODevice *vbasedev, Error **errp) QSIMPLEQ_INIT(&vdev->pending_intp_queue); for (i = 0; i < vbasedev->num_irqs; i++) { - struct vfio_irq_info irq = { .argsz = sizeof(irq) }; + struct vfio_irq_info irq; + + ret = vfio_device_get_irq_info(vbasedev, i, &irq); - irq.index = i; - ret = ioctl(vbasedev->fd, VFIO_DEVICE_GET_IRQ_INFO, &irq); if (ret) { error_setg_errno(errp, -ret, "failed to get device irq info"); goto irq_err; diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index 3563a82ede..9522a09c48 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -144,6 +144,9 @@ int vfio_device_get_region_info(VFIODevice *vbasedev, int index, int vfio_device_get_region_info_type(VFIODevice *vbasedev, uint32_t type, uint32_t subtype, struct vfio_region_info **info); bool vfio_device_has_region_cap(VFIODevice *vbasedev, int region, uint16_t cap_type); + +int vfio_device_get_irq_info(VFIODevice *vbasedev, int index, + struct vfio_irq_info *info); #endif /* Returns 0 on success, or a negative errno. */ From patchwork Wed Apr 9 13:48:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044694 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3A840C36002 for ; Wed, 9 Apr 2025 13:51:56 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2Vo6-0007C6-NS; Wed, 09 Apr 2025 09:49:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnV-0006Yz-T1; Wed, 09 Apr 2025 09:49:01 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnR-0005fd-Lx; Wed, 09 Apr 2025 09:48:56 -0400 Received: from pps.filterd (m0127844.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5396ShdK013354; Wed, 9 Apr 2025 06:48:50 -0700 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=nwmmnUnobENYkF8KYjPo7qqtQ42L2fuSLVTh2QfK/ 5s=; b=MLwADNq7mAlhQ/UhaUf577naDFSo1oueDh745lciWpn2aGOBK7t5EBksl 4LjHBl/97WhRRMt54myhi3kmltQumZ6gY+zzQyiE0rkzzgxNK+/20YNQYblXRbGD Cl3tJXnrPO5vonHKJpSKOGHrMC1m9/B2hLCe8RScDenI9RYew7RDq+fjg/6iicB9 strmST3gQfgZpw5N3FfKmBUcqfv84KZ4IqM5srvEuETv/OIqPIhV7z1etIEJK/uC GJBw0AOPQuhuNh4Y2pFtgGaPf9Qm4sbC00g6m8BS257YyqLh9Mt8gd34NXc9NRLK JOWIuB0nl2QHiRJ15nYHLlPo28CsQ== Received: from byapr05cu005.outbound.protection.outlook.com (mail-westusazlp17010007.outbound.protection.outlook.com [40.93.1.7]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 45u420syja-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mT6P3RLSiVWDjzXJEW/YqYxZrWsmtmxVqbAeGF+mLcJSEdOg6r7WjYwsWKiPwnRKGkkYkkOWY+oAMCZ9+XJv6vRq6U0PNIGYLENt3r7eoyGoS7dvXhpKXwGp62945o+x8qBXddQR1zB81SFqlI5CBUOQ1MmRbUDYTbEVRNSAXAPG5weh8U6HSdsCf1pVMiMfDmIV5IaahN6WuidxDKT0zU9P0IZ07HE8EkHQ/94gSwH0fHGtXCU8SjYs+vygJvARJX3caSHM1F+VWiMikex1UbNODI7t8W5llJrG8Q2ZScj6sPdjfAsXZ+22jMhMRcfQffanxa4PFhOw17lTN4exDg== 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=nwmmnUnobENYkF8KYjPo7qqtQ42L2fuSLVTh2QfK/5s=; b=A1RBN8e38LaAKQJr9T3B1m0megbeURop46fd5ml8arhZ4QUwGJMtbdRdKRxuVuyQVufFcaq9b1EMEhGleu+9qiikh4GNYj93UlwziryFMm9DqHGfj/SGlD1w1foSPxe2Z6WfDSjp9x4r2aTvDyAO2ggvu9fyXrTf9qqkH6+tHLXQqH/9CQys27EmbKfXv3C0gaRzvafhle4nt7Acb9AucxRFWmmAVKPKSNMYmEddrdW3QI3zi9NL/P+pG6Lgxh/IZNSp7xjjH2ClOrDXLYtEQWIBtNWdZVmz+hC306d+jhLiFGTVN14GrwNAXJwf1f9vFWluK49xh01p6g8ZKizp1Q== 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=nwmmnUnobENYkF8KYjPo7qqtQ42L2fuSLVTh2QfK/5s=; b=JIHMvIQjeCH/PWk04tEsA/bJVRy1f6J8lAZYq4Se3q5YqwnJQUwfHyS7+ucJG4NpoqVSHSrZeuE971rxfd3dIV6MTSwOV5dq5mxOn+2Wnxpfd7uzxKe2w6gket2kWBgXVTrR2tLVU2Wr54KIGM7QM1vGVHJtKpXo2YoZWXQHsyzjM7TvM+hwUdVQVjIHoxPgRi0HeXk1RjBE/oAYmGcJIZFhuFUgXI5lPEq/xu2ILysK7Fh3YVz0+bFJvu4g+w8+5VgKPK/R/+RbLEiq71mnn+IwanfBF0N1IlZvOmnGRj2knxg+dx/BYKzsYmtE6ycixF7CA8zGx+7FdLMosXA5tw== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by SJ0PR02MB7486.namprd02.prod.outlook.com (2603:10b6:a03:2a3::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.31; Wed, 9 Apr 2025 13:48:48 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:48 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon Subject: [PATCH 10/14] vfio: consistently handle return value for helpers Date: Wed, 9 Apr 2025 15:48:10 +0200 Message-Id: <20250409134814.478903-11-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|SJ0PR02MB7486:EE_ X-MS-Office365-Filtering-Correlation-Id: 56dcffd7-f0ab-4b34-ccbe-08dd776d40b7 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: ISl6Uxr/KVP/jizMy9+fup5Ae6JnYl5NdQxI9rmZqTw0bBymiWkAmzCIMG20lTKJcbnu91WEnUicHCEPAGK3Lcq7gNLN1yEmrVOST3o+TPF+bznwdLp6vFPMrx/LXG1aU/DhtIimWsgwxRlO2z1tIrS2C+5DP0rKLxFEgH2NXof9idh7/IFwIaAtE8+CmqfkH72KN2jZhbAhX0QmyRaDVkGXA2YZzBbgxCeaLinZgzuLbglNdaK6qoRxWe94v7+HgJFUY1ooSXXeZcV8QhaX3Rxih86z+xgmonoh5VunnM9yl84zAcKuLKgsLekMlPPa5ZXtfF9Vv3oSQJWhS1UUuP3t+5qBYDFNNsQa/mw197VNbzSftzR+XzT3mNAGMJU9W5vtU/0pVal3B1RzdirhmwiG9hrmMskDmNnB/8qZZaJWHCLCwabJinfJVXFcKbS7EsxCx7dJR89W97zpPUeHK1v2v3nrFu0vJvps0DDmVJkbF3qzrpRCoe0aLJ6eqM8HURCem5Slm8EX5s2k2U+1RWHssZtNsiyBnOqoZThRQb1wuV+smPUHJPltOsJdjlNN1xDc9Yu7H2K8ylXyyeNPwGHpIyc1rY3g94bq9qjmJTbwUDfAz4BtiCZ/bqM7B+Vm1vR99dfHPb8XnXsnyyLJ+c+/m4td9+7gwJ9g+2E/MakMvtYR3nnaEf0KIDqQUyiUHeRwBii2Oiv33Jj3+ik7tWBqWYV2gEcAmzp5h01FrkQHxwm0eL7Wkv61jNFqjGAnAJPglbmL0Z5sIWaqcm9mPvaK4quEkIeqTQMrIeQsXnFBxGZuL6aqfdhOOK6dLrgpatyG9FXm9CaTpyoPMXLJpxTA6DRd5Q9VMkK5cSGeEOKgWgouTFQrZSpP61c4UlfJ/IiLNonPItBMRBGQafpEBlSahoygP20H8YPGKdZtzvIig8D/ZlzXpWNSTWXRAc6YpLHKHCiQ87SXhqhSH7Ln1MakZAuF/Hj16nQy1Jmt9N8DiqcZ1OoPhCzugeYvNC9/Gd5qbF8pIGag58COiSxdVVVWN+31ZjDoHIZIU0eI2QH5KtIvT7SnHkqzyo/iz/Fb553WHM9L6NiDgHs7wbnpVzDQnropjzbqQrx3KPm/HbIqAILZqWg0FemnZ5ic74KFfNDDFYH/AfJilhSNBsHhsoe+K6B5TgqAH9Fb6XcoxfFD0WoGI8oiuSltBjwoYr53HirumqZ3p0C6mSRlNnahwmuBmT02YBlrvvCiBdyMj59UtLkMToOkZPstiUyN1rh/dLjSuMZxUdb8xbEEf/+PkeRWjMHFjfjUDF+3uLxNVh7zMddOKX08VICrLVzPFxbyAQ2Hycd/XIdC36+04/BDdn/oPmQ+BMdInM4oMV4nPIYbo+Jae4wR14EggXRD3dLfWOqJhD768F5kS4LybVx1Yg4rpwGdJwMzYNzmyk/x+4k= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(7416014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 23tuX3Pzk8aXIrz01ElEfWmPPjQrhNmHZR1JBz6jEbS0KIR/D9TjHa+lUGKi1uvsj/Ay3HJs7VeCeaxWCZ0/5oov74VNfHx4xCowrQrTHJjizPnOH+qLCBCMuvMeMQpBrPl6zCl7MoFTvGPsyjqPal7fQT5L6X7nSWnjsJnMiMGUevgmb260GhVbvscVEme2R9q/vQ/o+4FxqM7gmgsOuIbZfiTlzl0Hkuv+Sc1aO1jeICsKAcgzQQBZL50lSWcrU+t15eRILWSu54dsiJXw3miVBQHIwHs/0G2X+xlkHSBPwjzAxzDmrDPiFtCfZ/G/DOMAb2CzzKO9pWBjkOj7Ynz666YJhmLf0xU3AOooNAZNOjk63hiEDgX6zTGe1h2BQ8B3bGZMzQfD7N28YZtAt4sBJtZdxOMtOTWMPnFSsjAhENuJjMYJF8y0Kj3JORB99eF+mxqqwiQvJJL+9SRSRAJKp5L2Y4bqUyaT+FDBcBt5jFaRPLt8opEvskmkAV1vN3aex7x8dYVKEtlmhj9DEV8dn24VI4kbwTzN1XnWKqEgPFNHF4WnXooffpNEInGxdHN9+2RLnv0+gp5xwmukTaHg4bLtCofhnWijcsBXi4lUWYyAEq/O3BwZWYz7ZfN+krhEOMc0iv+6G2Jbdip1qvxbqnLxdTrVyiIAfikeOrqr84D5nHTon6hlAMtov+ZMAYICMtn3nifwv5rpBY06qfEdhuZaHNwPdFEGLjZsYW8E9ZuniVv+rT3mfluIn4KEdlgpv15JAv52084ZxVh4lzkOZYHJo3rxG8fvwjDYz9CGUtkBaGB+9oMxMWFQpXozurNyV6MKjiI8P1sEW25SBshdcM4MYZPqqIXEnqMHnEpaA5UdwBv9zEaxE2BjtWtFT4OJHo6UHadGeM7V4OSpCuEQtL82Rtiu5c2gMd1TbfKYaSPCUndxOh6O3sanb206hHMhRBIlDRB6H+crd5qT/mZlCFaQC7T9pUOOgA+gVCGd2LN+iVG9n4sUDJlFwzGdBuSaQDKZ+ieTFw5lT+Vr/AGpTak+y7+pT7HhGseVvQo5Ssx4BVHz710UMslLSrz9YwDAoUEMpoLkcru9++4iI6r18tzhNltxCJGcoe82rDo7x8/FJruz9KEwYBXHNOTXFVetQCnO39/RtdHQTbLNNUg/bk+dToh29ZxHrBJ/cLM/ZgFYnzM46ll8HZX+8mGLKZUlhLP6uO2fIgXFE06ugvgb+9HgrYR1fpE0TAsi44IEbv3GCUEZjnomOugJqx50HtiWL/vsRbQOktLzm65jO1BWrNSDU6EnzPEeAW+HK8p2weWX+Ce/8wlZi9JSfx8lGiFVPYCHBrVzNqx99FNwMaloyhW71utXNUJeb+Ahg4o5jK7hO4Iv1am03j1Z8AxQhzKBxIktkTeJUD9vzjS4SPmt+8ymwg0vGSdoOXsNIq/cBe16BJ8mCLfJXgw/gTgtb8vqPzQ6B7d0my6P81yLCJVuu7IpxdBsAbMXRHaFd+5qY2Dh8xpev6tJbeHi6QKA+mULacClLYkbLQRLUSyfvvwuegQmfJz7qFff+A3B5N5iC2vThUO48Jt0kIWD3YVX X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 56dcffd7-f0ab-4b34-ccbe-08dd776d40b7 X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:48.0068 (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: VvVkqZPjd83VMYbE4QJxCFmxUqzbmxu9ET8zdJo5k31HxBSAnrIsCy/Hge45XoLFuFsJQvvSzwlg7hpxmMrYXg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB7486 X-Proofpoint-ORIG-GUID: Mv3f3HDl2zCKDGwW74O2DKeogNCRyxMi X-Authority-Analysis: v=2.4 cv=TeGWtQQh c=1 sm=1 tr=0 ts=67f67ac2 cx=c_pps a=+1/HLBYLL4tv2yjlBWnClw==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=khE_JiE8E1OrqPP4vgkA:9 X-Proofpoint-GUID: Mv3f3HDl2zCKDGwW74O2DKeogNCRyxMi X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.155.12; envelope-from=john.levon@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Various bits of code that call vfio device APIs should consistently use the "return -errno" approach for passing errors back, rather than presuming errno is (still) set correctly. Signed-off-by: John Levon --- hw/vfio/pci.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index ac53c43f2b..ddeee33aa9 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -398,7 +398,7 @@ static int vfio_enable_msix_no_vec(VFIOPCIDevice *vdev) ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set); - return ret; + return ret < 0 ? -errno : ret; } static int vfio_enable_vectors(VFIOPCIDevice *vdev, bool msix) @@ -459,7 +459,7 @@ static int vfio_enable_vectors(VFIOPCIDevice *vdev, bool msix) g_free(irq_set); - return ret; + return ret < 0 ? -errno : ret; } static void vfio_add_kvm_msi_virq(VFIOPCIDevice *vdev, VFIOMSIVector *vector, @@ -581,7 +581,7 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, vfio_device_irq_disable(&vdev->vbasedev, VFIO_PCI_MSIX_IRQ_INDEX); ret = vfio_enable_vectors(vdev, true); if (ret) { - error_report("vfio: failed to enable vectors, %d", ret); + error_report("vfio: failed to enable vectors, %d", -ret); } } else { Error *err = NULL; @@ -695,7 +695,7 @@ static void vfio_msix_enable(VFIOPCIDevice *vdev) if (vdev->nr_vectors) { ret = vfio_enable_vectors(vdev, true); if (ret) { - error_report("vfio: failed to enable vectors, %d", ret); + error_report("vfio: failed to enable vectors, %d", -ret); } } else { /* @@ -712,7 +712,7 @@ static void vfio_msix_enable(VFIOPCIDevice *vdev) */ ret = vfio_enable_msix_no_vec(vdev); if (ret) { - error_report("vfio: failed to enable MSI-X, %d", ret); + error_report("vfio: failed to enable MSI-X, %d", -ret); } } @@ -765,7 +765,8 @@ retry: ret = vfio_enable_vectors(vdev, false); if (ret) { if (ret < 0) { - error_report("vfio: Error: Failed to setup MSI fds: %m"); + error_report("vfio: Error: Failed to setup MSI fds: %s", + strerror(-ret)); } else { error_report("vfio: Error: Failed to enable %d " "MSI vectors, retry with %d", vdev->nr_vectors, ret); @@ -882,17 +883,21 @@ static void vfio_update_msi(VFIOPCIDevice *vdev) static void vfio_pci_load_rom(VFIOPCIDevice *vdev) { g_autofree struct vfio_region_info *reg_info = NULL; + VFIODevice *vbasedev = &vdev->vbasedev; uint64_t size; off_t off = 0; ssize_t bytes; + int ret; + + ret = vfio_device_get_region_info(vbasedev, VFIO_PCI_ROM_REGION_INDEX, + ®_info); - if (vfio_device_get_region_info(&vdev->vbasedev, - VFIO_PCI_ROM_REGION_INDEX, ®_info)) { - error_report("vfio: Error getting ROM info: %m"); + if (ret != 0) { + error_report("vfio: Error getting ROM info: %s", strerror(-ret)); return; } - trace_vfio_pci_load_rom(vdev->vbasedev.name, (unsigned long)reg_info->size, + trace_vfio_pci_load_rom(vbasedev->name, (unsigned long)reg_info->size, (unsigned long)reg_info->offset, (unsigned long)reg_info->flags); @@ -901,8 +906,7 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) if (!vdev->rom_size) { vdev->rom_read_failed = true; - error_report("vfio-pci: Cannot read device rom at " - "%s", vdev->vbasedev.name); + error_report("vfio-pci: Cannot read device rom at %s", vbasedev->name); error_printf("Device option ROM contents are probably invalid " "(check dmesg).\nSkip option ROM probe with rombar=0, " "or load from file with romfile=\n"); @@ -913,7 +917,7 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) memset(vdev->rom, 0xff, size); while (size) { - bytes = pread(vdev->vbasedev.fd, vdev->rom + off, + bytes = pread(vbasedev->fd, vdev->rom + off, size, vdev->rom_offset + off); if (bytes == 0) { break; From patchwork Wed Apr 9 13:48:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044697 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4ADBDC369A1 for ; Wed, 9 Apr 2025 13:52:31 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2Vo7-0007Mz-QF; Wed, 09 Apr 2025 09:49:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2Vna-0006ak-1c; Wed, 09 Apr 2025 09:49:04 -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 1u2VnW-0005fy-9N; Wed, 09 Apr 2025 09:49:01 -0400 Received: from pps.filterd (m0127839.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5395fx1L010967; Wed, 9 Apr 2025 06:48:53 -0700 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=WBtodLEUiNa2GOVf4/6i3ZIGHgcW33zMtZnO00P0f ko=; b=xfcKD4RDyKvVpq45MEVRC/ude218RuLMa2GVEHn62wSX00HVU5V5C9Lij O4VaU/yiMbE1lnAUfqotvfxg7eNsPk9w2Vj5wBgms/qRerjZvKobuzXtGXFHbqOT m/mtjx6dJ/sEmSubs0Cx/8rSCq8BwKFv3pEl3ACgm+KqiqpJ7YvK/IkKK9JE3uHz 5XZskh4zjoJljwct2a6p8MigvMy6ruI2ZlWZsPHSKwsXNZVVfALUsxx9PcNsa0eS CORdvnFfrU5yLgv910kp98Cb0thYAKD/KpJNDocgwEEqwPOrnoQ2lXeDa/bynlLX afo94OyNS8OGpu2hwinO8ZKewYDCw== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazlp17012036.outbound.protection.outlook.com [40.93.1.36]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 45u3kksbja-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Llp+WSXA2w0jchdZzTA+KW+rsIlVmT3hDN3a+LCMaDJ7FH3Rb9wrAQoVRBavPHNM0POiH8T8V7WA5QV1rFeVgEnPgezaUL9MRvOXsLX74anCD6+RTpdoyRupTtWk2TBgzUlPJAt3fLINQ/jeaAwf65JYEmJj+Jm9jpQia4RcmpihIwZKBrOZCHc9SQm1I3i7AdkbCQ7cZ6vTv6SKS446yfY5gR1B3V0nDMJvy3BxER8ivvcZFHZwJpAcJ/6PQiQDY6m8P46RPCa5Cd8U8olrVOtpWExRzzpgl5WyGY6QHHWNCQuCz48H2qGtUvQEDi8h2qYMC/nx/wn+P7Yl12CZzA== 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=WBtodLEUiNa2GOVf4/6i3ZIGHgcW33zMtZnO00P0fko=; b=N5mOhOfNpDiv9nSSdhsuClkOeVq3Qx42Tz9x/FoqEuvHhKcq/F5NtTOVu/YZzJBB8eU2xPccif7TAWh8JgJqApyd953tYVXVQdKAitKTdqTYYkzOUCS8FRqz90pfqs3yJkXW6n4iDlrcfv1j8Gf0ESfrZYGr7TNhy34ZJZlYITmEfJGHXDB4dDxqZA27IFc71ubb0IlUYvWUZvkOiawRSbVnuB1wFKComeW5oTNCCsXRtfMNEHVZozSVfay4XsQOKL1NmvcN3UCDvQGnNn1auHO27YhVsLEFWjrQvL81byGOVRrSrPb8jmAtqpYwn0Rykvovn5h8kYO0LK7DEWILOw== 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=WBtodLEUiNa2GOVf4/6i3ZIGHgcW33zMtZnO00P0fko=; b=l6o2hbdePjPQOr8eOHsrBfc94co6HpewkMaUwK6igdeoiPFGac2JnZsiZ8H98uFRGf7Y7hN8ZgthMxJL4ZNtmD0EVGO+WbgrEB6qVq2541ru6f3FR3ry8yaO2pia18sraG17ug6OWF6w7dztvpxCxy0FC88+hI58QCT12oOiXNjV2heUQ/iGjFV9ZZiOjec0OTf86Gld18pvbB4zbbTk8DxpwCCd4gP96nNrK0WGoyaSpbl8nzVdhsjusMuIerYbGR53zfgYGQv7zbbYVxStgAxftzYz/Fq5+Na32BfPaY4DBEe3MWx51LDdhGVpMv+b8TSprB20I6OU3IZ/pJLKkA== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by SJ0PR02MB7486.namprd02.prod.outlook.com (2603:10b6:a03:2a3::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.31; Wed, 9 Apr 2025 13:48:51 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:51 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon Subject: [PATCH 11/14] vfio: add vfio_pci_config_space_read/write() Date: Wed, 9 Apr 2025 15:48:11 +0200 Message-Id: <20250409134814.478903-12-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|SJ0PR02MB7486:EE_ X-MS-Office365-Filtering-Correlation-Id: b07b5fef-a894-4b59-c753-08dd776d428b x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: KGajkUEOUBL7palq3HSHow0kYB6chL7+j0xqK5X6sMnmIBzAnqp/jcxRiM6R5SGXcSvc+ibnc5lZxnDeR4oCDMDER8cDF8cINVVkA57f+dycRyZ/rw18TpxpNyyGRjklttHWwCpILih+c615mKqv6GgnbJJIt/2XlbCBeXMHso584bFNn8tYUB3BG9kKHP+vLGEoKoU96QNzIPq6WoQnUfD9wvWO7J9sbwV2CkFMcR5fK1TkPSdwbf5uaeoGg+uLCxlsRzpE0NzrtsT7rso/jP/XxgEU1GT+TNiY/U1dT0GAwYJtMPin0K+Nzq7us1TzK2/ie1O1jadeEk1oIhU0cjO8O/G0ASS+Yt0zybD13EAZWFccJiDsE+tVQsgR2zBZIDcn94yFNLyOtU99+1RYKNED2fOTX4/SljN/qS+I5iZyjEO6mT21GScZV5BRAo2Hl1rvN7rEPzwismIZfdVjC0X5h3YOhN87Ep4979p0FQ4qWhCMKCtyb1Wh7k4rQQ5txWkS/6k0oTjYl/vyGI2oNv/pQ6IQc4CPr2B7vbk4knsIGpgrgoCV30zf9U84siVF/UVTJGSTMTkjQgKr8sPOP1f1azC3/GzFsrD9zjaQKws4B9gQhrG9Q3nYz/IEI03ltjG4sjyDFsFqKhojfjnPw568zkv4tydU0fOm3mfknxaSbbi886cMKNSDDWwJa/QV9nc/P3RmccY+qq7f8ko2Dmys2xX02aVu19fT+sRKyP87drwaszhwjJEXtbzLFEMoCcHbsN0EO8Qa4X4v2Gjakf/wfp1p6hGNGsTxPyxi0FM6Zz+gFljpU7fteQHNAhkevXo3WKVMAduasjBcfF0FBjWg7NE6ZILqLmMPY31SSxT8tboPYrEcqlcaf+Za01IwC30J1VInuLlXqb9CG3MBXuf0m3xy9znPmVwBBfdkqQCR7sx4IpIv+ECexqQOLDFoRv41qBYWgwAbz+OSEfiNfvsItbBLRQ2m/hO5fzPbyuaGRtRqdLcSDPIWZKmqgUKlryrUxD9PQF7fK82OWNUnsmLb8E4SoNeF8pR20Gn9w4mBR2Xz5t8vDusxxC/tfc0lxuWlsApCpXVVa5ao80Tbc366s02zbOGvyXrhn8gA2jvdiIIHFOCbx/NNLwzkSz1J2h1Z2BX8StNeWQpLKjwR3sW18ayl/SdoxapxqpGQ/dpOG1ydEc5zHgxuy8R5CU1sV50KdUG1tBjV2pkkDDDuv0oEz+0Krjm042QLkJslSHgaFgnk6q2V9XdW69ZoJsF4koT1YW/FLhVvSnR2YW1TB1AGIXG9xs1nWMaLJ5FIf+o8eUnmtVuUyclMDuW7ne5DONMGINJhmjlfclm34hXE0py89nfVAbwxwPp5NtKu5we2U7moa+HwmOTOfpL/7GCG4seVhcWkEQKRhxfDCCJTW+p9qihZTGtet/uObBE8Tws= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(7416014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SYj/ciMG5UP0l2rY+ZcXEyTHKBbY9DLjTcU5mMRKk/0JZ0/yMvJ3S1civLKfCZMQaXb+cDj8zPog6dhcl8Zhmu0PqL1Sxyi8t+5GscrfXXQcGkpLNJOaVoFOBbT/RTYP4tiRgaTJyJPN3dFvuHg1fzS7+m/pdf8Wg1eriRmNDCfQ0unuhLSAx2MY2Odwh5DbOnQDaOKBDCsQcuhwKFSCz5OF4xGCHMvxaOn4/YBzZF2ZEZDoVNxhE7jvO2dEni5alu3y61vcE5JyOCyXLSHpjWiLIOWX9jzunfVFO3LFXJK1jGZ/4+cWBuTKEfdYlOZM65es5333vTSUZFieXwP1Edzp8GHKSU0Ady5lqKaDl4H/V1lemPrdpCn9DoOzD7vpSswHp2hsnTmNDfCQ0rr5yTE93vr1pIPlucHnlTWqFZ/lmCluDhLU0HpuGGAkvLKNKqT89zMuBjW6b6ftNbnb5z8lsKlhPj1/cdsJVCqz8rC0dey2uPOq0x/wv6i3EhpeJyVyA5FEzPMw85NaUihh3OW15qRrVdC6sOfX9HewyrweZPUCm8gCiO27UqQXvlU3eNuF404NldsF49YcEbXiGpXlaCBUH6cIV2HuKLJ2g3Di9Q05UStvclyKcjwougbn6+4+MIxLi0cWQYBehXW0s/m8EB4pkzEifMmw4A1Xhio3vmaq9oA+V/5C79OKxn+q1MjZ5grAOtkayOcNs4bKMSORyuMPpo5UMGGjZQsMxC9EL6WWRDca1mUZgyGIZD3GUvTV1QATJ6Ftbe7Qdu6GuaByIWI+XRrQdRhodakimBQLGS2RRvfF2IAPUQ8oTujZaKOCGnBD/jTx0Lrm4lbnhF9h7SKM+iiS61Wj8nLnTs1Wk7IGEDCtZP4yTFqQpRKpxyo8uzYwJS8LhBVgBmacg1DVCtR69lSeMVrRil0K0lKYKWClwAdQsBNm1OYseRgswVQ1rvapPnENR8Rr6O+yetKnt8RLWj7TJ+4Z+cNBhgCWKV5r9jLmXITjBqp3MKaKTbegV2njhb1KOB2BNLXoiWsBkiLibNdyUY261fu6/iJuatokiMxcWdJe+1uI2xhxxJqZ6MVkWJqVGL30WHnmaTIIvDbkQtEBxuJL/g08N0MKkNANetEUEQdf/V7inbBznmQ+lKPRk1IxcJE7AbIZVqZ/QlReEC97K62jBjxLF9HIp+P8RQFNI+7I0hyiyeqhjC8zm32ZAO2fxkFml7FhYkLvjAxcdeM5rN4dAOfuEDQkIAcxDTuNMtLk2FMTymmalog87pItj7D+r5QLPIO5jP9yMHfAZ1iF4z8Ho7TKLMGARM/WeL5MJZ5T9Uz/c0nnLA1oYkrR07ceqCQZXFUhfiAmXnjeY8/pkXr3vGD92NGfHQO5ZcKO1EXEy1I02bH+8sM7SZV2wMKYQqSxpzCudGsh6xWGDIHHqYBkxC7MANSVWy9+jGaFenWwdIH5EwGxEoYYHJaSTeg9jizQOl+b3kl1HAeNs+KUY5BorHysDwWyrt3m89euuwknAHwUlC4b2yOFAdI0YUxLTiDv1l0CVQLF9uiAgEiBN+DoTY8/w9Wsb2GS+JZqwgD0ZUATOTW2 X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: b07b5fef-a894-4b59-c753-08dd776d428b X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:51.0821 (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: nYJCxMGS2yguHCltz/PdMaaB73eJc1z2W1ipx33QIUDPlkkUDMPSXBW0jjfKPTYPLK+YR++oNEkLtR1/do714Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB7486 X-Proofpoint-ORIG-GUID: 0kofZXopyUvpt9bg8t-GkTxVGWA3DcmQ X-Authority-Analysis: v=2.4 cv=d+b1yQjE c=1 sm=1 tr=0 ts=67f67ac4 cx=c_pps a=eoA+jwG2N97X2eoE7Om4vA==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=uWZQxr4v0eqUK10gj4gA:9 X-Proofpoint-GUID: 0kofZXopyUvpt9bg8t-GkTxVGWA3DcmQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.151.68; envelope-from=john.levon@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Add these helpers that access config space and return an -errno style return. Signed-off-by: John Levon --- hw/vfio/pci.c | 134 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 91 insertions(+), 43 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index ddeee33aa9..c3842d2f8d 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -964,6 +964,28 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) } } +/* "Raw" read of underlying config space. */ +static int vfio_pci_config_space_read(VFIOPCIDevice *vdev, off_t offset, + uint32_t size, void *data) +{ + ssize_t ret; + + ret = pread(vdev->vbasedev.fd, data, size, vdev->config_offset + offset); + + return ret < 0 ? -errno : (int)ret; +} + +/* "Raw" write of underlying config space. */ +static int vfio_pci_config_space_write(VFIOPCIDevice *vdev, off_t offset, + uint32_t size, void *data) +{ + ssize_t ret; + + ret = pwrite(vdev->vbasedev.fd, data, size, vdev->config_offset + offset); + + return ret < 0 ? -errno : (int)ret; +} + static uint64_t vfio_rom_read(void *opaque, hwaddr addr, unsigned size) { VFIOPCIDevice *vdev = opaque; @@ -1016,10 +1038,9 @@ static const MemoryRegionOps vfio_rom_ops = { static void vfio_pci_size_rom(VFIOPCIDevice *vdev) { + VFIODevice *vbasedev = &vdev->vbasedev; uint32_t orig, size = cpu_to_le32((uint32_t)PCI_ROM_ADDRESS_MASK); - off_t offset = vdev->config_offset + PCI_ROM_ADDRESS; char *name; - int fd = vdev->vbasedev.fd; if (vdev->pdev.romfile || !vdev->pdev.rom_bar) { /* Since pci handles romfile, just print a message and return */ @@ -1036,11 +1057,12 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev) * Use the same size ROM BAR as the physical device. The contents * will get filled in later when the guest tries to read it. */ - if (pread(fd, &orig, 4, offset) != 4 || - pwrite(fd, &size, 4, offset) != 4 || - pread(fd, &size, 4, offset) != 4 || - pwrite(fd, &orig, 4, offset) != 4) { - error_report("%s(%s) failed: %m", __func__, vdev->vbasedev.name); + if (vfio_pci_config_space_read(vdev, PCI_ROM_ADDRESS, 4, &orig) != 4 || + vfio_pci_config_space_write(vdev, PCI_ROM_ADDRESS, 4, &size) != 4 || + vfio_pci_config_space_read(vdev, PCI_ROM_ADDRESS, 4, &size) != 4 || + vfio_pci_config_space_write(vdev, PCI_ROM_ADDRESS, 4, &orig) != 4) { + + error_report("%s(%s) ROM access failed", __func__, vbasedev->name); return; } @@ -1220,6 +1242,7 @@ static void vfio_sub_page_bar_update_mapping(PCIDevice *pdev, int bar) uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len) { VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev); + VFIODevice *vbasedev = &vdev->vbasedev; uint32_t emu_bits = 0, emu_val = 0, phys_val = 0, val; memcpy(&emu_bits, vdev->emulated_config_bits + addr, len); @@ -1232,12 +1255,13 @@ uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len) if (~emu_bits & (0xffffffffU >> (32 - len * 8))) { ssize_t ret; - ret = pread(vdev->vbasedev.fd, &phys_val, len, - vdev->config_offset + addr); + ret = vfio_pci_config_space_read(vdev, addr, len, &phys_val); if (ret != len) { - error_report("%s(%s, 0x%x, 0x%x) failed: %m", - __func__, vdev->vbasedev.name, addr, len); - return -errno; + const char *err = ret < 0 ? strerror(-ret) : "short read"; + + error_report("%s(%s, 0x%x, 0x%x) failed: %s", + __func__, vbasedev->name, addr, len, err); + return -1; } phys_val = le32_to_cpu(phys_val); } @@ -1253,15 +1277,19 @@ void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, uint32_t val, int len) { VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev); + VFIODevice *vbasedev = &vdev->vbasedev; uint32_t val_le = cpu_to_le32(val); + int ret; trace_vfio_pci_write_config(vdev->vbasedev.name, addr, val, len); /* Write everything to VFIO, let it filter out what we can't write */ - if (pwrite(vdev->vbasedev.fd, &val_le, len, vdev->config_offset + addr) - != len) { - error_report("%s(%s, 0x%x, 0x%x, 0x%x) failed: %m", - __func__, vdev->vbasedev.name, addr, val, len); + ret = vfio_pci_config_space_write(vdev, addr, len, &val_le); + if (ret != len) { + const char *err = ret < 0 ? strerror(-ret) : "short write"; + + error_report("%s(%s, 0x%x, 0x%x, 0x%x) failed: %s", + __func__, vbasedev->name, addr, val, len, err); } /* MSI/MSI-X Enabling/Disabling */ @@ -1349,9 +1377,12 @@ static bool vfio_msi_setup(VFIOPCIDevice *vdev, int pos, Error **errp) int ret, entries; Error *err = NULL; - if (pread(vdev->vbasedev.fd, &ctrl, sizeof(ctrl), - vdev->config_offset + pos + PCI_CAP_FLAGS) != sizeof(ctrl)) { - error_setg_errno(errp, errno, "failed reading MSI PCI_CAP_FLAGS"); + ret = vfio_pci_config_space_read(vdev, pos + PCI_CAP_FLAGS, + sizeof(ctrl), &ctrl); + if (ret != sizeof(ctrl)) { + const char *errmsg = ret < 0 ? strerror(-ret) : "short read"; + + error_setg(errp, "failed reading MSI PCI_CAP_FLAGS: %s", errmsg); return false; } ctrl = le16_to_cpu(ctrl); @@ -1558,30 +1589,39 @@ static bool vfio_msix_early_setup(VFIOPCIDevice *vdev, Error **errp) uint8_t pos; uint16_t ctrl; uint32_t table, pba; - int ret, fd = vdev->vbasedev.fd; struct vfio_irq_info irq_info; VFIOMSIXInfo *msix; + int ret; pos = pci_find_capability(&vdev->pdev, PCI_CAP_ID_MSIX); if (!pos) { return true; } - if (pread(fd, &ctrl, sizeof(ctrl), - vdev->config_offset + pos + PCI_MSIX_FLAGS) != sizeof(ctrl)) { - error_setg_errno(errp, errno, "failed to read PCI MSIX FLAGS"); + ret = vfio_pci_config_space_read(vdev, pos + PCI_MSIX_FLAGS, + sizeof(ctrl), &ctrl); + if (ret != sizeof(ctrl)) { + const char *err = ret < 0 ? strerror(-ret) : "short read"; + + error_setg(errp, "failed to read PCI MSIX FLAGS: %s", err); return false; } - if (pread(fd, &table, sizeof(table), - vdev->config_offset + pos + PCI_MSIX_TABLE) != sizeof(table)) { - error_setg_errno(errp, errno, "failed to read PCI MSIX TABLE"); + ret = vfio_pci_config_space_read(vdev, pos + PCI_MSIX_TABLE, + sizeof(table), &table); + if (ret != sizeof(table)) { + const char *err = ret < 0 ? strerror(-ret) : "short read"; + + error_setg(errp, "failed to read PCI MSIX TABLE: %s", err); return false; } - if (pread(fd, &pba, sizeof(pba), - vdev->config_offset + pos + PCI_MSIX_PBA) != sizeof(pba)) { - error_setg_errno(errp, errno, "failed to read PCI MSIX PBA"); + ret = vfio_pci_config_space_read(vdev, pos + PCI_MSIX_PBA, + sizeof(pba), &pba); + if (ret != sizeof(pba)) { + const char *err = ret < 0 ? strerror(-ret) : "short read"; + + error_setg(errp, "failed to read PCI MSIX PBA: %s", err); return false; } @@ -1741,10 +1781,12 @@ static void vfio_bar_prepare(VFIOPCIDevice *vdev, int nr) } /* Determine what type of BAR this is for registration */ - ret = pread(vdev->vbasedev.fd, &pci_bar, sizeof(pci_bar), - vdev->config_offset + PCI_BASE_ADDRESS_0 + (4 * nr)); + ret = vfio_pci_config_space_read(vdev, PCI_BASE_ADDRESS_0 + (4 * nr), + sizeof(pci_bar), &pci_bar); if (ret != sizeof(pci_bar)) { - error_report("vfio: Failed to read BAR %d (%m)", nr); + const char *err = ret < 0 ? strerror(-ret) : "short read"; + + error_report("vfio: Failed to read BAR %d: %s", nr, err); return; } @@ -2448,21 +2490,25 @@ void vfio_pci_pre_reset(VFIOPCIDevice *vdev) void vfio_pci_post_reset(VFIOPCIDevice *vdev) { + VFIODevice *vbasedev = &vdev->vbasedev; Error *err = NULL; - int nr; + int ret, nr; if (!vfio_intx_enable(vdev, &err)) { error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name); } for (nr = 0; nr < PCI_NUM_REGIONS - 1; ++nr) { - off_t addr = vdev->config_offset + PCI_BASE_ADDRESS_0 + (4 * nr); + off_t addr = PCI_BASE_ADDRESS_0 + (4 * nr); uint32_t val = 0; uint32_t len = sizeof(val); - if (pwrite(vdev->vbasedev.fd, &val, len, addr) != len) { - error_report("%s(%s) reset bar %d failed: %m", __func__, - vdev->vbasedev.name, nr); + ret = vfio_pci_config_space_write(vdev, addr, len, &val); + if (ret != len) { + const char *errmsg = ret < 0 ? strerror(-ret) : "short write"; + + error_report("%s(%s) reset bar %d failed: %s", __func__, + vbasedev->name, nr, errmsg); } } @@ -3099,6 +3145,7 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) int i, ret; char uuid[UUID_STR_LEN]; g_autofree char *name = NULL; + size_t config_space_size; if (vbasedev->fd < 0 && !vbasedev->sysfsdev) { if (!(~vdev->host.domain || ~vdev->host.bus || @@ -3153,13 +3200,14 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) goto error; } + config_space_size = MIN(pci_config_size(&vdev->pdev), vdev->config_size); + /* Get a copy of config space */ - ret = pread(vbasedev->fd, vdev->pdev.config, - MIN(pci_config_size(&vdev->pdev), vdev->config_size), - vdev->config_offset); - if (ret < (int)MIN(pci_config_size(&vdev->pdev), vdev->config_size)) { - ret = ret < 0 ? -errno : -EFAULT; - error_setg_errno(errp, -ret, "failed to read device config space"); + ret = vfio_pci_config_space_read(vdev, 0, config_space_size, + vdev->pdev.config); + if (ret < (int)config_space_size) { + ret = ret < 0 ? -ret : EFAULT; + error_setg_errno(errp, ret, "failed to read device config space"); goto error; } From patchwork Wed Apr 9 13:48:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044696 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A8670C369A1 for ; Wed, 9 Apr 2025 13:52:12 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2Vo7-0007NN-SH; Wed, 09 Apr 2025 09:49:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2Vna-0006c9-Dz; Wed, 09 Apr 2025 09:49:04 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2VnX-0005gR-Vq; Wed, 09 Apr 2025 09:49:02 -0400 Received: from pps.filterd (m0127843.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5395qVN0014865; Wed, 9 Apr 2025 06:48:57 -0700 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=EqKoLwopr6Kf7+k6Zh6AlzWMg0KBj8nOBnuE8ryei XU=; b=kPkmnkYe0x0CEwANDiY01NvO8lSjK6hUjlaIAgSn1Su57Vifk2g3Aj1xP C9lxbb1A66FtSoOcdJ9iZH0m2AZWQ40L+jgjsZxH2cxNi1LeyQaWwpF/bHArBz43 6kC/ermsAdEYIejSjpqcLV4cjvIqPfwZ8F5VUFND3wlahan6RQO6qGeg6QKKwal+ hyy+FTIqtl/sqydd278zmImx9HdyLGy10DEn7miH9SXDI0qdAxGPAhiVwQJii1ZC gVon5WuB0ZyqjJnM3WyRBBjN8L8CVbzdOKlJiD9YRTjOzlAwfFBu2e8ZK6jWOUnp V5HUHtDP1cE6HaUEup6Kzu5oFHANQ== Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazlp17010005.outbound.protection.outlook.com [40.93.11.5]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 45u2mhj3ka-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:48:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LzK1Qb4UL4fzdUgim0lPc9mfLt6Cf1+hm57XeZdsL4qV10e1iN/sCbBPEAESkzJ2Q2hBRKl4PpuyKxvge3XUX0pdAR2cngMqYKtmlaKea+wwndUg/0Ur8RSLOTLoq1/rPXCthFZHw36tbJqh034/jLT0Bx6AwsLlhJBiGfaU3vMmFx5Abx8B1XH5JrvucV8VhA78Mo7vJIQMLgVhiooMLURO4jrjuvgdlxzFho5JTPrGkuGVFYIwyf1XbyJ6hn1ncjutJ2ohS4FB2BBttTfVMhruqICx8asAYPLNDVwlxC/EmNi/ueVD+s9QxEXq1XGg4yH6FXCcNVur6QhkOsSVCA== 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=EqKoLwopr6Kf7+k6Zh6AlzWMg0KBj8nOBnuE8ryeiXU=; b=ddZS8qO8L/beE8fIaCrKnlWerl0n5u4S3mq4lQRir64yHAB6IeaZcK5XIJ50lGRW6UR8E/hc5iBntlPLBx0ax6VqU09zvjsLLF4h9VqkyVtE46XXmGMP5ZaW8h1cIEPmLuNK1GV/9u/yDZWynVB1vQGO6A6zAaAGOaN9DoyahAMfoLyNGdpGUuihD6cSU/mctqnn9TAcbYCxdwboedc4/4zlUw6wKVR5bGIFWeHzCGYuEX0WyFGYSFUs1ImXIc1X5KJ6AvaVHi3O4hFSbGPHNIEfrywFoUr+rBonWHoL9nt+UpPzLpaEXT2cKprvs+vJE2tAfkpZsHKx/HclqpsZpw== 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=EqKoLwopr6Kf7+k6Zh6AlzWMg0KBj8nOBnuE8ryeiXU=; b=gLtSX46vXqVCSWpBUFa18qFiRTXY58lqoR9Pe/7Lo45bubE5ouCs9U5GyMoxDztVvpr/I5TYTBhWsIGY0jPq88BzYefpvUBMV5qeyyU5ha8SWE96ZnPvBEtgvvAZ+E2vgGIakZjUGuAFeoDwnZ/kY95ka6maiuGrXDGId+Q94lktCAoFw7qHP3vTKCSeFK2Y2n1kYUbQLcDe8xQa39NmyvXVw13vH8IX7gT4Eyy20WqZCorp/sW/xdTy+4bCK11DT4AId78gS2mWBfhHKk5bSHic/xLjIbHxMJ9JhBK3yZL2jomUlhCINzIkrR/R0rA9t3r8T+rjAS7BE7Vckh+x1Q== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by SJ0PR02MB7486.namprd02.prod.outlook.com (2603:10b6:a03:2a3::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.31; Wed, 9 Apr 2025 13:48:54 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:54 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon , John Johnson , Elena Ufimtseva , Jagannathan Raman Subject: [PATCH 12/14] vfio: add region info cache Date: Wed, 9 Apr 2025 15:48:12 +0200 Message-Id: <20250409134814.478903-13-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|SJ0PR02MB7486:EE_ X-MS-Office365-Filtering-Correlation-Id: 63438839-5297-4dae-f95f-08dd776d4472 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: tt+ILOQkKuQ/EXMUWvmhFlbooH0M62H3+u2gou9Oznehu7PtXc6+MA0Lksk1030uLKQO2tYatftaKrXkTRuxHjisAMVB8E5igjlk1z2GGZlEchcG9bNMrgNJ4t69Xe7dlTGepJM7+iuFeXEbC/weJUIWzLt5Ls4YvMsJNOvKb6QIw92Mm6Hrp0P58ay1C2z6tPKTW6YPFhVdWLg7jXDbVmztHuT8hR8GoQlcAzdcvvQP5eWBpgrzARvC8b1ON0QJXL1i4RSowaECCdEys/UqDUXXPK3Ra+X16r9OlBDsWWRvlolOaoiQprwwPCX9A3PnS4agLzIe2SqCZH7KSCj3zKnPYSiOZXwnVp6+CgDzMI2zUuhxaNXH1c4zB81YexRpdcyYQQPVj9mWBXoWPFblf9DeyI1ZIAmRXxMNJ6zTPpJvxiyC8zh5ad3dtHeeKSzyL+9d3nooBr/sPHHVmUqmZJfJqLbZeZWuwaIyIaZyyyagY2NldumXTp+Jmm7N7m4WjCgyh4GsXjwGSi0/nhLpVuQDtmkUo9wnH0BICMJDoz6uRn3gSm+u2Q3/OHTfIP8SJkCRj9cuuaZBs7Ek7pW3K+RgBZVW95E9e59RyseA5BgukOaKYthbs1foS9jFSKGqRNI5K2RzvSWdRg6Vxe11sS0s/rBAWAz2JySwvJ2brtQt9sDx+HvZ0eARw0KzHglmbJiKl0dCdpwx98pptvCe9xOcYvAuY0d4db0nRpZ4w5JapoeKAuCyvsWxlwzd0zSRT+PdnPLcqZ90b2Y1Ym6HkT4sIlGyHg+qUo8ii7XI3M02iLI82UHtprEbx9yHCj/Ljm+ruc16EqOf87a347IikSFUpUR25DafJhmyp7tkzWv4bxrYM5bOpwehyKk7bwmTC/stRdSRz1bNBNRKNAJo9yWMsgD/LYplFP3iYMR5/UoFT1xPoysB7jknjoeUJ2RkWN3Co0MZyDif6FzH4LUMUHCbDcCt3DM531+2C2Hj5KiZrH55PpUU0qtbTgYAnb39LsJqHiUp1xi+ABZzimv7SsVsidaHz4K1MEs+gLoPIUVaBnYRiPhQVgu+V/ZkfiWRqR4ak+2Kfks6y69znvjnYUptmEQgEF+Uqqq9CeX+jAPbxuaDp4B3GI8qW3lwir3OPCoKHywPAA5RjvuQrjlvefwmpCixlZf7iaaCMWpHQZxmfdsOnnl7pLvBmSBCrPF03N9CcLmQrc797lm9V2ZTiFA+7TU0WRtTo7vJWUEcC88N+GcJt/PI+Rbro9aJ/YndcMwJhrMJTQIcrLc323yjBssUQulzn9XoOG0bGJqhfCTnuKFwpbWqWlI8f1OxE8JcauoCR2f3zPdNvP2cLqKGRfRWj200Yeg2zc3VbJ8x6Sgo0ZWJJ4NjRFO35Wmh59GpGbtndrzSFZ3taZG80aX0xA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(7416014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 97iuR8wKUZ+uR9NaO86TP696opUehl1IrEdzxIpp5roNLYCSYi+eFB85cIvYEf/zLm09KUvYUdUa9/+PVwJgbG3TlyKXyGyaDbDGGLljRiqW/Cqh4UOpVnClD9/HjrZZUJvLpYXj6ivl8S1r9cRTMQT3L8wpCtZlMB+Gvt/7+nxN68C2jMbvhISQPAexVL4wQLQsvltipQycBOppcAwSv3uMrKJzPlX9vY4A9aldDtorPLmGAkI7VW4ZLWuLAFF3Czyxb6Y5iwYqxI4LJxSThY0pFlHRnW4OeJgQOFLAWJ9F+f6aVan9d3B+NL84rV3ZNLxLXILfWdjOyh0b5XT/u4805DFx/2FkuN5rNci6Nb7oHp/nRvq2ChOpDJNl2idTtUYtxcs7rhbAf2ILd/HUulx5FN09mVBwqDLd4SOleFGaBdlFlJ4cfkjiX2M/871qbWwST3ssQ9kXC4SpSb+8e95UrkqE+fyTP33C3lb8OeocWTgnaT2gFjtWNFdZ9AgLvOPi//4dnAqyo1kERvGaPD4Mn9CxL1spPWLMAXsGLhyVc2U2NZvkPDrrmAFzgga2JMh0Ln/j8PBpKhkja5vPhqyD+3716FTG3xvcfcoFRP91bWls0ZWAWyyB5aqC3Apimw165eLZDyk+yRJPKU3uTkrP2fiDgq37S0c1ykOHgyBUx06cGuv4YTKATT6qoISWnDhL6mbkBqaTqDFsrFvxny/SOVHKtGwqqWl5ElhJ07wx/cdmnuzqFg2ofHSKPDCWiyYytNqm0QILcfIwWlmiJOGO/Pdpm4ZL889+HYkfXUEvAeUygaNoXaU+ja8eqiuJpX/AiRfTB6Zl3cN+Yz94YKqET86EIEeho8JvT4GxSs6TF2GOIL6SvbHClr6gKtLIt+1hcu+B1ikmSAh1WJuobLk9xsBAb6++1wAGKJW3ewWodh67YEuvwgpwvmoEGp1OLAidHyYnk0Tv36kmBbegRbGd7AONuzmpNI9qNF8hD3XNgh5/X5p9nrc2fdZgZIBPAn6l5DrPEMhG+yqbDYcf3xRjyKyAiIM+Sx6tL8cxehuC3nzi4ldTJagadB3RYOBcjJO+as38p07Picp9kgqgiLjfnVGethiKEOn2v+c7v8x2ed42WftS0JtTp9mhfH15Y4fqXzKwgti/vIXlJzHLf7YvyWMgubm7NtDNIfDLtenuUAUs/XVBlrSHl03V2iui51lkF5XwHBjTUW7uv7Y3GtqL4S9/2qXVDkEZm/i5SAdnohM2hEkhWO5vEFVeowUFOo2f4mtXVHYaWXdLTJP4Gq52rSbdH+UxCq/Rjrs4g9F9kdyaw6m+shhDzztS1jhG6ZPgQLGTPf0yZVrLcPyq8+NjXxdw+IuyqHbyvKysFimfFRha1N5r4aHChvkhU0j+urRz9UPsYMd35Ij2DU/7p2//H260eMLmOLGQ3PJSa6wZuE7Hnk7gANJeXmZ3aA9K5y/aoEayg9PGGxwH2FTmZq0z2nSNAgfEIqqJUbk0rUKE8DnHK1lciHPmou8G4rSqQHDw4c2cbIhBemrO22Dwfi6R/5FJvz2YSDDxCP0u39jFbhcwMYksQTrAUMovREfg X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 63438839-5297-4dae-f95f-08dd776d4472 X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:54.1663 (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: 43g+uGX5KvW8HKM9Tg8P+krr82OGmkXKqFoLSKxblwrrU7hRV1Cqp05qWtJdjDpQ8c9Xx2mUaNI77Yjt7t+8tg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB7486 X-Proofpoint-ORIG-GUID: VLSOtggaSdKyAppD7Rj7_eF58HRev_b4 X-Proofpoint-GUID: VLSOtggaSdKyAppD7Rj7_eF58HRev_b4 X-Authority-Analysis: v=2.4 cv=JPI7s9Kb c=1 sm=1 tr=0 ts=67f67ac9 cx=c_pps a=8NhCg2oU0sQOR5chO7ltBw==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=yPCof4ZbAAAA:8 a=64Cc0HZtAAAA:8 a=nwHpM9hI2HXnMGzLlGAA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.155.12; envelope-from=john.levon@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Instead of requesting region information on demand with VFIO_DEVICE_GET_REGION_INFO, maintain a cache: this will become necessary for performance for vfio-user, where this call becomes a message over the control socket, so is of higher overhead than the traditional path. We will also need it to generalize region accesses, as that means we can't use ->config_offset for configuration space accesses, but must look up the region offset (if relevant) each time. Originally-by: John Johnson Signed-off-by: Elena Ufimtseva Signed-off-by: Jagannathan Raman Signed-off-by: John Levon --- hw/vfio/ccw.c | 5 ----- hw/vfio/container.c | 10 ++++++++++ hw/vfio/device.c | 31 +++++++++++++++++++++++++++---- hw/vfio/igd.c | 8 ++++---- hw/vfio/pci.c | 6 +++--- hw/vfio/region.c | 2 +- include/hw/vfio/vfio-device.h | 1 + 7 files changed, 46 insertions(+), 17 deletions(-) diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c index dac8769925..14dee7cd19 100644 --- a/hw/vfio/ccw.c +++ b/hw/vfio/ccw.c @@ -504,7 +504,6 @@ static bool vfio_ccw_get_region(VFIOCCWDevice *vcdev, Error **errp) vcdev->io_region_offset = info->offset; vcdev->io_region = g_malloc0(info->size); - g_free(info); /* check for the optional async command region */ ret = vfio_device_get_region_info_type(vdev, VFIO_REGION_TYPE_CCW, @@ -517,7 +516,6 @@ static bool vfio_ccw_get_region(VFIOCCWDevice *vcdev, Error **errp) } vcdev->async_cmd_region_offset = info->offset; vcdev->async_cmd_region = g_malloc0(info->size); - g_free(info); } ret = vfio_device_get_region_info_type(vdev, VFIO_REGION_TYPE_CCW, @@ -530,7 +528,6 @@ static bool vfio_ccw_get_region(VFIOCCWDevice *vcdev, Error **errp) } vcdev->schib_region_offset = info->offset; vcdev->schib_region = g_malloc(info->size); - g_free(info); } ret = vfio_device_get_region_info_type(vdev, VFIO_REGION_TYPE_CCW, @@ -544,7 +541,6 @@ static bool vfio_ccw_get_region(VFIOCCWDevice *vcdev, Error **errp) } vcdev->crw_region_offset = info->offset; vcdev->crw_region = g_malloc(info->size); - g_free(info); } return true; @@ -554,7 +550,6 @@ out_err: g_free(vcdev->schib_region); g_free(vcdev->async_cmd_region); g_free(vcdev->io_region); - g_free(info); return false; } diff --git a/hw/vfio/container.c b/hw/vfio/container.c index 37b1217fd8..61333d7fc4 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -857,6 +857,16 @@ static bool vfio_device_get(VFIOGroup *group, const char *name, static void vfio_device_put(VFIODevice *vbasedev) { + if (vbasedev->reginfo != NULL) { + int i; + + for (i = 0; i < vbasedev->num_regions; i++) { + g_free(vbasedev->reginfo[i]); + } + g_free(vbasedev->reginfo); + vbasedev->reginfo = NULL; + } + if (!vbasedev->group) { return; } diff --git a/hw/vfio/device.c b/hw/vfio/device.c index 2966171118..102fa5a9b4 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -205,6 +205,17 @@ int vfio_device_get_region_info(VFIODevice *vbasedev, int index, { size_t argsz = sizeof(struct vfio_region_info); + /* create region info cache */ + if (vbasedev->reginfo == NULL) { + vbasedev->reginfo = g_new0(struct vfio_region_info *, + vbasedev->num_regions); + } + /* check cache */ + if (vbasedev->reginfo[index] != NULL) { + *info = vbasedev->reginfo[index]; + return 0; + } + *info = g_malloc0(argsz); (*info)->index = index; @@ -224,6 +235,9 @@ retry: goto retry; } + /* fill cache */ + vbasedev->reginfo[index] = *info; + return 0; } @@ -242,7 +256,6 @@ int vfio_device_get_region_info_type(VFIODevice *vbasedev, uint32_t type, hdr = vfio_get_region_info_cap(*info, VFIO_REGION_INFO_CAP_TYPE); if (!hdr) { - g_free(*info); continue; } @@ -254,8 +267,6 @@ int vfio_device_get_region_info_type(VFIODevice *vbasedev, uint32_t type, if (cap_type->type == type && cap_type->subtype == subtype) { return 0; } - - g_free(*info); } *info = NULL; @@ -264,7 +275,7 @@ int vfio_device_get_region_info_type(VFIODevice *vbasedev, uint32_t type, bool vfio_device_has_region_cap(VFIODevice *vbasedev, int region, uint16_t cap_type) { - g_autofree struct vfio_region_info *info = NULL; + struct vfio_region_info *info = NULL; bool ret = false; if (!vfio_device_get_region_info(vbasedev, region, &info)) { @@ -427,6 +438,16 @@ void vfio_device_detach(VFIODevice *vbasedev) VFIO_IOMMU_GET_CLASS(vbasedev->bcontainer)->detach_device(vbasedev); } +static void vfio_device_get_all_region_info(VFIODevice *vbasedev) +{ + struct vfio_region_info *info; + int i; + + for (i = 0; i < vbasedev->num_regions; i++) { + vfio_device_get_region_info(vbasedev, i, &info); + } +} + void vfio_device_prepare(VFIODevice *vbasedev, VFIOContainerBase *bcontainer, struct vfio_device_info *info) { @@ -439,4 +460,6 @@ void vfio_device_prepare(VFIODevice *vbasedev, VFIOContainerBase *bcontainer, QLIST_INSERT_HEAD(&bcontainer->device_list, vbasedev, container_next); QLIST_INSERT_HEAD(&vfio_device_list, vbasedev, global_next); + + vfio_device_get_all_region_info(vbasedev); } diff --git a/hw/vfio/igd.c b/hw/vfio/igd.c index e1cba16399..d70da1ce38 100644 --- a/hw/vfio/igd.c +++ b/hw/vfio/igd.c @@ -198,7 +198,7 @@ static bool vfio_pci_igd_opregion_init(VFIOPCIDevice *vdev, static bool vfio_pci_igd_setup_opregion(VFIOPCIDevice *vdev, Error **errp) { - g_autofree struct vfio_region_info *opregion = NULL; + struct vfio_region_info *opregion = NULL; int ret; /* Hotplugging is not supported for opregion access */ @@ -361,8 +361,8 @@ static int vfio_pci_igd_lpc_init(VFIOPCIDevice *vdev, static bool vfio_pci_igd_setup_lpc_bridge(VFIOPCIDevice *vdev, Error **errp) { - g_autofree struct vfio_region_info *host = NULL; - g_autofree struct vfio_region_info *lpc = NULL; + struct vfio_region_info *host = NULL; + struct vfio_region_info *lpc = NULL; PCIDevice *lpc_bridge; int ret; @@ -526,7 +526,7 @@ static bool vfio_pci_igd_config_quirk(VFIOPCIDevice *vdev, Error **errp) * - OpRegion * - Same LPC bridge and Host bridge VID/DID/SVID/SSID as host */ - g_autofree struct vfio_region_info *rom = NULL; + struct vfio_region_info *rom = NULL; legacy_mode_enabled = true; info_report("IGD legacy mode enabled, " diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index c3842d2f8d..b40d5abdfd 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -882,8 +882,8 @@ static void vfio_update_msi(VFIOPCIDevice *vdev) static void vfio_pci_load_rom(VFIOPCIDevice *vdev) { - g_autofree struct vfio_region_info *reg_info = NULL; VFIODevice *vbasedev = &vdev->vbasedev; + struct vfio_region_info *reg_info = NULL; uint64_t size; off_t off = 0; ssize_t bytes; @@ -2721,7 +2721,7 @@ static VFIODeviceOps vfio_pci_ops = { bool vfio_populate_vga(VFIOPCIDevice *vdev, Error **errp) { VFIODevice *vbasedev = &vdev->vbasedev; - g_autofree struct vfio_region_info *reg_info = NULL; + struct vfio_region_info *reg_info = NULL; int ret; ret = vfio_device_get_region_info(vbasedev, VFIO_PCI_VGA_REGION_INDEX, ®_info); @@ -2786,7 +2786,7 @@ bool vfio_populate_vga(VFIOPCIDevice *vdev, Error **errp) static bool vfio_populate_device(VFIOPCIDevice *vdev, Error **errp) { VFIODevice *vbasedev = &vdev->vbasedev; - g_autofree struct vfio_region_info *reg_info = NULL; + struct vfio_region_info *reg_info = NULL; struct vfio_irq_info irq_info; int i, ret = -1; diff --git a/hw/vfio/region.c b/hw/vfio/region.c index 04bf9eb098..ef2630cac3 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -182,7 +182,7 @@ static int vfio_setup_region_sparse_mmaps(VFIORegion *region, int vfio_region_setup(Object *obj, VFIODevice *vbasedev, VFIORegion *region, int index, const char *name) { - g_autofree struct vfio_region_info *info = NULL; + struct vfio_region_info *info = NULL; int ret; ret = vfio_device_get_region_info(vbasedev, index, &info); diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index 9522a09c48..967b07cd89 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -81,6 +81,7 @@ typedef struct VFIODevice { IOMMUFDBackend *iommufd; VFIOIOASHwpt *hwpt; QLIST_ENTRY(VFIODevice) hwpt_next; + struct vfio_region_info **reginfo; } VFIODevice; struct VFIODeviceOps { From patchwork Wed Apr 9 13:48:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044693 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D1477C36002 for ; Wed, 9 Apr 2025 13:51:06 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2Vo6-0007FG-Nt; Wed, 09 Apr 2025 09:49:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2Vnj-0006j7-Iy; Wed, 09 Apr 2025 09:49:12 -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 1u2Vnd-0005hQ-Nz; Wed, 09 Apr 2025 09:49:08 -0400 Received: from pps.filterd (m0127838.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5394K8ZT021298; Wed, 9 Apr 2025 06:49:00 -0700 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=TUd5ZO0tIvlbkARgD8HA6YU9H1bK5AQZPm+rqZ8vQ 7k=; b=o7GUGBjodYTY8PkmQkHmvpeMq3MG7l7p5UceGBTBaLaTowh6LlokowW0l FYmX+e1m/z4NiAIsg6HDBreFXeerb2q83huXreUrS4+3wpuphpN2mIwhMD7F4OCg T4frAFCRad7+p1wWtp1Aet7A9RSFlsTWKUUIOamGOGr2m17TGquPr9oxygxN/vlh h0n5Cc2/dRsko6eqzYNolpyPEm9kzcDHQAz1UNfl1kY2X6Ptpe6hOWJ7vzm6Zw9h KNIqZXbwQmDrwJyjta7+9z6LxDs7Q46p8DtlEYnC28DHoFTh0ZJqu5MXVbUHnG5N PD5+ZMAadh/nD/CTB1BdWogU7xuWg== Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azlp17010022.outbound.protection.outlook.com [40.93.12.22]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 45u42xhaqr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:49:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EDTb6/RymD0gkBQotD7dm+TtvAH3fmQL48M6wlvIP0Ltq0EbN8Qi1euhuIcQxfkOc5O2jXJMVIOXZy6ZFiuibu6y5u7hqaR+4XEBYjgU6loMzyaXM8Vaz9yWpU1HV9fZarlI7JSykZyLhmMCTrqlxN3jhtU0TFkXv/XGDTRAyTOIwhivKhl5vxxh5XjMze4dtAwa5XkqG/mFTw42JsVPRke51Lv1lVYubFyngey7cVQr2dfi+BynUnK5UTQ1ZgSgAHsfrjZRjoLJPaHpnqHTiAErNinFJfB8krg02bYw4rNy6+EQNB2RzKqcQZ/sdMMqEpOJVzLtE74/5b34NqD47Q== 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=TUd5ZO0tIvlbkARgD8HA6YU9H1bK5AQZPm+rqZ8vQ7k=; b=l13d7epcggQwQChj42RQ5ILajI+ii0pR+0Dwy8+VB90d3ynlio6eORftv+b05ftZtDooM7A3U7O21FaKwzBm5bSSylwUI/Eq8tIuI5Jlyv/nmW4sEwcMnnfJFkhdIhTHYVDDBD8dj3thARna6wq8cPr1QF2HVUGYtEQGZd3hxPOIKyyGeYEZUX/yUEqRQGXxMHTVRnSdV8WGRjtHg410Z9C4d7wsHPgcIOHoXWDoiCNPpwbWXXmXYn9k7bMQDCDzx2+I36AvCSGX5sa1LN+NcZrbbHo+fWo/YxpvwtiRz/9PbmIWK1MEFsPdLZyhHp6dovba7y8T7EUabBwjTOK2aA== 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=TUd5ZO0tIvlbkARgD8HA6YU9H1bK5AQZPm+rqZ8vQ7k=; b=oC6Vj7D/Y9bkGncU5DtoxkvydKCFzOFTqEPF15h2ZMDDJo5A376EjHcWYtcdunYsywYJTBOxbWKx/Um3cbHyBDD5Et9jWTpYIa2Ot7ZaPnvbxf35YUbRVtHr7TGSmHwdodtkep169KuzuKgIWOt/qo6FO6JD77rExYZpQy+aFQ5RhuOrajDl3mLWzTNCY0zHCIINJ+3cL5/lvxG7EGHCZvSIOHDIHGAGKLsxA9UaOhj8wMPYjxWdKa5lNESEckjx9fK0PHiUcl2P1ks8Acp9OrsJwxBX34QgWfdQ3ARDnfIF2s8ud+xjPfS+tc6wUzkNuaO7rsjgg0dTZR8PIFdAkw== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by SJ0PR02MB7486.namprd02.prod.outlook.com (2603:10b6:a03:2a3::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.31; Wed, 9 Apr 2025 13:48:57 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:48:57 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon , John Johnson , Elena Ufimtseva , Jagannathan Raman Subject: [PATCH 13/14] vfio: add device IO ops vector Date: Wed, 9 Apr 2025 15:48:13 +0200 Message-Id: <20250409134814.478903-14-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|SJ0PR02MB7486:EE_ X-MS-Office365-Filtering-Correlation-Id: 3889b53b-2b45-4ef5-70c8-08dd776d464f x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: KaYYDBYd+ygrfMZc0mVnehK6a1hOtLjCxTHTJuFgVpG49rSFC8jr6D+7DJMztbEjrH7Lb7/jMO9NKPjPkyAuegTriDMHCU32yCWMCrsXvF3SVGAZMYr0Tju5MKIin2gTAw3oPpv8do7o/J6n9kcgBbMcHs4VOQkvezdADAA+OT0FsWZz8rro4RrbT2pb4LDIdRrgdYkSpA8ravhuPEGwIFVZ0IP0/TV+Dc3Z0mWUva60HTIuBJYdBqa/Qgaw4fNTz8ccTJhbq2Mj4dVpxhg+0JSL0Wx5DBa1K9G+OZb6HSz6ntSwQPb+rhTFvbjDz9OccEYwCz/sRcyaUwNFjqSwyLe0N2o3iNc+j2ggeFUaSEGD792fzMAEWQSZsEeAW4HoZa0yL13AxEjzEkyU9rowGro9pRxuC5WnIbW+Ko+T6NEU8bIkKATb8ZUrocSrjF9Y51JCJJXZcilAip1JgQbzJ2ec/0cOseR/waBiyYsjpo7GrrMUdJOL4VYraron28VjY4+ecGHCFQn+f1XGTLa5RpXotM0Aa1pJxrH4RboB7uwkwDws7FOqLkEfVudUm8Ftm1UVjYAeCydgHab9p7d9S/e6WG6eenhD4hddFN5iiJ46ktHFVJlt+BaR5MjcfWN8CzidyAloea4k8TJIpiVuuXKrueaCTy0a5aGHCiBr18aCHMylA2/kYWwBc6h6qb/z9ihrYhZtosSOVtuIbVNrShSCHRJwqK1bqlGPKc7BGsi7IdVxglq3bpzHAbdIx0yQnVTwBo9lkcWVgWaOwXDhCSv+5Vyurb0o7bjXzJRACMOvyQls4GwAa3LvXBT6eL6HSGda9P+7mQWK99biaSNGYZA6I/jPcEaahfD8VPh2VJAGUgN41GNDlM7cKI6l2/audHFAAcATBRa2VzS1MhrH9mbpspSysOWA0k4k0v82FmGmYitQzb32ORWc5qXDqMUghR6elvwtsaYeUPkGkSN/6zs0Rc+FHxD80f5USJLFnlLp4gykZqQHB/0Tx7QU/ZszZXOCAx+XZqYOH3HTWJlDkwjyGOv+LYhCIg2PLamBpKeTmOmVzdQ2p7uN9H4nLJX0TY3b6NleDhL0CoBjsvgMH+Kw6ijx1LGbA6Ff0f9zzVVQbsw/fa65GYCVYHjg/vqTpmXij0sgmCmCqk3D2rBwAi21iXLWH5VSDJg8TB04dsK0Bw1giDNADryL6isoGiD1wf2SJrF/bLDG/zEpI/uACMGCzt5UbYrwUYQVgUkh56vs55bH1yPewWu0YUeeSkDB7QPe7GAKUqvsyaP4UVCfZNbgUoE0bQR2kiD7lmgSDqah2IKg4g+ggVmk2V2TlRsrr60d2FZ7NojLEdnISNQPHZ53Cf7YNSYsoXMlwwX6M+PXIWv0WC2lr4WGOfGRAic9JxvKTMBhUzH/gReh4D3n6ahAlL57H5ICG2F+08+iQto= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(7416014)(366016)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lUumT4WJ6jX2rGqzgome8bSJ9FOUrerghGWshzvuedAIxHELD60GAqBdLq5CGRAdqe1I+7PAFiQXTZLdRcEYG52sUiuj5rElmoc80dUAfFpifN9bXlRqzIZu5nF0ljn19fuk1N/rfj1vTHG1ogcO0NutQXJ4U7ukuQmOKEK/KtZaWZNyy+PzlzABqxROTQ7RfaJpK/oCz7sLy4wmw9h7KOPF69XDHPtN8IcfNiiiUnzHzVvSSXULcvOW5ywOuc3AHNi/P3p08QhXSeIdSb5rsXUofcqp9ghN3hC4fpRA5BuPJtOzN8SFhUcTUhuEOjirijZYwbJBhnjvypWiKJaeM/TY2L57CHRPQAPRgom+hHgd3yYWfp1Qrub6xBJWoF3/nUw8+PBpLRjpmgM46a6xOUQhkQ/vyJKdj8XGqCxhTYa3Ve9wewIA7n/NOTlB3tyyoU/Shxjbdmu4UZNEwkR0+r1Qoaub2JuwL2l8w+QoDWxpYvJc/vIIrdAFFbS4pONotAY92N9ZbA8FpqJSxG0oqqACXuL1wwLZ+fr/Wt+CdiAiu+AjP2WTDoeRjz9wTmg4aLw5xuqw5LN/HsvboUZ9pwVx0Acg8ZYkI2Du8FPI2V/xQgXQbVXwV1hbVe7Ki20pnJpmvUn5h4lv4ROY9LmZnpmBfRcVMrX6Y3rSeKSHRSv4dOZH4clunOytjENppKuDtRsAQ2kI7xgjyRaAdkl6H3x86ewadypxpWlH4pXoDtYwyO9k9dRxW0sWX4Y0dvQePX8fjYHYbR9F/pon3nt9WwElOUMrRgV3ee2Q0R0aAE++XWVsrLEoXNVWaibJsw6xHjx+pa8hFWTEi8Gy7JrqMBrjPRhV8gF0v/VES5KrDfqQa+r5mHzLksX8xUHTKIHiXHst6hITqtx3lvW2aunFQaKPKXPzPyjJjlkH1xYUlg9QHHzUNzp5gkLNEU9QfjHZmzgO/mv/bMd5BBFRaWA39mEdizZQOtXQ5v2ZO3L5ZjgdX7iKkpZkRV6HnyRdq+WrRAYiSgDNjdztDcvK/Rax9p7u2jNNPUzQjNABbZpgPujngJWs1+OVS8cHQRtnluxOZ+aM2zpnIl0B5IvlrJmtNWPIHkYYp31m+9oe6+XL8138zTGATI3/hx4G4/P++fLp+2Jb9Hfb5yH4jibxrQzvigU0OhQzVNGjsQeKQmnik+LDFfnlQw+j7O0p7YImMFe7+0UT8O79PYbQx2C1Khi0XI7SUTox4/h6Bx0lnGQ2oRJSWDcdWtVZleJ+X/0T8Pxv6kHpuiwCzSm/aEIL9FH7GWNxI3x2gttvDsGA2D0ke9fdewBjuIDk4DbANM/jj1Te9HFJLWZ4P4mbJ5hl3FEZ2Kp06Xof0QZYGBh2tDUDgmOuvcf216Tmye7P6JQfMcdvbyi3B9fyoRJmhiXQ34f+VvCAKEURZEzppsFpk6imvxMLZ9o1AEpWSWwbEAtqDjYNe1jv4UBWqdlYigMEyNWqjvoUk+EJph+QSPgQwYGle0A3TkaYhApmn7PvQueDzgzygAmusGUwzmLXGfDYNmIYzw6cQzKToQr4qcC2lNdkioQoSMvuOOyTZnPFDx6yRMVU X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3889b53b-2b45-4ef5-70c8-08dd776d464f X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:48:57.3881 (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: EaEl9Q8eYBwpeYBwQDhp0e6XiJpk++AUT9GxSkvnEJICRf0q2Mw48D//MT/RkSF5VlQrx3oZlqf3eOGC1wn5OA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB7486 X-Proofpoint-GUID: lPaqEjSGMDWeO50XQoR8B3CJpT-1GCj- X-Proofpoint-ORIG-GUID: lPaqEjSGMDWeO50XQoR8B3CJpT-1GCj- X-Authority-Analysis: v=2.4 cv=LMxmQIW9 c=1 sm=1 tr=0 ts=67f67acc cx=c_pps a=tQsPtMi3p37jOgXbkrwZvw==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=yPCof4ZbAAAA:8 a=64Cc0HZtAAAA:8 a=dodWpOyS_J-MCs3LZaAA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.151.68; envelope-from=john.levon@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org For vfio-user, device operations such as IRQ handling and region read/writes are implemented in userspace over the control socket, not ioctl() or read()/write() to the vfio kernel driver; add an ops vector to generalize this, and implement vfio_device_io_ops_ioctl for interacting with the kernel vfio driver. Originally-by: John Johnson Signed-off-by: Elena Ufimtseva Signed-off-by: Jagannathan Raman Signed-off-by: John Levon --- hw/vfio/ap.c | 2 +- hw/vfio/ccw.c | 2 +- hw/vfio/container-base.c | 6 +- hw/vfio/device.c | 102 ++++++++++++++++++++++++++++++---- hw/vfio/listener.c | 13 +++-- hw/vfio/pci.c | 40 +++++++------ hw/vfio/platform.c | 2 +- hw/vfio/region.c | 17 ++++-- include/hw/vfio/vfio-device.h | 24 +++++++- 9 files changed, 155 insertions(+), 53 deletions(-) diff --git a/hw/vfio/ap.c b/hw/vfio/ap.c index f311bca5b6..b6233b2107 100644 --- a/hw/vfio/ap.c +++ b/hw/vfio/ap.c @@ -229,7 +229,7 @@ static void vfio_ap_instance_init(Object *obj) * handle ram_block_discard_disable(). */ vfio_device_init(vbasedev, VFIO_DEVICE_TYPE_AP, &vfio_ap_ops, - DEVICE(vapdev), true); + &vfio_device_io_ops_ioctl, DEVICE(vapdev), true); /* AP device is mdev type device */ vbasedev->mdev = true; diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c index 14dee7cd19..aee52b5a8d 100644 --- a/hw/vfio/ccw.c +++ b/hw/vfio/ccw.c @@ -676,7 +676,7 @@ static void vfio_ccw_instance_init(Object *obj) * ram_block_discard_disable(). */ vfio_device_init(vbasedev, VFIO_DEVICE_TYPE_CCW, &vfio_ccw_ops, - DEVICE(vcdev), true); + &vfio_device_io_ops_ioctl, DEVICE(vcdev), true); } #ifdef CONFIG_IOMMUFD diff --git a/hw/vfio/container-base.c b/hw/vfio/container-base.c index 613fe1a00d..16fe5f79d2 100644 --- a/hw/vfio/container-base.c +++ b/hw/vfio/container-base.c @@ -198,11 +198,7 @@ static int vfio_device_dma_logging_report(VFIODevice *vbasedev, hwaddr iova, feature->flags = VFIO_DEVICE_FEATURE_GET | VFIO_DEVICE_FEATURE_DMA_LOGGING_REPORT; - if (ioctl(vbasedev->fd, VFIO_DEVICE_FEATURE, feature)) { - return -errno; - } - - return 0; + return vbasedev->io_ops->device_feature(vbasedev, feature); } static int vfio_container_iommu_query_dirty_bitmap(const VFIOContainerBase *bcontainer, diff --git a/hw/vfio/device.c b/hw/vfio/device.c index 102fa5a9b4..545d9f1faf 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -82,7 +82,7 @@ void vfio_device_irq_disable(VFIODevice *vbasedev, int index) .count = 0, }; - ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, &irq_set); + vbasedev->io_ops->set_irqs(vbasedev, &irq_set); } void vfio_device_irq_unmask(VFIODevice *vbasedev, int index) @@ -95,7 +95,7 @@ void vfio_device_irq_unmask(VFIODevice *vbasedev, int index) .count = 1, }; - ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, &irq_set); + vbasedev->io_ops->set_irqs(vbasedev, &irq_set); } void vfio_device_irq_mask(VFIODevice *vbasedev, int index) @@ -108,7 +108,7 @@ void vfio_device_irq_mask(VFIODevice *vbasedev, int index) .count = 1, }; - ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, &irq_set); + vbasedev->io_ops->set_irqs(vbasedev, &irq_set); } static inline const char *action_to_str(int action) @@ -155,6 +155,7 @@ bool vfio_device_irq_set_signaling(VFIODevice *vbasedev, int index, int subindex int argsz; const char *name; int32_t *pfd; + int ret; argsz = sizeof(*irq_set) + sizeof(*pfd); @@ -167,7 +168,9 @@ bool vfio_device_irq_set_signaling(VFIODevice *vbasedev, int index, int subindex pfd = (int32_t *)&irq_set->data; *pfd = fd; - if (!ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, irq_set)) { + ret = vbasedev->io_ops->set_irqs(vbasedev, irq_set); + + if (!ret) { return true; } @@ -188,22 +191,19 @@ bool vfio_device_irq_set_signaling(VFIODevice *vbasedev, int index, int subindex int vfio_device_get_irq_info(VFIODevice *vbasedev, int index, struct vfio_irq_info *info) { - int ret; - memset(info, 0, sizeof(*info)); info->argsz = sizeof(*info); info->index = index; - ret = ioctl(vbasedev->fd, VFIO_DEVICE_GET_IRQ_INFO, info); - - return ret < 0 ? -errno : ret; + return vbasedev->io_ops->get_irq_info(vbasedev, info); } int vfio_device_get_region_info(VFIODevice *vbasedev, int index, struct vfio_region_info **info) { size_t argsz = sizeof(struct vfio_region_info); + int ret; /* create region info cache */ if (vbasedev->reginfo == NULL) { @@ -222,10 +222,11 @@ int vfio_device_get_region_info(VFIODevice *vbasedev, int index, retry: (*info)->argsz = argsz; - if (ioctl(vbasedev->fd, VFIO_DEVICE_GET_REGION_INFO, *info)) { + ret = vbasedev->io_ops->get_region_info(vbasedev, *info); + if (ret != 0) { g_free(*info); *info = NULL; - return -errno; + return ret; } if ((*info)->argsz > argsz) { @@ -332,10 +333,12 @@ void vfio_device_set_fd(VFIODevice *vbasedev, const char *str, Error **errp) } void vfio_device_init(VFIODevice *vbasedev, int type, VFIODeviceOps *ops, - DeviceState *dev, bool ram_discard) + VFIODeviceIOOps *io_ops, DeviceState *dev, + bool ram_discard) { vbasedev->type = type; vbasedev->ops = ops; + vbasedev->io_ops = io_ops; vbasedev->dev = dev; vbasedev->fd = -1; @@ -463,3 +466,78 @@ void vfio_device_prepare(VFIODevice *vbasedev, VFIOContainerBase *bcontainer, vfio_device_get_all_region_info(vbasedev); } + +/* + * Traditional ioctl() based io + */ + +static int vfio_device_io_device_feature(VFIODevice *vbasedev, + struct vfio_device_feature *feature) +{ + int ret; + + ret = ioctl(vbasedev->fd, VFIO_DEVICE_FEATURE, feature); + + return ret < 0 ? -errno : ret; +} + +static int vfio_device_io_get_region_info(VFIODevice *vbasedev, + struct vfio_region_info *info) +{ + int ret; + + ret = ioctl(vbasedev->fd, VFIO_DEVICE_GET_REGION_INFO, info); + + return ret < 0 ? -errno : ret; +} + +static int vfio_device_io_get_irq_info(VFIODevice *vbasedev, + struct vfio_irq_info *info) +{ + int ret; + + ret = ioctl(vbasedev->fd, VFIO_DEVICE_GET_IRQ_INFO, info); + + return ret < 0 ? -errno : ret; +} + +static int vfio_device_io_set_irqs(VFIODevice *vbasedev, + struct vfio_irq_set *irqs) +{ + int ret; + + ret = ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, irqs); + + return ret < 0 ? -errno : ret; +} + +static int vfio_device_io_region_read(VFIODevice *vbasedev, uint8_t index, + off_t off, uint32_t size, void *data) +{ + struct vfio_region_info *info = vbasedev->reginfo[index]; + int ret; + + ret = pread(vbasedev->fd, data, size, info->offset + off); + + return ret < 0 ? -errno : ret; +} + +static int vfio_device_io_region_write(VFIODevice *vbasedev, uint8_t index, + off_t off, uint32_t size, void *data) +{ + struct vfio_region_info *info = vbasedev->reginfo[index]; + int ret; + + ret = pwrite(vbasedev->fd, data, size, info->offset + off); + + return ret < 0 ? -errno : ret; +} + +VFIODeviceIOOps vfio_device_io_ops_ioctl = { + .device_feature = vfio_device_io_device_feature, + .get_region_info = vfio_device_io_get_region_info, + .get_irq_info = vfio_device_io_get_irq_info, + .set_irqs = vfio_device_io_set_irqs, + .region_read = vfio_device_io_region_read, + .region_write = vfio_device_io_region_write, +}; diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index bcf2b98e79..7ea9e0dfb7 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -821,13 +821,17 @@ static void vfio_devices_dma_logging_stop(VFIOContainerBase *bcontainer) VFIO_DEVICE_FEATURE_DMA_LOGGING_STOP; QLIST_FOREACH(vbasedev, &bcontainer->device_list, container_next) { + int ret; + if (!vbasedev->dirty_tracking) { continue; } - if (ioctl(vbasedev->fd, VFIO_DEVICE_FEATURE, feature)) { + ret = vbasedev->io_ops->device_feature(vbasedev, feature); + + if (ret != 0) { warn_report("%s: Failed to stop DMA logging, err %d (%s)", - vbasedev->name, -errno, strerror(errno)); + vbasedev->name, -ret, strerror(-ret)); } vbasedev->dirty_tracking = false; } @@ -928,10 +932,9 @@ static bool vfio_devices_dma_logging_start(VFIOContainerBase *bcontainer, continue; } - ret = ioctl(vbasedev->fd, VFIO_DEVICE_FEATURE, feature); + ret = vbasedev->io_ops->device_feature(vbasedev, feature); if (ret) { - ret = -errno; - error_setg_errno(errp, errno, "%s: Failed to start DMA logging", + error_setg_errno(errp, -ret, "%s: Failed to start DMA logging", vbasedev->name); goto out; } diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index b40d5abdfd..ff2b15ff02 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -381,7 +381,7 @@ static void vfio_msi_interrupt(void *opaque) static int vfio_enable_msix_no_vec(VFIOPCIDevice *vdev) { g_autofree struct vfio_irq_set *irq_set = NULL; - int ret = 0, argsz; + int argsz; int32_t *fd; argsz = sizeof(*irq_set) + sizeof(*fd); @@ -396,9 +396,7 @@ static int vfio_enable_msix_no_vec(VFIOPCIDevice *vdev) fd = (int32_t *)&irq_set->data; *fd = -1; - ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set); - - return ret < 0 ? -errno : ret; + return vdev->vbasedev.io_ops->set_irqs(&vdev->vbasedev, irq_set); } static int vfio_enable_vectors(VFIOPCIDevice *vdev, bool msix) @@ -455,11 +453,11 @@ static int vfio_enable_vectors(VFIOPCIDevice *vdev, bool msix) fds[i] = fd; } - ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set); + ret = vdev->vbasedev.io_ops->set_irqs(&vdev->vbasedev, irq_set); g_free(irq_set); - return ret < 0 ? -errno : ret; + return ret; } static void vfio_add_kvm_msi_virq(VFIOPCIDevice *vdev, VFIOMSIVector *vector, @@ -917,18 +915,22 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) memset(vdev->rom, 0xff, size); while (size) { - bytes = pread(vbasedev->fd, vdev->rom + off, - size, vdev->rom_offset + off); + bytes = vbasedev->io_ops->region_read(vbasedev, + VFIO_PCI_ROM_REGION_INDEX, + off, size, vdev->rom + off); + if (bytes == 0) { break; } else if (bytes > 0) { off += bytes; size -= bytes; } else { - if (errno == EINTR || errno == EAGAIN) { + if (bytes == -EINTR || bytes == -EAGAIN) { continue; } - error_report("vfio: Error reading device ROM: %m"); + error_report("vfio: Error reading device ROM: %s", + strerror(-bytes)); + break; } } @@ -968,22 +970,18 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) static int vfio_pci_config_space_read(VFIOPCIDevice *vdev, off_t offset, uint32_t size, void *data) { - ssize_t ret; - - ret = pread(vdev->vbasedev.fd, data, size, vdev->config_offset + offset); - - return ret < 0 ? -errno : (int)ret; + return vdev->vbasedev.io_ops->region_read(&vdev->vbasedev, + VFIO_PCI_CONFIG_REGION_INDEX, + offset, size, data); } /* "Raw" write of underlying config space. */ static int vfio_pci_config_space_write(VFIOPCIDevice *vdev, off_t offset, uint32_t size, void *data) { - ssize_t ret; - - ret = pwrite(vdev->vbasedev.fd, data, size, vdev->config_offset + offset); - - return ret < 0 ? -errno : (int)ret; + return vdev->vbasedev.io_ops->region_write(&vdev->vbasedev, + VFIO_PCI_CONFIG_REGION_INDEX, + offset, size, data); } static uint64_t vfio_rom_read(void *opaque, hwaddr addr, unsigned size) @@ -3405,7 +3403,7 @@ static void vfio_instance_init(Object *obj) vdev->host.function = ~0U; vfio_device_init(vbasedev, VFIO_DEVICE_TYPE_PCI, &vfio_pci_ops, - DEVICE(vdev), false); + &vfio_device_io_ops_ioctl, DEVICE(vdev), false); vdev->nv_gpudirect_clique = 0xFF; diff --git a/hw/vfio/platform.c b/hw/vfio/platform.c index fd176c18a4..28eedfa571 100644 --- a/hw/vfio/platform.c +++ b/hw/vfio/platform.c @@ -650,7 +650,7 @@ static void vfio_platform_instance_init(Object *obj) VFIODevice *vbasedev = &vdev->vbasedev; vfio_device_init(vbasedev, VFIO_DEVICE_TYPE_PLATFORM, &vfio_platform_ops, - DEVICE(vdev), false); + &vfio_device_io_ops_ioctl, DEVICE(vdev), false); } #ifdef CONFIG_IOMMUFD diff --git a/hw/vfio/region.c b/hw/vfio/region.c index ef2630cac3..35fb81c04a 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -45,6 +45,7 @@ void vfio_region_write(void *opaque, hwaddr addr, uint32_t dword; uint64_t qword; } buf; + int ret; switch (size) { case 1: @@ -64,11 +65,13 @@ void vfio_region_write(void *opaque, hwaddr addr, break; } - if (pwrite(vbasedev->fd, &buf, size, region->fd_offset + addr) != size) { + ret = vbasedev->io_ops->region_write(vbasedev, region->nr, + addr, size, &buf); + if (ret != size) { error_report("%s(%s:region%d+0x%"HWADDR_PRIx", 0x%"PRIx64 - ",%d) failed: %m", + ",%d) failed: %s", __func__, vbasedev->name, region->nr, - addr, data, size); + addr, data, size, ret < 0 ? strerror(ret) : "short write"); } trace_vfio_region_write(vbasedev->name, region->nr, addr, data, size); @@ -96,11 +99,13 @@ uint64_t vfio_region_read(void *opaque, uint64_t qword; } buf; uint64_t data = 0; + int ret; - if (pread(vbasedev->fd, &buf, size, region->fd_offset + addr) != size) { - error_report("%s(%s:region%d+0x%"HWADDR_PRIx", %d) failed: %m", + ret = vbasedev->io_ops->region_read(vbasedev, region->nr, addr, size, &buf); + if (ret != size) { + error_report("%s(%s:region%d+0x%"HWADDR_PRIx", %d) failed: %s", __func__, vbasedev->name, region->nr, - addr, size); + addr, size, ret < 0 ? strerror(ret) : "short read"); return (uint64_t)-1; } switch (size) { diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index 967b07cd89..cb2f581826 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -41,6 +41,7 @@ enum { }; typedef struct VFIODeviceOps VFIODeviceOps; +typedef struct VFIODeviceIOOps VFIODeviceIOOps; typedef struct VFIOMigration VFIOMigration; typedef struct IOMMUFDBackend IOMMUFDBackend; @@ -66,6 +67,7 @@ typedef struct VFIODevice { OnOffAuto migration_multifd_transfer; bool migration_events; VFIODeviceOps *ops; + VFIODeviceIOOps *io_ops; unsigned int num_irqs; unsigned int num_regions; unsigned int flags; @@ -140,6 +142,25 @@ typedef QLIST_HEAD(VFIODeviceList, VFIODevice) VFIODeviceList; extern VFIODeviceList vfio_device_list; #ifdef CONFIG_LINUX +/* + * How devices communicate with the server. The default option is through + * ioctl() to the kernel VFIO driver, but vfio-user can use a socket to a remote + * process. + */ +struct VFIODeviceIOOps { + int (*device_feature)(VFIODevice *vdev, struct vfio_device_feature *); + int (*get_region_info)(VFIODevice *vdev, + struct vfio_region_info *info); + int (*get_irq_info)(VFIODevice *vdev, struct vfio_irq_info *irq); + int (*set_irqs)(VFIODevice *vdev, struct vfio_irq_set *irqs); + int (*region_read)(VFIODevice *vdev, uint8_t nr, off_t off, uint32_t size, + void *data); + int (*region_write)(VFIODevice *vdev, uint8_t nr, off_t off, uint32_t size, + void *data); +}; + +extern VFIODeviceIOOps vfio_device_io_ops_ioctl; + int vfio_device_get_region_info(VFIODevice *vbasedev, int index, struct vfio_region_info **info); int vfio_device_get_region_info_type(VFIODevice *vbasedev, uint32_t type, @@ -154,6 +175,7 @@ int vfio_device_get_irq_info(VFIODevice *vbasedev, int index, bool vfio_device_get_name(VFIODevice *vbasedev, Error **errp); void vfio_device_set_fd(VFIODevice *vbasedev, const char *str, Error **errp); void vfio_device_init(VFIODevice *vbasedev, int type, VFIODeviceOps *ops, - DeviceState *dev, bool ram_discard); + VFIODeviceIOOps *io_ops, DeviceState *dev, + bool ram_discard); int vfio_device_get_aw_bits(VFIODevice *vdev); #endif /* HW_VFIO_VFIO_COMMON_H */ From patchwork Wed Apr 9 13:48:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Levon X-Patchwork-Id: 14044695 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D57E6C369A1 for ; Wed, 9 Apr 2025 13:52:04 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u2Vo6-0007FP-OI; Wed, 09 Apr 2025 09:49:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u2Vnn-0006nT-Dg; Wed, 09 Apr 2025 09:49:19 -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 1u2Vnj-0005ht-NG; Wed, 09 Apr 2025 09:49:14 -0400 Received: from pps.filterd (m0127839.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 539DT60G025416; Wed, 9 Apr 2025 06:49:04 -0700 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=wi2jtWbsQUBkOPHldM0psMluwrKR0ryayA5kJploI Wk=; b=XUJUc6XWQME7NCJ9+oOOdVFfFKA7b2PGxGJyE0esxxl52Ojgw7X3fNGky Ld446jnjhmUxCqnBPL0kTjRIFv7wzM0IJ6boet+e4NZTKOxb840deeBUkIejeS+5 OwVAhdCJDU07Pzq+WzeyyRkLe+a+rbIKVafKzIlKJpc5nSU5cWRQ16i3P1PPuVv2 bcweoPdIkiA7FS4cztkXlsRU5M5bI7m672pLe8STiPzQcViKhLe9rWilVXlbOiZG ESuQEJzPgcc4HqK5u8oIWAIV02d/p3q3B/d8kzsohnedOpNI74se5UTscpLAlVQ7 d31Hhqh140UEY577HCxC4/2mcA/pQ== Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2044.outbound.protection.outlook.com [104.47.66.44]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 45u3kksbjp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Apr 2025 06:49:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mKGxEZxAIpG1dlOkxYBpkiCMOGe5bG+Zsqha0N7rRLXLFrZQzsc/ZsGjLNLsozGNZe5lJNnSAK9LZzj0u9XpGVIW3H+oYC4Quy8iJ4MAf2MD2qwFl8Jh848vQGtSXekpmcvZ5QGFbEcc3MKbucNzAuefjcZzBT7Ko2+dOBjYTdbD2PZKFpCJPDYCQBlA9g7gCX7AVT/9nfTl+Je21KUPNVk0P1ZfrLgOLq72FlXPSQ1pabBkTMyK8t6ms6TkuVIWX7aseySLElV5Psus2g3F1LEzRgObWB3yeBwVYNIuBQeCaeTqLcatRBz7f8c0WXl2igGsbE5iEm6jEzAK9hqbvQ== 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=wi2jtWbsQUBkOPHldM0psMluwrKR0ryayA5kJploIWk=; b=OFFKfIiNNS/hpoSK2sjZdCghg6jia6lzZaem0pdjwEQabmzlIk1tDsdTDBIWmgSIuzx5GmrhpAp3g2+DC4OYgwxkg5RECRz6a0wsKFV2JtA3Fn3YYgy7cbEIalN1VRwOqrmm0C/DmR4P+nxsm9FtlvZ3q33GNsF/N8cHtV+Rk4cIvWEUFBn9Q3h173ichfi4k8oGb6J3UJ259YiRrZeDmN5D7uY3a/Af5FCNRAviWMgIcDkE9fHdovVR+YIYzhXzgxdYPNfESeGVIlhhQfBeOzLJtlUXuPopbQbpkQkTBUzodzKM+U6VZdmuD1zz5Ty1ph0zx3jOmXIZRPMvs8QC7Q== 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=wi2jtWbsQUBkOPHldM0psMluwrKR0ryayA5kJploIWk=; b=TDihb3pI9Rxdkvi+x0OYenidxG+m4BRt0ngwckwRj3SFdJ9uaUbo5JJTmVmTRQYxUiXwgMPpXj7d4RlCBccaNXj9gGhZI9uvgCdZm/N7kToB+QGdRxQjyyQG0h5Oo6mBVaTCi8e+QZRJCozcd+1yBwRhV41TuRxdNNi61u2NOw/KFANqq/xhw6WimY3ZqYtwUcEw5eSFGuzKhvb1J8md3yaj7QHihqOdQVXAJCPs0eOP9/5wb8nTXRGychWdc41Y+sQ6//O+LSdf7C6jHcy4gDuX/18h/1Iiq0M201cCByxVyW9bS6OOFLBOajqqABOjCwiXNUOEEmISJZwX9puzAw== Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by SJ0PR02MB7181.namprd02.prod.outlook.com (2603:10b6:a03:29b::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.35; Wed, 9 Apr 2025 13:49:00 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%6]) with mapi id 15.20.8606.027; Wed, 9 Apr 2025 13:49:00 +0000 From: John Levon To: qemu-devel@nongnu.org Cc: Tony Krowiak , Stefano Garzarella , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Xu , Thomas Huth , Matthew Rosato , David Hildenbrand , "Michael S. Tsirkin" , Alex Williamson , qemu-s390x@nongnu.org, Tomita Moeko , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Halil Pasic , Jason Herne , Paolo Bonzini , Eric Farman , John Levon , John Johnson , Jagannathan Raman , Elena Ufimtseva Subject: [PATCH 14/14] vfio/container: pass MemoryRegion to DMA operations Date: Wed, 9 Apr 2025 15:48:14 +0200 Message-Id: <20250409134814.478903-15-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409134814.478903-1-john.levon@nutanix.com> References: <20250409134814.478903-1-john.levon@nutanix.com> X-ClientProxiedBy: AM8P251CA0028.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::33) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|SJ0PR02MB7181:EE_ X-MS-Office365-Filtering-Correlation-Id: cbb4599d-1caf-498f-e630-08dd776d4831 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|1800799024; X-Microsoft-Antispam-Message-Info: /l9MxAQo5Pi//wkZ81j9cMB0bM8WG/dE6vLcmfxlwYVRKL0dTZY5laISnoi+455oLwQ2X0R9pUxg6QXx+4wT/EtjzU5Ap4MY/rNhRBuuxh/BbfiBYdekfTMGfRxunymyxm224QNWUDKIluwQw48tVi7gXsijXH3ZHNXXU4ZxSAiB1LCNO8nz6EeLEpgmrfhrV61Ym+hlWo8Qz5sbrCpxIZJhz9cC5NUwc980/T4soORNrn+ZMlwfDh20ITS5O9A9p1/Dxmn/OdC12Fsn2Z8g6LgyutGOEXIt2GtmmAx6BBgnYeAwPdlL/4VHlVCqnObXiwDk3yIkMjXfjEGDJyoCjsFXhzActIb/dh6hyHoLe0GX5FoHzCuLlXtZzQr1MkXoXmQbubHyksdKfw7taziUkUEmvaZgbdjpx9illo/iN8no5dxkMXS7rABA658gaUmBEgvE4psJEoQ1/GbT9LKsBtE+bJoWGJm3Lka5TAcvZNUWfukhsZzmhF9HW9VP7rjckxo6O0WFt+wIZSh5igOe6hwLgvxWs3qWdCiJkVq7kMZPaCnkPyS02o935oIV6+RxROhwUKUJz7eFym4q5blSng63/7NtYgbSXa7STbH5hKz+cQbP4LT5GhXZTp0vS8nFmwH8ESwL64zrOZXTdLlziT/241M1rmPBMljpc/5+r0hoGsKwHrXc54oREq6xNyUrEHKgdJs8hEagnsLekOAqHe5e1LxRnBta7MhH1fPgap/dTFa8foW+7DsThhVvof4SKDMTWAGOvsx8uDbACRIRjw+lDZABd1JyRHpAumoGbA0A3muj3sfnpLeup9gNxCLqxmJtuegsrCTKOz1g8iLnpNrvp/tfJUKkxP3SLMLJt5G6o3ulUySkwNFNsWp1/rhq24cfhlLM/I1yugMfMLQeER6h2ll7/mlXwnx99Zpg+hOwOzQjocOCNtrd1DqizNXsj9AHvSg+r///QopVuGc2WTBdDomeLPxP8EJTWlv31XXjz4QVVUsrlal3fmH042KEFryvbLJnWRpw66sMO/hn1CBhZLgs1HVBHxSAK6irlxZ2tm/Np7qqQq7ABxGOBLUCvC+hgOTJkdrf7VREHDEYmkTBlLehtCqYrdbhQ7G/eYJ876NgsASmP01mMUfIFS6ttTrZ1uCzOEZIVJkS7LCX76v3LTN6nagzvTJyFO4Wi06j9MLeIwmcgnWLOccooipVctay1J784LNKjuDmvBTNKM1UvAU6Ajn+GZxTx6xlueAjcqksunOJoA+3V6y9jO+qivphksQJ4NFwdZBoATMlSZC3Xedb6xX9rM1mDexQ0BE9lck48P6xgDvx1f73Pc/t8jgwsxPDGY6RxUNIaAMr9yEpwEb0H6p6lWixzATboNFpp2MFoGwwhR4Sz8h76m/RG9tFpzPke2/mhr4WX1QSCKjcA0QDllKZoFMnG8++ECA= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(7416014)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cRTYeh68hkgqcluotEsFmThZz9h+DedXoIGlTedoc4O5k9w1iRAW9LkLg1Yr9zgEaVdNK8MTys5RhUmDAA+uPu2D4CvvEEFM7TznrnuaCIJfCHa7cFJmKEIshRQPmtdhxiDuHvFLK4KMtnxSw3zyPCbqVs9Fe7+debQKWXVpFbFzqJ0mbIbK+PtNM4hAjnCi3Sg8jOYg384Fdt3rKMh7GmkMGKvOfPBibvZQXSXF9+iUeOTopwfbWG3adcKp94XZbCc8w9OyxxEv2uEKcYs2mnThSplHQsLilvoGjqtoKKekzltq19wXfN80T0dZz4/PnD3M5Fh8k3G0LPd/KPtx+LqNt0oPqF4Gv2tVsEwPYTx39rPndif8CKXl1iISYpWr7HqY/ZG82vaiBR16Xd0Fw/Y0WQDk2GKOSlAe9Bwtcf7sZnIZ1wt2T8wZbxbXwDTGUVUR5jGEq9kliZv/yyoToqhs/NtFQ1XRBaKfAnHAJatKalBGfyQLcFHOuSoMr3ShiX9ueYVgKm3eIM1E6ZjCfL0srn+2goHsWqKoASZ1xz3Rj9rI1TQCdK7X3gL1cV96GJPTXJq673L1Vyb/I1qNK2Uyf79HB5H1vAad/z/g/k6KahybIA2uQPHyKqBZOXr+MmFWhWgWyddL2TICksxZ6P8mvoLGnq7Wtxe633R0oW5Fr1p0nxVbRbF7ZUZ6DUy5pWMC2GGAUa3UF6aBjyvzdjUEfE93teYZMqtadk8Bvc82s3pmf/lBq80ag22i+e6g8MuIuVNvOT60o6OvJrkyDUg0pD8xL6GX8c8nkFo+1eSacU+3NQalhREAzTncFNHWekC8Swe4yZsrfNtGfsvv1TCGCLpwh7zSJvvES1HrhzPdoCcoE+GcBT8h8qI8hpsAWb90YXx9nDTwle32GKeppTGntxmSXTEuFLFFGJ5GIM/2pX1sHMuacfuzfQBejEs29YYSRJjMif5Mb1+dQviftnPcEFcFwZE/XfBhYKFRhtcoqad+Gov13UBRUkXN0R87afq6hO5R4ZniATWHaPnw+gotzY9iRnYtuXbZS/1b0EdQYvzCbv+JOrZ1hJuP9l1k24mdADhKVABqPgaOPAGC6ip1/iOkgV7srDPxr4UO+1lyQ7QY1DXBOIHZU3iOcSoCe/FgGgquAABd70vMuIss3tjcVqRQUkRSRpzTXuC7D2m25ceksts29/AyrPXKEG2vCWADvc8bpqN6gX29XuCHMErJoOTRUzG3LB8MX+0AiM+mwDGBn4PJ3Zq3GbzXq2V8z8av/T7+vT448IDUcbRB1h6u8rlnafTAVeesdKZ9Ix63sXjc8iRpUbhV8lVWDZBLrNkt6FkHwR3xJxNgKF++kcvxINz147cA3I9khsj6MgDO2qd40qH+9T+PxnLPrHXez5gXAE5sURNx9owIVw/uF9cGd3vXHfp3sjUtuVprbH9avzE/AWJasUt4ph/zRLsV/xX0O4uPomeV03y1KsJv/q2mz+Yij/+zi2NpLFnacAxWecSu6Kvz4pEe9izWcjInvAGlWlxHFGrglpufFV/pIQHAL4dqqpoLqIlrlp0mYpLFC5lv6RrTxXPtmUJ0qmiw X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: cbb4599d-1caf-498f-e630-08dd776d4831 X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 13:49:00.4343 (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: hw9Rgzx0TUe8sWUYgwfF60Cr6y1AOuz1IZdDuQm49Q52oFn6KCDc3L1aWQ36sjHJANC7N4zIY8WBhQMa4Lyouw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB7181 X-Proofpoint-ORIG-GUID: 2DsHcFRSvXyDijvudD8nezNBc9J18dOd X-Authority-Analysis: v=2.4 cv=d+b1yQjE c=1 sm=1 tr=0 ts=67f67acf cx=c_pps a=+tN8zt48bv3aY6W8EltW8A==:117 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=XR8D0OoHHMoA:10 a=0kUYKlekyDsA:10 a=yPCof4ZbAAAA:8 a=64Cc0HZtAAAA:8 a=7zwm0VwvlM8wVqh4CGEA:9 X-Proofpoint-GUID: 2DsHcFRSvXyDijvudD8nezNBc9J18dOd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_05,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Reason: safe Received-SPF: pass client-ip=148.163.151.68; envelope-from=john.levon@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.505, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Pass through the MemoryRegion to DMA operation handlers of vfio containers. The vfio-user container will need this later. Originally-by: John Johnson Signed-off-by: Jagannathan Raman Signed-off-by: Elena Ufimtseva Signed-off-by: John Levon --- hw/vfio/container-base.c | 4 ++-- hw/vfio/container.c | 3 ++- hw/vfio/iommufd.c | 3 ++- hw/vfio/listener.c | 18 +++++++++++------- hw/virtio/vhost-vdpa.c | 2 +- include/exec/memory.h | 4 +++- include/hw/vfio/vfio-container-base.h | 4 ++-- system/memory.c | 7 ++++++- 8 files changed, 29 insertions(+), 16 deletions(-) diff --git a/hw/vfio/container-base.c b/hw/vfio/container-base.c index 16fe5f79d2..55c977ec33 100644 --- a/hw/vfio/container-base.c +++ b/hw/vfio/container-base.c @@ -75,12 +75,12 @@ void vfio_address_space_insert(VFIOAddressSpace *space, int vfio_container_dma_map(VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, - void *vaddr, bool readonly) + void *vaddr, bool readonly, MemoryRegion *mrp) { VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer); g_assert(vioc->dma_map); - return vioc->dma_map(bcontainer, iova, size, vaddr, readonly); + return vioc->dma_map(bcontainer, iova, size, vaddr, readonly, mrp); } int vfio_container_dma_unmap(VFIOContainerBase *bcontainer, diff --git a/hw/vfio/container.c b/hw/vfio/container.c index 61333d7fc4..587af60e57 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -215,7 +215,8 @@ static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer, } static int vfio_legacy_dma_map(const VFIOContainerBase *bcontainer, hwaddr iova, - ram_addr_t size, void *vaddr, bool readonly) + ram_addr_t size, void *vaddr, bool readonly, + MemoryRegion *mrp) { const VFIOContainer *container = container_of(bcontainer, VFIOContainer, bcontainer); diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index 22e5b16967..4fd3c0d9f3 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -34,7 +34,8 @@ TYPE_HOST_IOMMU_DEVICE_IOMMUFD "-vfio" static int iommufd_cdev_map(const VFIOContainerBase *bcontainer, hwaddr iova, - ram_addr_t size, void *vaddr, bool readonly) + ram_addr_t size, void *vaddr, bool readonly, + MemoryRegion *mrp) { const VFIOIOMMUFDContainer *container = container_of(bcontainer, VFIOIOMMUFDContainer, bcontainer); diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index 7ea9e0dfb7..cb06a63a0c 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -94,12 +94,12 @@ static bool vfio_listener_skipped_section(MemoryRegionSection *section) /* Called with rcu_read_lock held. */ static bool vfio_get_xlat_addr(IOMMUTLBEntry *iotlb, void **vaddr, ram_addr_t *ram_addr, bool *read_only, - Error **errp) + MemoryRegion **mrp, Error **errp) { bool ret, mr_has_discard_manager; ret = memory_get_xlat_addr(iotlb, vaddr, ram_addr, read_only, - &mr_has_discard_manager, errp); + &mr_has_discard_manager, mrp, errp); if (ret && mr_has_discard_manager) { /* * Malicious VMs might trigger discarding of IOMMU-mapped memory. The @@ -127,6 +127,7 @@ static void vfio_iommu_map_notify(IOMMUNotifier *n, IOMMUTLBEntry *iotlb) VFIOGuestIOMMU *giommu = container_of(n, VFIOGuestIOMMU, n); VFIOContainerBase *bcontainer = giommu->bcontainer; hwaddr iova = iotlb->iova + giommu->iommu_offset; + MemoryRegion *mrp; void *vaddr; int ret; Error *local_err = NULL; @@ -151,7 +152,8 @@ static void vfio_iommu_map_notify(IOMMUNotifier *n, IOMMUTLBEntry *iotlb) if ((iotlb->perm & IOMMU_RW) != IOMMU_NONE) { bool read_only; - if (!vfio_get_xlat_addr(iotlb, &vaddr, NULL, &read_only, &local_err)) { + if (!vfio_get_xlat_addr(iotlb, &vaddr, NULL, &read_only, &mrp, + &local_err)) { error_report_err(local_err); goto out; } @@ -164,7 +166,7 @@ static void vfio_iommu_map_notify(IOMMUNotifier *n, IOMMUTLBEntry *iotlb) */ ret = vfio_container_dma_map(bcontainer, iova, iotlb->addr_mask + 1, vaddr, - read_only); + read_only, mrp); if (ret) { error_report("vfio_container_dma_map(%p, 0x%"HWADDR_PRIx", " "0x%"HWADDR_PRIx", %p) = %d (%s)", @@ -234,7 +236,7 @@ static int vfio_ram_discard_notify_populate(RamDiscardListener *rdl, vaddr = memory_region_get_ram_ptr(section->mr) + start; ret = vfio_container_dma_map(bcontainer, iova, next - start, - vaddr, section->readonly); + vaddr, section->readonly, section->mr); if (ret) { /* Rollback */ vfio_ram_discard_notify_discard(rdl, section); @@ -558,7 +560,7 @@ static void vfio_listener_region_add(MemoryListener *listener, } ret = vfio_container_dma_map(bcontainer, iova, int128_get64(llsize), - vaddr, section->readonly); + vaddr, section->readonly, section->mr); if (ret) { error_setg(&err, "vfio_container_dma_map(%p, 0x%"HWADDR_PRIx", " "0x%"HWADDR_PRIx", %p) = %d (%s)", @@ -1022,7 +1024,9 @@ static void vfio_iommu_map_dirty_notify(IOMMUNotifier *n, IOMMUTLBEntry *iotlb) } rcu_read_lock(); - if (!vfio_get_xlat_addr(iotlb, NULL, &translated_addr, NULL, &local_err)) { + if (!vfio_get_xlat_addr(iotlb, NULL, &translated_addr, NULL, NULL, + &local_err)) { + error_report_err(local_err); goto out_unlock; } diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c index 7efbde3d4c..eb02b081d4 100644 --- a/hw/virtio/vhost-vdpa.c +++ b/hw/virtio/vhost-vdpa.c @@ -228,7 +228,7 @@ static void vhost_vdpa_iommu_map_notify(IOMMUNotifier *n, IOMMUTLBEntry *iotlb) if ((iotlb->perm & IOMMU_RW) != IOMMU_NONE) { bool read_only; - if (!memory_get_xlat_addr(iotlb, &vaddr, NULL, &read_only, NULL, + if (!memory_get_xlat_addr(iotlb, &vaddr, NULL, &read_only, NULL, NULL, &local_err)) { error_report_err(local_err); return; diff --git a/include/exec/memory.h b/include/exec/memory.h index d09af58c97..f79ff332b5 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -747,13 +747,15 @@ void ram_discard_manager_unregister_listener(RamDiscardManager *rdm, * @read_only: indicates if writes are allowed * @mr_has_discard_manager: indicates memory is controlled by a * RamDiscardManager + * @mrp: if non-NULL, fill in with MemoryRegion * @errp: pointer to Error*, to store an error if it happens. * * Return: true on success, else false setting @errp with error. */ bool memory_get_xlat_addr(IOMMUTLBEntry *iotlb, void **vaddr, ram_addr_t *ram_addr, bool *read_only, - bool *mr_has_discard_manager, Error **errp); + bool *mr_has_discard_manager, MemoryRegion **mrp, + Error **errp); typedef struct CoalescedMemoryRange CoalescedMemoryRange; typedef struct MemoryRegionIoeventfd MemoryRegionIoeventfd; diff --git a/include/hw/vfio/vfio-container-base.h b/include/hw/vfio/vfio-container-base.h index 6eaf2b2430..47ce016d8e 100644 --- a/include/hw/vfio/vfio-container-base.h +++ b/include/hw/vfio/vfio-container-base.h @@ -78,7 +78,7 @@ void vfio_address_space_insert(VFIOAddressSpace *space, int vfio_container_dma_map(VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, - void *vaddr, bool readonly); + void *vaddr, bool readonly, MemoryRegion *mrp); int vfio_container_dma_unmap(VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, IOMMUTLBEntry *iotlb, int flags); @@ -124,7 +124,7 @@ struct VFIOIOMMUClass { void (*listener_commit)(VFIOContainerBase *bcontainer); int (*dma_map)(const VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, - void *vaddr, bool readonly); + void *vaddr, bool readonly, MemoryRegion *mrp); int (*dma_unmap)(const VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, IOMMUTLBEntry *iotlb, int flags); diff --git a/system/memory.c b/system/memory.c index 4c829793a0..de4f955a66 100644 --- a/system/memory.c +++ b/system/memory.c @@ -2185,7 +2185,8 @@ void ram_discard_manager_unregister_listener(RamDiscardManager *rdm, /* Called with rcu_read_lock held. */ bool memory_get_xlat_addr(IOMMUTLBEntry *iotlb, void **vaddr, ram_addr_t *ram_addr, bool *read_only, - bool *mr_has_discard_manager, Error **errp) + bool *mr_has_discard_manager, MemoryRegion **mrp, + Error **errp) { MemoryRegion *mr; hwaddr xlat; @@ -2250,6 +2251,10 @@ bool memory_get_xlat_addr(IOMMUTLBEntry *iotlb, void **vaddr, *read_only = !writable || mr->readonly; } + if (mrp != NULL) { + *mrp = mr; + } + return true; }