* [linux-next:master 9149/9522] mm/slub.c:2723:16: error: implicit declaration of function 'try_pfmemalloc_match'
@ 2021-08-22 9:22 ` kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-08-22 9:22 UTC (permalink / raw)
To: Vlastimil Babka
Cc: clang-built-linux, kbuild-all, Linux Memory Management List,
Andrew Morton
[-- Attachment #1: Type: text/plain, Size: 7723 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 86ed57fd8c93fdfaabb4f58e78455180fa7d8a84
commit: 10c9a9b135c1dfc6a110d503b68c4e0ba8f4ca26 [9149/9522] mm, slub: prevent VM_BUG_ON in PageSlabPfmemalloc from ___slab_alloc
config: x86_64-randconfig-a002-20210817 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project a83d99c55ebb14532c414066a5aa3bdb65389965)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=10c9a9b135c1dfc6a110d503b68c4e0ba8f4ca26
git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git fetch --no-tags linux-next master
git checkout 10c9a9b135c1dfc6a110d503b68c4e0ba8f4ca26
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Note: the linux-next/master HEAD 86ed57fd8c93fdfaabb4f58e78455180fa7d8a84 builds fine.
It may have been fixed somewhere.
All errors (new ones prefixed by >>):
>> mm/slub.c:2723:16: error: implicit declaration of function 'try_pfmemalloc_match' [-Werror,-Wimplicit-function-declaration]
if (unlikely(!try_pfmemalloc_match(page, gfpflags)))
^
mm/slub.c:2723:16: note: did you mean 'pfmemalloc_match'?
mm/slub.c:2601:20: note: 'pfmemalloc_match' declared here
static inline bool pfmemalloc_match(struct page *page, gfp_t gfpflags)
^
1 error generated.
vim +/try_pfmemalloc_match +2723 mm/slub.c
2655
2656 /*
2657 * Slow path. The lockless freelist is empty or we need to perform
2658 * debugging duties.
2659 *
2660 * Processing is still very fast if new objects have been freed to the
2661 * regular freelist. In that case we simply take over the regular freelist
2662 * as the lockless freelist and zap the regular freelist.
2663 *
2664 * If that is not working then we fall back to the partial lists. We take the
2665 * first element of the freelist as the object to allocate now and move the
2666 * rest of the freelist to the lockless freelist.
2667 *
2668 * And if we were unable to get a new slab from the partial slab lists then
2669 * we need to allocate a new slab. This is the slowest path since it involves
2670 * a call to the page allocator and the setup of a new slab.
2671 *
2672 * Version of __slab_alloc to use when we know that preemption is
2673 * already disabled (which is the case for bulk allocation).
2674 */
2675 static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
2676 unsigned long addr, struct kmem_cache_cpu *c)
2677 {
2678 void *freelist;
2679 struct page *page;
2680 unsigned long flags;
2681
2682 stat(s, ALLOC_SLOWPATH);
2683
2684 reread_page:
2685
2686 page = READ_ONCE(c->page);
2687 if (!page) {
2688 /*
2689 * if the node is not online or has no normal memory, just
2690 * ignore the node constraint
2691 */
2692 if (unlikely(node != NUMA_NO_NODE &&
2693 !node_isset(node, slab_nodes)))
2694 node = NUMA_NO_NODE;
2695 local_irq_save(flags);
2696 if (unlikely(c->page)) {
2697 local_irq_restore(flags);
2698 goto reread_page;
2699 }
2700 goto new_slab;
2701 }
2702 redo:
2703
2704 if (unlikely(!node_match(page, node))) {
2705 /*
2706 * same as above but node_match() being false already
2707 * implies node != NUMA_NO_NODE
2708 */
2709 if (!node_isset(node, slab_nodes)) {
2710 node = NUMA_NO_NODE;
2711 goto redo;
2712 } else {
2713 stat(s, ALLOC_NODE_MISMATCH);
2714 goto deactivate_slab;
2715 }
2716 }
2717
2718 /*
2719 * By rights, we should be searching for a slab page that was
2720 * PFMEMALLOC but right now, we are losing the pfmemalloc
2721 * information when the page leaves the per-cpu allocator
2722 */
> 2723 if (unlikely(!try_pfmemalloc_match(page, gfpflags)))
2724 goto deactivate_slab;
2725
2726 /* must check again c->page in case IRQ handler changed it */
2727 local_irq_save(flags);
2728 if (unlikely(page != c->page)) {
2729 local_irq_restore(flags);
2730 goto reread_page;
2731 }
2732 freelist = c->freelist;
2733 if (freelist)
2734 goto load_freelist;
2735
2736 freelist = get_freelist(s, page);
2737
2738 if (!freelist) {
2739 c->page = NULL;
2740 stat(s, DEACTIVATE_BYPASS);
2741 goto new_slab;
2742 }
2743
2744 stat(s, ALLOC_REFILL);
2745
2746 load_freelist:
2747
2748 lockdep_assert_irqs_disabled();
2749
2750 /*
2751 * freelist is pointing to the list of objects to be used.
2752 * page is pointing to the page from which the objects are obtained.
2753 * That page must be frozen for per cpu allocations to work.
2754 */
2755 VM_BUG_ON(!c->page->frozen);
2756 c->freelist = get_freepointer(s, freelist);
2757 c->tid = next_tid(c->tid);
2758 local_irq_restore(flags);
2759 return freelist;
2760
2761 deactivate_slab:
2762
2763 local_irq_save(flags);
2764 if (page != c->page) {
2765 local_irq_restore(flags);
2766 goto reread_page;
2767 }
2768 deactivate_slab(s, page, c->freelist, c);
2769
2770 new_slab:
2771
2772 lockdep_assert_irqs_disabled();
2773
2774 if (slub_percpu_partial(c)) {
2775 page = c->page = slub_percpu_partial(c);
2776 slub_set_percpu_partial(c, page);
2777 local_irq_restore(flags);
2778 stat(s, CPU_PARTIAL_ALLOC);
2779 goto redo;
2780 }
2781
2782 freelist = get_partial(s, gfpflags, node, &page);
2783 if (freelist) {
2784 c->page = page;
2785 goto check_new_page;
2786 }
2787
2788 put_cpu_ptr(s->cpu_slab);
2789 page = new_slab(s, gfpflags, node);
2790 c = get_cpu_ptr(s->cpu_slab);
2791
2792 if (unlikely(!page)) {
2793 local_irq_restore(flags);
2794 slab_out_of_memory(s, gfpflags, node);
2795 return NULL;
2796 }
2797
2798 if (c->page)
2799 flush_slab(s, c);
2800
2801 /*
2802 * No other reference to the page yet so we can
2803 * muck around with it freely without cmpxchg
2804 */
2805 freelist = page->freelist;
2806 page->freelist = NULL;
2807
2808 stat(s, ALLOC_SLAB);
2809 c->page = page;
2810
2811 check_new_page:
2812
2813 if (kmem_cache_debug(s)) {
2814 if (!alloc_debug_processing(s, page, freelist, addr))
2815 /* Slab failed checks. Next slab needed */
2816 goto new_slab;
2817 else
2818 /*
2819 * For debug case, we don't load freelist so that all
2820 * allocations go through alloc_debug_processing()
2821 */
2822 goto return_single;
2823 }
2824
2825 if (unlikely(!pfmemalloc_match(page, gfpflags)))
2826 /*
2827 * For !pfmemalloc_match() case we don't load freelist so that
2828 * we don't make further mismatched allocations easier.
2829 */
2830 goto return_single;
2831
2832 goto load_freelist;
2833
2834 return_single:
2835
2836 deactivate_slab(s, page, get_freepointer(s, freelist), c);
2837 local_irq_restore(flags);
2838 return freelist;
2839 }
2840
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 38004 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* [linux-next:master 9149/9522] mm/slub.c:2723:16: error: implicit declaration of function 'try_pfmemalloc_match'
@ 2021-08-22 9:22 ` kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-08-22 9:22 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 7950 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 86ed57fd8c93fdfaabb4f58e78455180fa7d8a84
commit: 10c9a9b135c1dfc6a110d503b68c4e0ba8f4ca26 [9149/9522] mm, slub: prevent VM_BUG_ON in PageSlabPfmemalloc from ___slab_alloc
config: x86_64-randconfig-a002-20210817 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project a83d99c55ebb14532c414066a5aa3bdb65389965)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=10c9a9b135c1dfc6a110d503b68c4e0ba8f4ca26
git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git fetch --no-tags linux-next master
git checkout 10c9a9b135c1dfc6a110d503b68c4e0ba8f4ca26
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Note: the linux-next/master HEAD 86ed57fd8c93fdfaabb4f58e78455180fa7d8a84 builds fine.
It may have been fixed somewhere.
All errors (new ones prefixed by >>):
>> mm/slub.c:2723:16: error: implicit declaration of function 'try_pfmemalloc_match' [-Werror,-Wimplicit-function-declaration]
if (unlikely(!try_pfmemalloc_match(page, gfpflags)))
^
mm/slub.c:2723:16: note: did you mean 'pfmemalloc_match'?
mm/slub.c:2601:20: note: 'pfmemalloc_match' declared here
static inline bool pfmemalloc_match(struct page *page, gfp_t gfpflags)
^
1 error generated.
vim +/try_pfmemalloc_match +2723 mm/slub.c
2655
2656 /*
2657 * Slow path. The lockless freelist is empty or we need to perform
2658 * debugging duties.
2659 *
2660 * Processing is still very fast if new objects have been freed to the
2661 * regular freelist. In that case we simply take over the regular freelist
2662 * as the lockless freelist and zap the regular freelist.
2663 *
2664 * If that is not working then we fall back to the partial lists. We take the
2665 * first element of the freelist as the object to allocate now and move the
2666 * rest of the freelist to the lockless freelist.
2667 *
2668 * And if we were unable to get a new slab from the partial slab lists then
2669 * we need to allocate a new slab. This is the slowest path since it involves
2670 * a call to the page allocator and the setup of a new slab.
2671 *
2672 * Version of __slab_alloc to use when we know that preemption is
2673 * already disabled (which is the case for bulk allocation).
2674 */
2675 static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
2676 unsigned long addr, struct kmem_cache_cpu *c)
2677 {
2678 void *freelist;
2679 struct page *page;
2680 unsigned long flags;
2681
2682 stat(s, ALLOC_SLOWPATH);
2683
2684 reread_page:
2685
2686 page = READ_ONCE(c->page);
2687 if (!page) {
2688 /*
2689 * if the node is not online or has no normal memory, just
2690 * ignore the node constraint
2691 */
2692 if (unlikely(node != NUMA_NO_NODE &&
2693 !node_isset(node, slab_nodes)))
2694 node = NUMA_NO_NODE;
2695 local_irq_save(flags);
2696 if (unlikely(c->page)) {
2697 local_irq_restore(flags);
2698 goto reread_page;
2699 }
2700 goto new_slab;
2701 }
2702 redo:
2703
2704 if (unlikely(!node_match(page, node))) {
2705 /*
2706 * same as above but node_match() being false already
2707 * implies node != NUMA_NO_NODE
2708 */
2709 if (!node_isset(node, slab_nodes)) {
2710 node = NUMA_NO_NODE;
2711 goto redo;
2712 } else {
2713 stat(s, ALLOC_NODE_MISMATCH);
2714 goto deactivate_slab;
2715 }
2716 }
2717
2718 /*
2719 * By rights, we should be searching for a slab page that was
2720 * PFMEMALLOC but right now, we are losing the pfmemalloc
2721 * information when the page leaves the per-cpu allocator
2722 */
> 2723 if (unlikely(!try_pfmemalloc_match(page, gfpflags)))
2724 goto deactivate_slab;
2725
2726 /* must check again c->page in case IRQ handler changed it */
2727 local_irq_save(flags);
2728 if (unlikely(page != c->page)) {
2729 local_irq_restore(flags);
2730 goto reread_page;
2731 }
2732 freelist = c->freelist;
2733 if (freelist)
2734 goto load_freelist;
2735
2736 freelist = get_freelist(s, page);
2737
2738 if (!freelist) {
2739 c->page = NULL;
2740 stat(s, DEACTIVATE_BYPASS);
2741 goto new_slab;
2742 }
2743
2744 stat(s, ALLOC_REFILL);
2745
2746 load_freelist:
2747
2748 lockdep_assert_irqs_disabled();
2749
2750 /*
2751 * freelist is pointing to the list of objects to be used.
2752 * page is pointing to the page from which the objects are obtained.
2753 * That page must be frozen for per cpu allocations to work.
2754 */
2755 VM_BUG_ON(!c->page->frozen);
2756 c->freelist = get_freepointer(s, freelist);
2757 c->tid = next_tid(c->tid);
2758 local_irq_restore(flags);
2759 return freelist;
2760
2761 deactivate_slab:
2762
2763 local_irq_save(flags);
2764 if (page != c->page) {
2765 local_irq_restore(flags);
2766 goto reread_page;
2767 }
2768 deactivate_slab(s, page, c->freelist, c);
2769
2770 new_slab:
2771
2772 lockdep_assert_irqs_disabled();
2773
2774 if (slub_percpu_partial(c)) {
2775 page = c->page = slub_percpu_partial(c);
2776 slub_set_percpu_partial(c, page);
2777 local_irq_restore(flags);
2778 stat(s, CPU_PARTIAL_ALLOC);
2779 goto redo;
2780 }
2781
2782 freelist = get_partial(s, gfpflags, node, &page);
2783 if (freelist) {
2784 c->page = page;
2785 goto check_new_page;
2786 }
2787
2788 put_cpu_ptr(s->cpu_slab);
2789 page = new_slab(s, gfpflags, node);
2790 c = get_cpu_ptr(s->cpu_slab);
2791
2792 if (unlikely(!page)) {
2793 local_irq_restore(flags);
2794 slab_out_of_memory(s, gfpflags, node);
2795 return NULL;
2796 }
2797
2798 if (c->page)
2799 flush_slab(s, c);
2800
2801 /*
2802 * No other reference to the page yet so we can
2803 * muck around with it freely without cmpxchg
2804 */
2805 freelist = page->freelist;
2806 page->freelist = NULL;
2807
2808 stat(s, ALLOC_SLAB);
2809 c->page = page;
2810
2811 check_new_page:
2812
2813 if (kmem_cache_debug(s)) {
2814 if (!alloc_debug_processing(s, page, freelist, addr))
2815 /* Slab failed checks. Next slab needed */
2816 goto new_slab;
2817 else
2818 /*
2819 * For debug case, we don't load freelist so that all
2820 * allocations go through alloc_debug_processing()
2821 */
2822 goto return_single;
2823 }
2824
2825 if (unlikely(!pfmemalloc_match(page, gfpflags)))
2826 /*
2827 * For !pfmemalloc_match() case we don't load freelist so that
2828 * we don't make further mismatched allocations easier.
2829 */
2830 goto return_single;
2831
2832 goto load_freelist;
2833
2834 return_single:
2835
2836 deactivate_slab(s, page, get_freepointer(s, freelist), c);
2837 local_irq_restore(flags);
2838 return freelist;
2839 }
2840
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 38004 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-08-22 9:23 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-22 9:22 [linux-next:master 9149/9522] mm/slub.c:2723:16: error: implicit declaration of function 'try_pfmemalloc_match' kernel test robot
2021-08-22 9:22 ` kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.