From: kernel test robot <lkp@intel.com>
To: Alexei Starovoitov <ast@kernel.org>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev
Subject: [ast-bpf:trylock 7/7] mm/slub.c:4678:7: warning: variable 'cnt' set but not used
Date: Wed, 9 Apr 2025 20:53:10 +0800 [thread overview]
Message-ID: <202504092003.65HDGAwY-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/ast/bpf.git trylock
head: b334401991656ee5bb5bc3c042e35cef5820252f
commit: b334401991656ee5bb5bc3c042e35cef5820252f [7/7] slab: Introduce try_kmalloc() and kfree_nolock().
config: riscv-randconfig-001-20250409 (https://download.01.org/0day-ci/archive/20250409/202504092003.65HDGAwY-lkp@intel.com/config)
compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 92c93f5286b9ff33f27ff694d2dc33da1c07afdd)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250409/202504092003.65HDGAwY-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504092003.65HDGAwY-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> mm/slub.c:4678:7: warning: variable 'cnt' set but not used [-Wunused-but-set-variable]
4678 | long cnt = 0;
| ^
1 warning generated.
vim +/cnt +4678 mm/slub.c
4673
4674 #ifndef CONFIG_SLUB_TINY
4675 static void free_deferred_objects(struct llist_head *llhead)
4676 {
4677 struct llist_node *llnode, *pos, *t;
> 4678 long cnt = 0;
4679
4680 if (likely(llist_empty(llhead)))
4681 return;
4682
4683 llnode = llist_del_all(llhead);
4684 llist_for_each_safe(pos, t, llnode) {
4685 kfree(pos);
4686 cnt++;
4687 }
4688 }
4689 /*
4690 * Fastpath with forced inlining to produce a kfree and kmem_cache_free that
4691 * can perform fastpath freeing without additional function calls.
4692 *
4693 * The fastpath is only possible if we are freeing to the current cpu slab
4694 * of this processor. This typically the case if we have just allocated
4695 * the item before.
4696 *
4697 * If fastpath is not possible then fall back to __slab_free where we deal
4698 * with all sorts of special processing.
4699 *
4700 * Bulk free of a freelist with several objects (all pointing to the
4701 * same slab) possible by specifying head and tail ptr, plus objects
4702 * count (cnt). Bulk free indicated by tail pointer being set.
4703 */
4704 static __always_inline void do_slab_free(struct kmem_cache *s,
4705 struct slab *slab, void *head, void *tail,
4706 int cnt, unsigned long addr)
4707 {
4708 struct kmem_cache_cpu *c;
4709 unsigned long tid;
4710 void **freelist;
4711
4712 redo:
4713 /*
4714 * Determine the currently cpus per cpu slab.
4715 * The cpu may change afterward. However that does not matter since
4716 * data is retrieved via this pointer. If we are on the same cpu
4717 * during the cmpxchg then the free will succeed.
4718 */
4719 c = raw_cpu_ptr(s->cpu_slab);
4720 tid = READ_ONCE(c->tid);
4721
4722 /* Same with comment on barrier() in __slab_alloc_node() */
4723 barrier();
4724
4725 if (unlikely(slab != c->slab)) {
4726 /* cnt == 0 signals that it's called from kfree_nolock() */
4727 if (unlikely(!cnt)) {
4728 /*
4729 * Use llist in cache_node ?
4730 * struct kmem_cache_node *n = get_node(s, slab_nid(slab));
4731 */
4732 /*
4733 * __slab_free() can locklessly cmpxchg16 into a slab,
4734 * but then it might need to take spin_lock or local_lock
4735 * in put_cpu_partial() for further processing.
4736 * Avoid the complexity and simply add to a deferred list.
4737 */
4738 llist_add(head, &s->defer_free_objects);
4739 } else {
4740 free_deferred_objects(&s->defer_free_objects);
4741 __slab_free(s, slab, head, tail, cnt, addr);
4742 }
4743 return;
4744 }
4745
4746 if (USE_LOCKLESS_FAST_PATH()) {
4747 freelist = READ_ONCE(c->freelist);
4748
4749 set_freepointer(s, tail, freelist);
4750
4751 if (unlikely(!__update_cpu_freelist_fast(s, freelist, head, tid))) {
4752 note_cmpxchg_failure("slab_free", s, tid);
4753 goto redo;
4754 }
4755 } else {
4756 /* Update the free list under the local lock */
4757 local_lock(&s->cpu_slab->lock);
4758 c = this_cpu_ptr(s->cpu_slab);
4759 if (unlikely(slab != c->slab)) {
4760 local_unlock(&s->cpu_slab->lock);
4761 goto redo;
4762 }
4763 tid = c->tid;
4764 freelist = c->freelist;
4765
4766 set_freepointer(s, tail, freelist);
4767 c->freelist = head;
4768 c->tid = next_tid(tid);
4769
4770 local_unlock(&s->cpu_slab->lock);
4771 }
4772 if (unlikely(!cnt))
4773 cnt = 1;
4774 stat_add(s, FREE_FASTPATH, cnt);
4775 }
4776 #else /* CONFIG_SLUB_TINY */
4777 static void do_slab_free(struct kmem_cache *s,
4778 struct slab *slab, void *head, void *tail,
4779 int cnt, unsigned long addr)
4780 {
4781 __slab_free(s, slab, head, tail, cnt, addr);
4782 }
4783 #endif /* CONFIG_SLUB_TINY */
4784
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2025-04-09 12:53 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202504092003.65HDGAwY-lkp@intel.com \
--to=lkp@intel.com \
--cc=ast@kernel.org \
--cc=llvm@lists.linux.dev \
--cc=oe-kbuild-all@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.