Messages in this thread | | | Subject | Re: [PATCH 2/2] iommu/dma: use __GFP_NOWARN only for high-order allocations | From | Robin Murphy <> | Date | Tue, 27 Jun 2017 12:05:22 +0100 |
| |
On 27/06/17 08:28, Tomasz Figa wrote: > Memory allocation routines are expected to report allocation errors to > kernel log. However, current implementation of __iommu_dma_alloc_pages() > adds __GFP_NOWARN for all calls to alloc_pages(), which completely > disables any logging. > > Fix it by adding __GFP_NOWARN only to high order allocation attempts, > which are not critical.
Makes sense to me.
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
> Signed-off-by: Tomasz Figa <tfiga@chromium.org> > --- > drivers/iommu/dma-iommu.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c > index 29965a092a69..8507987eed90 100644 > --- a/drivers/iommu/dma-iommu.c > +++ b/drivers/iommu/dma-iommu.c > @@ -433,6 +433,7 @@ static struct page **__iommu_dma_alloc_pages(unsigned int count, > { > struct page **pages; > unsigned int i = 0, array_size = count * sizeof(*pages); > + const gfp_t high_order_gfp = __GFP_NOWARN | __GFP_NORETRY; > > order_mask &= (2U << MAX_ORDER) - 1; > if (!order_mask) > @@ -452,8 +453,6 @@ static struct page **__iommu_dma_alloc_pages(unsigned int count, > if (!(gfp & (__GFP_DMA | __GFP_DMA32))) > gfp |= __GFP_HIGHMEM; > > - gfp |= __GFP_NOWARN; > - > while (count) { > struct page *page = NULL; > unsigned int order_size; > @@ -469,7 +468,7 @@ static struct page **__iommu_dma_alloc_pages(unsigned int count, > > order_size = 1U << order; > page = alloc_pages((order_mask - order_size) ? > - gfp | __GFP_NORETRY : gfp, order); > + gfp | high_order_gfp : gfp, order); > if (!page) > continue; > if (!order) >
| |