File xsa400-10.patch of Package xen.23269
AMD/IOMMU: abstract maximum number of page table levels
We will want to use the constant elsewhere.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Paul Durrant <paul@xen.org>
--- a/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h
+++ b/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h
@@ -193,7 +193,7 @@ static inline int amd_iommu_get_paging_m
while ( max_frames > PTE_PER_TABLE_SIZE )
{
max_frames = PTE_PER_TABLE_ALIGN(max_frames) >> PTE_PER_TABLE_SHIFT;
- if ( ++level > 6 )
+ if ( ++level > IOMMU_MAX_PT_LEVELS )
return -ENOMEM;
}
--- a/xen/include/asm-x86/hvm/svm/amd-iommu-defs.h
+++ b/xen/include/asm-x86/hvm/svm/amd-iommu-defs.h
@@ -110,6 +110,7 @@ struct amd_iommu_dte {
bool tv:1;
unsigned int :5;
unsigned int had:2;
+#define IOMMU_MAX_PT_LEVELS 6
unsigned int paging_mode:3;
uint64_t pt_root:40;
bool ppr:1;
--- a/xen/drivers/passthrough/amd/iommu_map.c
+++ b/xen/drivers/passthrough/amd/iommu_map.c
@@ -260,7 +260,7 @@ static int iommu_pde_from_dfn(struct dom
table = hd->arch.root_table;
level = hd->arch.paging_mode;
- BUG_ON( table == NULL || level < 1 || level > 6 );
+ BUG_ON( table == NULL || level < 1 || level > IOMMU_MAX_PT_LEVELS );
/*
* A frame number past what the current page tables can represent can't