Revert "FROMLIST: iommu/iova: Support limiting IOVA alignment"

This reverts commit ee98c0848c as it was
not accepted upstream and it causes merge issues with 5.11-rc1.

If this change is still needed, please work with upstream to get it
accepted and then submit the backported patch here.

Bug: 148141615
Cc: Liam Mark <lmark@codeaurora.org>
Cc: Chris Goldsworthy <cgoldswo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I108ba1f929c620898a3b30dc6238a44d93d3ba7d
This commit is contained in:
Greg Kroah-Hartman
2020-12-18 17:30:20 +01:00
parent ac94b7aa54
commit 9a76e701d5
2 changed files with 2 additions and 50 deletions

View File

@@ -11,36 +11,6 @@ config IOASID
config IOMMU_API
bool
if IOMMU_IOVA
config IOMMU_LIMIT_IOVA_ALIGNMENT
bool "Limit IOVA alignment"
help
When the IOVA framework applies IOVA alignment it aligns all
IOVAs to the smallest PAGE_SIZE order which is greater than or
equal to the requested IOVA size. This works fine for sizes up
to several MiB, but for larger sizes it results in address
space wastage and fragmentation. For example drivers with a 4
GiB IOVA space might run out of IOVA space when allocating
buffers great than 64 MiB.
Enable this option to impose a limit on the alignment of IOVAs.
If unsure, say N.
config IOMMU_IOVA_ALIGNMENT
int "Maximum PAGE_SIZE order of alignment for IOVAs"
depends on IOMMU_LIMIT_IOVA_ALIGNMENT
range 4 9
default 9
help
With this parameter you can specify the maximum PAGE_SIZE order for
IOVAs. Larger IOVAs will be aligned only to this specified order.
The order is expressed a power of two multiplied by the PAGE_SIZE.
If unsure, leave the default value "9".
endif
menuconfig IOMMU_SUPPORT
bool "IOMMU Hardware Support"
depends on MMU

View File

@@ -178,24 +178,6 @@ iova_insert_rbtree(struct rb_root *root, struct iova *iova,
rb_insert_color(&iova->node, root);
}
#ifdef CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT
static unsigned long limit_align_shift(struct iova_domain *iovad,
unsigned long shift)
{
unsigned long max_align_shift;
max_align_shift = CONFIG_IOMMU_IOVA_ALIGNMENT + PAGE_SHIFT
- iova_shift(iovad);
return min_t(unsigned long, max_align_shift, shift);
}
#else
static unsigned long limit_align_shift(struct iova_domain *iovad,
unsigned long shift)
{
return shift;
}
#endif
static int __alloc_and_insert_iova_range(struct iova_domain *iovad,
unsigned long size, unsigned long limit_pfn,
struct iova *new, bool size_aligned)
@@ -207,7 +189,7 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad,
unsigned long align_mask = ~0UL;
if (size_aligned)
align_mask <<= limit_align_shift(iovad, fls_long(size - 1));
align_mask <<= fls_long(size - 1);
/* Walk the tree backwards */
spin_lock_irqsave(&iovad->iova_rbtree_lock, flags);
@@ -260,7 +242,7 @@ static int __alloc_and_insert_iova_best_fit(struct iova_domain *iovad,
unsigned long gap, candidate_gap = ~0UL;
if (size_aligned)
align_mask <<= limit_align_shift(iovad, fls_long(size - 1));
align_mask <<= limit_align(iovad, fls_long(size - 1));
/* Walk the tree backwards */
spin_lock_irqsave(&iovad->iova_rbtree_lock, flags);