Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S941661AbcJ1O7E (ORCPT ); Fri, 28 Oct 2016 10:59:04 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59730 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S937878AbcJ1O7C (ORCPT ); Fri, 28 Oct 2016 10:59:02 -0400 Message-ID: <1477666740.31844.9.camel@redhat.com> Subject: Re: [net-next PATCH RFC 07/26] arch/c6x: Add option to skip sync on DMA map and unmap From: Mark Salter To: Alexander Duyck , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: brouer@redhat.com, davem@davemloft.net, linux-c6x-dev@linux-c6x.org, Aurelien Jacquiot Date: Fri, 28 Oct 2016 10:59:00 -0400 In-Reply-To: <20161024120503.16276.44357.stgit@ahduyck-blue-test.jf.intel.com> References: <20161024115737.16276.71059.stgit@ahduyck-blue-test.jf.intel.com> <20161024120503.16276.44357.stgit@ahduyck-blue-test.jf.intel.com> Organization: Red Hat, Inc Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 28 Oct 2016 14:59:02 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2202 Lines: 64 On Mon, 2016-10-24 at 08:05 -0400, Alexander Duyck wrote: > This change allows us to pass DMA_ATTR_SKIP_CPU_SYNC which allows us to > avoid invoking cache line invalidation if the driver will just handle it > later via a sync_for_cpu or sync_for_device call. > > Cc: Mark Salter > Cc: Aurelien Jacquiot > Cc: linux-c6x-dev@linux-c6x.org > Signed-off-by: Alexander Duyck > --- Acked-by: Mark Salter >  arch/c6x/kernel/dma.c |   16 +++++++++++----- >  1 file changed, 11 insertions(+), 5 deletions(-) > > diff --git a/arch/c6x/kernel/dma.c b/arch/c6x/kernel/dma.c > index db4a6a3..d28df74 100644 > --- a/arch/c6x/kernel/dma.c > +++ b/arch/c6x/kernel/dma.c > @@ -42,14 +42,17 @@ static dma_addr_t c6x_dma_map_page(struct device *dev, struct page *page, >  { >   dma_addr_t handle = virt_to_phys(page_address(page) + offset); >   > - c6x_dma_sync(handle, size, dir); > + if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) > + c6x_dma_sync(handle, size, dir); > + >   return handle; >  } >   >  static void c6x_dma_unmap_page(struct device *dev, dma_addr_t handle, >   size_t size, enum dma_data_direction dir, unsigned long attrs) >  { > - c6x_dma_sync(handle, size, dir); > + if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) > + c6x_dma_sync(handle, size, dir); >  } >   >  static int c6x_dma_map_sg(struct device *dev, struct scatterlist *sglist, > @@ -60,7 +63,8 @@ static int c6x_dma_map_sg(struct device *dev, struct scatterlist *sglist, >   >   for_each_sg(sglist, sg, nents, i) { >   sg->dma_address = sg_phys(sg); > - c6x_dma_sync(sg->dma_address, sg->length, dir); > + if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) > + c6x_dma_sync(sg->dma_address, sg->length, dir); >   } >   >   return nents; > @@ -72,8 +76,10 @@ static void c6x_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, >   struct scatterlist *sg; >   int i; >   > - for_each_sg(sglist, sg, nents, i) > - c6x_dma_sync(sg_dma_address(sg), sg->length, dir); > + for_each_sg(sglist, sg, nents, i) { > + if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) > + c6x_dma_sync(sg_dma_address(sg), sg->length, dir); > + } >   >  } >   >