Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752591AbdF0Haw (ORCPT ); Tue, 27 Jun 2017 03:30:52 -0400 Received: from mail-pf0-f171.google.com ([209.85.192.171]:33867 "EHLO mail-pf0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752500AbdF0H20 (ORCPT ); Tue, 27 Jun 2017 03:28:26 -0400 From: Tomasz Figa To: iommu@lists.linux-foundation.org Cc: linux-kernel@vger.kernel.org, Joerg Roedel , Robin Murphy , Tomasz Figa Subject: [PATCH 2/2] iommu/dma: use __GFP_NOWARN only for high-order allocations Date: Tue, 27 Jun 2017 16:28:12 +0900 Message-Id: <20170627072812.15316-2-tfiga@chromium.org> X-Mailer: git-send-email 2.13.1.611.g7e3b11ae1-goog In-Reply-To: <20170627072812.15316-1-tfiga@chromium.org> References: <20170627072812.15316-1-tfiga@chromium.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1518 Lines: 45 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. 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) -- 2.13.1.611.g7e3b11ae1-goog