diff mbox series

[bpf-next,v8,5/5] bpftool: Show parameters of BPF task iterators.

Message ID 20220829192317.486946-6-kuifeng@fb.com (mailing list archive)
State Superseded
Delegated to: BPF
Headers show
Series Parameterize task iterators. | expand

Checks

Context Check Description
netdev/tree_selection success Clearly marked for bpf-next, async
netdev/fixes_present success Fixes tag not required for -next series
netdev/subject_prefix success Link
netdev/cover_letter success Series has a cover letter
netdev/patch_count success Link
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 0 this patch: 0
netdev/cc_maintainers warning 8 maintainers not CCed: john.fastabend@gmail.com jolsa@kernel.org song@kernel.org quentin@isovalent.com haoluo@google.com martin.lau@linux.dev kpsingh@kernel.org sdf@google.com
netdev/build_clang success Errors and warnings before: 0 this patch: 0
netdev/module_param success Was 0 now: 0
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 37 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
bpf/vmtest-bpf-next-VM_Test-1 success Logs for build for s390x with gcc
bpf/vmtest-bpf-next-VM_Test-16 success Logs for test_verifier on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-17 success Logs for test_verifier on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-7 success Logs for test_maps on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-8 success Logs for test_maps on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-13 success Logs for test_progs_no_alu32 on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-14 success Logs for test_progs_no_alu32 on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-10 success Logs for test_progs on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-11 success Logs for test_progs on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-6 success Logs for test_maps on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-12 success Logs for test_progs_no_alu32 on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-9 success Logs for test_progs on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-15 success Logs for test_verifier on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-4 success Logs for llvm-toolchain
bpf/vmtest-bpf-next-VM_Test-5 success Logs for set-matrix
bpf/vmtest-bpf-next-VM_Test-2 success Logs for build for x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-3 success Logs for build for x86_64 with llvm-16
bpf/vmtest-bpf-next-PR fail merge-conflict

Commit Message

Kui-Feng Lee Aug. 29, 2022, 7:23 p.m. UTC
Show tid or pid of iterators if giving an argument of tid or pid

For example, the command `bpftool link list` may list following
lines.

1: iter  prog 2  target_name bpf_map
2: iter  prog 3  target_name bpf_prog
33: iter  prog 225  target_name task_file  tid 1644
        pids test_progs(1644)

Link 33 is a task_file iterator with tid 1644.  For now, only targets
of task, task_file and task_vma may be with tid or pid to filter out
tasks other than those belonging to a process (pid) or a thread (tid).

Signed-off-by: Kui-Feng Lee <kuifeng@fb.com>
---
 tools/bpf/bpftool/link.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

Comments

Quentin Monnet Aug. 30, 2022, 4:52 p.m. UTC | #1
On 29/08/2022 20:23, Kui-Feng Lee wrote:
> Show tid or pid of iterators if giving an argument of tid or pid
> 
> For example, the command `bpftool link list` may list following
> lines.
> 
> 1: iter  prog 2  target_name bpf_map
> 2: iter  prog 3  target_name bpf_prog
> 33: iter  prog 225  target_name task_file  tid 1644
>         pids test_progs(1644)
> 
> Link 33 is a task_file iterator with tid 1644.  For now, only targets
> of task, task_file and task_vma may be with tid or pid to filter out
> tasks other than those belonging to a process (pid) or a thread (tid).
> 
> Signed-off-by: Kui-Feng Lee <kuifeng@fb.com>
> ---
>  tools/bpf/bpftool/link.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c
> index 7a20931c3250..88937036fae0 100644
> --- a/tools/bpf/bpftool/link.c
> +++ b/tools/bpf/bpftool/link.c
> @@ -83,6 +83,13 @@ static bool is_iter_map_target(const char *target_name)
>  	       strcmp(target_name, "bpf_sk_storage_map") == 0;
>  }
>  
> +static bool is_iter_task_target(const char *target_name)
> +{
> +	return strcmp(target_name, "task") == 0 ||
> +		strcmp(target_name, "task_file") == 0 ||
> +		strcmp(target_name, "task_vma") == 0;
> +}
> +
>  static void show_iter_json(struct bpf_link_info *info, json_writer_t *wtr)
>  {
>  	const char *target_name = u64_to_ptr(info->iter.target_name);
> @@ -91,6 +98,12 @@ static void show_iter_json(struct bpf_link_info *info, json_writer_t *wtr)
>  
>  	if (is_iter_map_target(target_name))
>  		jsonw_uint_field(wtr, "map_id", info->iter.map.map_id);
> +	else if (is_iter_task_target(target_name)) {
> +		if (info->iter.task.tid)
> +			jsonw_uint_field(wtr, "tid", info->iter.task.tid);
> +		else if (info->iter.task.pid)
> +			jsonw_uint_field(wtr, "pid", info->iter.task.pid);
> +	}
>  }
>  
>  static int get_prog_info(int prog_id, struct bpf_prog_info *info)
> @@ -208,6 +221,12 @@ static void show_iter_plain(struct bpf_link_info *info)
>  
>  	if (is_iter_map_target(target_name))
>  		printf("map_id %u  ", info->iter.map.map_id);
> +	else if (is_iter_task_target(target_name)) {
> +		if (info->iter.task.tid)
> +			printf("tid %u ", info->iter.task.tid);
> +		else if (info->iter.task.pid)
> +			printf("pid %u ", info->iter.task.pid);
> +	}
>  }
>  
>  static int show_link_close_plain(int fd, struct bpf_link_info *info)

Acked-by: Quentin Monnet <quentin@isovalent.com>

Looks good to me, although this patch may conflict with
https://lore.kernel.org/bpf/20220829231828.1016835-1-haoluo@google.com/t/#u
Yonghong Song Aug. 30, 2022, 11:56 p.m. UTC | #2
On 8/29/22 12:23 PM, Kui-Feng Lee wrote:
> Show tid or pid of iterators if giving an argument of tid or pid
> 
> For example, the command `bpftool link list` may list following
> lines.
> 
> 1: iter  prog 2  target_name bpf_map
> 2: iter  prog 3  target_name bpf_prog
> 33: iter  prog 225  target_name task_file  tid 1644
>          pids test_progs(1644)
> 
> Link 33 is a task_file iterator with tid 1644.  For now, only targets
> of task, task_file and task_vma may be with tid or pid to filter out
> tasks other than those belonging to a process (pid) or a thread (tid).
> 
> Signed-off-by: Kui-Feng Lee <kuifeng@fb.com>

Please rebase on top of bpf-next as the bpf_iter cgroup support
is just merged which will cause a conflict with this patch.

Acked-by: Yonghong Song <yhs@fb.com>
Kui-Feng Lee Aug. 31, 2022, 1:10 a.m. UTC | #3
On Tue, 2022-08-30 at 17:52 +0100, Quentin Monnet wrote:
> !-------------------------------------------------------------------|
>   This Message Is From an External Sender
> 
> > -------------------------------------------------------------------
> > !
> 
> On 29/08/2022 20:23, Kui-Feng Lee wrote:
> > Show tid or pid of iterators if giving an argument of tid or pid
> > 
> > For example, the command `bpftool link list` may list following
> > lines.
> > 
> > 1: iter  prog 2  target_name bpf_map
> > 2: iter  prog 3  target_name bpf_prog
> > 33: iter  prog 225  target_name task_file  tid 1644
> >         pids test_progs(1644)
> > 
> > Link 33 is a task_file iterator with tid 1644.  For now, only
> > targets
> > of task, task_file and task_vma may be with tid or pid to filter
> > out
> > tasks other than those belonging to a process (pid) or a thread
> > (tid).
> > 
> > Signed-off-by: Kui-Feng Lee <kuifeng@fb.com>
> > ---
> >  tools/bpf/bpftool/link.c | 19 +++++++++++++++++++
> >  1 file changed, 19 insertions(+)
> > 
> > diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c
> > index 7a20931c3250..88937036fae0 100644
> > --- a/tools/bpf/bpftool/link.c
> > +++ b/tools/bpf/bpftool/link.c
> > @@ -83,6 +83,13 @@ static bool is_iter_map_target(const char
> > *target_name)
> >                strcmp(target_name, "bpf_sk_storage_map") == 0;
> >  }
> >  
> > +static bool is_iter_task_target(const char *target_name)
> > +{
> > +       return strcmp(target_name, "task") == 0 ||
> > +               strcmp(target_name, "task_file") == 0 ||
> > +               strcmp(target_name, "task_vma") == 0;
> > +}
> > +
> >  static void show_iter_json(struct bpf_link_info *info,
> > json_writer_t *wtr)
> >  {
> >         const char *target_name = u64_to_ptr(info-
> > >iter.target_name);
> > @@ -91,6 +98,12 @@ static void show_iter_json(struct bpf_link_info
> > *info, json_writer_t *wtr)
> >  
> >         if (is_iter_map_target(target_name))
> >                 jsonw_uint_field(wtr, "map_id", info-
> > >iter.map.map_id);
> > +       else if (is_iter_task_target(target_name)) {
> > +               if (info->iter.task.tid)
> > +                       jsonw_uint_field(wtr, "tid", info-
> > >iter.task.tid);
> > +               else if (info->iter.task.pid)
> > +                       jsonw_uint_field(wtr, "pid", info-
> > >iter.task.pid);
> > +       }
> >  }
> >  
> >  static int get_prog_info(int prog_id, struct bpf_prog_info *info)
> > @@ -208,6 +221,12 @@ static void show_iter_plain(struct
> > bpf_link_info *info)
> >  
> >         if (is_iter_map_target(target_name))
> >                 printf("map_id %u  ", info->iter.map.map_id);
> > +       else if (is_iter_task_target(target_name)) {
> > +               if (info->iter.task.tid)
> > +                       printf("tid %u ", info->iter.task.tid);
> > +               else if (info->iter.task.pid)
> > +                       printf("pid %u ", info->iter.task.pid);
> > +       }
> >  }
> >  
> >  static int show_link_close_plain(int fd, struct bpf_link_info
> > *info)
> 
> Acked-by: Quentin Monnet <quentin@isovalent.com>
> 
> Looks good to me, although this patch may conflict with
> https://lore.kernel.org/bpf/20220829231828.1016835-1-haoluo@google.com/t/#u

Thanks!  I will rebase the code.
Kui-Feng Lee Aug. 31, 2022, 1:11 a.m. UTC | #4
On Tue, 2022-08-30 at 16:56 -0700, Yonghong Song wrote:
> 
> 
> On 8/29/22 12:23 PM, Kui-Feng Lee wrote:
> > Show tid or pid of iterators if giving an argument of tid or pid
> > 
> > For example, the command `bpftool link list` may list following
> > lines.
> > 
> > 1: iter  prog 2  target_name bpf_map
> > 2: iter  prog 3  target_name bpf_prog
> > 33: iter  prog 225  target_name task_file  tid 1644
> >          pids test_progs(1644)
> > 
> > Link 33 is a task_file iterator with tid 1644.  For now, only
> > targets
> > of task, task_file and task_vma may be with tid or pid to filter
> > out
> > tasks other than those belonging to a process (pid) or a thread
> > (tid).
> > 
> > Signed-off-by: Kui-Feng Lee <kuifeng@fb.com>
> 
> Please rebase on top of bpf-next as the bpf_iter cgroup support
> is just merged which will cause a conflict with this patch.
> 
> Acked-by: Yonghong Song <yhs@fb.com>
Tnank you! Just rebased the code.
diff mbox series

Patch

diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c
index 7a20931c3250..88937036fae0 100644
--- a/tools/bpf/bpftool/link.c
+++ b/tools/bpf/bpftool/link.c
@@ -83,6 +83,13 @@  static bool is_iter_map_target(const char *target_name)
 	       strcmp(target_name, "bpf_sk_storage_map") == 0;
 }
 
+static bool is_iter_task_target(const char *target_name)
+{
+	return strcmp(target_name, "task") == 0 ||
+		strcmp(target_name, "task_file") == 0 ||
+		strcmp(target_name, "task_vma") == 0;
+}
+
 static void show_iter_json(struct bpf_link_info *info, json_writer_t *wtr)
 {
 	const char *target_name = u64_to_ptr(info->iter.target_name);
@@ -91,6 +98,12 @@  static void show_iter_json(struct bpf_link_info *info, json_writer_t *wtr)
 
 	if (is_iter_map_target(target_name))
 		jsonw_uint_field(wtr, "map_id", info->iter.map.map_id);
+	else if (is_iter_task_target(target_name)) {
+		if (info->iter.task.tid)
+			jsonw_uint_field(wtr, "tid", info->iter.task.tid);
+		else if (info->iter.task.pid)
+			jsonw_uint_field(wtr, "pid", info->iter.task.pid);
+	}
 }
 
 static int get_prog_info(int prog_id, struct bpf_prog_info *info)
@@ -208,6 +221,12 @@  static void show_iter_plain(struct bpf_link_info *info)
 
 	if (is_iter_map_target(target_name))
 		printf("map_id %u  ", info->iter.map.map_id);
+	else if (is_iter_task_target(target_name)) {
+		if (info->iter.task.tid)
+			printf("tid %u ", info->iter.task.tid);
+		else if (info->iter.task.pid)
+			printf("pid %u ", info->iter.task.pid);
+	}
 }
 
 static int show_link_close_plain(int fd, struct bpf_link_info *info)