Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S266229AbUFUNg3 (ORCPT ); Mon, 21 Jun 2004 09:36:29 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S266231AbUFUNg2 (ORCPT ); Mon, 21 Jun 2004 09:36:28 -0400 Received: from cantor.suse.de ([195.135.220.2]:13258 "EHLO Cantor.suse.de") by vger.kernel.org with ESMTP id S266229AbUFUNgZ (ORCPT ); Mon, 21 Jun 2004 09:36:25 -0400 Date: Mon, 21 Jun 2004 15:35:42 +0200 Message-ID: From: Takashi Iwai To: Russell King Cc: Matt Porter , Jamey Hicks , Ian Molton , linux-kernel@vger.kernel.org, greg@kroah.com, tony@atomide.com, david-b@pacbell.net, joshua@joshuawise.com Subject: Re: DMA API issues In-Reply-To: <20040618204322.C17516@flint.arm.linux.org.uk> References: <20040618175902.778e616a.spyro@f2s.com> <20040618110721.B3851@home.com> <40D3356E.8040800@hp.com> <20040618122112.D3851@home.com> User-Agent: Wanderlust/2.10.1 (Watching The Wheels) SEMI/1.14.5 (Awara-Onsen) FLIM/1.14.5 (Demachiyanagi) APEL/10.6 MULE XEmacs/21.4 (patch 15) (Security Through Obscurity) (i386-suse-linux) MIME-Version: 1.0 (generated by SEMI 1.14.5 - "Awara-Onsen") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3124 Lines: 76 At Fri, 18 Jun 2004 20:43:22 +0100, Russell King wrote: > > On Fri, Jun 18, 2004 at 12:21:12PM -0700, Matt Porter wrote: > > > page_to_dma so that device specific dma addresses can be constructed. > > > > A struct device argument to page_to_dma seems like a no brainer to be > > included. > > Tony Lindgren recently submitted a patch for this: > > http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=1931/1 > > which now pending for Linus. ARM platforms now have three macros to > define if they want to override the default struct page to DMA address > translation. Wouldn't it be nicer to define a more generic style like struct page *dma_to_page(struct device *, void *, dma_addr_t) ?? > > > I see that's somewhat like what David Brownell suggested before...a single > > pointer to a set of dma ops from struct device. hppa_dma_ops translated > > into a generic dma_ops entity with fields corresponding to existing > > DMA API calls would be a good starting point. We can get rid of some > > address translation hacks in a lot of custom embedded PPC drivers > > with something like this. > > I really don't think we need to go this far. > > As I understand it, the issue seems to surround DMA coherent memory > for USB descriptors, and what happens when we call the streaming DMA > API. > > We have the latter solved with Deepak's DMA bounce code (already merged) > provided it's given the right information to determine when bounce > buffers are needed. > > The bounce code only needs a way to get at the "safe" DMA memory, and > it uses DMA pools for that. DMA pools in turn take their memory from > dma_alloc_coherent. > > So, we just need a way to make dma_alloc_coherent do the right thing. > One suggestion from James yesterday was to have a way to register > device-private "coherent DMA" backing memory with dma_alloc_coherent, > which it would use in preference to calling alloc_pages(). However, > this memory would have no struct page pointer associated with it, and > our dma_alloc_coherent implementation currently relies completely on > that condition existing - so it would mean a complete rewrite of that. > > Note also that some drivers (notably ALSA) assume that memory returned > from dma_alloc_coherent() does have struct page pointers, so this would > also break ALSA (which in turn provides much more of a justification > for the DMA MMAP API I was trying (and failed) to propose a few months > back.) Yes, the struct page pointer is needed for vma_ops.nopage in mmap on ALSA. So far, this is broken on some architectures like ARM. We need a proper conversion from virtual/bus pointer to a page struct. Of course, mmap is not mandatory, and we have a fallback via ioctl/read/write. But it's important to _know_ whether remapping is available... -- Takashi Iwai ALSA Developer - www.alsa-project.org - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/