Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1416195 > unrolled thread
| Started by | "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> |
|---|---|
| First post | 2016-06-07 15:40 +0200 |
| Last post | 2016-06-22 14:40 +0200 |
| Articles | 10 — 5 participants |
Back to article view | Back to linux.kernel
[PATCH 0/6] eBPF JIT for PPC64 "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> - 2016-06-07 15:40 +0200
[PATCH 3/6] ppc: bpf/jit: Introduce rotate immediate instructions "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> - 2016-06-07 17:40 +0200
Re: [PATCH 6/6] ppc: ebpf/jit: Implement JIT compiler for extended BPF Alexei Starovoitov <alexei.starovoitov@gmail.com> - 2016-06-08 01:00 +0200
Re: [PATCH 6/6] ppc: ebpf/jit: Implement JIT compiler for extended BPF "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> - 2016-06-08 19:20 +0200
Re: [PATCH 6/6] ppc: ebpf/jit: Implement JIT compiler for extended BPF "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> - 2016-06-09 08:10 +0200
Re: [PATCH 0/6] eBPF JIT for PPC64 David Miller <davem@davemloft.net> - 2016-06-11 07:50 +0200
Re: [PATCH 0/6] eBPF JIT for PPC64 "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> - 2016-06-13 07:50 +0200
Re: [PATCH 0/6] eBPF JIT for PPC64 mpe <mpe@ellerman.id.au> - 2016-06-18 07:00 +0200
Re: [PATCH 6/6] ppc: ebpf/jit: Implement JIT compiler for extended BPF Michael Ellerman <mpe@ellerman.id.au> - 2016-06-22 12:40 +0200
Re: [PATCH 6/6] ppc: ebpf/jit: Implement JIT compiler for extended BPF "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> - 2016-06-22 14:40 +0200
| From | "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-06-07 15:40 +0200 |
| Subject | [PATCH 0/6] eBPF JIT for PPC64 |
| Message-ID | <rHpoB-3hJ-11@gated-at.bofh.it> |
Implement extended BPF JIT for ppc64. We retain the classic BPF JIT for ppc32 and move ppc64 BE/LE to use the new JIT. Classic BPF filters will be converted to extended BPF (see convert_filter()) and JIT'ed with the new compiler. Most of the existing macros are retained and fixed/enhanced where appropriate. Patches 1-4 are geared towards this. Patch 5 breaks out the classic BPF JIT specifics into a separate bpf_jit32.h header file, while retaining all the generic instruction macros in bpf_jit.h. Patch 6 implements eBPF JIT for ppc64. Since the RFC patchset [1], powerpc JIT has now gained support for skb access helpers and now passes all tests in test_bpf.ko. Review comments on the RFC patches have been addressed (use of an ABI macro [2] and use of bpf_jit_binary_alloc()), along with a few other generic fixes and updates. Prominent TODOs: - implement BPF tail calls - support for BPF constant blinding Please note that patch [2] is a pre-requisite for this patchset, and is not yet upstream. - Naveen [1] http://thread.gmane.org/gmane.linux.kernel/2188694 [2] http://thread.gmane.org/gmane.linux.ports.ppc.embedded/96514 Naveen N. Rao (6): ppc: bpf/jit: Fix/enhance 32-bit Load Immediate implementation ppc: bpf/jit: Optimize 64-bit Immediate loads ppc: bpf/jit: Introduce rotate immediate instructions ppc: bpf/jit: A few cleanups ppc: bpf/jit: Isolate classic BPF JIT specifics into a separate header ppc: ebpf/jit: Implement JIT compiler for extended BPF arch/powerpc/Kconfig | 3 +- arch/powerpc/include/asm/asm-compat.h | 2 + arch/powerpc/include/asm/ppc-opcode.h | 22 +- arch/powerpc/net/Makefile | 4 + arch/powerpc/net/bpf_jit.h | 235 ++++----- arch/powerpc/net/bpf_jit32.h | 139 +++++ arch/powerpc/net/bpf_jit64.h | 102 ++++ arch/powerpc/net/bpf_jit_asm.S | 2 +- arch/powerpc/net/bpf_jit_asm64.S | 180 +++++++ arch/powerpc/net/bpf_jit_comp.c | 10 +- arch/powerpc/net/bpf_jit_comp64.c | 956 ++++++++++++++++++++++++++++++++++ 11 files changed, 1504 insertions(+), 151 deletions(-) create mode 100644 arch/powerpc/net/bpf_jit32.h create mode 100644 arch/powerpc/net/bpf_jit64.h create mode 100644 arch/powerpc/net/bpf_jit_asm64.S create mode 100644 arch/powerpc/net/bpf_jit_comp64.c -- 2.8.2
[toc] | [next] | [standalone]
| From | "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-06-07 17:40 +0200 |
| Subject | [PATCH 3/6] ppc: bpf/jit: Introduce rotate immediate instructions |
| Message-ID | <rHrgK-4rU-15@gated-at.bofh.it> |
| In reply to | #1416195 |
Since we will be using the rotate immediate instructions for extended BPF JIT, let's introduce macros for the same. And since the shift immediate operations use the rotate immediate instructions, let's redo those macros to use the newly introduced instructions. Cc: Matt Evans <matt@ozlabs.org> Cc: Denis Kirjanov <kda@linux-powerpc.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paul Mackerras <paulus@samba.org> Cc: Alexei Starovoitov <ast@fb.com> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: "David S. Miller" <davem@davemloft.net> Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> --- arch/powerpc/include/asm/ppc-opcode.h | 2 ++ arch/powerpc/net/bpf_jit.h | 20 +++++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h index 1d035c1..fd8d640 100644 --- a/arch/powerpc/include/asm/ppc-opcode.h +++ b/arch/powerpc/include/asm/ppc-opcode.h @@ -272,6 +272,8 @@ #define __PPC_SH(s) __PPC_WS(s) #define __PPC_MB(s) (((s) & 0x1f) << 6) #define __PPC_ME(s) (((s) & 0x1f) << 1) +#define __PPC_MB64(s) (__PPC_MB(s) | ((s) & 0x20)) +#define __PPC_ME64(s) __PPC_MB64(s) #define __PPC_BI(s) (((s) & 0x1f) << 16) #define __PPC_CT(t) (((t) & 0x0f) << 21) diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h index 4c1e055..95d0e38 100644 --- a/arch/powerpc/net/bpf_jit.h +++ b/arch/powerpc/net/bpf_jit.h @@ -210,18 +210,20 @@ DECLARE_LOAD_FUNC(sk_load_byte_msh); ___PPC_RS(a) | ___PPC_RB(s)) #define PPC_SRW(d, a, s) EMIT(PPC_INST_SRW | ___PPC_RA(d) | \ ___PPC_RS(a) | ___PPC_RB(s)) +#define PPC_RLWINM(d, a, i, mb, me) EMIT(PPC_INST_RLWINM | ___PPC_RA(d) | \ + ___PPC_RS(a) | __PPC_SH(i) | \ + __PPC_MB(mb) | __PPC_ME(me)) +#define PPC_RLDICR(d, a, i, me) EMIT(PPC_INST_RLDICR | ___PPC_RA(d) | \ + ___PPC_RS(a) | __PPC_SH(i) | \ + __PPC_ME64(me) | (((i) & 0x20) >> 4)) + /* slwi = rlwinm Rx, Ry, n, 0, 31-n */ -#define PPC_SLWI(d, a, i) EMIT(PPC_INST_RLWINM | ___PPC_RA(d) | \ - ___PPC_RS(a) | __PPC_SH(i) | \ - __PPC_MB(0) | __PPC_ME(31-(i))) +#define PPC_SLWI(d, a, i) PPC_RLWINM(d, a, i, 0, 31-(i)) /* srwi = rlwinm Rx, Ry, 32-n, n, 31 */ -#define PPC_SRWI(d, a, i) EMIT(PPC_INST_RLWINM | ___PPC_RA(d) | \ - ___PPC_RS(a) | __PPC_SH(32-(i)) | \ - __PPC_MB(i) | __PPC_ME(31)) +#define PPC_SRWI(d, a, i) PPC_RLWINM(d, a, 32-(i), i, 31) /* sldi = rldicr Rx, Ry, n, 63-n */ -#define PPC_SLDI(d, a, i) EMIT(PPC_INST_RLDICR | ___PPC_RA(d) | \ - ___PPC_RS(a) | __PPC_SH(i) | \ - __PPC_MB(63-(i)) | (((i) & 0x20) >> 4)) +#define PPC_SLDI(d, a, i) PPC_RLDICR(d, a, i, 63-(i)) + #define PPC_NEG(d, a) EMIT(PPC_INST_NEG | ___PPC_RT(d) | ___PPC_RA(a)) /* Long jump; (unconditional 'branch') */ -- 2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Alexei Starovoitov <alexei.starovoitov@gmail.com> |
|---|---|
| Date | 2016-06-08 01:00 +0200 |
| Subject | Re: [PATCH 6/6] ppc: ebpf/jit: Implement JIT compiler for extended BPF |
| Message-ID | <rHy8y-dV-1@gated-at.bofh.it> |
| In reply to | #1416195 |
On Tue, Jun 07, 2016 at 07:02:23PM +0530, Naveen N. Rao wrote: > PPC64 eBPF JIT compiler. > > Enable with: > echo 1 > /proc/sys/net/core/bpf_jit_enable > or > echo 2 > /proc/sys/net/core/bpf_jit_enable > > ... to see the generated JIT code. This can further be processed with > tools/net/bpf_jit_disasm. > > With CONFIG_TEST_BPF=m and 'modprobe test_bpf': > test_bpf: Summary: 305 PASSED, 0 FAILED, [297/297 JIT'ed] > > ... on both ppc64 BE and LE. Nice. That's even better than on x64 which cannot jit one test: test_bpf: #262 BPF_MAXINSNS: Jump, gap, jump, ... jited:0 168 PASS which was designed specifically to hit x64 jit pass limit. ppc jit has predicatble number of passes and doesn't have this problem as expected. Great. > The details of the approach are documented through various comments in > the code. > > Cc: Matt Evans <matt@ozlabs.org> > Cc: Denis Kirjanov <kda@linux-powerpc.org> > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: Paul Mackerras <paulus@samba.org> > Cc: Alexei Starovoitov <ast@fb.com> > Cc: Daniel Borkmann <daniel@iogearbox.net> > Cc: "David S. Miller" <davem@davemloft.net> > Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> > Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> > --- > arch/powerpc/Kconfig | 3 +- > arch/powerpc/include/asm/asm-compat.h | 2 + > arch/powerpc/include/asm/ppc-opcode.h | 20 +- > arch/powerpc/net/Makefile | 4 + > arch/powerpc/net/bpf_jit.h | 53 +- > arch/powerpc/net/bpf_jit64.h | 102 ++++ > arch/powerpc/net/bpf_jit_asm64.S | 180 +++++++ > arch/powerpc/net/bpf_jit_comp64.c | 956 ++++++++++++++++++++++++++++++++++ > 8 files changed, 1317 insertions(+), 3 deletions(-) > create mode 100644 arch/powerpc/net/bpf_jit64.h > create mode 100644 arch/powerpc/net/bpf_jit_asm64.S > create mode 100644 arch/powerpc/net/bpf_jit_comp64.c don't see any issues with the code. Thank you for working on this. Acked-by: Alexei Starovoitov <ast@kernel.org>
[toc] | [prev] | [next] | [standalone]
| From | "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-06-08 19:20 +0200 |
| Subject | Re: [PATCH 6/6] ppc: ebpf/jit: Implement JIT compiler for extended BPF |
| Message-ID | <rHPj4-30z-7@gated-at.bofh.it> |
| In reply to | #1416704 |
On 2016/06/07 03:56PM, Alexei Starovoitov wrote: > On Tue, Jun 07, 2016 at 07:02:23PM +0530, Naveen N. Rao wrote: > > PPC64 eBPF JIT compiler. > > > > Enable with: > > echo 1 > /proc/sys/net/core/bpf_jit_enable > > or > > echo 2 > /proc/sys/net/core/bpf_jit_enable > > > > ... to see the generated JIT code. This can further be processed with > > tools/net/bpf_jit_disasm. > > > > With CONFIG_TEST_BPF=m and 'modprobe test_bpf': > > test_bpf: Summary: 305 PASSED, 0 FAILED, [297/297 JIT'ed] > > > > ... on both ppc64 BE and LE. > > Nice. That's even better than on x64 which cannot jit one test: > test_bpf: #262 BPF_MAXINSNS: Jump, gap, jump, ... jited:0 168 PASS > which was designed specifically to hit x64 jit pass limit. > ppc jit has predicatble number of passes and doesn't have this problem > as expected. Great. Yes, that's thanks to the clever handling of conditional branches by Matt -- we always emit 2 instructions for this reason (encoded in PPC_BCC() macro). > > > The details of the approach are documented through various comments in > > the code. > > > > Cc: Matt Evans <matt@ozlabs.org> > > Cc: Denis Kirjanov <kda@linux-powerpc.org> > > Cc: Michael Ellerman <mpe@ellerman.id.au> > > Cc: Paul Mackerras <paulus@samba.org> > > Cc: Alexei Starovoitov <ast@fb.com> > > Cc: Daniel Borkmann <daniel@iogearbox.net> > > Cc: "David S. Miller" <davem@davemloft.net> > > Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> > > Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> > > --- > > arch/powerpc/Kconfig | 3 +- > > arch/powerpc/include/asm/asm-compat.h | 2 + > > arch/powerpc/include/asm/ppc-opcode.h | 20 +- > > arch/powerpc/net/Makefile | 4 + > > arch/powerpc/net/bpf_jit.h | 53 +- > > arch/powerpc/net/bpf_jit64.h | 102 ++++ > > arch/powerpc/net/bpf_jit_asm64.S | 180 +++++++ > > arch/powerpc/net/bpf_jit_comp64.c | 956 ++++++++++++++++++++++++++++++++++ > > 8 files changed, 1317 insertions(+), 3 deletions(-) > > create mode 100644 arch/powerpc/net/bpf_jit64.h > > create mode 100644 arch/powerpc/net/bpf_jit_asm64.S > > create mode 100644 arch/powerpc/net/bpf_jit_comp64.c > > don't see any issues with the code. > Thank you for working on this. > > Acked-by: Alexei Starovoitov <ast@kernel.org> Thanks, Alexei! Regards, Naveen
[toc] | [prev] | [next] | [standalone]
| From | "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-06-09 08:10 +0200 |
| Subject | Re: [PATCH 6/6] ppc: ebpf/jit: Implement JIT compiler for extended BPF |
| Message-ID | <rI1kd-2sF-5@gated-at.bofh.it> |
| In reply to | #1416195 |
On 2016/06/08 10:19PM, Nilay Vaish wrote: > Naveen, can you point out where in the patch you update the variable: > idx, a member of codegen_contex structure? Somehow I am unable to > figure it out. I can only see that we set it to 0 in the > bpf_int_jit_compile function. Since all your test cases pass, I am > clearly overlooking something. Yes, that's being done in bpf_jit.h (see the earlier patches in the series). All the PPC_*() instruction macros are defined to EMIT() the respective powerpc instruction encoding. EMIT() translates to PLANT_INSTR(), which actually increments idx. - Naveen
[toc] | [prev] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2016-06-11 07:50 +0200 |
| Message-ID | <rIJXX-7sE-3@gated-at.bofh.it> |
| In reply to | #1416195 |
From: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> Date: Tue, 7 Jun 2016 19:02:17 +0530 > Please note that patch [2] is a pre-requisite for this patchset, and is > not yet upstream. ... > [1] http://thread.gmane.org/gmane.linux.kernel/2188694 > [2] http://thread.gmane.org/gmane.linux.ports.ppc.embedded/96514 Because of #2 I don't think I can take this directly into the networking tree, right? Therefore, how would you like this to be merged?
[toc] | [prev] | [next] | [standalone]
| From | "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-06-13 07:50 +0200 |
| Message-ID | <rJsV3-1Zd-3@gated-at.bofh.it> |
| In reply to | #1419915 |
On 2016/06/10 10:47PM, David Miller wrote: > From: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> > Date: Tue, 7 Jun 2016 19:02:17 +0530 > > > Please note that patch [2] is a pre-requisite for this patchset, and is > > not yet upstream. > ... > > [1] http://thread.gmane.org/gmane.linux.kernel/2188694 > > [2] http://thread.gmane.org/gmane.linux.ports.ppc.embedded/96514 > > Because of #2 I don't think I can take this directly into the networking > tree, right? > > Therefore, how would you like this to be merged? Hi David, Thanks for asking. Yes, I think it is better to take this through the powerpc tree as all the changes are contained within arch/powerpc, unless Michael Ellerman feels differently. Michael? Regards, Naveen
[toc] | [prev] | [next] | [standalone]
| From | mpe <mpe@ellerman.id.au> |
|---|---|
| Date | 2016-06-18 07:00 +0200 |
| Message-ID | <rLgwp-7Pu-1@gated-at.bofh.it> |
| In reply to | #1420452 |
On 2016-06-13 15:40, Naveen N. Rao wrote: > On 2016/06/10 10:47PM, David Miller wrote: >> From: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> >> Date: Tue, 7 Jun 2016 19:02:17 +0530 >> >> > Please note that patch [2] is a pre-requisite for this patchset, and is >> > not yet upstream. >> ... >> > [1] http://thread.gmane.org/gmane.linux.kernel/2188694 >> > [2] http://thread.gmane.org/gmane.linux.ports.ppc.embedded/96514 >> >> Because of #2 I don't think I can take this directly into the >> networking >> tree, right? >> >> Therefore, how would you like this to be merged? > > Hi David, > Thanks for asking. Yes, I think it is better to take this through the > powerpc tree as all the changes are contained within arch/powerpc, > unless Michael Ellerman feels differently. > > Michael? Yeah I was planning to take it. I put it in my test tree last night but it broke the build for some configs. Once that is fixed I'll take it via powerpc#next. cheers
[toc] | [prev] | [next] | [standalone]
| From | Michael Ellerman <mpe@ellerman.id.au> |
|---|---|
| Date | 2016-06-22 12:40 +0200 |
| Subject | Re: [PATCH 6/6] ppc: ebpf/jit: Implement JIT compiler for extended BPF |
| Message-ID | <rMNJD-2bS-5@gated-at.bofh.it> |
| In reply to | #1416195 |
On Tue, 2016-06-07 at 19:02 +0530, Naveen N. Rao wrote:
> PPC64 eBPF JIT compiler.
>
> Enable with:
> echo 1 > /proc/sys/net/core/bpf_jit_enable
> or
> echo 2 > /proc/sys/net/core/bpf_jit_enable
>
> ... to see the generated JIT code. This can further be processed with
> tools/net/bpf_jit_disasm.
>
> With CONFIG_TEST_BPF=m and 'modprobe test_bpf':
> test_bpf: Summary: 305 PASSED, 0 FAILED, [297/297 JIT'ed]
>
> ... on both ppc64 BE and LE.
>
> The details of the approach are documented through various comments in
> the code.
This is crashing for me on a Cell machine, not sure why at a glance:
test_bpf: #250 JMP_JSET_X: if (0x3 & 0xffffffff) return 1 jited:1 14 PASS
test_bpf: #251 JMP_JA: Jump, gap, jump, ... jited:1 15 PASS
test_bpf: #252 BPF_MAXINSNS: Maximum possible literals
Unable to handle kernel paging request for data at address 0xd000000007b20000
Faulting instruction address: 0xc000000000667b6c
cpu 0x0: Vector: 300 (Data Access) at [c0000007f83bf3a0]
pc: c000000000667b6c: .flush_icache_range+0x3c/0x84
lr: c000000000082354: .bpf_int_jit_compile+0x1fc/0x2c8
sp: c0000007f83bf620
msr: 900000000200b032
dar: d000000007b20000
dsisr: 40000000
current = 0xc0000007f8249580
paca = 0xc00000000fff0000 softe: 0 irq_happened: 0x01
pid = 1822, comm = insmod
Linux version 4.7.0-rc3-00061-g007c99b9d8c1 (michael@ka3.ozlabs.ibm.com) (gcc version 6.1.0 (GCC) ) #3 SMP Wed Jun 22 19:22:23 AEST 2016
enter ? for help
[link register ] c000000000082354 .bpf_int_jit_compile+0x1fc/0x2c8
[c0000007f83bf620] c0000000000822fc .bpf_int_jit_compile+0x1a4/0x2c8 (unreliable)
[c0000007f83bf700] c00000000013cda4 .bpf_prog_select_runtime+0x24/0x108
[c0000007f83bf780] c000000000548918 .bpf_prepare_filter+0x9b0/0x9e8
[c0000007f83bf830] c0000000005489d4 .bpf_prog_create+0x84/0xd0
[c0000007f83bf8c0] d000000003b21158 .test_bpf_init+0x28c/0x83c [test_bpf]
[c0000007f83bfa00] c00000000000a7b4 .do_one_initcall+0x5c/0x1c0
[c0000007f83bfae0] c000000000669058 .do_init_module+0x80/0x21c
[c0000007f83bfb80] c00000000011e3a0 .load_module+0x2028/0x23a8
[c0000007f83bfd20] c00000000011e898 .SyS_init_module+0x178/0x1b0
[c0000007f83bfe30] c000000000009220 system_call+0x38/0x110
--- Exception: c01 (System Call) at 000000000ff5e0c4
SP (ffde0960) is in userspace
0:mon> r
R00 = 000000000000c01c R16 = 0000000000000000
R01 = c0000007f83bf620 R17 = 00000000024000c0
R02 = c00000000094ce00 R18 = 0000000000000000
R03 = d000000007b10000 R19 = d000000003c32df0
R04 = d000000007b40338 R20 = c00000000072b488
R05 = 000000000000007f R21 = d000000007b10000
R06 = d000000007b20000 R22 = c00000000098184c
R07 = 0000000000000080 R23 = 0000000000000000
R08 = 0000000000000607 R24 = 00000000000300e0
R09 = 0000000000000007 R25 = 000000000000c020
R10 = c000000000861ee0 R26 = d000000007b10270
R11 = c0000000006755f8 R27 = c0000007fe0e0000
R12 = d000000007b10270 R28 = 0000000000002003
R13 = c00000000fff0000 R29 = c0000007f83bf690
R14 = d000000003c32d61 R30 = 0000000000000003
R15 = 0000000000000000 R31 = d000000007ae0000
pc = c000000000667b6c .flush_icache_range+0x3c/0x84
lr = c000000000082354 .bpf_int_jit_compile+0x1fc/0x2c8
msr = 900000000200b032 cr = 44000248
ctr = 0000000000000407 xer = 0000000020000000 trap = 300
dar = d000000007b20000 dsisr = 40000000
0:mon> S
msr = 9000000000001032 sprg0= 0000000000008001
pvr = 0000000000703000 sprg1= c00000000fff0000
dec = 000000009f2d8ba4 sprg2= c00000000fff0000
sp = c0000007f83bed30 sprg3= 0000000000000000
toc = c00000000094ce00 dar = d000000007b20000
0:mon> u
SLB contents of cpu 0x0
00 c000000008000000 0000af32f5079500 256M ESID=c00000000 VSID= af32f5079 LLP:100
01 d000000008000000 0000836935091510 256M ESID=d00000000 VSID= 836935091 LLP:110
02 c0000007f8000000 0000b52186c20500 256M ESID=c0000007f VSID= b52186c20 LLP:100
03 c0000003f0000000 0000b224435e0500
04 c0000007f0000000 0000b52186c20500
05 c0000003f0000000 0000b224435e0500
06 c0000007f0000000 0000b52186c20500
07 c0000003f0000000 0000b224435e0500
08 c0000007f0000000 0000b52186c20500
09 c0000003f0000000 0000b224435e0500
10 c0000007f0000000 0000b52186c20500
11 c0000003f0000000 0000b224435e0500
12 c0000007f0000000 0000b52186c20500
13 c0000003f0000000 0000b224435e0500
14 c0000007f0000000 0000b52186c20500
15 c0000003f0000000 0000b224435e0500
16 c0000007f0000000 0000b52186c20500
17 c000000078000000 0000af86a8668500 256M ESID=c00000007 VSID= af86a8668 LLP:100
18 c0000003f0000000 0000b224435e0500
19 c0000007f0000000 0000b52186c20500
20 c0000003f0000000 0000b224435e0500
21 c0000007f0000000 0000b52186c20500
22 c0000003f0000000 0000b224435e0500
23 c0000007f0000000 0000b52186c20500
24 c0000003f0000000 0000b224435e0500
25 c0000007f0000000 0000b52186c20500
26 c0000003f0000000 0000b224435e0500
27 c0000007f0000000 0000b52186c20500
28 c0000003f0000000 0000b224435e0500
29 c0000007f0000000 0000b52186c20500
30 c0000003f0000000 0000b224435e0500
31 c0000007f0000000 0000b52186c20500
32 c0000003f0000000 0000b224435e0500
33 c0000007f0000000 0000b52186c20500
34 c0000003f0000000 0000b224435e0500
35 c0000007f0000000 0000b52186c20500
36 c0000003f0000000 0000b224435e0500
37 c0000007f0000000 0000b52186c20500
38 c0000003f0000000 0000b224435e0500
39 c0000007f0000000 0000b52186c20500
40 c0000003f0000000 0000b224435e0500
41 c0000007f0000000 0000b52186c20500
42 c0000003f0000000 0000b224435e0500
43 c0000007f0000000 0000b52186c20500
44 c0000003f0000000 0000b224435e0500
45 c0000007f0000000 0000b52186c20500
46 c0000003f0000000 0000b224435e0500
47 c0000007f0000000 0000b52186c20500
48 c0000003f0000000 0000b224435e0500
49 d000080088000000 00007e4fa575c510 256M ESID=d00008008 VSID= 7e4fa575c LLP:110
50 c0000007f0000000 0000b52186c20500
51 c0000003f0000000 0000b224435e0500
52 c0000007f0000000 0000b52186c20500
53 c0000003f0000000 0000b224435e0500
54 c0000007f0000000 0000b52186c20500
55 c0000003f0000000 0000b224435e0500
56 c0000007f0000000 0000b52186c20500
57 c0000003f8000000 0000b224435e0500 256M ESID=c0000003f VSID= b224435e0 LLP:100
58 f000000008000000 00002bd5b50c1500 256M ESID=f00000000 VSID= 2bd5b50c1 LLP:100
59 c0000007f0000000 0000b52186c20500
60 c0000003f0000000 0000b224435e0500
61 c0000007f0000000 0000b52186c20500
62 c0000003f0000000 0000b224435e0500
63 c0000007f0000000 0000b52186c20500
0:mon>
cheers
[toc] | [prev] | [next] | [standalone]
| From | "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-06-22 14:40 +0200 |
| Subject | Re: [PATCH 6/6] ppc: ebpf/jit: Implement JIT compiler for extended BPF |
| Message-ID | <rMPBM-3lU-37@gated-at.bofh.it> |
| In reply to | #1428668 |
On 2016/06/22 08:37PM, Michael Ellerman wrote: > On Tue, 2016-06-07 at 19:02 +0530, Naveen N. Rao wrote: > > > PPC64 eBPF JIT compiler. > > > > Enable with: > > echo 1 > /proc/sys/net/core/bpf_jit_enable > > or > > echo 2 > /proc/sys/net/core/bpf_jit_enable > > > > ... to see the generated JIT code. This can further be processed with > > tools/net/bpf_jit_disasm. > > > > With CONFIG_TEST_BPF=m and 'modprobe test_bpf': > > test_bpf: Summary: 305 PASSED, 0 FAILED, [297/297 JIT'ed] > > > > ... on both ppc64 BE and LE. > > > > The details of the approach are documented through various comments in > > the code. > > This is crashing for me on a Cell machine, not sure why at a glance: > > > test_bpf: #250 JMP_JSET_X: if (0x3 & 0xffffffff) return 1 jited:1 14 PASS > test_bpf: #251 JMP_JA: Jump, gap, jump, ... jited:1 15 PASS > test_bpf: #252 BPF_MAXINSNS: Maximum possible literals > Unable to handle kernel paging request for data at address 0xd000000007b20000 > Faulting instruction address: 0xc000000000667b6c > cpu 0x0: Vector: 300 (Data Access) at [c0000007f83bf3a0] > pc: c000000000667b6c: .flush_icache_range+0x3c/0x84 > lr: c000000000082354: .bpf_int_jit_compile+0x1fc/0x2c8 > sp: c0000007f83bf620 > msr: 900000000200b032 > dar: d000000007b20000 > dsisr: 40000000 > current = 0xc0000007f8249580 > paca = 0xc00000000fff0000 softe: 0 irq_happened: 0x01 > pid = 1822, comm = insmod > Linux version 4.7.0-rc3-00061-g007c99b9d8c1 (michael@ka3.ozlabs.ibm.com) (gcc version 6.1.0 (GCC) ) #3 SMP Wed Jun 22 19:22:23 AEST 2016 > enter ? for help > [link register ] c000000000082354 .bpf_int_jit_compile+0x1fc/0x2c8 > [c0000007f83bf620] c0000000000822fc .bpf_int_jit_compile+0x1a4/0x2c8 (unreliable) > [c0000007f83bf700] c00000000013cda4 .bpf_prog_select_runtime+0x24/0x108 > [c0000007f83bf780] c000000000548918 .bpf_prepare_filter+0x9b0/0x9e8 > [c0000007f83bf830] c0000000005489d4 .bpf_prog_create+0x84/0xd0 > [c0000007f83bf8c0] d000000003b21158 .test_bpf_init+0x28c/0x83c [test_bpf] > [c0000007f83bfa00] c00000000000a7b4 .do_one_initcall+0x5c/0x1c0 > [c0000007f83bfae0] c000000000669058 .do_init_module+0x80/0x21c > [c0000007f83bfb80] c00000000011e3a0 .load_module+0x2028/0x23a8 > [c0000007f83bfd20] c00000000011e898 .SyS_init_module+0x178/0x1b0 > [c0000007f83bfe30] c000000000009220 system_call+0x38/0x110 > --- Exception: c01 (System Call) at 000000000ff5e0c4 > SP (ffde0960) is in userspace > 0:mon> r > R00 = 000000000000c01c R16 = 0000000000000000 > R01 = c0000007f83bf620 R17 = 00000000024000c0 > R02 = c00000000094ce00 R18 = 0000000000000000 > R03 = d000000007b10000 R19 = d000000003c32df0 > R04 = d000000007b40338 R20 = c00000000072b488 Wow. I can't actually understand why this did not trigger for me. We are sending incorrect values into flush_icache_range(). So the first page is being flushed properly, but we are faulting trying to access another page. Patch forthcoming. Thanks, Naveen
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web