Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752637AbeADJx3 (ORCPT + 1 other); Thu, 4 Jan 2018 04:53:29 -0500 Received: from bombadil.infradead.org ([65.50.211.133]:50426 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752459AbeADJx1 (ORCPT ); Thu, 4 Jan 2018 04:53:27 -0500 Date: Thu, 4 Jan 2018 01:53:25 -0800 From: Christoph Hellwig To: Christian =?iso-8859-1?Q?K=F6nig?= Cc: konrad.wilk@oracle.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH] swiotlb: suppress warning when __GFP_NOWARN is set v4 Message-ID: <20180104095325.GB13091@infradead.org> References: <20180104093233.16311-1-christian.koenig@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180104093233.16311-1-christian.koenig@amd.com> User-Agent: Mutt/1.9.1 (2017-09-22) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: This seems to collide with my dma direct/swiotlb series posted recently. > +++ b/lib/swiotlb.c > @@ -490,11 +490,11 @@ static void swiotlb_bounce(phys_addr_t orig_addr, phys_addr_t tlb_addr, > } > } > > -phys_addr_t swiotlb_tbl_map_single(struct device *hwdev, > - dma_addr_t tbl_dma_addr, > - phys_addr_t orig_addr, size_t size, > - enum dma_data_direction dir, > - unsigned long attrs) > +static phys_addr_t tbl_map_single(struct device *hwdev, > + dma_addr_t tbl_dma_addr, > + phys_addr_t orig_addr, size_t size, > + enum dma_data_direction dir, > + unsigned long attrs, bool warn) We already have DMA_ATTR_NO_WARN which can be passed in attrs. Please use it instead of reinventing it. > swiotlb_alloc_coherent(struct device *hwdev, size_t size, > dma_addr_t *dma_handle, gfp_t flags) > { > + bool warn = !(flags & __GFP_NOWARN); > dma_addr_t dev_addr; > void *ret; > int order = get_order(size); > @@ -739,7 +750,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size, > * will grab memory from the lowest available address range. > */ > phys_addr_t paddr = map_single(hwdev, 0, size, > - DMA_FROM_DEVICE, 0); > + DMA_FROM_DEVICE, 0, warn); Note: in my above series swiotlb_alloc_coherent is going away, and replaced with a swiotlb_alloc that takes a dma_attrs argument. Using that for passing the nowarn flag is the right way to go instead of using __GFP_NOWARN.