On 11/20/2013 01:23 PM, Williams, Dan J wrote: ... > Why do the drivers that call dma_request_channel need to convert it to > an ERR value? i.e. what's problematic about the below (not compile > tested)? ... > diff --git a/arch/arm/plat-samsung/dma-ops.c b/arch/arm/plat-samsung/dma-ops.c ... > @@ -22,16 +22,20 @@ static unsigned samsung_dmadev_request(enum dma_ch dma_ch, > struct samsung_dma_req *param, > struct device *dev, char *ch_name) ... > + if (dev->of_node) { > + chan = dma_request_slave_channel(dev, ch_name); > + return IS_ERR(chan) ? (unsigned) NULL : (unsigned) chan; > + } else { > return (unsigned)dma_request_channel(mask, pl330_filter, > (void *)dma_ch); > + } The argument is that if a function returns errors encoded as an ERR pointer, then callers must assume that any non-IS_ERR value that the function returns is valid. NULL is one of those values. As such, callers can no longer check the value against NULL, but must use IS_ERR(). Converting any IS_ERR() returns to NULL theoretically is the act of converting one valid return value to some other completely random return value. The converse is true for functions that return errors encoded as NULL; callers must check those return results against NULL. There's no intersection between those two sets of legal tests. -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html