lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 328/775] dmaengine: qcom: Always inline gpi_update_reg
    Date
    From: Nathan Chancellor <natechancellor@gmail.com>

    [ Upstream commit 0a6d3038d914b51d6860f23ea2b508590e8340de ]

    When building with CONFIG_UBSAN_UNSIGNED_OVERFLOW, clang decides not to
    inline gpi_update_reg, which causes a linkage failure around __bad_mask:

    ld.lld: error: undefined symbol: __bad_mask
    >>> referenced by bitfield.h:119 (include/linux/bitfield.h:119)
    >>> dma/qcom/gpi.o:(gpi_update_reg) in archive drivers/built-in.a
    >>> referenced by bitfield.h:119 (include/linux/bitfield.h:119)
    >>> dma/qcom/gpi.o:(gpi_update_reg) in archive drivers/built-in.a

    If gpi_update_reg is not inlined, the mask value will not be known at
    compile time so the check in field_multiplier stays in the final
    object file, causing the above linkage failure. Always inline
    gpi_update_reg so that this check can never fail.

    Fixes: 5d0c3533a19f ("dmaengine: qcom: Add GPI dma driver")
    Link: https://github.com/ClangBuiltLinux/linux/issues/1243
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Link: https://lore.kernel.org/r/20210112191214.1264793-1-natechancellor@gmail.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/dma/qcom/gpi.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/dma/qcom/gpi.c b/drivers/dma/qcom/gpi.c
    index 1a0bf6b0567a5..e48eb397f433d 100644
    --- a/drivers/dma/qcom/gpi.c
    +++ b/drivers/dma/qcom/gpi.c
    @@ -584,7 +584,7 @@ static inline void gpi_write_reg_field(struct gpii *gpii, void __iomem *addr,
    gpi_write_reg(gpii, addr, val);
    }

    -static inline void
    +static __always_inline void
    gpi_update_reg(struct gpii *gpii, u32 offset, u32 mask, u32 val)
    {
    void __iomem *addr = gpii->regs + offset;
    --
    2.27.0


    \
     
     \ /
      Last update: 2021-03-02 04:10    [W:2.022 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site