Em Tue, Nov 17, 2015 at 11:05:41AM +0800, Wangnan (F) escreveu:
> 
> 
> On 2015/11/16 20:10, Wang Nan wrote:
> >This patch allows creating only one BPF program for different
> >'probe_trace_event'(tev) generated by one 'perf_probe_event'(pev), if
> >their prologues are identical.
> >
> >This is done by comparing argument list of different tev, and maps type
> >of prologue and tev using a mapping array. This patch utilizes qsort to
> >sort tevs. After sorting, tevs with identical argument list will be
> >grouped together.
> >
> >Test result:
> >
> >Sample BPF program:
> >
> >  SEC("inlines=no\n"
> >      "func=SyS_dup? oldfd")
> >  int func(void *ctx)
> >  {
> >      return 1;
> >  }
> >
> >It would probe at SyS_dup2 and SyS_dup3, extracts oldfd as its argument.
> >
> >Following cmdline shows BPF program loaded into kernel by perf:
> >
> >  # ./perf record  -e  ./test_bpf_arg.c sleep 4 & sleep 1 && ls /proc/$!/fd/ 
> > -l | grep bpf-prog
> >
> >Before this patch:
> >
> >  # ./perf record  -e  ./test_bpf_arg.c sleep 4 & sleep 1 && ls /proc/$!/fd/ 
> > -l | grep bpf-prog
> >  [1] 24858
> >  lrwx------ 1 root root 64 Nov 14 04:09 3 -> anon_inode:bpf-prog
> >  lrwx------ 1 root root 64 Nov 14 04:09 4 -> anon_inode:bpf-prog
> >  ...
> >
> >After this patch:
> >
> >  # ./perf record  -e  ./test_bpf_arg.c sleep 4 & sleep 1 && ls /proc/$!/fd/ 
> > -l | grep bpf-prog
> >  [1] 25699
> >  lrwx------ 1 root root 64 Nov 14 04:10 3 -> anon_inode:bpf-prog
> >  ...
> >
> >Signed-off-by: Wang Nan <[email protected]>
> >Cc: Alexei Starovoitov <[email protected]>
> >Cc: Arnaldo Carvalho de Melo <[email protected]>
> >Cc: Masami Hiramatsu <[email protected]>
> >Cc: Zefan Li <[email protected]>
> >Cc: [email protected]
> >---
> 
> [SNIP]
> 
> >@@ -462,7 +570,19 @@ static int hook_load_preprocessor(struct bpf_program 
> >*prog)
> >             return -ENOMEM;
> >     }
> >-    err = bpf_program__set_prep(prog, pev->ntevs,
> >+    priv->type_mapping = malloc(sizeof(int) * pev->ntevs);
> >+    if (!priv->type_mapping) {
> >+            pr_debug("No enough memory: alloc type_mapping failed\n");
> >+            return -ENOMEM;
> >+    }
> >+    memset(priv->type_mapping, 0xff,
> >+           sizeof(int) * pev->ntevs);
> >+
> 
> We can change 0xff to -1 like previous patches. Will do it by resending.

Thanks for doing that, 

Applied the new version of this patch,

- Arnaldo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to