Message ID | 20190320185718.jhr6gvs7jdbn4x3p@rric.localdomain |
---|---|
State | Accepted |
Commit | 80ef4464d5e27408685e609d389663aad46644b9 |
Headers | show |
Series | [v2] iommu/iova: Fix tracking of recently failed iova address | expand |
On Wed, Mar 20, 2019 at 06:57:23PM +0000, Robert Richter wrote: > From: Robert Richter <rrichter@marvell.com> > Subject: [PATCH v2] iommu/iova: Fix tracking of recently failed iova address > size > > If a 32 bit allocation request is too big to possibly succeed, it > early exits with a failure and then should never update max32_alloc_ > size. This patch fixes current code, now the size is only updated if > the slow path failed while walking the tree. Without the fix the > allocation may enter the slow path again even if there was a failure > before of a request with the same or a smaller size. > > Cc: <stable@vger.kernel.org> # 4.20+ > Fixes: bee60e94a1e2 ("iommu/iova: Optimise attempts to allocate iova from 32bit address range") > Signed-off-by: Robert Richter <rrichter@marvell.com> > Reviewed-by: Robin Murphy <robin.murphy@arm.com> > Signed-off-by: Robert Richter <rrichter@marvell.com> > --- > drivers/iommu/iova.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) Applied, thanks.
diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c index f8d3ba247523..2de8122e218f 100644 --- a/drivers/iommu/iova.c +++ b/drivers/iommu/iova.c @@ -207,8 +207,10 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad, curr_iova = rb_entry(curr, struct iova, node); } while (curr && new_pfn <= curr_iova->pfn_hi); - if (limit_pfn < size || new_pfn < iovad->start_pfn) + if (limit_pfn < size || new_pfn < iovad->start_pfn) { + iovad->max32_alloc_size = size; goto iova32_full; + } /* pfn_lo will point to size aligned address if size_aligned is set */ new->pfn_lo = new_pfn; @@ -222,7 +224,6 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad, return 0; iova32_full: - iovad->max32_alloc_size = size; spin_unlock_irqrestore(&iovad->iova_rbtree_lock, flags); return -ENOMEM; }