public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Eduard Zingerman <eddyz87@gmail.com>
To: Tao Chen <chen.dylane@gmail.com>,
	ast@kernel.org, daniel@iogearbox.net,  andrii@kernel.org,
	haoluo@google.com, jolsa@kernel.org, qmo@kernel.org
Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH RESEND bpf-next v7 0/4] Add prog_kfunc feature probe
Date: Thu, 20 Feb 2025 10:43:41 -0800	[thread overview]
Message-ID: <475831c7d175529df4cc638506217c67010bf8da.camel@gmail.com> (raw)
In-Reply-To: <0eee016f-2d37-4c80-98cf-fc134d3ad917@gmail.com>

On Fri, 2025-02-21 at 02:09 +0800, Tao Chen wrote:

[...]

> Hi Eduard,
> 
> I try to run your test case, but it seems btf_is_decl_tag always return 
> false, Are there any special restrictions for the tag feature of btf?

Hi Tao,
 
> My compilation environment:
> 
> pahole --version
> v1.29
> clang --version
> Ubuntu clang version 18.1.3 (1ubuntu1)

Hm, pahole should generate kfunc tags since 1.27.
I use pahole 'next' branch, but it is the same as 1.29 at the moment.
Do you see kfunc prototypes at the bottom of vmlinux.h?
They look like so:

  ...
  extern u32 tcp_reno_undo_cwnd(struct sock *sk) __weak __ksym;
  ...

These are generated by bpftool from decl tags I look for in the test case.
Decl tags are inserted by pahole, see btf_encoder.c:btf_encoder__tag_kfuncs().

Anyways, below is the list of all kfuncs from my config,
it is possible to adapt the test case with something like this:

        for (i = 0; i < ARRAY_SIZE(all_kfuncs); ++i) {
                kfunc = all_kfuncs[i];
                kfunc_id = btf__find_by_name_kind(vmlinux_btf, kfunc, BTF_KIND_FUNC);
                printf("%-42s ", kfunc);
                if (kfunc_id < 0) {
                        printf("<not found>\n");
                        continue;
                }
                ...
        }

--- 8< --------------------------------------

static const char *all_kfuncs[] = {
	"bbr_cwnd_event",
	"bbr_init",
	"bbr_main",
	"bbr_min_tso_segs",
	"bbr_set_state",
	"bbr_sndbuf_expand",
	"bbr_ssthresh",
	"bbr_undo_cwnd",
	"bpf_arena_alloc_pages",
	"bpf_arena_free_pages",
	"bpf_cast_to_kern_ctx",
	"bpf_cgroup_acquire",
	"bpf_cgroup_ancestor",
	"bpf_cgroup_from_id",
	"bpf_cgroup_release",
	"bpf_copy_from_user_str",
	"bpf_cpumask_acquire",
	"bpf_cpumask_and",
	"bpf_cpumask_any_and_distribute",
	"bpf_cpumask_any_distribute",
	"bpf_cpumask_clear",
	"bpf_cpumask_clear_cpu",
	"bpf_cpumask_copy",
	"bpf_cpumask_create",
	"bpf_cpumask_empty",
	"bpf_cpumask_equal",
	"bpf_cpumask_first",
	"bpf_cpumask_first_and",
	"bpf_cpumask_first_zero",
	"bpf_cpumask_full",
	"bpf_cpumask_intersects",
	"bpf_cpumask_or",
	"bpf_cpumask_release",
	"bpf_cpumask_set_cpu",
	"bpf_cpumask_setall",
	"bpf_cpumask_subset",
	"bpf_cpumask_test_and_clear_cpu",
	"bpf_cpumask_test_and_set_cpu",
	"bpf_cpumask_test_cpu",
	"bpf_cpumask_weight",
	"bpf_cpumask_xor",
	"bpf_crypto_ctx_acquire",
	"bpf_crypto_ctx_create",
	"bpf_crypto_ctx_release",
	"bpf_crypto_decrypt",
	"bpf_crypto_encrypt",
	"bpf_ct_change_status",
	"bpf_ct_change_timeout",
	"bpf_ct_insert_entry",
	"bpf_ct_release",
	"bpf_ct_set_nat_info",
	"bpf_ct_set_status",
	"bpf_ct_set_timeout",
	"bpf_dynptr_adjust",
	"bpf_dynptr_clone",
	"bpf_dynptr_from_skb",
	"bpf_dynptr_from_xdp",
	"bpf_dynptr_is_null",
	"bpf_dynptr_is_rdonly",
	"bpf_dynptr_size",
	"bpf_dynptr_slice",
	"bpf_dynptr_slice_rdwr",
	"bpf_fentry_test1",
	"bpf_get_dentry_xattr",
	"bpf_get_file_xattr",
	"bpf_get_fsverity_digest",
	"bpf_get_kmem_cache",
	"bpf_get_task_exe_file",
	"bpf_iter_bits_destroy",
	"bpf_iter_bits_new",
	"bpf_iter_bits_next",
	"bpf_iter_css_destroy",
	"bpf_iter_css_new",
	"bpf_iter_css_next",
	"bpf_iter_css_task_destroy",
	"bpf_iter_css_task_new",
	"bpf_iter_css_task_next",
	"bpf_iter_kmem_cache_destroy",
	"bpf_iter_kmem_cache_new",
	"bpf_iter_kmem_cache_next",
	"bpf_iter_num_destroy",
	"bpf_iter_num_new",
	"bpf_iter_num_next",
	"bpf_iter_scx_dsq_destroy",
	"bpf_iter_scx_dsq_new",
	"bpf_iter_scx_dsq_next",
	"bpf_iter_task_destroy",
	"bpf_iter_task_new",
	"bpf_iter_task_next",
	"bpf_iter_task_vma_destroy",
	"bpf_iter_task_vma_new",
	"bpf_iter_task_vma_next",
	"bpf_key_put",
	"bpf_kfunc_call_memb_release",
	"bpf_kfunc_call_test_release",
	"bpf_list_pop_back",
	"bpf_list_pop_front",
	"bpf_list_push_back_impl",
	"bpf_list_push_front_impl",
	"bpf_local_irq_restore",
	"bpf_local_irq_save",
	"bpf_lookup_system_key",
	"bpf_lookup_user_key",
	"bpf_map_sum_elem_count",
	"bpf_modify_return_test",
	"bpf_modify_return_test2",
	"bpf_modify_return_test_tp",
	"bpf_obj_drop_impl",
	"bpf_obj_new_impl",
	"bpf_path_d_path",
	"bpf_percpu_obj_drop_impl",
	"bpf_percpu_obj_new_impl",
	"bpf_preempt_disable",
	"bpf_preempt_enable",
	"bpf_put_file",
	"bpf_rbtree_add_impl",
	"bpf_rbtree_first",
	"bpf_rbtree_remove",
	"bpf_rcu_read_lock",
	"bpf_rcu_read_unlock",
	"bpf_rdonly_cast",
	"bpf_refcount_acquire_impl",
	"bpf_remove_dentry_xattr",
	"bpf_send_signal_task",
	"bpf_session_cookie",
	"bpf_session_is_return",
	"bpf_set_dentry_xattr",
	"bpf_sk_assign_tcp_reqsk",
	"bpf_skb_ct_alloc",
	"bpf_skb_ct_lookup",
	"bpf_skb_get_fou_encap",
	"bpf_skb_get_xfrm_info",
	"bpf_skb_set_fou_encap",
	"bpf_skb_set_xfrm_info",
	"bpf_sock_addr_set_sun_path",
	"bpf_sock_destroy",
	"bpf_task_acquire",
	"bpf_task_from_pid",
	"bpf_task_from_vpid",
	"bpf_task_get_cgroup1",
	"bpf_task_release",
	"bpf_task_under_cgroup",
	"bpf_throw",
	"bpf_verify_pkcs7_signature",
	"bpf_wq_init",
	"bpf_wq_set_callback_impl",
	"bpf_wq_start",
	"bpf_xdp_ct_alloc",
	"bpf_xdp_ct_lookup",
	"bpf_xdp_flow_lookup",
	"bpf_xdp_get_xfrm_state",
	"bpf_xdp_metadata_rx_hash",
	"bpf_xdp_metadata_rx_timestamp",
	"bpf_xdp_metadata_rx_vlan_tag",
	"bpf_xdp_xfrm_state_release",
	"cgroup_rstat_flush",
	"cgroup_rstat_updated",
	"crash_kexec",
	"cubictcp_acked",
	"cubictcp_cong_avoid",
	"cubictcp_cwnd_event",
	"cubictcp_init",
	"cubictcp_recalc_ssthresh",
	"cubictcp_state",
	"dctcp_cwnd_event",
	"dctcp_cwnd_undo",
	"dctcp_init",
	"dctcp_ssthresh",
	"dctcp_state",
	"dctcp_update_alpha",
	"scx_bpf_consume",
	"scx_bpf_cpu_rq",
	"scx_bpf_cpuperf_cap",
	"scx_bpf_cpuperf_cur",
	"scx_bpf_cpuperf_set",
	"scx_bpf_create_dsq",
	"scx_bpf_destroy_dsq",
	"scx_bpf_dispatch",
	"scx_bpf_dispatch_cancel",
	"scx_bpf_dispatch_from_dsq",
	"scx_bpf_dispatch_from_dsq_set_slice",
	"scx_bpf_dispatch_from_dsq_set_vtime",
	"scx_bpf_dispatch_nr_slots",
	"scx_bpf_dispatch_vtime",
	"scx_bpf_dispatch_vtime_from_dsq",
	"scx_bpf_dsq_insert",
	"scx_bpf_dsq_insert_vtime",
	"scx_bpf_dsq_move",
	"scx_bpf_dsq_move_set_slice",
	"scx_bpf_dsq_move_set_vtime",
	"scx_bpf_dsq_move_to_local",
	"scx_bpf_dsq_move_vtime",
	"scx_bpf_dsq_nr_queued",
	"scx_bpf_dump_bstr",
	"scx_bpf_error_bstr",
	"scx_bpf_exit_bstr",
	"scx_bpf_get_idle_cpumask",
	"scx_bpf_get_idle_smtmask",
	"scx_bpf_get_online_cpumask",
	"scx_bpf_get_possible_cpumask",
	"scx_bpf_kick_cpu",
	"scx_bpf_now",
	"scx_bpf_nr_cpu_ids",
	"scx_bpf_pick_any_cpu",
	"scx_bpf_pick_idle_cpu",
	"scx_bpf_put_cpumask",
	"scx_bpf_put_idle_cpumask",
	"scx_bpf_reenqueue_local",
	"scx_bpf_select_cpu_dfl",
	"scx_bpf_task_cgroup",
	"scx_bpf_task_cpu",
	"scx_bpf_task_running",
	"scx_bpf_test_and_clear_cpu_idle",
	"tcp_cong_avoid_ai",
	"tcp_reno_cong_avoid",
	"tcp_reno_ssthresh",
	"tcp_reno_undo_cwnd",
	"tcp_slow_start",
};

-------------------------------------- >8 ---

[...]


  reply	other threads:[~2025-02-20 18:43 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-12 15:39 [PATCH RESEND bpf-next v7 0/4] Add prog_kfunc feature probe Tao Chen
2025-02-12 15:39 ` [PATCH bpf-next v7 1/4] libbpf: Extract prog load type check from libbpf_probe_bpf_helper Tao Chen
2025-02-12 15:39 ` [PATCH bpf-next v7 2/4] libbpf: Init fd_array when prog probe load Tao Chen
2025-02-12 15:39 ` [PATCH bpf-next v7 3/4] libbpf: Add libbpf_probe_bpf_kfunc API Tao Chen
2025-02-12 15:39 ` [PATCH bpf-next v7 4/4] selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests Tao Chen
2025-02-17  5:21 ` [PATCH RESEND bpf-next v7 0/4] Add prog_kfunc feature probe Tao Chen
2025-02-18 22:51   ` Eduard Zingerman
2025-02-20 18:09     ` Tao Chen
2025-02-20 18:43       ` Eduard Zingerman [this message]
2025-02-21 10:03         ` Tao Chen
2025-02-21  1:07     ` Andrii Nakryiko
2025-02-21  1:11       ` Eduard Zingerman
2025-02-21 10:03         ` Tao Chen

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=475831c7d175529df4cc638506217c67010bf8da.camel@gmail.com \
    --to=eddyz87@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=chen.dylane@gmail.com \
    --cc=daniel@iogearbox.net \
    --cc=haoluo@google.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=qmo@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox