lkml.org 
[lkml]   [2021]   [Dec]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 20/45] soc/tegra: fuse: Fix bitwise vs. logical OR warning
    Date
    From: Nathan Chancellor <nathan@kernel.org>

    [ Upstream commit a7083763619f7485ccdade160deb81737cf2732f ]

    A new warning in clang points out two instances where boolean
    expressions are being used with a bitwise OR instead of logical OR:

    drivers/soc/tegra/fuse/speedo-tegra20.c:72:9: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
    reg = tegra_fuse_read_spare(i) |
    ^~~~~~~~~~~~~~~~~~~~~~~~~~
    ||
    drivers/soc/tegra/fuse/speedo-tegra20.c:72:9: note: cast one or both operands to int to silence this warning
    drivers/soc/tegra/fuse/speedo-tegra20.c:87:9: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
    reg = tegra_fuse_read_spare(i) |
    ^~~~~~~~~~~~~~~~~~~~~~~~~~
    ||
    drivers/soc/tegra/fuse/speedo-tegra20.c:87:9: note: cast one or both operands to int to silence this warning
    2 warnings generated.

    The motivation for the warning is that logical operations short circuit
    while bitwise operations do not.

    In this instance, tegra_fuse_read_spare() is not semantically returning
    a boolean, it is returning a bit value. Use u32 for its return type so
    that it can be used with either bitwise or boolean operators without any
    warnings.

    Fixes: 25cd5a391478 ("ARM: tegra: Add speedo-based process identification")
    Link: https://github.com/ClangBuiltLinux/linux/issues/1488
    Suggested-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/soc/tegra/fuse/fuse-tegra.c | 2 +-
    drivers/soc/tegra/fuse/fuse.h | 2 +-
    2 files changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/soc/tegra/fuse/fuse-tegra.c b/drivers/soc/tegra/fuse/fuse-tegra.c
    index 37bde5c8268d1..a623e498a97bc 100644
    --- a/drivers/soc/tegra/fuse/fuse-tegra.c
    +++ b/drivers/soc/tegra/fuse/fuse-tegra.c
    @@ -178,7 +178,7 @@ static struct platform_driver tegra_fuse_driver = {
    };
    builtin_platform_driver(tegra_fuse_driver);

    -bool __init tegra_fuse_read_spare(unsigned int spare)
    +u32 __init tegra_fuse_read_spare(unsigned int spare)
    {
    unsigned int offset = fuse->soc->info->spare + spare * 4;

    diff --git a/drivers/soc/tegra/fuse/fuse.h b/drivers/soc/tegra/fuse/fuse.h
    index 10c2076d5089a..f368bd5373088 100644
    --- a/drivers/soc/tegra/fuse/fuse.h
    +++ b/drivers/soc/tegra/fuse/fuse.h
    @@ -62,7 +62,7 @@ struct tegra_fuse {
    void tegra_init_revision(void);
    void tegra_init_apbmisc(void);

    -bool __init tegra_fuse_read_spare(unsigned int spare);
    +u32 __init tegra_fuse_read_spare(unsigned int spare);
    u32 __init tegra_fuse_read_early(unsigned int offset);

    #ifdef CONFIG_ARCH_TEGRA_2x_SOC
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-12-20 15:40    [W:7.764 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site