From nobody Tue Feb 10 03:55:52 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1712564182; cv=none; d=zohomail.com; s=zohoarc; b=BrJ9/r99kAUpwwv/BiG+7InCHGlGh6eNqzizdf2lTXmQ03yFoAJVxG2Sy02TCeRjtMhHYDae95KM3K/D7NuYxGekW4K+SvdIuQJOdkCMvOllhYQcehq921yt2Tce/gKKPGAPbOMxElpNxtv/MhNZjYgKFst6jFrMCnjHZunlRKU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1712564182; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=As3ZllD6lfanyTK+Q75Kc0WMHUKylXFUfZOnDbE7Z9g=; b=jNEtpidspIS6l2S1esm7aO30yd3bgGMKZOdHp7mkou3RZwaegvu6EmbycotEHRVLVt3FH5oAFuAg+0MqKnp/FrrV7fftqsIqmjV/RELy5CY48J8o18iS+6jByT02T6hh9yLQa0fN+ql+2y18daOGdg4Wq6WuO5dtC5USIhQDI9w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1712564182578950.604286211793; Mon, 8 Apr 2024 01:16:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rtk9v-00030i-3H; Mon, 08 Apr 2024 04:15:19 -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 1rtk9t-0002y7-Ha for qemu-devel@nongnu.org; Mon, 08 Apr 2024 04:15:17 -0400 Received: from mgamail.intel.com ([192.198.163.10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rtk9r-00089q-Nz for qemu-devel@nongnu.org; Mon, 08 Apr 2024 04:15:17 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2024 01:15:14 -0700 Received: from spr-s2600bt.bj.intel.com ([10.240.192.124]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2024 01:15:11 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1712564116; x=1744100116; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mThwLA2cpqB/Ub1Co78HjfLcWVvgAn50zoxRT0ghxDo=; b=ebPNTtPakWIp6QOjpZHjEnsXFiUQmHnOSqEBlON5mEEO3t4o+aF+1m2O 7idCUguaw4n6xEGZzBKunvfJZZt4T3lxmSKZTqYAzvY6LwHQNDcCf3666 PVRRBKk2agzauEZokAVBbQA8KAWAOiuVDsinpP4G+izrGWudq/EOEoTl4 f5mGbMNIHz5uW10P3eolqWSQewYDkcD1NbQtfXJ5OgoKU9FyS8Atdesc9 5tRJ577rNvrHRA6wahcPjaUE4InY2lW2aiu/+lWkTAsYyq77Y0uNK3vnG o1rfVmWTtH3H3ogfiKKvXuOdjb0WCZrkQbFylYSMJN6CEiFysiOmJm5/G Q==; X-CSE-ConnectionGUID: WMmEY20hTrykIicrsAK46Q== X-CSE-MsgGUID: jpPJ00l+T6W/0vnbSeXCVw== X-IronPort-AV: E=McAfee;i="6600,9927,11037"; a="19199680" X-IronPort-AV: E=Sophos;i="6.07,186,1708416000"; d="scan'208";a="19199680" X-CSE-ConnectionGUID: 8Mh8REmGQ/KKVYHWXwmyqw== X-CSE-MsgGUID: DogWqoJiTUyyZOH1poh80Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,186,1708416000"; d="scan'208";a="19845186" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex.williamson@redhat.com, clg@redhat.com, eric.auger@redhat.com, peterx@redhat.com, jasowang@redhat.com, mst@redhat.com, jgg@nvidia.com, nicolinc@nvidia.com, joao.m.martins@oracle.com, kevin.tian@intel.com, yi.l.liu@intel.com, chao.p.peng@intel.com, Zhenzhong Duan , Yi Sun Subject: [PATCH v2 03/10] backends/iommufd: Introduce abstract HIODIOMMUFD device Date: Mon, 8 Apr 2024 16:12:23 +0800 Message-Id: <20240408081230.1030078-4-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240408081230.1030078-1-zhenzhong.duan@intel.com> References: <20240408081230.1030078-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.198.163.10; envelope-from=zhenzhong.duan@intel.com; helo=mgamail.intel.com X-Spam_score_int: -51 X-Spam_score: -5.2 X-Spam_bar: ----- X-Spam_report: (-5.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.355, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1712564183943100001 HIODIOMMUFD represents a host IOMMU device under iommufd backend. Currently it includes only public iommufd handle and device id. which could be used to get hw IOMMU information. When nested translation is supported in future, vIOMMU is going to have iommufd related operations like attaching/detaching hwpt, So IOMMUFDDevice interface will be further extended at that time. VFIO and VDPA device have different way of attaching/detaching hwpt. So HIODIOMMUFD is still an abstract class which will be inherited by VFIO and VDPA device. Introduce a helper hiod_iommufd_init() to initialize HIODIOMMUFD device. Suggested-by: C=C3=A9dric Le Goater Originally-by: Yi Liu Signed-off-by: Yi Sun Signed-off-by: Zhenzhong Duan --- include/sysemu/iommufd.h | 22 +++++++++++++++++++ backends/iommufd.c | 47 ++++++++++++++++++++++++++-------------- 2 files changed, 53 insertions(+), 16 deletions(-) diff --git a/include/sysemu/iommufd.h b/include/sysemu/iommufd.h index 9af27ebd6c..71c53cbb45 100644 --- a/include/sysemu/iommufd.h +++ b/include/sysemu/iommufd.h @@ -4,6 +4,7 @@ #include "qom/object.h" #include "exec/hwaddr.h" #include "exec/cpu-common.h" +#include "sysemu/host_iommu_device.h" =20 #define TYPE_IOMMUFD_BACKEND "iommufd" OBJECT_DECLARE_TYPE(IOMMUFDBackend, IOMMUFDBackendClass, IOMMUFD_BACKEND) @@ -33,4 +34,25 @@ int iommufd_backend_map_dma(IOMMUFDBackend *be, uint32_t= ioas_id, hwaddr iova, ram_addr_t size, void *vaddr, bool readonly); int iommufd_backend_unmap_dma(IOMMUFDBackend *be, uint32_t ioas_id, hwaddr iova, ram_addr_t size); + +#define TYPE_HIOD_IOMMUFD TYPE_HOST_IOMMU_DEVICE "-iommufd" +OBJECT_DECLARE_TYPE(HIODIOMMUFD, HIODIOMMUFDClass, HIOD_IOMMUFD) + +struct HIODIOMMUFD { + /*< private >*/ + HostIOMMUDevice parent; + void *opaque; + + /*< public >*/ + IOMMUFDBackend *iommufd; + uint32_t devid; +}; + +struct HIODIOMMUFDClass { + /*< private >*/ + HostIOMMUDeviceClass parent_class; +}; + +void hiod_iommufd_init(HIODIOMMUFD *idev, IOMMUFDBackend *iommufd, + uint32_t devid); #endif diff --git a/backends/iommufd.c b/backends/iommufd.c index 62a79fa6b0..ef8b3a808b 100644 --- a/backends/iommufd.c +++ b/backends/iommufd.c @@ -212,23 +212,38 @@ int iommufd_backend_unmap_dma(IOMMUFDBackend *be, uin= t32_t ioas_id, return ret; } =20 -static const TypeInfo iommufd_backend_info =3D { - .name =3D TYPE_IOMMUFD_BACKEND, - .parent =3D TYPE_OBJECT, - .instance_size =3D sizeof(IOMMUFDBackend), - .instance_init =3D iommufd_backend_init, - .instance_finalize =3D iommufd_backend_finalize, - .class_size =3D sizeof(IOMMUFDBackendClass), - .class_init =3D iommufd_backend_class_init, - .interfaces =3D (InterfaceInfo[]) { - { TYPE_USER_CREATABLE }, - { } - } -}; +void hiod_iommufd_init(HIODIOMMUFD *idev, IOMMUFDBackend *iommufd, + uint32_t devid) +{ + idev->iommufd =3D iommufd; + idev->devid =3D devid; +} =20 -static void register_types(void) +static void hiod_iommufd_class_init(ObjectClass *oc, void *data) { - type_register_static(&iommufd_backend_info); } =20 -type_init(register_types); +static const TypeInfo types[] =3D { + { + .name =3D TYPE_IOMMUFD_BACKEND, + .parent =3D TYPE_OBJECT, + .instance_size =3D sizeof(IOMMUFDBackend), + .instance_init =3D iommufd_backend_init, + .instance_finalize =3D iommufd_backend_finalize, + .class_size =3D sizeof(IOMMUFDBackendClass), + .class_init =3D iommufd_backend_class_init, + .interfaces =3D (InterfaceInfo[]) { + { TYPE_USER_CREATABLE }, + { } + } + }, { + .name =3D TYPE_HIOD_IOMMUFD, + .parent =3D TYPE_HOST_IOMMU_DEVICE, + .instance_size =3D sizeof(HIODIOMMUFD), + .class_size =3D sizeof(HIODIOMMUFDClass), + .class_init =3D hiod_iommufd_class_init, + .abstract =3D true, + } +}; + +DEFINE_TYPES(types) --=20 2.34.1