On Mon, Nov 25, 2013 at 10:26:18AM -0700, Stephen Warren wrote:
> On 11/22/2013 05:34 PM, Russell King - ARM Linux wrote:
> [... various discussions re: IS_ERR, IS_ERR_OR_NULL, etc.]
> 
> Russell, so if we document dma_request_slave_channel() as follows:
> 
> > /*
> >  * dma_request_slave_channel - try to allocate an exclusive slave channel
> > ...
> >  * Returns pointer to appropriate DMA channel on success or an error 
> > pointer.
> >  * In order to ease compatibility with other DMA request APIs, this function
> >  * guarantees NEVER to return NULL.
> >  */
> 
> Are you then OK with clients doing either of e.g.:
> 
> chan = dma_request_slave_channel(...);
> if (IS_ERR(chan))
>       // This returns NULL or a valid handle/pointer
>       chan = dma_request_channel()
> if (!chan)
>       Here, chan is invalid;
>       return;
> Here, chan is valid
> 
> or:
> 
> if (xxx) {
>       chan = dma_request_slave_channel(...);
>       // Convert to same error value as else{} block generates
>       if (IS_ERR(chan))
>               chan = NULL
> } else {
>       // This returns NULL or a valid handle/pointer
>       chan = dma_request_channel()
> }
> if (!chan)
>       Here, chan is invalid
>       return;
> Here, chan is valid

The cleaner way to write this is:

        chan = dma_request_slave_channel(...);
        if (IS_ERR(chan)) {
                chan = dma_request_channel();
                if (!chan)
                        return;
        }

So, if you make it to this point, chan must be valid according to the
conditions on the API - you've applied the test individally to each
return function according to its documented behaviour.  If it does
happen to be NULL, that's not *your* problem as a user of the API.
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to