[PATCH net-next] PPC: bpf_jit_comp: add SKF_AD_HATYPE instruction

Subsystems: bpf jit for powerpc (32-bit and 64-bit), bpf [general] (safe dynamic programs and tools), linux for powerpc (32-bit and 64-bit), the rest

STALE4362d

3 messages, 3 authors, 2014-11-08 · open the first message on its own page

[PATCH net-next] PPC: bpf_jit_comp: add SKF_AD_HATYPE instruction

From: Denis Kirjanov <hidden>
Date: 2014-11-06 06:30:24

Add BPF extension SKF_AD_HATYPE to ppc JIT to check
the hw type of the interface

JIT off:
[   69.106783] test_bpf: #20 LD_HATYPE 48 48 PASS
JIT on:
[   64.721757] test_bpf: #20 LD_HATYPE 7 6 PASS

CC: Alexei Starovoitov<redacted>
CC: Daniel Borkmann<redacted>
CC: Philippe Bergheaud<redacted>
Signed-off-by: Denis Kirjanov <redacted>
---
 arch/powerpc/net/bpf_jit_comp.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
index d110e28..8bf4fc2 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -412,6 +412,22 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
 			PPC_ANDI(r_A, r_A, PKT_TYPE_MAX);
 			PPC_SRWI(r_A, r_A, 5);
 			break;
+		case BPF_ANC | SKF_AD_HATYPE:
+			BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, type) != 2);
+			PPC_LD_OFFS(r_scratch1, r_skb, offsetof(struct sk_buff,
+								dev));
+			PPC_CMPDI(r_scratch1, 0);
+			if (ctx->pc_ret0 != -1) {
+				PPC_BCC(COND_EQ, addrs[ctx->pc_ret0]);
+			} else {
+				/* Exit, returning 0; first pass hits here. */
+				PPC_BCC_SHORT(COND_NE, (ctx->idx*4)+12);
+				PPC_LI(r_ret, 0);
+				PPC_JMP(exit_addr);
+			}
+			PPC_LHZ_OFFS(r_A, r_scratch1,
+				     offsetof(struct net_device, type));
+			break;
 		case BPF_ANC | SKF_AD_CPU:
 #ifdef CONFIG_SMP
 			/*
-- 
2.1.0

Re: [PATCH net-next] PPC: bpf_jit_comp: add SKF_AD_HATYPE instruction

From: David Miller <davem@davemloft.net>
Date: 2014-11-07 19:50:33

From: Denis Kirjanov <redacted>
Date: Thu,  6 Nov 2014 09:02:35 +0300
Add BPF extension SKF_AD_HATYPE to ppc JIT to check
the hw type of the interface

JIT off:
[   69.106783] test_bpf: #20 LD_HATYPE 48 48 PASS
JIT on:
[   64.721757] test_bpf: #20 LD_HATYPE 7 6 PASS

CC: Alexei Starovoitov<redacted>
CC: Daniel Borkmann<redacted>
CC: Philippe Bergheaud<redacted>
Signed-off-by: Denis Kirjanov <redacted>
Can I get some reviews please?

Thanks.

Re: [PATCH net-next] PPC: bpf_jit_comp: add SKF_AD_HATYPE instruction

From: Alexei Starovoitov <hidden>
Date: 2014-11-08 17:59:59

On Wed, Nov 5, 2014 at 10:02 PM, Denis Kirjanov [off-list ref] wrote:
quoted hunk
Add BPF extension SKF_AD_HATYPE to ppc JIT to check
the hw type of the interface

JIT off:
[   69.106783] test_bpf: #20 LD_HATYPE 48 48 PASS
JIT on:
[   64.721757] test_bpf: #20 LD_HATYPE 7 6 PASS

CC: Alexei Starovoitov<redacted>
CC: Daniel Borkmann<redacted>
CC: Philippe Bergheaud<redacted>
Signed-off-by: Denis Kirjanov <redacted>
---
 arch/powerpc/net/bpf_jit_comp.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
index d110e28..8bf4fc2 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -412,6 +412,22 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
                        PPC_ANDI(r_A, r_A, PKT_TYPE_MAX);
                        PPC_SRWI(r_A, r_A, 5);
                        break;
+               case BPF_ANC | SKF_AD_HATYPE:
+                       BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, type) != 2);
+                       PPC_LD_OFFS(r_scratch1, r_skb, offsetof(struct sk_buff,
+                                                               dev));
+                       PPC_CMPDI(r_scratch1, 0);
+                       if (ctx->pc_ret0 != -1) {
+                               PPC_BCC(COND_EQ, addrs[ctx->pc_ret0]);
+                       } else {
+                               /* Exit, returning 0; first pass hits here. */
+                               PPC_BCC_SHORT(COND_NE, (ctx->idx*4)+12);
please use canonical formatting ctx->idx * 4 + 12
quoted hunk
+                               PPC_LI(r_ret, 0);
+                               PPC_JMP(exit_addr);
+                       }
+                       PPC_LHZ_OFFS(r_A, r_scratch1,
+                                    offsetof(struct net_device, type));
the whole thing looks like copy paste from 'case ifindex'.
Would be nice to handle them together to reduce
duplicated code, sine only last load is different.

Also in commit log please do _both_ runs with JIT on.
You should see a difference before/after applying this patch.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help