Re: [PATCH 2/5] dma-mapping: Add devm_ interface for dma_map_single()

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

 



Hello,

On Tue, May 20, 2014 at 08:54:09AM +0300, Eli Billauer wrote:
> That seems OK to me, but the problem I'm concerned with is this: In
> devm_get_free_pages() it says
> 
>     devres = devres_alloc(devm_pages_release,
>                   sizeof(struct pages_devres), GFP_KERNEL);
>     if (unlikely(!devres)) {
>         free_pages(addr, order);
>         return 0;
>     }
> 
> What should I put instead of this "return 0" to conform with the current
> API?

Ah, okay.  No idea.

> And to make things even worse, on some architectures, dma_mapping_error()
> always returns success, regardless of dma_handle. So if we stick to the
> current API, the caller of devm_get_free_pages() will never know it failed
> on these architectures.
> 
> So my conclusion was that the caller must be aware that if
> devm_get_free_pages() returns zero it's an error, regardless of
> dma_mapping_error(). That breaks the API. Once it's broken, why not return
> zero on all possible errors?

What if 0 is a valid return for the architecture?  Isn't that the
whole point of dma_mapping_error() interface?  Maybe the right thing
to do is using a separate out argument for dma_handle?

	int dmam_map_single(blah blah, dma_addr_t *out_addr);

So that it can return -errno like other non-crazy functions?  We'll
probably ask somebody who knows this code better.

Thanks.

-- 
tejun
_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux