diff mbox series

dmaengine: ep93xx: Return proper enum in ep93xx_dma_chan_direction

Message ID 20180911234020.9064-1-natechancellor@gmail.com (mailing list archive)
State Accepted
Headers show
Series dmaengine: ep93xx: Return proper enum in ep93xx_dma_chan_direction | expand

Commit Message

Nathan Chancellor Sept. 11, 2018, 11:40 p.m. UTC
Clang warns when implicitly converting from one enumerated type to
another. Avoid this by using the equivalent value from the expected
type.

In file included from drivers/dma/ep93xx_dma.c:30:
./include/linux/platform_data/dma-ep93xx.h:88:10: warning: implicit
conversion from enumeration type 'enum dma_data_direction' to different
enumeration type 'enum dma_transfer_direction' [-Wenum-conversion]
                return DMA_NONE;
                ~~~~~~ ^~~~~~~~
1 warning generated.

Reported-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
---
 include/linux/platform_data/dma-ep93xx.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Nick Desaulniers Sept. 12, 2018, 5 p.m. UTC | #1
On Tue, Sep 11, 2018 at 4:40 PM Nathan Chancellor
<natechancellor@gmail.com> wrote:
>
> Clang warns when implicitly converting from one enumerated type to
> another. Avoid this by using the equivalent value from the expected
> type.
>
> In file included from drivers/dma/ep93xx_dma.c:30:
> ./include/linux/platform_data/dma-ep93xx.h:88:10: warning: implicit
> conversion from enumeration type 'enum dma_data_direction' to different
> enumeration type 'enum dma_transfer_direction' [-Wenum-conversion]
>                 return DMA_NONE;
>                 ~~~~~~ ^~~~~~~~
> 1 warning generated.
>
> Reported-by: Nick Desaulniers <ndesaulniers@google.com>
> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> ---
>  include/linux/platform_data/dma-ep93xx.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/platform_data/dma-ep93xx.h b/include/linux/platform_data/dma-ep93xx.h
> index f8f1f6b952a6..eb9805bb3fe8 100644
> --- a/include/linux/platform_data/dma-ep93xx.h
> +++ b/include/linux/platform_data/dma-ep93xx.h
> @@ -85,7 +85,7 @@ static inline enum dma_transfer_direction
>  ep93xx_dma_chan_direction(struct dma_chan *chan)
>  {
>         if (!ep93xx_dma_chan_is_m2p(chan))
> -               return DMA_NONE;
> +               return DMA_TRANS_NONE;

Looks like this changes the value of the returned enum from:
DMA_NONE: 3
DMA_TRANS_NONE: 4

Hopefully the DMA maintainer can review if this was ever correct?
Looks like the callers of ep93xx_dma_chan_direction were comparing
this return type, so those comparisons would likely always be failing
if `!ep93xx_dma_chan_is_m2p(chan)`.

Normally this warning (-Wenum-conversion) is kind of noisey, but it's
concerning when the enumerated values evaluate to different integers.
I think it's found an actual bug here.
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>

>
>         /* even channels are for TX, odd for RX */
>         return (chan->chan_id % 2 == 0) ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
> --
> 2.18.0
>
Nathan Chancellor Sept. 12, 2018, 6:36 p.m. UTC | #2
On Wed, Sep 12, 2018 at 10:00:57AM -0700, Nick Desaulniers wrote:
> On Tue, Sep 11, 2018 at 4:40 PM Nathan Chancellor
> <natechancellor@gmail.com> wrote:
> >
> > Clang warns when implicitly converting from one enumerated type to
> > another. Avoid this by using the equivalent value from the expected
> > type.
> >
> > In file included from drivers/dma/ep93xx_dma.c:30:
> > ./include/linux/platform_data/dma-ep93xx.h:88:10: warning: implicit
> > conversion from enumeration type 'enum dma_data_direction' to different
> > enumeration type 'enum dma_transfer_direction' [-Wenum-conversion]
> >                 return DMA_NONE;
> >                 ~~~~~~ ^~~~~~~~
> > 1 warning generated.
> >
> > Reported-by: Nick Desaulniers <ndesaulniers@google.com>
> > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> > ---
> >  include/linux/platform_data/dma-ep93xx.h | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/include/linux/platform_data/dma-ep93xx.h b/include/linux/platform_data/dma-ep93xx.h
> > index f8f1f6b952a6..eb9805bb3fe8 100644
> > --- a/include/linux/platform_data/dma-ep93xx.h
> > +++ b/include/linux/platform_data/dma-ep93xx.h
> > @@ -85,7 +85,7 @@ static inline enum dma_transfer_direction
> >  ep93xx_dma_chan_direction(struct dma_chan *chan)
> >  {
> >         if (!ep93xx_dma_chan_is_m2p(chan))
> > -               return DMA_NONE;
> > +               return DMA_TRANS_NONE;
> 
> Looks like this changes the value of the returned enum from:
> DMA_NONE: 3
> DMA_TRANS_NONE: 4
> 
> Hopefully the DMA maintainer can review if this was ever correct?
> Looks like the callers of ep93xx_dma_chan_direction were comparing
> this return type, so those comparisons would likely always be failing
> if `!ep93xx_dma_chan_is_m2p(chan)`.
> 
> Normally this warning (-Wenum-conversion) is kind of noisey, but it's
> concerning when the enumerated values evaluate to different integers.
> I think it's found an actual bug here.
> Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
> 

I should have highlighted this in the actual commit message but I
checked all of the callsites of ep93xx_dma_chan_direction and one
directly refers to an enum value, DMA_MEM_TO_DEV; every other one
just checks if the value is or isn't equal to another value of this
enum type (DMA_NONE isn't referenced anywhere else in this driver).
I don't believe this results in a funcitonal change.

Thanks for the review!
Nathan

> >
> >         /* even channels are for TX, odd for RX */
> >         return (chan->chan_id % 2 == 0) ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
> > --
> > 2.18.0
> >
> 
> 
> -- 
> Thanks,
> ~Nick Desaulniers
Vinod Koul Oct. 2, 2018, 2:42 p.m. UTC | #3
On 11-09-18, 16:40, Nathan Chancellor wrote:
> Clang warns when implicitly converting from one enumerated type to
> another. Avoid this by using the equivalent value from the expected
> type.
> 
> In file included from drivers/dma/ep93xx_dma.c:30:
> ./include/linux/platform_data/dma-ep93xx.h:88:10: warning: implicit
> conversion from enumeration type 'enum dma_data_direction' to different
> enumeration type 'enum dma_transfer_direction' [-Wenum-conversion]
>                 return DMA_NONE;
>                 ~~~~~~ ^~~~~~~~
> 1 warning generated.

Applied, thanks
diff mbox series

Patch

diff --git a/include/linux/platform_data/dma-ep93xx.h b/include/linux/platform_data/dma-ep93xx.h
index f8f1f6b952a6..eb9805bb3fe8 100644
--- a/include/linux/platform_data/dma-ep93xx.h
+++ b/include/linux/platform_data/dma-ep93xx.h
@@ -85,7 +85,7 @@  static inline enum dma_transfer_direction
 ep93xx_dma_chan_direction(struct dma_chan *chan)
 {
 	if (!ep93xx_dma_chan_is_m2p(chan))
-		return DMA_NONE;
+		return DMA_TRANS_NONE;
 
 	/* even channels are for TX, odd for RX */
 	return (chan->chan_id % 2 == 0) ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;