Re: [PATCH 21/31] perf tools: Move linux/filter.h to tools/include

2015-09-01 Thread Arnaldo Carvalho de Melo
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

2015-09-01 Thread pi3orama


发自我的 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

2015-09-01 Thread Arnaldo Carvalho de Melo
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

2015-09-01 Thread 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
+ */

--

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

2015-09-01 Thread 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
+ */

--

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

2015-09-01 Thread Arnaldo Carvalho de Melo
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

2015-09-01 Thread Arnaldo Carvalho de Melo
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

2015-09-01 Thread pi3orama


发自我的 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

2015-08-31 Thread 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

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

2015-08-31 Thread 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

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

2015-08-28 Thread Wang Nan
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

2015-08-28 Thread Wang Nan
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) {