All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@redhat.com>
To: Wang Nan <wangnan0@huawei.com>
Cc: mingo@kernel.org, ast@plumgrid.com, linux-kernel@vger.kernel.org,
	lizefan@huawei.com, pi3orama@163.com,
	He Kuang <hekuang@huawei.com>,
	Brendan Gregg <brendan.d.gregg@gmail.com>,
	Daniel Borkmann <daniel@iogearbox.net>,
	David Ahern <dsahern@gmail.com>, Jiri Olsa <jolsa@kernel.org>,
	Kaixu Xia <xiakaixu@huawei.com>,
	Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>
Subject: Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
Date: Mon, 31 Aug 2015 17:35:50 -0300	[thread overview]
Message-ID: <20150831203550.GC2443@redhat.com> (raw)
In-Reply-To: <1440822125-52691-22-git-send-email-wangnan0@huawei.com>

Em Sat, Aug 29, 2015 at 04:21:55AM +0000, Wang Nan escreveu:
> From: He Kuang <hekuang@huawei.com>
> 
> This patch moves filter.h from include/linux/kernel.h to

Does this really _move_ a file from include/linux/kernel.h to some other
place? Isn't there any other users for such file in the kernel sources?
:-)

Looking at the patch I see that it doesn't move anything, it _copies_
the file, right?

- Arnaldo

> tools/include/linux/filter.h to enable other libraries use macros in
> it, like libbpf which will be introduced by further patches. Currenty,
> the moved filter.h only contains the useful macros needed by libbpf
> for not introducing too much dependence.
> 
> MANIFEST is also updated for 'make perf-*-src-pkg'.
> 
> One change:
>   imm field of BPF_EMIT_CALL becomes ((FUNC) - BPF_FUNC_unspec) to
>   suit user space code generator.
> 
> Signed-off-by: He Kuang <hekuang@huawei.com>
> Signed-off-by: Wang Nan <wangnan0@huawei.com>
> Cc: Alexei Starovoitov <ast@plumgrid.com>
> Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
> Cc: Daniel Borkmann <daniel@iogearbox.net>
> Cc: David Ahern <dsahern@gmail.com>
> Cc: He Kuang <hekuang@huawei.com>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Kaixu Xia <xiakaixu@huawei.com>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Paul Mackerras <paulus@samba.org>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Zefan Li <lizefan@huawei.com>
> Cc: pi3orama@163.com
> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> Link: http://lkml.kernel.org/n/1436445342-1402-32-git-send-email-wangnan0@huawei.com
> ---
>  tools/include/linux/filter.h | 237 +++++++++++++++++++++++++++++++++++++++++++
>  tools/perf/MANIFEST          |   1 +
>  2 files changed, 238 insertions(+)
>  create mode 100644 tools/include/linux/filter.h
> 
> diff --git a/tools/include/linux/filter.h b/tools/include/linux/filter.h
> new file mode 100644
> index 0000000..11d2b1c
> --- /dev/null
> +++ b/tools/include/linux/filter.h
> @@ -0,0 +1,237 @@
> +/*
> + * Linux Socket Filter Data Structures
> + */
> +#ifndef __TOOLS_LINUX_FILTER_H
> +#define __TOOLS_LINUX_FILTER_H
> +
> +#include <linux/bpf.h>
> +
> +/* ArgX, context and stack frame pointer register positions. Note,
> + * Arg1, Arg2, Arg3, etc are used as argument mappings of function
> + * calls in BPF_CALL instruction.
> + */
> +#define BPF_REG_ARG1	BPF_REG_1
> +#define BPF_REG_ARG2	BPF_REG_2
> +#define BPF_REG_ARG3	BPF_REG_3
> +#define BPF_REG_ARG4	BPF_REG_4
> +#define BPF_REG_ARG5	BPF_REG_5
> +#define BPF_REG_CTX	BPF_REG_6
> +#define BPF_REG_FP	BPF_REG_10
> +
> +/* Additional register mappings for converted user programs. */
> +#define BPF_REG_A	BPF_REG_0
> +#define BPF_REG_X	BPF_REG_7
> +#define BPF_REG_TMP	BPF_REG_8
> +
> +/* BPF program can access up to 512 bytes of stack space. */
> +#define MAX_BPF_STACK	512
> +
> +/* Helper macros for filter block array initializers. */
> +
> +/* ALU ops on registers, bpf_add|sub|...: dst_reg += src_reg */
> +
> +#define BPF_ALU64_REG(OP, DST, SRC)				\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU64 | BPF_OP(OP) | BPF_X,	\
> +		.dst_reg = DST,					\
> +		.src_reg = SRC,					\
> +		.off   = 0,					\
> +		.imm   = 0 })
> +
> +#define BPF_ALU32_REG(OP, DST, SRC)				\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU | BPF_OP(OP) | BPF_X,		\
> +		.dst_reg = DST,					\
> +		.src_reg = SRC,					\
> +		.off   = 0,					\
> +		.imm   = 0 })
> +
> +/* ALU ops on immediates, bpf_add|sub|...: dst_reg += imm32 */
> +
> +#define BPF_ALU64_IMM(OP, DST, IMM)				\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU64 | BPF_OP(OP) | BPF_K,	\
> +		.dst_reg = DST,					\
> +		.src_reg = 0,					\
> +		.off   = 0,					\
> +		.imm   = IMM })
> +
> +#define BPF_ALU32_IMM(OP, DST, IMM)				\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU | BPF_OP(OP) | BPF_K,		\
> +		.dst_reg = DST,					\
> +		.src_reg = 0,					\
> +		.off   = 0,					\
> +		.imm   = IMM })
> +
> +/* Endianness conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */
> +
> +#define BPF_ENDIAN(TYPE, DST, LEN)				\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU | BPF_END | BPF_SRC(TYPE),	\
> +		.dst_reg = DST,					\
> +		.src_reg = 0,					\
> +		.off   = 0,					\
> +		.imm   = LEN })
> +
> +/* Short form of mov, dst_reg = src_reg */
> +
> +#define BPF_MOV64_REG(DST, SRC)					\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU64 | BPF_MOV | BPF_X,		\
> +		.dst_reg = DST,					\
> +		.src_reg = SRC,					\
> +		.off   = 0,					\
> +		.imm   = 0 })
> +
> +#define BPF_MOV32_REG(DST, SRC)					\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU | BPF_MOV | BPF_X,		\
> +		.dst_reg = DST,					\
> +		.src_reg = SRC,					\
> +		.off   = 0,					\
> +		.imm   = 0 })
> +
> +/* Short form of mov, dst_reg = imm32 */
> +
> +#define BPF_MOV64_IMM(DST, IMM)					\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU64 | BPF_MOV | BPF_K,		\
> +		.dst_reg = DST,					\
> +		.src_reg = 0,					\
> +		.off   = 0,					\
> +		.imm   = IMM })
> +
> +#define BPF_MOV32_IMM(DST, IMM)					\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU | BPF_MOV | BPF_K,		\
> +		.dst_reg = DST,					\
> +		.src_reg = 0,					\
> +		.off   = 0,					\
> +		.imm   = IMM })
> +
> +/* Short form of mov based on type,
> + * BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32
> + */
> +
> +#define BPF_MOV64_RAW(TYPE, DST, SRC, IMM)			\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU64 | BPF_MOV | BPF_SRC(TYPE),	\
> +		.dst_reg = DST,					\
> +		.src_reg = SRC,					\
> +		.off   = 0,					\
> +		.imm   = IMM })
> +
> +#define BPF_MOV32_RAW(TYPE, DST, SRC, IMM)			\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ALU | BPF_MOV | BPF_SRC(TYPE),	\
> +		.dst_reg = DST,					\
> +		.src_reg = SRC,					\
> +		.off   = 0,					\
> +		.imm   = IMM })
> +
> +/* Direct packet access, R0 = *(uint *) (skb->data + imm32) */
> +
> +#define BPF_LD_ABS(SIZE, IMM)					\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_LD | BPF_SIZE(SIZE) | BPF_ABS,	\
> +		.dst_reg = 0,					\
> +		.src_reg = 0,					\
> +		.off   = 0,					\
> +		.imm   = IMM })
> +
> +/* Indirect packet access, R0 = *(uint *) (skb->data + src_reg + imm32) */
> +
> +#define BPF_LD_IND(SIZE, SRC, IMM)				\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_LD | BPF_SIZE(SIZE) | BPF_IND,	\
> +		.dst_reg = 0,					\
> +		.src_reg = SRC,					\
> +		.off   = 0,					\
> +		.imm   = IMM })
> +
> +/* Memory load, dst_reg = *(uint *) (src_reg + off16) */
> +
> +#define BPF_LDX_MEM(SIZE, DST, SRC, OFF)			\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_LDX | BPF_SIZE(SIZE) | BPF_MEM,	\
> +		.dst_reg = DST,					\
> +		.src_reg = SRC,					\
> +		.off   = OFF,					\
> +		.imm   = 0 })
> +
> +/* Memory store, *(uint *) (dst_reg + off16) = src_reg */
> +
> +#define BPF_STX_MEM(SIZE, DST, SRC, OFF)			\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_STX | BPF_SIZE(SIZE) | BPF_MEM,	\
> +		.dst_reg = DST,					\
> +		.src_reg = SRC,					\
> +		.off   = OFF,					\
> +		.imm   = 0 })
> +
> +/* Memory store, *(uint *) (dst_reg + off16) = imm32 */
> +
> +#define BPF_ST_MEM(SIZE, DST, OFF, IMM)				\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_ST | BPF_SIZE(SIZE) | BPF_MEM,	\
> +		.dst_reg = DST,					\
> +		.src_reg = 0,					\
> +		.off   = OFF,					\
> +		.imm   = IMM })
> +
> +/* Conditional jumps against registers,
> + * if (dst_reg 'op' src_reg) goto pc + off16
> + */
> +
> +#define BPF_JMP_REG(OP, DST, SRC, OFF)				\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_JMP | BPF_OP(OP) | BPF_X,		\
> +		.dst_reg = DST,					\
> +		.src_reg = SRC,					\
> +		.off   = OFF,					\
> +		.imm   = 0 })
> +
> +/* Conditional jumps against immediates,
> + * if (dst_reg 'op' imm32) goto pc + off16
> + */
> +
> +#define BPF_JMP_IMM(OP, DST, IMM, OFF)				\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_JMP | BPF_OP(OP) | BPF_K,		\
> +		.dst_reg = DST,					\
> +		.src_reg = 0,					\
> +		.off   = OFF,					\
> +		.imm   = IMM })
> +
> +/* Function call */
> +
> +#define BPF_EMIT_CALL(FUNC)					\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_JMP | BPF_CALL,			\
> +		.dst_reg = 0,					\
> +		.src_reg = 0,					\
> +		.off   = 0,					\
> +		.imm   = ((FUNC) - BPF_FUNC_unspec) })
> +
> +/* Raw code statement block */
> +
> +#define BPF_RAW_INSN(CODE, DST, SRC, OFF, IMM)			\
> +	((struct bpf_insn) {					\
> +		.code  = CODE,					\
> +		.dst_reg = DST,					\
> +		.src_reg = SRC,					\
> +		.off   = OFF,					\
> +		.imm   = IMM })
> +
> +/* Program exit */
> +
> +#define BPF_EXIT_INSN()						\
> +	((struct bpf_insn) {					\
> +		.code  = BPF_JMP | BPF_EXIT,			\
> +		.dst_reg = 0,					\
> +		.src_reg = 0,					\
> +		.off   = 0,					\
> +		.imm   = 0 })
> +
> +#endif /* __TOOLS_LINUX_FILTER_H */
> diff --git a/tools/perf/MANIFEST b/tools/perf/MANIFEST
> index 56fe0c9..14e8b98 100644
> --- a/tools/perf/MANIFEST
> +++ b/tools/perf/MANIFEST
> @@ -42,6 +42,7 @@ tools/include/asm-generic/bitops.h
>  tools/include/linux/atomic.h
>  tools/include/linux/bitops.h
>  tools/include/linux/compiler.h
> +tools/include/linux/filter.h
>  tools/include/linux/hash.h
>  tools/include/linux/kernel.h
>  tools/include/linux/list.h
> -- 
> 2.1.0

  reply	other threads:[~2015-08-31 20:35 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-29  4:21 [GIT PULL 00/31] perf tools: filtering events using eBPF programs Wang Nan
2015-08-29  4:21 ` [PATCH 01/31] bpf tools: New API to get name from a BPF object Wang Nan
2015-08-29  4:21 ` [PATCH 02/31] perf tools: Don't set cmdline_group_boundary if no evsel is collected Wang Nan
2015-08-31 19:20   ` Arnaldo Carvalho de Melo
2015-09-01 10:37     ` Wangnan (F)
2015-09-01 10:38     ` Jiri Olsa
2015-09-01 12:44       ` Wangnan (F)
2015-09-02  2:53   ` [PATCH] perf tools: Don't set leader if parser doesn't collect an evsel Wang Nan
2015-09-02  3:01     ` Wangnan (F)
2015-09-02  5:57     ` 平松雅巳 / HIRAMATU,MASAMI
2015-09-02  6:09       ` Wangnan (F)
     [not found]       ` <1441176553-116129-1-git-send-email-wangnan0@huawei.com>
2015-09-02  6:53         ` [PATCH] perf tools: Don't write to evsel if parser doesn't collect evsel Wangnan (F)
2015-09-02 10:31           ` 平松雅巳 / HIRAMATU,MASAMI
2015-09-02 11:54           ` Jiri Olsa
2015-09-02 12:05             ` pi3orama
2015-09-02 12:46               ` Jiri Olsa
2015-09-02 13:55               ` Arnaldo Carvalho de Melo
2015-09-02 14:04                 ` pi3orama
2015-09-02 14:43                   ` Arnaldo Carvalho de Melo
2015-09-02 22:24                     ` pi3orama
2015-08-29  4:21 ` [PATCH 03/31] perf tools: Introduce dummy evsel Wang Nan
2015-08-31 19:38   ` Arnaldo Carvalho de Melo
2015-09-03  0:11   ` Namhyung Kim
2015-09-03  0:42     ` pi3orama
2015-09-06  5:55   ` [PATCH] perf tools: Allow BPF placeholder dummy events to collect --filter options Wang Nan
2015-09-06  5:56     ` [PATCH] perf tools: Sync setting of real bpf events with placeholder Wang Nan
2015-08-29  4:21 ` [PATCH 04/31] perf tools: Make perf depend on libbpf Wang Nan
2015-08-29  4:21 ` [PATCH 05/31] perf ebpf: Add the libbpf glue Wang Nan
2015-08-29  4:21 ` [PATCH 06/31] perf tools: Enable passing bpf object file to --event Wang Nan
2015-08-29  4:21 ` [PATCH 07/31] perf probe: Attach trace_probe_event with perf_probe_event Wang Nan
2015-09-02  4:32   ` Namhyung Kim
2015-09-02  5:40     ` Wangnan (F)
2015-08-29  4:21 ` [PATCH 08/31] perf record, bpf: Parse and probe eBPF programs probe points Wang Nan
2015-08-29  4:21 ` [PATCH 09/31] perf bpf: Collect 'struct perf_probe_event' for bpf_program Wang Nan
2015-08-29  4:21 ` [PATCH 10/31] perf record: Load all eBPF object into kernel Wang Nan
2015-08-29  4:21 ` [PATCH 11/31] perf tools: Add bpf_fd field to evsel and config it Wang Nan
2015-08-29  4:21 ` [PATCH 12/31] perf tools: Allow filter option to be applied to bof object Wang Nan
2015-08-29  4:21 ` [PATCH 13/31] perf tools: Attach eBPF program to perf event Wang Nan
2015-08-29  4:21 ` [PATCH 14/31] perf tools: Suppress probing messages when probing by BPF loading Wang Nan
2015-09-03  0:20   ` Namhyung Kim
2015-09-03  2:42     ` 平松雅巳 / HIRAMATU,MASAMI
2015-09-03 12:10     ` [PATCH perf/core ] perf-probe: Output the result of adding/deleting probe in buildin-probe Masami Hiramatsu
2015-09-03 12:18       ` 平松雅巳 / HIRAMATU,MASAMI
2015-09-03 17:25         ` Namhyung Kim
2015-09-03 20:28       ` Arnaldo Carvalho de Melo
2015-09-04  1:30         ` 平松雅巳 / HIRAMATU,MASAMI
2015-08-29  4:21 ` [PATCH 15/31] perf record: Add clang options for compiling BPF scripts Wang Nan
2015-08-29  4:21 ` [PATCH 16/31] perf tools: Infrastructure for compiling scriptlets when passing '.c' to --event Wang Nan
2015-08-29  4:21 ` [PATCH 17/31] perf tests: Enforce LLVM test for BPF test Wang Nan
2015-09-01  5:59   ` Wangnan (F)
2015-08-29  4:21 ` [PATCH 18/31] perf test: Add 'perf test BPF' Wang Nan
2015-09-02 12:45   ` Namhyung Kim
2015-09-05 12:21     ` Wang Nan
2015-08-29  4:21 ` [PATCH 19/31] bpf tools: Load a program with different instances using preprocessor Wang Nan
2015-08-29  4:21 ` [PATCH 20/31] perf probe: Reset args and nargs for probe_trace_event when failure Wang Nan
2015-08-29  4:21 ` [PATCH 21/31] perf tools: Move linux/filter.h to tools/include Wang Nan
2015-08-31 20:35   ` Arnaldo Carvalho de Melo [this message]
2015-09-01 19:39   ` Arnaldo Carvalho de Melo
2015-09-01 19:47     ` Arnaldo Carvalho de Melo
2015-09-01 21:08     ` pi3orama
2015-09-01 21:43       ` Arnaldo Carvalho de Melo
2015-09-08 14:31   ` [tip:perf/core] perf tools: Copy " tip-bot for He Kuang
2015-08-29  4:21 ` [PATCH 22/31] perf tools: Add BPF_PROLOGUE config options for further patches Wang Nan
2015-08-31 20:39   ` Arnaldo Carvalho de Melo
2015-09-01  6:59   ` Wang Nan
2015-09-01  6:59     ` [PATCH 23/31] perf tools: Introduce regs_query_register_offset() for x86 Wang Nan
2015-09-01 11:47       ` 平松雅巳 / HIRAMATU,MASAMI
2015-09-01 13:52         ` Wangnan (F)
2015-09-01 14:50           ` Arnaldo Carvalho de Melo
2015-09-01 14:14         ` Arnaldo Carvalho de Melo
2015-09-01 15:54           ` 平松雅巳 / HIRAMATU,MASAMI
2015-09-06  6:02             ` Wangnan (F)
2015-09-06  6:04               ` [PATCH] perf test: Enforce LLVM test, add kbuild test Wang Nan
2015-09-06  6:04                 ` [PATCH] perf test: Test BPF prologue Wang Nan
2015-09-02 14:08     ` [PATCH 22/31] perf tools: Add BPF_PROLOGUE config options for further patches Namhyung Kim
2015-08-29  4:21 ` [PATCH 23/31] perf tools: Introduce arch_get_reg_info() for x86 Wang Nan
2015-08-31 20:43   ` Arnaldo Carvalho de Melo
2015-09-01  2:39     ` Wangnan (F)
2015-08-29  4:21 ` [PATCH 24/31] perf tools: Add prologue for BPF programs for fetching arguments Wang Nan
2015-08-29  4:21 ` [PATCH 25/31] perf tools: Generate prologue for BPF programs Wang Nan
2015-08-29  4:22 ` [PATCH 26/31] perf tools: Use same BPF program if arguments are identical Wang Nan
2015-08-29  4:22 ` [PATCH 27/31] perf record: Support custom vmlinux path Wang Nan
2015-09-01 20:19   ` Arnaldo Carvalho de Melo
2015-09-01 20:21     ` Arnaldo Carvalho de Melo
2015-09-01 21:00       ` pi3orama
2015-09-01 21:33         ` Arnaldo Carvalho de Melo
2015-08-29  4:22 ` [PATCH 28/31] perf probe: Init symbol as kprobe Wang Nan
2015-09-01 20:11   ` Arnaldo Carvalho de Melo
2015-09-02  1:22     ` Wangnan (F)
2015-09-02  1:38     ` 平松雅巳 / HIRAMATU,MASAMI
2015-08-29  4:22 ` [PATCH 29/31] perf tools: Support attach BPF program on uprobe events Wang Nan
2015-08-29  4:22 ` [PATCH 30/31] perf tools: Fix cross compiling error Wang Nan
2015-08-29  4:22 ` [PATCH 31/31] tools lib traceevent: Support function __get_dynamic_array_len Wang Nan
2015-09-08 14:31   ` [tip:perf/core] " tip-bot for He Kuang

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=20150831203550.GC2443@redhat.com \
    --to=acme@redhat.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=ast@plumgrid.com \
    --cc=brendan.d.gregg@gmail.com \
    --cc=daniel@iogearbox.net \
    --cc=dsahern@gmail.com \
    --cc=hekuang@huawei.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizefan@huawei.com \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=paulus@samba.org \
    --cc=pi3orama@163.com \
    --cc=wangnan0@huawei.com \
    --cc=xiakaixu@huawei.com \
    /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.