All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Leon Hwang <leon.hwang@linux.dev>, bpf@vger.kernel.org
Cc: oe-kbuild-all@lists.linux.dev, ast@kernel.org, andrii@kernel.org,
	daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com,
	song@kernel.org, yonghong.song@linux.dev, leon.hwang@linux.dev,
	kernel-patches-bot@fb.com
Subject: Re: [PATCH bpf-next 1/2] bpf: Introduce bpf_in_interrupt kfunc
Date: Sat, 23 Aug 2025 16:24:07 +0800	[thread overview]
Message-ID: <202508231629.nrRSoIUD-lkp@intel.com> (raw)
In-Reply-To: <20250822141722.25318-2-leon.hwang@linux.dev>

Hi Leon,

kernel test robot noticed the following build errors:

[auto build test ERROR on bpf-next/master]

url:    https://github.com/intel-lab-lkp/linux/commits/Leon-Hwang/bpf-Introduce-bpf_in_interrupt-kfunc/20250822-222727
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link:    https://lore.kernel.org/r/20250822141722.25318-2-leon.hwang%40linux.dev
patch subject: [PATCH bpf-next 1/2] bpf: Introduce bpf_in_interrupt kfunc
config: um-allyesconfig (https://download.01.org/0day-ci/archive/20250823/202508231629.nrRSoIUD-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250823/202508231629.nrRSoIUD-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/202508231629.nrRSoIUD-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from include/linux/bpf_verifier.h:9,
                    from kernel/bpf/verifier.c:13:
   kernel/bpf/verifier.c: In function 'fixup_kfunc_call':
>> kernel/bpf/verifier.c:21980:77: error: '__preempt_count' undeclared (first use in this function); did you mean 'preempt_count'?
   21980 |                 insn_buf[0] = BPF_MOV64_IMM(BPF_REG_0, (u32)(unsigned long)&__preempt_count);
         |                                                                             ^~~~~~~~~~~~~~~
   include/linux/filter.h:211:26: note: in definition of macro 'BPF_MOV64_IMM'
     211 |                 .imm   = IMM })
         |                          ^~~
   kernel/bpf/verifier.c:21980:77: note: each undeclared identifier is reported only once for each function it appears in
   21980 |                 insn_buf[0] = BPF_MOV64_IMM(BPF_REG_0, (u32)(unsigned long)&__preempt_count);
         |                                                                             ^~~~~~~~~~~~~~~
   include/linux/filter.h:211:26: note: in definition of macro 'BPF_MOV64_IMM'
     211 |                 .imm   = IMM })
         |                          ^~~


vim +21980 kernel/bpf/verifier.c

 21885	
 21886	static int fixup_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn,
 21887				    struct bpf_insn *insn_buf, int insn_idx, int *cnt)
 21888	{
 21889		const struct bpf_kfunc_desc *desc;
 21890	
 21891		if (!insn->imm) {
 21892			verbose(env, "invalid kernel function call not eliminated in verifier pass\n");
 21893			return -EINVAL;
 21894		}
 21895	
 21896		*cnt = 0;
 21897	
 21898		/* insn->imm has the btf func_id. Replace it with an offset relative to
 21899		 * __bpf_call_base, unless the JIT needs to call functions that are
 21900		 * further than 32 bits away (bpf_jit_supports_far_kfunc_call()).
 21901		 */
 21902		desc = find_kfunc_desc(env->prog, insn->imm, insn->off);
 21903		if (!desc) {
 21904			verifier_bug(env, "kernel function descriptor not found for func_id %u",
 21905				     insn->imm);
 21906			return -EFAULT;
 21907		}
 21908	
 21909		if (!bpf_jit_supports_far_kfunc_call())
 21910			insn->imm = BPF_CALL_IMM(desc->addr);
 21911		if (insn->off)
 21912			return 0;
 21913		if (desc->func_id == special_kfunc_list[KF_bpf_obj_new_impl] ||
 21914		    desc->func_id == special_kfunc_list[KF_bpf_percpu_obj_new_impl]) {
 21915			struct btf_struct_meta *kptr_struct_meta = env->insn_aux_data[insn_idx].kptr_struct_meta;
 21916			struct bpf_insn addr[2] = { BPF_LD_IMM64(BPF_REG_2, (long)kptr_struct_meta) };
 21917			u64 obj_new_size = env->insn_aux_data[insn_idx].obj_new_size;
 21918	
 21919			if (desc->func_id == special_kfunc_list[KF_bpf_percpu_obj_new_impl] && kptr_struct_meta) {
 21920				verifier_bug(env, "NULL kptr_struct_meta expected at insn_idx %d",
 21921					     insn_idx);
 21922				return -EFAULT;
 21923			}
 21924	
 21925			insn_buf[0] = BPF_MOV64_IMM(BPF_REG_1, obj_new_size);
 21926			insn_buf[1] = addr[0];
 21927			insn_buf[2] = addr[1];
 21928			insn_buf[3] = *insn;
 21929			*cnt = 4;
 21930		} else if (desc->func_id == special_kfunc_list[KF_bpf_obj_drop_impl] ||
 21931			   desc->func_id == special_kfunc_list[KF_bpf_percpu_obj_drop_impl] ||
 21932			   desc->func_id == special_kfunc_list[KF_bpf_refcount_acquire_impl]) {
 21933			struct btf_struct_meta *kptr_struct_meta = env->insn_aux_data[insn_idx].kptr_struct_meta;
 21934			struct bpf_insn addr[2] = { BPF_LD_IMM64(BPF_REG_2, (long)kptr_struct_meta) };
 21935	
 21936			if (desc->func_id == special_kfunc_list[KF_bpf_percpu_obj_drop_impl] && kptr_struct_meta) {
 21937				verifier_bug(env, "NULL kptr_struct_meta expected at insn_idx %d",
 21938					     insn_idx);
 21939				return -EFAULT;
 21940			}
 21941	
 21942			if (desc->func_id == special_kfunc_list[KF_bpf_refcount_acquire_impl] &&
 21943			    !kptr_struct_meta) {
 21944				verifier_bug(env, "kptr_struct_meta expected at insn_idx %d",
 21945					     insn_idx);
 21946				return -EFAULT;
 21947			}
 21948	
 21949			insn_buf[0] = addr[0];
 21950			insn_buf[1] = addr[1];
 21951			insn_buf[2] = *insn;
 21952			*cnt = 3;
 21953		} else if (desc->func_id == special_kfunc_list[KF_bpf_list_push_back_impl] ||
 21954			   desc->func_id == special_kfunc_list[KF_bpf_list_push_front_impl] ||
 21955			   desc->func_id == special_kfunc_list[KF_bpf_rbtree_add_impl]) {
 21956			struct btf_struct_meta *kptr_struct_meta = env->insn_aux_data[insn_idx].kptr_struct_meta;
 21957			int struct_meta_reg = BPF_REG_3;
 21958			int node_offset_reg = BPF_REG_4;
 21959	
 21960			/* rbtree_add has extra 'less' arg, so args-to-fixup are in diff regs */
 21961			if (desc->func_id == special_kfunc_list[KF_bpf_rbtree_add_impl]) {
 21962				struct_meta_reg = BPF_REG_4;
 21963				node_offset_reg = BPF_REG_5;
 21964			}
 21965	
 21966			if (!kptr_struct_meta) {
 21967				verifier_bug(env, "kptr_struct_meta expected at insn_idx %d",
 21968					     insn_idx);
 21969				return -EFAULT;
 21970			}
 21971	
 21972			__fixup_collection_insert_kfunc(&env->insn_aux_data[insn_idx], struct_meta_reg,
 21973							node_offset_reg, insn, insn_buf, cnt);
 21974		} else if (desc->func_id == special_kfunc_list[KF_bpf_cast_to_kern_ctx] ||
 21975			   desc->func_id == special_kfunc_list[KF_bpf_rdonly_cast]) {
 21976			insn_buf[0] = BPF_MOV64_REG(BPF_REG_0, BPF_REG_1);
 21977			*cnt = 1;
 21978		} else if (desc->func_id == special_kfunc_list[KF_bpf_in_interrupt]) {
 21979	#ifdef CONFIG_X86_64
 21980			insn_buf[0] = BPF_MOV64_IMM(BPF_REG_0, (u32)(unsigned long)&__preempt_count);
 21981			insn_buf[1] = BPF_MOV64_PERCPU_REG(BPF_REG_0, BPF_REG_0);
 21982			insn_buf[2] = BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0, 0);
 21983			insn_buf[3] = BPF_ALU32_IMM(BPF_AND, BPF_REG_0, NMI_MASK | HARDIRQ_MASK |
 21984						    (IS_ENABLED(CONFIG_PREEMPT_RT) ? 0 : SOFTIRQ_MASK));
 21985			*cnt = 4;
 21986	#endif
 21987		}
 21988	
 21989		if (env->insn_aux_data[insn_idx].arg_prog) {
 21990			u32 regno = env->insn_aux_data[insn_idx].arg_prog;
 21991			struct bpf_insn ld_addrs[2] = { BPF_LD_IMM64(regno, (long)env->prog->aux) };
 21992			int idx = *cnt;
 21993	
 21994			insn_buf[idx++] = ld_addrs[0];
 21995			insn_buf[idx++] = ld_addrs[1];
 21996			insn_buf[idx++] = *insn;
 21997			*cnt = idx;
 21998		}
 21999		return 0;
 22000	}
 22001	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

  reply	other threads:[~2025-08-23  8:25 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-22 14:17 [PATCH bpf-next 0/2] bpf: Introduce bpf_in_interrupt kfunc Leon Hwang
2025-08-22 14:17 ` [PATCH bpf-next 1/2] " Leon Hwang
2025-08-23  8:24   ` kernel test robot [this message]
2025-08-22 14:17 ` [PATCH bpf-next 2/2] selftests/bpf: Add case to test " Leon Hwang

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=202508231629.nrRSoIUD-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=eddyz87@gmail.com \
    --cc=kernel-patches-bot@fb.com \
    --cc=leon.hwang@linux.dev \
    --cc=martin.lau@linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=song@kernel.org \
    --cc=yonghong.song@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.