Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752743AbdF0LFc (ORCPT ); Tue, 27 Jun 2017 07:05:32 -0400 Received: from foss.arm.com ([217.140.101.70]:55320 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752112AbdF0LF0 (ORCPT ); Tue, 27 Jun 2017 07:05:26 -0400 Subject: Re: [PATCH 2/2] iommu/dma: use __GFP_NOWARN only for high-order allocations To: Tomasz Figa , iommu@lists.linux-foundation.org Cc: linux-kernel@vger.kernel.org, Joerg Roedel References: <20170627072812.15316-1-tfiga@chromium.org> <20170627072812.15316-2-tfiga@chromium.org> From: Robin Murphy Message-ID: <00da8d2c-d2e6-6462-d311-80ca4f515d24@arm.com> Date: Tue, 27 Jun 2017 12:05:22 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 MIME-Version: 1.0 In-Reply-To: <20170627072812.15316-2-tfiga@chromium.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1682 Lines: 49 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 > Signed-off-by: Tomasz Figa > --- > 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) >