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 <[email protected]> > Signed-off-by: Tomasz Figa <[email protected]> > --- > 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) >

