diff options
author | Denis Kirjanov <kda@linux-powerpc.org> | 2015-02-17 02:04:42 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-02-20 15:19:43 -0500 |
commit | 022909482d1c97c0b70438f2727a4f286ef0d289 (patch) | |
tree | eac6551ab43c924925e02057c4f9b413a88d214a /arch | |
parent | 2ddadeab07dcc9b1456891b6fe1f1ba085028433 (diff) |
ppc: bpf: Add SKF_AD_CPU for ppc32
Signed-off-by: Denis Kirjanov <kda@linux-powerpc.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/net/bpf_jit.h | 17 | ||||
-rw-r--r-- | arch/powerpc/net/bpf_jit_comp.c | 14 |
2 files changed, 18 insertions, 13 deletions
diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h index 2d5e71577210..889fd199a821 100644 --- a/arch/powerpc/net/bpf_jit.h +++ b/arch/powerpc/net/bpf_jit.h | |||
@@ -154,6 +154,23 @@ DECLARE_LOAD_FUNC(sk_load_byte_msh); | |||
154 | #define PPC_LL_OFFS(r, base, i) do { PPC_LWZ_OFFS(r, base, i); } while(0) | 154 | #define PPC_LL_OFFS(r, base, i) do { PPC_LWZ_OFFS(r, base, i); } while(0) |
155 | #endif | 155 | #endif |
156 | 156 | ||
157 | #ifdef CONFIG_SMP | ||
158 | #ifdef CONFIG_PPC64 | ||
159 | #define PPC_BPF_LOAD_CPU(r) \ | ||
160 | do { BUILD_BUG_ON(FIELD_SIZEOF(struct paca_struct, paca_index) != 2); \ | ||
161 | PPC_LHZ_OFFS(r, 13, offsetof(struct paca_struct, paca_index)); \ | ||
162 | } while (0) | ||
163 | #else | ||
164 | #define PPC_BPF_LOAD_CPU(r) \ | ||
165 | do { BUILD_BUG_ON(FIELD_SIZEOF(struct thread_info, cpu) != 4); \ | ||
166 | PPC_LHZ_OFFS(r, (1 & ~(THREAD_SIZE - 1)), \ | ||
167 | offsetof(struct thread_info, cpu)); \ | ||
168 | } while(0) | ||
169 | #endif | ||
170 | #else | ||
171 | #define PPC_BPF_LOAD_CPU(r) do { PPC_LI(r, 0); } while(0) | ||
172 | #endif | ||
173 | |||
157 | #define PPC_CMPWI(a, i) EMIT(PPC_INST_CMPWI | ___PPC_RA(a) | IMM_L(i)) | 174 | #define PPC_CMPWI(a, i) EMIT(PPC_INST_CMPWI | ___PPC_RA(a) | IMM_L(i)) |
158 | #define PPC_CMPDI(a, i) EMIT(PPC_INST_CMPDI | ___PPC_RA(a) | IMM_L(i)) | 175 | #define PPC_CMPDI(a, i) EMIT(PPC_INST_CMPDI | ___PPC_RA(a) | IMM_L(i)) |
159 | #define PPC_CMPLWI(a, i) EMIT(PPC_INST_CMPLWI | ___PPC_RA(a) | IMM_L(i)) | 176 | #define PPC_CMPLWI(a, i) EMIT(PPC_INST_CMPLWI | ___PPC_RA(a) | IMM_L(i)) |
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c index 8b2926850125..17cea18a09d3 100644 --- a/arch/powerpc/net/bpf_jit_comp.c +++ b/arch/powerpc/net/bpf_jit_comp.c | |||
@@ -411,20 +411,8 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, | |||
411 | PPC_SRWI(r_A, r_A, 5); | 411 | PPC_SRWI(r_A, r_A, 5); |
412 | break; | 412 | break; |
413 | case BPF_ANC | SKF_AD_CPU: | 413 | case BPF_ANC | SKF_AD_CPU: |
414 | #ifdef CONFIG_SMP | 414 | PPC_BPF_LOAD_CPU(r_A); |
415 | /* | ||
416 | * PACA ptr is r13: | ||
417 | * raw_smp_processor_id() = local_paca->paca_index | ||
418 | */ | ||
419 | BUILD_BUG_ON(FIELD_SIZEOF(struct paca_struct, | ||
420 | paca_index) != 2); | ||
421 | PPC_LHZ_OFFS(r_A, 13, | ||
422 | offsetof(struct paca_struct, paca_index)); | ||
423 | #else | ||
424 | PPC_LI(r_A, 0); | ||
425 | #endif | ||
426 | break; | 415 | break; |
427 | |||
428 | /*** Absolute loads from packet header/data ***/ | 416 | /*** Absolute loads from packet header/data ***/ |
429 | case BPF_LD | BPF_W | BPF_ABS: | 417 | case BPF_LD | BPF_W | BPF_ABS: |
430 | func = CHOOSE_LOAD_FUNC(K, sk_load_word); | 418 | func = CHOOSE_LOAD_FUNC(K, sk_load_word); |