lkml.org 
[lkml]   [2021]   [Jun]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 071/101] mm: add VM_WARN_ON_ONCE_PAGE() macro
    Date
    From: Alex Shi <alex.shi@linux.alibaba.com>

    [ Upstream commit a4055888629bc0467d12d912cd7c90acdf3d9b12 part ]

    Add VM_WARN_ON_ONCE_PAGE() macro.

    Link: https://lkml.kernel.org/r/1604283436-18880-3-git-send-email-alex.shi@linux.alibaba.com
    Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Acked-by: Hugh Dickins <hughd@google.com>
    Acked-by: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

    Note on stable backport: original commit was titled
    mm/memcg: warning on !memcg after readahead page charged
    which included uses of this macro in mm/memcontrol.c: here omitted.

    Signed-off-by: Hugh Dickins <hughd@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    include/linux/mmdebug.h | 13 +++++++++++++
    1 file changed, 13 insertions(+)

    diff --git a/include/linux/mmdebug.h b/include/linux/mmdebug.h
    index 2ad72d2c8cc5..5d0767cb424a 100644
    --- a/include/linux/mmdebug.h
    +++ b/include/linux/mmdebug.h
    @@ -37,6 +37,18 @@ void dump_mm(const struct mm_struct *mm);
    BUG(); \
    } \
    } while (0)
    +#define VM_WARN_ON_ONCE_PAGE(cond, page) ({ \
    + static bool __section(".data.once") __warned; \
    + int __ret_warn_once = !!(cond); \
    + \
    + if (unlikely(__ret_warn_once && !__warned)) { \
    + dump_page(page, "VM_WARN_ON_ONCE_PAGE(" __stringify(cond)")");\
    + __warned = true; \
    + WARN_ON(1); \
    + } \
    + unlikely(__ret_warn_once); \
    +})
    +
    #define VM_WARN_ON(cond) (void)WARN_ON(cond)
    #define VM_WARN_ON_ONCE(cond) (void)WARN_ON_ONCE(cond)
    #define VM_WARN_ONCE(cond, format...) (void)WARN_ONCE(cond, format)
    @@ -48,6 +60,7 @@ void dump_mm(const struct mm_struct *mm);
    #define VM_BUG_ON_MM(cond, mm) VM_BUG_ON(cond)
    #define VM_WARN_ON(cond) BUILD_BUG_ON_INVALID(cond)
    #define VM_WARN_ON_ONCE(cond) BUILD_BUG_ON_INVALID(cond)
    +#define VM_WARN_ON_ONCE_PAGE(cond, page) BUILD_BUG_ON_INVALID(cond)
    #define VM_WARN_ONCE(cond, format...) BUILD_BUG_ON_INVALID(cond)
    #define VM_WARN(cond, format...) BUILD_BUG_ON_INVALID(cond)
    #endif
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-06-28 16:39    [W:4.126 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site