Loading arch/powerpc/net/bpf_jit.h +17 −0 Original line number Original line Diff line number Diff line Loading @@ -154,6 +154,23 @@ DECLARE_LOAD_FUNC(sk_load_byte_msh); #define PPC_LL_OFFS(r, base, i) do { PPC_LWZ_OFFS(r, base, i); } while(0) #define PPC_LL_OFFS(r, base, i) do { PPC_LWZ_OFFS(r, base, i); } while(0) #endif #endif #ifdef CONFIG_SMP #ifdef CONFIG_PPC64 #define PPC_BPF_LOAD_CPU(r) \ do { BUILD_BUG_ON(FIELD_SIZEOF(struct paca_struct, paca_index) != 2); \ PPC_LHZ_OFFS(r, 13, offsetof(struct paca_struct, paca_index)); \ } while (0) #else #define PPC_BPF_LOAD_CPU(r) \ do { BUILD_BUG_ON(FIELD_SIZEOF(struct thread_info, cpu) != 4); \ PPC_LHZ_OFFS(r, (1 & ~(THREAD_SIZE - 1)), \ offsetof(struct thread_info, cpu)); \ } while(0) #endif #else #define PPC_BPF_LOAD_CPU(r) do { PPC_LI(r, 0); } while(0) #endif #define PPC_CMPWI(a, i) EMIT(PPC_INST_CMPWI | ___PPC_RA(a) | IMM_L(i)) #define PPC_CMPWI(a, i) EMIT(PPC_INST_CMPWI | ___PPC_RA(a) | IMM_L(i)) #define PPC_CMPDI(a, i) EMIT(PPC_INST_CMPDI | ___PPC_RA(a) | IMM_L(i)) #define PPC_CMPDI(a, i) EMIT(PPC_INST_CMPDI | ___PPC_RA(a) | IMM_L(i)) #define PPC_CMPLWI(a, i) EMIT(PPC_INST_CMPLWI | ___PPC_RA(a) | IMM_L(i)) #define PPC_CMPLWI(a, i) EMIT(PPC_INST_CMPLWI | ___PPC_RA(a) | IMM_L(i)) Loading arch/powerpc/net/bpf_jit_comp.c +1 −13 Original line number Original line Diff line number Diff line Loading @@ -411,20 +411,8 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, PPC_SRWI(r_A, r_A, 5); PPC_SRWI(r_A, r_A, 5); break; break; case BPF_ANC | SKF_AD_CPU: case BPF_ANC | SKF_AD_CPU: #ifdef CONFIG_SMP PPC_BPF_LOAD_CPU(r_A); /* * PACA ptr is r13: * raw_smp_processor_id() = local_paca->paca_index */ BUILD_BUG_ON(FIELD_SIZEOF(struct paca_struct, paca_index) != 2); PPC_LHZ_OFFS(r_A, 13, offsetof(struct paca_struct, paca_index)); #else PPC_LI(r_A, 0); #endif break; break; /*** Absolute loads from packet header/data ***/ /*** Absolute loads from packet header/data ***/ case BPF_LD | BPF_W | BPF_ABS: case BPF_LD | BPF_W | BPF_ABS: func = CHOOSE_LOAD_FUNC(K, sk_load_word); func = CHOOSE_LOAD_FUNC(K, sk_load_word); Loading Loading
arch/powerpc/net/bpf_jit.h +17 −0 Original line number Original line Diff line number Diff line Loading @@ -154,6 +154,23 @@ DECLARE_LOAD_FUNC(sk_load_byte_msh); #define PPC_LL_OFFS(r, base, i) do { PPC_LWZ_OFFS(r, base, i); } while(0) #define PPC_LL_OFFS(r, base, i) do { PPC_LWZ_OFFS(r, base, i); } while(0) #endif #endif #ifdef CONFIG_SMP #ifdef CONFIG_PPC64 #define PPC_BPF_LOAD_CPU(r) \ do { BUILD_BUG_ON(FIELD_SIZEOF(struct paca_struct, paca_index) != 2); \ PPC_LHZ_OFFS(r, 13, offsetof(struct paca_struct, paca_index)); \ } while (0) #else #define PPC_BPF_LOAD_CPU(r) \ do { BUILD_BUG_ON(FIELD_SIZEOF(struct thread_info, cpu) != 4); \ PPC_LHZ_OFFS(r, (1 & ~(THREAD_SIZE - 1)), \ offsetof(struct thread_info, cpu)); \ } while(0) #endif #else #define PPC_BPF_LOAD_CPU(r) do { PPC_LI(r, 0); } while(0) #endif #define PPC_CMPWI(a, i) EMIT(PPC_INST_CMPWI | ___PPC_RA(a) | IMM_L(i)) #define PPC_CMPWI(a, i) EMIT(PPC_INST_CMPWI | ___PPC_RA(a) | IMM_L(i)) #define PPC_CMPDI(a, i) EMIT(PPC_INST_CMPDI | ___PPC_RA(a) | IMM_L(i)) #define PPC_CMPDI(a, i) EMIT(PPC_INST_CMPDI | ___PPC_RA(a) | IMM_L(i)) #define PPC_CMPLWI(a, i) EMIT(PPC_INST_CMPLWI | ___PPC_RA(a) | IMM_L(i)) #define PPC_CMPLWI(a, i) EMIT(PPC_INST_CMPLWI | ___PPC_RA(a) | IMM_L(i)) Loading
arch/powerpc/net/bpf_jit_comp.c +1 −13 Original line number Original line Diff line number Diff line Loading @@ -411,20 +411,8 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, PPC_SRWI(r_A, r_A, 5); PPC_SRWI(r_A, r_A, 5); break; break; case BPF_ANC | SKF_AD_CPU: case BPF_ANC | SKF_AD_CPU: #ifdef CONFIG_SMP PPC_BPF_LOAD_CPU(r_A); /* * PACA ptr is r13: * raw_smp_processor_id() = local_paca->paca_index */ BUILD_BUG_ON(FIELD_SIZEOF(struct paca_struct, paca_index) != 2); PPC_LHZ_OFFS(r_A, 13, offsetof(struct paca_struct, paca_index)); #else PPC_LI(r_A, 0); #endif break; break; /*** Absolute loads from packet header/data ***/ /*** Absolute loads from packet header/data ***/ case BPF_LD | BPF_W | BPF_ABS: case BPF_LD | BPF_W | BPF_ABS: func = CHOOSE_LOAD_FUNC(K, sk_load_word); func = CHOOSE_LOAD_FUNC(K, sk_load_word); Loading