Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
Em Wed, Sep 02, 2015 at 05:08:27AM +0800, pi3orama escreveu: > 发自我的 iPhone > > 在 2015年9月2日,上午3:39,Arnaldo Carvalho de Melo 写道: > > Em Sat, Aug 29, 2015 at 04:21:55AM +, Wang Nan escreveu: > >> From: He Kuang > >> This patch moves filter.h from include/linux/kernel.h to > > I said that before: this is not moving anything, it is copying :-) > >> 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'. > > So, I did a: > > > > $ diff -u include/linux/filter.h tools/include/linux/filter.h > > > > And noticed these: > > > > -/* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ > > +/* Endianness conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ > > > > -/* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: > > dst_reg = imm32 */ > > +/* Short form of mov based on type, > > + * BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 > > + */ > > > > -/* Conditional jumps against registers, if (dst_reg 'op' src_reg) goto pc > > + off16 */ > > +/* Conditional jumps against registers, > > + * if (dst_reg 'op' src_reg) goto pc + off16 > > + */ > > > > -/* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + > > off16 */ > > +/* Conditional jumps against immediates, > > + * if (dst_reg 'op' imm32) goto pc + off16 > > + */ > > > > -- > > > > I think these changes are made after we made this patch. Don't think so, for instance, this one: /* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ [acme@zoo linux]$ git log -p include/linux/filter.h | grep 'Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32' /* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ /* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ /* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ +/* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ [acme@zoo linux]$ Was introduced, in just one line, and never again touched, just appearing as context in subsequent patches. I bet this was related to checkpatch.pl complaining it has more than 80 lines ;-\ Ditto for: [acme@zoo linux]$ git log -p include/linux/filter.h | grep 'Endiann\?ess conversion' /* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ /* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ +/* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ [acme@zoo linux]$ > Thank you for checking it. np. - Arnaldo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
发自我的 iPhone > 在 2015年9月2日,上午3:39,Arnaldo Carvalho de Melo 写道: > > Em Sat, Aug 29, 2015 at 04:21:55AM +, Wang Nan escreveu: >> From: He Kuang >> >> This patch moves filter.h from include/linux/kernel.h to > > I said that before: this is not moving anything, it is copying :-) > >> 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'. > > So, I did a: > > $ diff -u include/linux/filter.h tools/include/linux/filter.h > > And noticed these: > > -/* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ > +/* Endianness conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ > > -/* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg > = imm32 */ > +/* Short form of mov based on type, > + * BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 > + */ > > -/* Conditional jumps against registers, if (dst_reg 'op' src_reg) goto pc + > off16 */ > +/* Conditional jumps against registers, > + * if (dst_reg 'op' src_reg) goto pc + off16 > + */ > > -/* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + > off16 */ > +/* Conditional jumps against immediates, > + * if (dst_reg 'op' imm32) goto pc + off16 > + */ > > -- > I think these changes are made after we made this patch. Thank you for checking it. > Please refrain from doing that... I.e. spell checking is kinda useful, > introducing gratuitous further drift from include/linux/FOO.h to > tools/include/linux/FOO.h is not. > > So either resist the urge to do these stylistic changes or do those changes in > include/linux/FOO.h and _then_ copy it to tools/include/linux/FOO.h. > > If the copy was already done, fix both, so that when we do that diff again, we > can see what is really different in kernel and userspace copies and that maybe > will help us spot things that aren't diverging over time. > > - Arnaldo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
Em Tue, Sep 01, 2015 at 04:39:59PM -0300, Arnaldo Carvalho de Melo escreveu: > Em Sat, Aug 29, 2015 at 04:21:55AM +, Wang Nan escreveu: > > From: He Kuang > -/* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + > off16 */ > +/* Conditional jumps against immediates, > + * if (dst_reg 'op' imm32) goto pc + off16 > + */ > Please refrain from doing that... I.e. spell checking is kinda useful, > introducing gratuitous further drift from include/linux/FOO.h to > tools/include/linux/FOO.h is not. I've done it this time. I.e. left it as a strict copy, modulo the unused parts that were purposefuly removed in the original patch. Trying to cherry pick as many patches from this series as possible, to help in getting the eBPF patchkit in. - Arnaldo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
Em Sat, Aug 29, 2015 at 04:21:55AM +, Wang Nan escreveu: > From: He Kuang > > This patch moves filter.h from include/linux/kernel.h to I said that before: this is not moving anything, it is copying :-) > 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'. So, I did a: $ diff -u include/linux/filter.h tools/include/linux/filter.h And noticed these: -/* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ +/* Endianness conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ -/* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ +/* Short form of mov based on type, + * BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 + */ -/* Conditional jumps against registers, if (dst_reg 'op' src_reg) goto pc + off16 */ +/* Conditional jumps against registers, + * if (dst_reg 'op' src_reg) goto pc + off16 + */ -/* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + off16 */ +/* Conditional jumps against immediates, + * if (dst_reg 'op' imm32) goto pc + off16 + */ -- Please refrain from doing that... I.e. spell checking is kinda useful, introducing gratuitous further drift from include/linux/FOO.h to tools/include/linux/FOO.h is not. So either resist the urge to do these stylistic changes or do those changes in include/linux/FOO.h and _then_ copy it to tools/include/linux/FOO.h. If the copy was already done, fix both, so that when we do that diff again, we can see what is really different in kernel and userspace copies and that maybe will help us spot things that aren't diverging over time. - Arnaldo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
Em Sat, Aug 29, 2015 at 04:21:55AM +, Wang Nan escreveu: > From: He Kuang> > This patch moves filter.h from include/linux/kernel.h to I said that before: this is not moving anything, it is copying :-) > 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'. So, I did a: $ diff -u include/linux/filter.h tools/include/linux/filter.h And noticed these: -/* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ +/* Endianness conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ -/* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ +/* Short form of mov based on type, + * BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 + */ -/* Conditional jumps against registers, if (dst_reg 'op' src_reg) goto pc + off16 */ +/* Conditional jumps against registers, + * if (dst_reg 'op' src_reg) goto pc + off16 + */ -/* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + off16 */ +/* Conditional jumps against immediates, + * if (dst_reg 'op' imm32) goto pc + off16 + */ -- Please refrain from doing that... I.e. spell checking is kinda useful, introducing gratuitous further drift from include/linux/FOO.h to tools/include/linux/FOO.h is not. So either resist the urge to do these stylistic changes or do those changes in include/linux/FOO.h and _then_ copy it to tools/include/linux/FOO.h. If the copy was already done, fix both, so that when we do that diff again, we can see what is really different in kernel and userspace copies and that maybe will help us spot things that aren't diverging over time. - Arnaldo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
Em Tue, Sep 01, 2015 at 04:39:59PM -0300, Arnaldo Carvalho de Melo escreveu: > Em Sat, Aug 29, 2015 at 04:21:55AM +, Wang Nan escreveu: > > From: He Kuang> -/* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + > off16 */ > +/* Conditional jumps against immediates, > + * if (dst_reg 'op' imm32) goto pc + off16 > + */ > Please refrain from doing that... I.e. spell checking is kinda useful, > introducing gratuitous further drift from include/linux/FOO.h to > tools/include/linux/FOO.h is not. I've done it this time. I.e. left it as a strict copy, modulo the unused parts that were purposefuly removed in the original patch. Trying to cherry pick as many patches from this series as possible, to help in getting the eBPF patchkit in. - Arnaldo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
Em Wed, Sep 02, 2015 at 05:08:27AM +0800, pi3orama escreveu: > 发自我的 iPhone > > 在 2015年9月2日,上午3:39,Arnaldo Carvalho de Melo写道: > > Em Sat, Aug 29, 2015 at 04:21:55AM +, Wang Nan escreveu: > >> From: He Kuang > >> This patch moves filter.h from include/linux/kernel.h to > > I said that before: this is not moving anything, it is copying :-) > >> 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'. > > So, I did a: > > > > $ diff -u include/linux/filter.h tools/include/linux/filter.h > > > > And noticed these: > > > > -/* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ > > +/* Endianness conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ > > > > -/* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: > > dst_reg = imm32 */ > > +/* Short form of mov based on type, > > + * BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 > > + */ > > > > -/* Conditional jumps against registers, if (dst_reg 'op' src_reg) goto pc > > + off16 */ > > +/* Conditional jumps against registers, > > + * if (dst_reg 'op' src_reg) goto pc + off16 > > + */ > > > > -/* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + > > off16 */ > > +/* Conditional jumps against immediates, > > + * if (dst_reg 'op' imm32) goto pc + off16 > > + */ > > > > -- > > > > I think these changes are made after we made this patch. Don't think so, for instance, this one: /* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ [acme@zoo linux]$ git log -p include/linux/filter.h | grep 'Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32' /* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ /* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ /* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ +/* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ [acme@zoo linux]$ Was introduced, in just one line, and never again touched, just appearing as context in subsequent patches. I bet this was related to checkpatch.pl complaining it has more than 80 lines ;-\ Ditto for: [acme@zoo linux]$ git log -p include/linux/filter.h | grep 'Endiann\?ess conversion' /* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ /* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ +/* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ [acme@zoo linux]$ > Thank you for checking it. np. - Arnaldo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
发自我的 iPhone > 在 2015年9月2日,上午3:39,Arnaldo Carvalho de Melo写道: > > Em Sat, Aug 29, 2015 at 04:21:55AM +, Wang Nan escreveu: >> From: He Kuang >> >> This patch moves filter.h from include/linux/kernel.h to > > I said that before: this is not moving anything, it is copying :-) > >> 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'. > > So, I did a: > > $ diff -u include/linux/filter.h tools/include/linux/filter.h > > And noticed these: > > -/* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ > +/* Endianness conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ > > -/* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg > = imm32 */ > +/* Short form of mov based on type, > + * BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 > + */ > > -/* Conditional jumps against registers, if (dst_reg 'op' src_reg) goto pc + > off16 */ > +/* Conditional jumps against registers, > + * if (dst_reg 'op' src_reg) goto pc + off16 > + */ > > -/* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + > off16 */ > +/* Conditional jumps against immediates, > + * if (dst_reg 'op' imm32) goto pc + off16 > + */ > > -- > I think these changes are made after we made this patch. Thank you for checking it. > Please refrain from doing that... I.e. spell checking is kinda useful, > introducing gratuitous further drift from include/linux/FOO.h to > tools/include/linux/FOO.h is not. > > So either resist the urge to do these stylistic changes or do those changes in > include/linux/FOO.h and _then_ copy it to tools/include/linux/FOO.h. > > If the copy was already done, fix both, so that when we do that diff again, we > can see what is really different in kernel and userspace copies and that maybe > will help us spot things that aren't diverging over time. > > - Arnaldo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
Em Sat, Aug 29, 2015 at 04:21:55AM +, Wang Nan escreveu: > From: He Kuang > > 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 > Signed-off-by: Wang Nan > Cc: Alexei Starovoitov > Cc: Brendan Gregg > Cc: Daniel Borkmann > Cc: David Ahern > Cc: He Kuang > Cc: Jiri Olsa > Cc: Kaixu Xia > Cc: Masami Hiramatsu > Cc: Namhyung Kim > Cc: Paul Mackerras > Cc: Peter Zijlstra > Cc: Zefan Li > Cc: pi3or...@163.com > Cc: Arnaldo Carvalho de Melo > Link: > http://lkml.kernel.org/n/1436445342-1402-32-git-send-email-wangn...@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 000..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 > + > +/* 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_ABPF_REG_0 > +#define BPF_REG_XBPF_REG_7 > +#define BPF_REG_TMP BPF_REG_8 > + > +/* BPF program can access up to 512 bytes of stack space. */ > +#define MAX_BPF_STACK512 > + > +/* 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,
Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include
Em Sat, Aug 29, 2015 at 04:21:55AM +, Wang Nan escreveu: > From: He Kuang> > 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 > Signed-off-by: Wang Nan > Cc: Alexei Starovoitov > Cc: Brendan Gregg > Cc: Daniel Borkmann > Cc: David Ahern > Cc: He Kuang > Cc: Jiri Olsa > Cc: Kaixu Xia > Cc: Masami Hiramatsu > Cc: Namhyung Kim > Cc: Paul Mackerras > Cc: Peter Zijlstra > Cc: Zefan Li > Cc: pi3or...@163.com > Cc: Arnaldo Carvalho de Melo > Link: > http://lkml.kernel.org/n/1436445342-1402-32-git-send-email-wangn...@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 000..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 > + > +/* 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_ABPF_REG_0 > +#define BPF_REG_XBPF_REG_7 > +#define BPF_REG_TMP BPF_REG_8 > + > +/* BPF program can access up to 512 bytes of stack space. */ > +#define MAX_BPF_STACK512 > + > +/* 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) {
[PATCH 21/31] perf tools: Move linux/filter.h to tools/include
From: He Kuang This patch moves filter.h from include/linux/kernel.h to 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 Signed-off-by: Wang Nan Cc: Alexei Starovoitov Cc: Brendan Gregg Cc: Daniel Borkmann Cc: David Ahern Cc: He Kuang Cc: Jiri Olsa Cc: Kaixu Xia Cc: Masami Hiramatsu Cc: Namhyung Kim Cc: Paul Mackerras Cc: Peter Zijlstra Cc: Zefan Li Cc: pi3or...@163.com Cc: Arnaldo Carvalho de Melo Link: http://lkml.kernel.org/n/1436445342-1402-32-git-send-email-wangn...@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 000..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 + +/* 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_CTXBPF_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_TMPBPF_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
[PATCH 21/31] perf tools: Move linux/filter.h to tools/include
From: He Kuang heku...@huawei.com This patch moves filter.h from include/linux/kernel.h to 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 heku...@huawei.com Signed-off-by: Wang Nan wangn...@huawei.com Cc: Alexei Starovoitov a...@plumgrid.com Cc: Brendan Gregg brendan.d.gr...@gmail.com Cc: Daniel Borkmann dan...@iogearbox.net Cc: David Ahern dsah...@gmail.com Cc: He Kuang heku...@huawei.com Cc: Jiri Olsa jo...@kernel.org Cc: Kaixu Xia xiaka...@huawei.com Cc: Masami Hiramatsu masami.hiramatsu...@hitachi.com Cc: Namhyung Kim namhy...@kernel.org Cc: Paul Mackerras pau...@samba.org Cc: Peter Zijlstra a.p.zijls...@chello.nl Cc: Zefan Li lize...@huawei.com Cc: pi3or...@163.com Cc: Arnaldo Carvalho de Melo a...@redhat.com Link: http://lkml.kernel.org/n/1436445342-1402-32-git-send-email-wangn...@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 000..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_CTXBPF_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_TMPBPF_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) {