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 |
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 >
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
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 --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;
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(-)