Re: pci_alloc_consistent usage

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, May 27, 2003 at 11:53:22AM +0100, Christoph Hellwig wrote:

> > ralf> Use the value returned by pci_alloc_consistent in *dma_handle
> > ralf> instead of trying to do any conversions with of
> > ralf> pci_alloc_consistent's return value.
> > 
> > How about virt_to_page()?
> > 
> > Currently, many sound drivers (including ALSA) pass a
> > pci_alloc_consistent's return value to virt_to_page.
> 
> You are not allow to do so.  Any driver doing this is broken.

That however is exactly what's documented in DMA-mapping.txt:

[...]
portably refer to any piece of memory.  If you have a cpu pointer
(which may be validly DMA'd too) you may easily obtain the page
and offset using something like this:
                                                                                
        struct page *page = virt_to_page(ptr);
        unsigned long offset = ((unsigned long)ptr & ~PAGE_MASK);
[...]

While it's officially documented I still don't like it.  A double
conversion such as page_address(virt_to_page(ptr)) would accidently
turn a pointer of an uncached mapping into one to a cached area for the
same object - that will almost certainly not work as expected on a
non-coherent machine.

  Ralf


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux