From patchwork Thu Aug 3 14:31:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yi Liu X-Patchwork-Id: 130678 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f41:0:b0:3e4:2afc:c1 with SMTP id v1csp1214377vqx; Thu, 3 Aug 2023 08:10:23 -0700 (PDT) X-Google-Smtp-Source: APBJJlHHTmzkD2/cbi/IIhHAX+UjCqLpBXxpPvZgPweJJE6GBryhGLJuNWzkqQBWt8o/Hydwv8yL X-Received: by 2002:a17:906:3088:b0:99c:50ee:3da9 with SMTP id 8-20020a170906308800b0099c50ee3da9mr3483961ejv.45.1691075423335; Thu, 03 Aug 2023 08:10:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691075423; cv=none; d=google.com; s=arc-20160816; b=I/6G43SFYm6uo/IQNpUumB7rYmHqZV7FNvpBDvgPhYH9jJZn5v0MjJbijI0p3n7jXS Z30ioNhpskZ2B4XXAOjkZ75R6LhJtYjyXBkFrNeYjm23fvfV3iELgRXIh02yuuibQgYu V0eeOx/cE6NUP5/MpeW4ROzZoCMXtzXJPB6Jd3KlyYWO80DxC36Xcn6MTQbfkVpbNOUW 7Gz7Fi2+KHCjIVtuutjzbrsDKzAe8ocPNlnH0RtZgFQ4l7xZ0b/lMlsVryq32UfezYFP ZGkSH+9ryA+sCLhQCZ/2zOTw+Fa7xocsrI1PnQ0vDxYMClHyiEOBqjyct+em7b8tTJSO rg8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LyW67dsUQ5p1beAfrCSChiKNcmT6kfyQrq0kbpiRIrQ=; fh=25kVo4cotgMzE250R6E3K5ES7E7C2JawiavlW0h5mKU=; b=rbdyeDKrRkyG/EIUyiAW0TJaSwdVgfvgPU0zpiFxg/Z7CNr2nKrsexxq7o644b52lg wmcz4mF/83H+VeqQEgSIx0UjdwGedvi2FlxYqj6MaXsAx6Pke77yuKsNAi+RF4Xb62r4 IEUMI/r7sCi0aNITmKuEbZoptgPngqJIAe5vh8A3JnFxpG7s9JPyC45kgrTcxTmQQxHR ciS/Rb2cDLgcJ0VahwWNTa0/PD51CdZQVPGlTZXRH96JGLWI8dYFDxzaUv3Lp4U1Opmi heq95BQvRPbiDW3u2cxUUq/mmJL48+4w80lGY/GseRgk8RdEX613s8Hr2LSyjTlXQIuK cdUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Ax5Bz2nc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gw21-20020a170906f15500b009903666fcd0si7909027ejb.384.2023.08.03.08.09.58; Thu, 03 Aug 2023 08:10:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Ax5Bz2nc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235601AbjHCOhr (ORCPT + 99 others); Thu, 3 Aug 2023 10:37:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44772 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236424AbjHCOhW (ORCPT ); Thu, 3 Aug 2023 10:37:22 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C36B730C2; Thu, 3 Aug 2023 07:36:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1691073387; x=1722609387; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=AGDwKm4e+hgAjZnZl+805wCEVMh599r7jQ3Hi0hIRrk=; b=Ax5Bz2nczDKtT2Bj8B1e1KVC3wi3oDLdiR179/Gof/MGNp22j9DKuGmA tkPbJ4LpFBmG4TBwb8+z86gfrg2pFq9rchyuqKhWvBCNmS1YjHqLZFx6q 25z2kWMRVKxx+Up7VEEmunhhQXt5rFpoz5EyXHv09VyMr7LEInx2UO65N asJqHFNFig5QKg2O1rO096+HKcgcQWmN+okKhxFGm+i64tnvzmX3Z3Y3u w/OoUFJxlqhs2oGChavq5HJKnUgTYeVLdCPRObuFx1Q4MElEYSoZKMITm oYxELPy/vWcvOK89HY+pRbOaGlMPYTGSkU9EV88yKGrJwddJjb696TUVL Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10791"; a="372643374" X-IronPort-AV: E=Sophos;i="6.01,252,1684825200"; d="scan'208";a="372643374" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Aug 2023 07:31:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10791"; a="759153177" X-IronPort-AV: E=Sophos;i="6.01,252,1684825200"; d="scan'208";a="759153177" Received: from 984fee00a4c6.jf.intel.com ([10.165.58.231]) by orsmga008.jf.intel.com with ESMTP; 03 Aug 2023 07:31:47 -0700 From: Yi Liu To: joro@8bytes.org, alex.williamson@redhat.com, jgg@nvidia.com, kevin.tian@intel.com, robin.murphy@arm.com, baolu.lu@linux.intel.com Cc: cohuck@redhat.com, eric.auger@redhat.com, nicolinc@nvidia.com, kvm@vger.kernel.org, mjrosato@linux.ibm.com, chao.p.peng@linux.intel.com, yi.l.liu@intel.com, yi.y.sun@linux.intel.com, peterx@redhat.com, jasowang@redhat.com, shameerali.kolothum.thodi@huawei.com, lulu@redhat.com, suravee.suthikulpanit@amd.com, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, zhenzhong.duan@intel.com Subject: [PATCH v5 2/4] iommu: Add new iommu op to get iommu hardware information Date: Thu, 3 Aug 2023 07:31:42 -0700 Message-Id: <20230803143144.200945-3-yi.l.liu@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230803143144.200945-1-yi.l.liu@intel.com> References: <20230803143144.200945-1-yi.l.liu@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1773221103073984221 X-GMAIL-MSGID: 1773221103073984221 From: Lu Baolu Introduce a new iommu op to get the IOMMU hardware capabilities for iommufd. This information will be used by any vIOMMU driver which is owned by userspace. This op chooses to make the special parameters opaque to the core. This suits the current usage model where accessing any of the IOMMU device special parameters does require a userspace driver that matches the kernel driver. If a need for common parameters, implemented similarly by several drivers, arises then there's room in the design to grow a generic parameter set as well. No wrapper API is added as it is supposed to be used by iommufd only. Different IOMMU hardware would have different hardware information. So the information reported differs as well. To let the external user understand the difference. enum iommu_hw_info_type is defined. For the iommu drivers that are capable to report hardware information, it should have a unique iommu_hw_info_type and return to caller. For the driver doesn't report hardware information, caller just uses IOMMU_HW_INFO_TYPE_NONE if a type is required. Signed-off-by: Lu Baolu Co-developed-by: Nicolin Chen Signed-off-by: Nicolin Chen Signed-off-by: Yi Liu --- include/linux/iommu.h | 9 +++++++++ include/uapi/linux/iommufd.h | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/include/linux/iommu.h b/include/linux/iommu.h index e0245aa82b75..f2d6a3989713 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -228,6 +228,14 @@ struct iommu_iotlb_gather { /** * struct iommu_ops - iommu ops and capabilities * @capable: check capability + * @hw_info: IOMMU hardware information. The type of the returned data is + * marked by the output type of this op. Type is one of + * enum iommu_hw_info_type defined in include/uapi/linux/iommufd.h. + * The drivers that support this op should define a unique type + * in include/uapi/linux/iommufd.h. The data buffer returned by this + * op is allocated in the IOMMU driver and the caller should free it + * after use. Return the data buffer if success, or ERR_PTR on + * failure. * @domain_alloc: allocate iommu domain * @probe_device: Add device to iommu driver handling * @release_device: Remove device from iommu driver handling @@ -257,6 +265,7 @@ struct iommu_iotlb_gather { */ struct iommu_ops { bool (*capable)(struct device *dev, enum iommu_cap); + void *(*hw_info)(struct device *dev, u32 *length, u32 *type); /* Domain allocation and freeing by the iommu driver */ struct iommu_domain *(*domain_alloc)(unsigned iommu_domain_type); diff --git a/include/uapi/linux/iommufd.h b/include/uapi/linux/iommufd.h index 8245c01adca6..1f616b0f8ae0 100644 --- a/include/uapi/linux/iommufd.h +++ b/include/uapi/linux/iommufd.h @@ -370,4 +370,12 @@ struct iommu_hwpt_alloc { __u32 __reserved; }; #define IOMMU_HWPT_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_HWPT_ALLOC) + +/** + * enum iommu_hw_info_type - IOMMU Hardware Info Types + * @IOMMU_HW_INFO_TYPE_NONE: Used by the drivers that does not report hardware info + */ +enum iommu_hw_info_type { + IOMMU_HW_INFO_TYPE_NONE, +}; #endif