Re: [PATCH] dma/timberdale: simplify conditional

Jack Stone
2010-10-08T12:22:10Z

We should be careful with this sort of transformation. It is only
guaranteed true if both sides are boolean. E.g. ((foo & mask) && (bar &
baz)) ¦¦ (!(foo & mask) && (!(bar & baz)) does not imply (foo & mask) ==
(bar & baz)). foo & mask could equal 0x0100 for example but bar & baz
could equal 0x0001. Both are true as logicals but they are not equal.

One safe way to make this patch would be to add !! in front of both
halves.

Of course this is a moot point if pdes->rx is a boolean or a single bit
but I don't have the source to hand to check this (% 2 is guaranteed to
be 0 or 1 so it doesn't matter).

Sorry if this doesn't make sense. Let me know and I can try and
rephrase.

Hope this helps,
Jack

On Fri, 08 Oct 2010 00:48 +0200, "Nicolas Kaiser" <nikai@nikai.net>
wrote:
> Simplify: ((a && b) || (!a && !b)) => (a == b)
>
> Signed-off-by: Nicolas Kaiser <nikai@nikai.net>
> ---
> drivers/dma/timb_dma.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/dma/timb_dma.c b/drivers/dma/timb_dma.c
> index 2ec1ed5..3b88a4e 100644
> --- a/drivers/dma/timb_dma.c
> +++ b/drivers/dma/timb_dma.c
> @@ -759,7 +759,7 @@ static int __devinit td_probe(struct platform_device
> *pdev)
> pdata->channels + i;
>
> /* even channels are RX, odd are TX */
> - if (((i % 2) && pchan->rx) || (!(i % 2) && !pchan->rx)) {
> + if ((i % 2) == pchan->rx) {
> dev_err(&pdev->dev, "Wrong channel configuration\n");
> err = -EINVAL;
> goto err_tasklet_kill;
> --
> 1.7.2.2
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel"
> in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>