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>
This commit is contained in:
parent
2ddadeab07
commit
022909482d
|
@ -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))
|
||||||
|
|
|
@ -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…
Reference in New Issue