[PATCH 11/24] iommu/amd: Export amd_iommu_alloc_dev_data() helper
Suravee Suthikulpanit <[email protected]> Mon, 27 Jul 2026 13:29:00 +0000
| Newsgroups | dev.linux.lists.iommu,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
AMD vIOMMU requires programming the DTE of the IOMMU device ID to set up IPA mapping, and current DTE helper functions (for setting / clearing) require struct iommu_dev_data. However, the IOMMU device does not go through the normal PCI device attach path, which would allocate the struct iommu_dev_data. So, the driver needs to manually allocate and initialize the struct iommu_dev_data for IOMMU in order to reuse the helper functions. Make alloc_dev_data() available outside iommu.c so callers can allocate struct iommu_dev_data for a given IOMMU instance and device ID without going through the PCI device attach path. Signed-off-by: Suravee Suthikulpanit <[email protected]> --- drivers/iommu/amd/amd_iommu.h | 2 ++ drivers/iommu/amd/iommu.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/amd/amd_iommu.h b/drivers/iommu/amd/amd_iommu.h index dfbc4a75a07f..2aece7ffac2f 100644 --- a/drivers/iommu/amd/amd_iommu.h +++ b/drivers/iommu/amd/amd_iommu.h @@ -56,6 +56,8 @@ extern u8 amd_iommu_hpt_vasize; extern unsigned long amd_iommu_pgsize_bitmap; extern bool amd_iommu_hatdis; +struct iommu_dev_data *amd_iommu_alloc_dev_data(struct amd_iommu *iommu, u16 devid); + /* Protection domain ops */ void amd_iommu_init_identity_domain(void); struct protection_domain *protection_domain_alloc(void); diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 1bc232553c71..081448fc7b42 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -388,7 +388,7 @@ static struct amd_iommu *rlookup_amd_iommu(struct device *dev) return __rlookup_amd_iommu(seg, PCI_SBDF_TO_DEVID(devid)); } -static struct iommu_dev_data *alloc_dev_data(struct amd_iommu *iommu, u16 devid) +struct iommu_dev_data *amd_iommu_alloc_dev_data(struct amd_iommu *iommu, u16 devid) { struct iommu_dev_data *dev_data; struct amd_iommu_pci_seg *pci_seg = iommu->pci_seg; @@ -510,7 +510,7 @@ static struct iommu_dev_data *find_dev_data(struct amd_iommu *iommu, u16 devid) dev_data = search_dev_data(iommu, devid); if (dev_data == NULL) { - dev_data = alloc_dev_data(iommu, devid); + dev_data = amd_iommu_alloc_dev_data(iommu, devid); if (!dev_data) return NULL; -- 2.34.1