From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751666AbbIQTHQ (ORCPT ); Thu, 17 Sep 2015 15:07:16 -0400 Received: from userp1040.oracle.com ([156.151.31.81]:20583 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750792AbbIQTHO (ORCPT ); Thu, 17 Sep 2015 15:07:14 -0400 Date: Thu, 17 Sep 2015 15:06:57 -0400 From: Konrad Rzeszutek Wilk To: jglisse@redhat.com Cc: Alex Deucher , Dave Airlie , iommu@lists.linux-foundation.org, Joerg Roedel , linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH] dma/swiotlb: Add helper for device driver to opt-out from swiotlb. Message-ID: <20150917190656.GF20952@x230.dumpdata.com> References: <1442514158-30281-1-git-send-email-jglisse@redhat.com> <20150917190251.GE20952@x230.dumpdata.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20150917190251.GE20952@x230.dumpdata.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Source-IP: aserv0022.oracle.com [141.146.126.234] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Sep 17, 2015 at 03:02:51PM -0400, Konrad Rzeszutek Wilk wrote: > On Thu, Sep 17, 2015 at 02:22:38PM -0400, jglisse@redhat.com wrote: > > From: Jérôme Glisse > > > > The swiotlb dma backend is not appropriate for some devices like > > GPU where bounce buffer or slow dma page allocations is just not > > acceptable. With that helper device drivers can opt-out from the > > swiotlb and just do sane things without wasting CPU cycles inside > > the swiotlb code. > > What if SWIOTLB is the only one available? > > And what can't the devices use the TTM DMA backend which sets up > buffers which don't need bounce buffer or slow dma page allocations? And then the followup question. If it opts out - how can it do sane things without an DMA API available? It would assume physical addresses match the bus addresses which is not always the sane thing. > > > > > Signed-off-by: Jérôme Glisse > > To: iommu@lists.linux-foundation.org > > Cc: Joerg Roedel > > Cc: Konrad Rzeszutek Wilk > > Cc: Alex Deucher > > CC: Dave Airlie > > CC: linux-kernel@vger.kernel.org > > --- > > arch/x86/include/asm/dma-mapping.h | 3 +++ > > arch/x86/kernel/pci-swiotlb.c | 18 ++++++++++++++++++ > > include/asm-generic/dma-mapping-common.h | 7 +++++++ > > 3 files changed, 28 insertions(+) > > > > diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h > > index 953b726..b50745f 100644 > > --- a/arch/x86/include/asm/dma-mapping.h > > +++ b/arch/x86/include/asm/dma-mapping.h > > @@ -46,6 +46,9 @@ bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp); > > #define HAVE_ARCH_DMA_SUPPORTED 1 > > extern int dma_supported(struct device *hwdev, u64 mask); > > > > +#define HAVE_ARCH_DMA_OVERRIDE_SWIOTLB 1 > > +int dma_override_swiotlb(struct device *dev); > > + > > #include > > > > extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, > > diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c > > index adf0392..6a9efab 100644 > > --- a/arch/x86/kernel/pci-swiotlb.c > > +++ b/arch/x86/kernel/pci-swiotlb.c > > @@ -117,3 +117,21 @@ void __init pci_swiotlb_late_init(void) > > swiotlb_print_info(); > > } > > } > > + > > +/* dma_override_swiotlb() - Override swiotlb with nommu. > > + * > > + * @device: Device for which to disable swiotlb. > > + * > > + * The swiotlb infrastructure just get in the way for some devices like GPU, > > + * where things like bounce pages can not work properly or for which we do not > > + * want to take slow page allocation code path. This function allows device > > + * driver opportunity to opt-out from swiotlb. > > + */ > > +int dma_override_swiotlb(struct device *dev) > > +{ > > + if (dev->archdata.dma_ops != &swiotlb_dma_ops) > > + return 1; > > + dev->archdata.dma_ops = &nommu_dma_ops; > > + return 1; > > +} > > +EXPORT_SYMBOL(dma_override_swiotlb); > > diff --git a/include/asm-generic/dma-mapping-common.h b/include/asm-generic/dma-mapping-common.h > > index b1bc954..452d947 100644 > > --- a/include/asm-generic/dma-mapping-common.h > > +++ b/include/asm-generic/dma-mapping-common.h > > @@ -355,4 +355,11 @@ static inline int dma_set_mask(struct device *dev, u64 mask) > > } > > #endif > > > > +#ifndef HAVE_ARCH_DMA_OVERRIDE_SWIOTLB > > +static inline int dma_override_swiotlb(struct device *dev) > > +{ > > + return 0; > > +} > > +#endif > > + > > #endif > > -- > > 2.1.0 > > > _______________________________________________ > iommu mailing list > iommu@lists.linux-foundation.org > https://lists.linuxfoundation.org/mailman/listinfo/iommu