Hi Andrea, [auto build test WARNING on linus/master] [also build test WARNING on v4.13-rc2 next-20170727] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Andrea-Arcangeli/mm-oom-let-oom_reap_task-and-exit_mmap-to-run/20170728-082915 config: x86_64-randconfig-x013-201730 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All warnings (new ones prefixed by >>): In file included from include/linux/linkage.h:4:0, from include/linux/kernel.h:6, from mm/mmap.c:11: mm/mmap.c: In function 'exit_mmap': mm/mmap.c:2997:6: error: implicit declaration of function 'tsk_is_oom_victim' [-Werror=implicit-function-declaration] if (tsk_is_oom_victim(current)) { ^ include/linux/compiler.h:156:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ >> mm/mmap.c:2997:2: note: in expansion of macro 'if' if (tsk_is_oom_victim(current)) { ^~ mm/mmap.c: At top level: include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'strcpy' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:390:2: note: in expansion of macro 'if' if (p_size == (size_t)-1 && q_size == (size_t)-1) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'kmemdup' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:380:2: note: in expansion of macro 'if' if (p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'kmemdup' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:378:2: note: in expansion of macro 'if' if (__builtin_constant_p(size) && p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr_inv' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:369:2: note: in expansion of macro 'if' if (p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr_inv' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:367:2: note: in expansion of macro 'if' if (__builtin_constant_p(size) && p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:358:2: note: in expansion of macro 'if' if (p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:356:2: note: in expansion of macro 'if' if (__builtin_constant_p(size) && p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:348:2: note: in expansion of macro 'if' if (p_size < size || q_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:345:3: note: in expansion of macro 'if' if (q_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:343:3: note: in expansion of macro 'if' if (p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:342:2: note: in expansion of macro 'if' vim +/if +2997 mm/mmap.c 2963 2964 /* Release all mmaps. */ 2965 void exit_mmap(struct mm_struct *mm) 2966 { 2967 struct mmu_gather tlb; 2968 struct vm_area_struct *vma; 2969 unsigned long nr_accounted = 0; 2970 2971 /* mm's last user has gone, and its about to be pulled down */ 2972 mmu_notifier_release(mm); 2973 2974 if (mm->locked_vm) { 2975 vma = mm->mmap; 2976 while (vma) { 2977 if (vma->vm_flags & VM_LOCKED) 2978 munlock_vma_pages_all(vma); 2979 vma = vma->vm_next; 2980 } 2981 } 2982 2983 arch_exit_mmap(mm); 2984 2985 vma = mm->mmap; 2986 if (!vma) /* Can happen if dup_mmap() received an OOM */ 2987 return; 2988 2989 lru_add_drain(); 2990 flush_cache_mm(mm); 2991 tlb_gather_mmu(&tlb, mm, 0, -1); 2992 /* update_hiwater_rss(mm) here? but nobody should be looking */ 2993 /* Use -1 here to ensure all VMAs in the mm are unmapped */ 2994 unmap_vmas(&tlb, vma, 0, -1); 2995 2996 set_bit(MMF_OOM_SKIP, &mm->flags); > 2997 if (tsk_is_oom_victim(current)) { 2998 /* 2999 * Wait for oom_reap_task() to stop working on this 3000 * mm. Because MMF_OOM_SKIP is already set before 3001 * calling down_read(), oom_reap_task() will not run 3002 * on this "mm" post up_write(). 3003 * 3004 * tsk_is_oom_victim() cannot be set from under us 3005 * either because current->mm is already set to NULL 3006 * under task_lock before calling mmput and oom_mm is 3007 * set not NULL by the OOM killer only if current->mm 3008 * is found not NULL while holding the task_lock. 3009 */ 3010 down_write(&mm->mmap_sem); 3011 up_write(&mm->mmap_sem); 3012 } 3013 free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, USER_PGTABLES_CEILING); 3014 tlb_finish_mmu(&tlb, 0, -1); 3015 3016 /* 3017 * Walk the list again, actually closing and freeing it, 3018 * with preemption enabled, without holding any MM locks. 3019 */ 3020 while (vma) { 3021 if (vma->vm_flags & VM_ACCOUNT) 3022 nr_accounted += vma_pages(vma); 3023 vma = remove_vma(vma); 3024 } 3025 vm_unacct_memory(nr_accounted); 3026 } 3027 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation