Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752295AbdGDN4H (ORCPT ); Tue, 4 Jul 2017 09:56:07 -0400 Received: from mail-pg0-f44.google.com ([74.125.83.44]:33101 "EHLO mail-pg0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750872AbdGDN4F (ORCPT ); Tue, 4 Jul 2017 09:56:05 -0400 From: Tomasz Figa To: iommu@lists.linux-foundation.org Cc: linux-kernel@vger.kernel.org, Joerg Roedel , Robin Murphy , Tomasz Figa Subject: [PATCH v2 2/2] iommu/dma: Use __GFP_NOWARN only for high-order allocations Date: Tue, 4 Jul 2017 22:55:56 +0900 Message-Id: <20170704135556.21704-2-tfiga@chromium.org> X-Mailer: git-send-email 2.13.2.725.g09c95d1e9-goog In-Reply-To: <20170704135556.21704-1-tfiga@chromium.org> References: <20170704135556.21704-1-tfiga@chromium.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1637 Lines: 50 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 Reviewed-by: Robin Murphy --- drivers/iommu/dma-iommu.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) Changes from v1: - Fix typo in subject. - Add Robin's Reviewed-by. diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index bf23989b5158..6ed8c8f941d8 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.2.725.g09c95d1e9-goog