lkml.org 
[lkml]   [2019]   [Aug]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.2 075/135] arm64/mm: fix variable 'tag' set but not used
    Date
    From: Qian Cai <cai@lca.pw>

    [ Upstream commit 7732d20a160c76006c7fe7bca5178aea6af1d2e8 ]

    When CONFIG_KASAN_SW_TAGS=n, set_tag() is compiled away. GCC throws a
    warning,

    mm/kasan/common.c: In function '__kasan_kmalloc':
    mm/kasan/common.c:464:5: warning: variable 'tag' set but not used
    [-Wunused-but-set-variable]
    u8 tag = 0xff;
    ^~~

    Fix it by making __tag_set() a static inline function the same as
    arch_kasan_set_tag() in mm/kasan/kasan.h for consistency because there
    is a macro in arch/arm64/include/asm/kasan.h,

    #define arch_kasan_set_tag(addr, tag) __tag_set(addr, tag)

    However, when CONFIG_DEBUG_VIRTUAL=n and CONFIG_SPARSEMEM_VMEMMAP=y,
    page_to_virt() will call __tag_set() with incorrect type of a
    parameter, so fix that as well. Also, still let page_to_virt() return
    "void *" instead of "const void *", so will not need to add a similar
    cast in lowmem_page_address().

    Signed-off-by: Qian Cai <cai@lca.pw>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/arm64/include/asm/memory.h | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
    index b7ba75809751e..fb04f10a78ab3 100644
    --- a/arch/arm64/include/asm/memory.h
    +++ b/arch/arm64/include/asm/memory.h
    @@ -210,7 +210,11 @@ extern u64 vabits_user;
    #define __tag_reset(addr) untagged_addr(addr)
    #define __tag_get(addr) (__u8)((u64)(addr) >> 56)
    #else
    -#define __tag_set(addr, tag) (addr)
    +static inline const void *__tag_set(const void *addr, u8 tag)
    +{
    + return addr;
    +}
    +
    #define __tag_reset(addr) (addr)
    #define __tag_get(addr) 0
    #endif
    @@ -301,8 +305,8 @@ static inline void *phys_to_virt(phys_addr_t x)
    #define page_to_virt(page) ({ \
    unsigned long __addr = \
    ((__page_to_voff(page)) | PAGE_OFFSET); \
    - unsigned long __addr_tag = \
    - __tag_set(__addr, page_kasan_tag(page)); \
    + const void *__addr_tag = \
    + __tag_set((void *)__addr, page_kasan_tag(page)); \
    ((void *)__addr_tag); \
    })

    --
    2.20.1
    \
     
     \ /
      Last update: 2019-08-22 19:26    [W:4.391 / U:1.308 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site