Move the root IOMMU shared domain type, page-size mask, and geometry into a private Hyper-V IOMMU header so IOMMUFD support can live outside the main root driver file.
Assisted-by: GPT-5.6 Sol Signed-off-by: Jacob Pan <[email protected]> --- drivers/iommu/hyperv/hv-iommu-root.c | 11 +---------- drivers/iommu/hyperv/hv-iommu.h | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 drivers/iommu/hyperv/hv-iommu.h diff --git a/drivers/iommu/hyperv/hv-iommu-root.c b/drivers/iommu/hyperv/hv-iommu-root.c index a5268e0e52cc..3b82891c9cab 100644 --- a/drivers/iommu/hyperv/hv-iommu-root.c +++ b/drivers/iommu/hyperv/hv-iommu-root.c @@ -7,6 +7,7 @@ #include <linux/dma-map-ops.h> #include <linux/interval_tree.h> #include <linux/hyperv.h> +#include "hv-iommu.h" #include <asm/iommu.h> #include <asm/mshyperv.h> #include "../dma-iommu.h" @@ -31,15 +32,6 @@ static struct iommu_domain_ops hv_paging_domain_ops; /* IOMMU device that we export to the world. HyperV supports max of one */ static struct iommu_device hv_virt_iommu; -struct hv_domain { - struct iommu_domain iommu_dom; - u32 domid_num; /* as opposed to domain_id.type */ - spinlock_t mappings_lock; /* protects mappings_tree */ - struct rb_root_cached mappings_tree; /* iova to pa lookup tree */ -}; - -#define to_hv_domain(d) container_of(d, struct hv_domain, iommu_dom) - struct hv_iommu_mapping { phys_addr_t paddr; struct interval_tree_node iova; @@ -67,7 +59,6 @@ static bool hv_special_domain(struct hv_domain *hvdom) return hvdom == &hv_def_identity_dom || hvdom == &hv_def_blocked_dom; } -#define HV_IOMMU_PGSIZES SZ_4K /* for now, to be enhanced */ static atomic_t hv_unique_id; /* unique numeric id for a new domain */ static bool hv_iommu_capable(struct device *dev, enum iommu_cap cap) diff --git a/drivers/iommu/hyperv/hv-iommu.h b/drivers/iommu/hyperv/hv-iommu.h new file mode 100644 index 000000000000..6895b4e7eb6d --- /dev/null +++ b/drivers/iommu/hyperv/hv-iommu.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Hyper-V root vIOMMU driver. + * Copyright (C) 2026, Microsoft, Inc. + */ + +#ifndef __HYPERV_IOMMU_H +#define __HYPERV_IOMMU_H + +#include <linux/interval_tree.h> +#include <linux/iommu.h> +#include <linux/sizes.h> +#include <linux/spinlock.h> + +#define HV_IOMMU_PGSIZES SZ_4K /* for now, to be enhanced */ + +struct hv_domain { + struct iommu_domain iommu_dom; + u32 domid_num; /* as opposed to domain_id.type */ + spinlock_t mappings_lock; /* protects mappings_tree */ + struct rb_root_cached mappings_tree; /* iova to pa lookup tree */ +}; + +#define to_hv_domain(d) container_of(d, struct hv_domain, iommu_dom) + +#endif /* __HYPERV_IOMMU_H */ -- 2.43.0

