powerpc/bpf: Move common helpers into bpf_jit.h
Move functions bpf_flush_icache(), bpf_is_seen_register() and bpf_set_seen_register() in order to reuse them in future bpf_jit_comp32.c Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/28e8d5a75e64807d7e9d39a4b52658755e259f8c.1616430991.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
ed573b57e7
commit
f1b1583d5f
@ -108,6 +108,41 @@ static inline bool is_nearbranch(int offset)
|
||||
#define COND_LT (CR0_LT | COND_CMP_TRUE)
|
||||
#define COND_LE (CR0_GT | COND_CMP_FALSE)
|
||||
|
||||
#define SEEN_FUNC 0x1000 /* might call external helpers */
|
||||
#define SEEN_STACK 0x2000 /* uses BPF stack */
|
||||
#define SEEN_TAILCALL 0x4000 /* uses tail calls */
|
||||
|
||||
struct codegen_context {
|
||||
/*
|
||||
* This is used to track register usage as well
|
||||
* as calls to external helpers.
|
||||
* - register usage is tracked with corresponding
|
||||
* bits (r3-r10 and r27-r31)
|
||||
* - rest of the bits can be used to track other
|
||||
* things -- for now, we use bits 16 to 23
|
||||
* encoded in SEEN_* macros above
|
||||
*/
|
||||
unsigned int seen;
|
||||
unsigned int idx;
|
||||
unsigned int stack_size;
|
||||
};
|
||||
|
||||
static inline void bpf_flush_icache(void *start, void *end)
|
||||
{
|
||||
smp_wmb(); /* smp write barrier */
|
||||
flush_icache_range((unsigned long)start, (unsigned long)end);
|
||||
}
|
||||
|
||||
static inline bool bpf_is_seen_register(struct codegen_context *ctx, int i)
|
||||
{
|
||||
return ctx->seen & (1 << (31 - i));
|
||||
}
|
||||
|
||||
static inline void bpf_set_seen_register(struct codegen_context *ctx, int i)
|
||||
{
|
||||
ctx->seen |= 1 << (31 - i);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -86,25 +86,6 @@ static const int b2p[] = {
|
||||
} while(0)
|
||||
#define PPC_BPF_STLU(r, base, i) do { EMIT(PPC_RAW_STDU(r, base, i)); } while(0)
|
||||
|
||||
#define SEEN_FUNC 0x1000 /* might call external helpers */
|
||||
#define SEEN_STACK 0x2000 /* uses BPF stack */
|
||||
#define SEEN_TAILCALL 0x4000 /* uses tail calls */
|
||||
|
||||
struct codegen_context {
|
||||
/*
|
||||
* This is used to track register usage as well
|
||||
* as calls to external helpers.
|
||||
* - register usage is tracked with corresponding
|
||||
* bits (r3-r10 and r27-r31)
|
||||
* - rest of the bits can be used to track other
|
||||
* things -- for now, we use bits 16 to 23
|
||||
* encoded in SEEN_* macros above
|
||||
*/
|
||||
unsigned int seen;
|
||||
unsigned int idx;
|
||||
unsigned int stack_size;
|
||||
};
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#endif
|
||||
|
@ -23,22 +23,6 @@ static void bpf_jit_fill_ill_insns(void *area, unsigned int size)
|
||||
memset32(area, BREAKPOINT_INSTRUCTION, size/4);
|
||||
}
|
||||
|
||||
static inline void bpf_flush_icache(void *start, void *end)
|
||||
{
|
||||
smp_wmb();
|
||||
flush_icache_range((unsigned long)start, (unsigned long)end);
|
||||
}
|
||||
|
||||
static inline bool bpf_is_seen_register(struct codegen_context *ctx, int i)
|
||||
{
|
||||
return ctx->seen & (1 << (31 - i));
|
||||
}
|
||||
|
||||
static inline void bpf_set_seen_register(struct codegen_context *ctx, int i)
|
||||
{
|
||||
ctx->seen |= 1 << (31 - i);
|
||||
}
|
||||
|
||||
static inline bool bpf_has_stack_frame(struct codegen_context *ctx)
|
||||
{
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user