From patchwork Tue Nov 14 10:48:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mingjin Ye X-Patchwork-Id: 134257 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 91A7743329; Tue, 14 Nov 2023 12:03:00 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2E91A4027D; Tue, 14 Nov 2023 12:03:00 +0100 (CET) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.151]) by mails.dpdk.org (Postfix) with ESMTP id 491524027B; Tue, 14 Nov 2023 12:02:58 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1699959778; x=1731495778; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=6VcHQhpMOk/k49zrmVMly0n1tuNtCFQslGj33jtjAiQ=; b=IB/UnI2Gz4gPBTiCsksj91bTB6lkU/AGfr8eu1vop0ESe7A9nNvBb6qk ks4zdFGSLg3EdHhkG/dM30Un4XTTi+NcMPJ5+iS7UnM6YOgEOPTZBuWSi Gj/zyxZ7bCuZQNAFJdx/8OeqJu819A+WQ0wk7Plwz1syQ9GRhxDApF6k8 L0ZEKaJWnv3FPw1pfTYNT0CYwVMzu9GzfeOstRvQzSKkar58ayIEysRC3 oY0aCdeIrv6zUBzzEwwO/x55t1rVn41/SMDkQXnv4GqRw6/tY4tN+R2Ei J4412PaCQGtLlLWfmJ0Ju38HXoryCfyH0vCkPr3fFLVJXktwzgSbRNhnT g==; X-IronPort-AV: E=McAfee;i="6600,9927,10893"; a="370829473" X-IronPort-AV: E=Sophos;i="6.03,301,1694761200"; d="scan'208";a="370829473" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 03:02:57 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10893"; a="793750572" X-IronPort-AV: E=Sophos;i="6.03,301,1694761200"; d="scan'208";a="793750572" Received: from unknown (HELO localhost.localdomain) ([10.239.252.253]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 03:02:54 -0800 From: Mingjin Ye To: dev@dpdk.org Cc: qiming.yang@intel.com, Mingjin Ye , stable@dpdk.org, Anatoly Burakov Subject: [PATCH] vfio: add get device info API Date: Tue, 14 Nov 2023 10:48:16 +0000 Message-Id: <20231114104816.527818-1-mingjinx.ye@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This patch adds an API to support getting device information. The driver can use the "rte_vfio_get_device_info" helper to get device information from EAL. Cc: stable@dpdk.org Signed-off-by: Mingjin Ye Acked-by: Anatoly Burakov --- lib/eal/include/rte_vfio.h | 26 ++++++++++++++++++++++++++ lib/eal/linux/eal_vfio.c | 19 +++++++++++++++++++ lib/eal/version.map | 1 + 3 files changed, 46 insertions(+) diff --git a/lib/eal/include/rte_vfio.h b/lib/eal/include/rte_vfio.h index 3487c4f2a2..b3f55963e3 100644 --- a/lib/eal/include/rte_vfio.h +++ b/lib/eal/include/rte_vfio.h @@ -212,6 +212,32 @@ int rte_vfio_get_group_num(const char *sysfs_base, const char *dev_addr, int *iommu_group_num); +/** + * Get device information + * + * This function is only relevant to linux and will return + * an error on BSD. + * + * @param sysfs_base + * sysfs path prefix. + * + * @param dev_addr + * device location. + * + * @param vfio_dev_fd + * VFIO fd. + * + * @param device_info + * Device information. + * + * @return + * 0 on success. + * <0 on failure. + */ +int +rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr, + int *vfio_dev_fd, struct vfio_device_info *device_info); + /** * Open a new VFIO container fd * diff --git a/lib/eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c index ad3c1654b2..5810d9fcd7 100644 --- a/lib/eal/linux/eal_vfio.c +++ b/lib/eal/linux/eal_vfio.c @@ -1222,6 +1222,25 @@ vfio_set_iommu_type(int vfio_container_fd) return NULL; } +int +rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr, + int *vfio_dev_fd, struct vfio_device_info *device_info) +{ + if (!device_info || *vfio_dev_fd < 0) + return -1; + + if (*vfio_dev_fd == 0) { + if (rte_vfio_setup_device(sysfs_base, dev_addr, + vfio_dev_fd, device_info)) + return -1; + } else { + if (ioctl(*vfio_dev_fd, VFIO_DEVICE_GET_INFO, &device_info)) + return -1; + } + + return 0; +} + int vfio_has_supported_extensions(int vfio_container_fd) { diff --git a/lib/eal/version.map b/lib/eal/version.map index e00a844805..8b4a9c237e 100644 --- a/lib/eal/version.map +++ b/lib/eal/version.map @@ -300,6 +300,7 @@ DPDK_24 { rte_vfio_noiommu_is_enabled; # WINDOWS_NO_EXPORT rte_vfio_release_device; # WINDOWS_NO_EXPORT rte_vfio_setup_device; # WINDOWS_NO_EXPORT + rte_vfio_get_device_info; # WINDOWS_NO_EXPORT rte_zmalloc; rte_zmalloc_socket;