From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753926AbYDFGvu (ORCPT ); Sun, 6 Apr 2008 02:51:50 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751193AbYDFGvl (ORCPT ); Sun, 6 Apr 2008 02:51:41 -0400 Received: from colo.lackof.org ([198.49.126.79]:48945 "EHLO colo.lackof.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751036AbYDFGvk (ORCPT ); Sun, 6 Apr 2008 02:51:40 -0400 Date: Sun, 6 Apr 2008 00:51:28 -0600 From: Grant Grundler To: Matti Linnanvuori Cc: linux-kernel@vger.kernel.org, linux-pci@atrey.karlin.mff.cuni.cz Subject: Re: [patch] [Bug 10397] DMA-mapping.txt code examples have undeclared variables Message-ID: <20080406065128.GA25346@colo.lackof.org> References: <57809.86271.qm@web52004.mail.re2.yahoo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <57809.86271.qm@web52004.mail.re2.yahoo.com> X-Home-Page: http://www.parisc-linux.org/ User-Agent: Mutt/1.5.16 (2007-06-11) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Apr 05, 2008 at 09:34:42PM -0700, Matti Linnanvuori wrote: > From: Matti Linnanvuori > > Fix undeclared variables. Sorry? This changelog entry doesn't make sense to me since this patch is for documentation and not a compiler error. If you prefer them declared as C code, please try it this way: + struct pci_dev dev*; + size_t size; dma_addr_t dma_handle; cpu_addr = pci_alloc_consistent(dev, size, &dma_handle); and delete the verbage (plain text) that defines the parameters. If you are confusing "dev" with "struct device *" and want to change all the references to "pdev", please do the above *and* write something like the following in the changelog: To avoid confusion with struct device, rename ... thanks! grant > > Signed-off-by: Matti Linnanvuori > > --- > > --- linux-2.6/Documentation/DMA-mapping.txt 2008-03-23 09:01:06.304511500 +0200 > +++ linux/Documentation/DMA-mapping.txt 2008-04-06 06:56:11.821314500 +0300 > @@ -315,9 +315,9 @@ > > dma_addr_t dma_handle; > > - cpu_addr = pci_alloc_consistent(dev, size, &dma_handle); > + cpu_addr = pci_alloc_consistent(pdev, size, &dma_handle); > > -where dev is a struct pci_dev *. You should pass NULL for PCI like buses > +where pdev is a struct pci_dev *. You should pass NULL for PCI like buses > where devices don't have struct pci_dev (like ISA, EISA). This may be > called in interrupt context. > > @@ -354,9 +354,9 @@ > > To unmap and free such a DMA region, you call: > > - pci_free_consistent(dev, size, cpu_addr, dma_handle); > + pci_free_consistent(pdev, size, cpu_addr, dma_handle); > > -where dev, size are the same as in the above call and cpu_addr and > +where pdev, size are the same as in the above call and cpu_addr and > dma_handle are the values pci_alloc_consistent returned to you. > This function may not be called in interrupt context. > > @@ -371,9 +371,9 @@ > > struct pci_pool *pool; > > - pool = pci_pool_create(name, dev, size, align, alloc); > + pool = pci_pool_create(name, pdev, size, align, alloc); > > -The "name" is for diagnostics (like a kmem_cache name); dev and size > +The "name" is for diagnostics (like a kmem_cache name); pdev and size > are as above. The device's hardware alignment requirement for this > type of data is "align" (which is expressed in bytes, and must be a > power of two). If your device has no boundary crossing restrictions, > @@ -472,11 +472,11 @@ > void *addr = buffer->ptr; > size_t size = buffer->len; > > - dma_handle = pci_map_single(dev, addr, size, direction); > + dma_handle = pci_map_single(pdev, addr, size, direction); > > and to unmap it: > > - pci_unmap_single(dev, dma_handle, size, direction); > + pci_unmap_single(pdev, dma_handle, size, direction); > > You should call pci_unmap_single when the DMA activity is finished, e.g. > from the interrupt which told you that the DMA transfer is done. > @@ -493,17 +493,17 @@ > unsigned long offset = buffer->offset; > size_t size = buffer->len; > > - dma_handle = pci_map_page(dev, page, offset, size, direction); > + dma_handle = pci_map_page(pdev, page, offset, size, direction); > > ... > > - pci_unmap_page(dev, dma_handle, size, direction); > + pci_unmap_page(pdev, dma_handle, size, direction); > > Here, "offset" means byte offset within the given page. > > With scatterlists, you map a region gathered from several regions by: > > - int i, count = pci_map_sg(dev, sglist, nents, direction); > + int i, count = pci_map_sg(pdev, sglist, nents, direction); > struct scatterlist *sg; > > for_each_sg(sglist, sg, count, i) { > @@ -527,7 +527,7 @@ > > To unmap a scatterlist, just call: > > - pci_unmap_sg(dev, sglist, nents, direction); > + pci_unmap_sg(pdev, sglist, nents, direction); > > Again, make sure DMA activity has already finished. > > @@ -550,11 +550,11 @@ > So, firstly, just map it with pci_map_{single,sg}, and after each DMA > transfer call either: > > - pci_dma_sync_single_for_cpu(dev, dma_handle, size, direction); > + pci_dma_sync_single_for_cpu(pdev, dma_handle, size, direction); > > or: > > - pci_dma_sync_sg_for_cpu(dev, sglist, nents, direction); > + pci_dma_sync_sg_for_cpu(pdev, sglist, nents, direction); > > as appropriate. > > @@ -562,7 +562,7 @@ > finish accessing the data with the cpu, and then before actually > giving the buffer to the hardware call either: > > - pci_dma_sync_single_for_device(dev, dma_handle, size, direction); > + pci_dma_sync_single_for_device(pdev, dma_handle, size, direction); > > or: > > @@ -739,7 +739,7 @@ > > dma_addr_t dma_handle; > > - dma_handle = pci_map_single(dev, addr, size, direction); > + dma_handle = pci_map_single(pdev, addr, size, direction); > if (pci_dma_mapping_error(dma_handle)) { > /* > * reduce current DMA mapping usage, > > > > > ____________________________________________________________________________________ > You rock. That's why Blockbuster's offering you one month of Blockbuster Total Access, No Cost. > http://tc.deals.yahoo.com/tc/blockbuster/text5.com