mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 07:04:10 +08:00
powerpc/bpf: Change register numbering for bpf_set/is_seen_register()
Instead of using BPF register number as input in functions bpf_set_seen_register() and bpf_is_seen_register(), use CPU register number directly. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/0cd2506f598e7095ea43e62dca1f472de5474a0d.1616430991.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
6944caad78
commit
ed573b57e7
@ -31,12 +31,12 @@ static inline void bpf_flush_icache(void *start, void *end)
|
||||
|
||||
static inline bool bpf_is_seen_register(struct codegen_context *ctx, int i)
|
||||
{
|
||||
return (ctx->seen & (1 << (31 - b2p[i])));
|
||||
return ctx->seen & (1 << (31 - i));
|
||||
}
|
||||
|
||||
static inline void bpf_set_seen_register(struct codegen_context *ctx, int i)
|
||||
{
|
||||
ctx->seen |= (1 << (31 - b2p[i]));
|
||||
ctx->seen |= 1 << (31 - i);
|
||||
}
|
||||
|
||||
static inline bool bpf_has_stack_frame(struct codegen_context *ctx)
|
||||
@ -47,7 +47,7 @@ static inline bool bpf_has_stack_frame(struct codegen_context *ctx)
|
||||
* - the bpf program uses its stack area
|
||||
* The latter condition is deduced from the usage of BPF_REG_FP
|
||||
*/
|
||||
return ctx->seen & SEEN_FUNC || bpf_is_seen_register(ctx, BPF_REG_FP);
|
||||
return ctx->seen & SEEN_FUNC || bpf_is_seen_register(ctx, b2p[BPF_REG_FP]);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -124,11 +124,11 @@ static void bpf_jit_build_prologue(u32 *image, struct codegen_context *ctx)
|
||||
* in the protected zone below the previous stack frame
|
||||
*/
|
||||
for (i = BPF_REG_6; i <= BPF_REG_10; i++)
|
||||
if (bpf_is_seen_register(ctx, i))
|
||||
if (bpf_is_seen_register(ctx, b2p[i]))
|
||||
PPC_BPF_STL(b2p[i], 1, bpf_jit_stack_offsetof(ctx, b2p[i]));
|
||||
|
||||
/* Setup frame pointer to point to the bpf stack area */
|
||||
if (bpf_is_seen_register(ctx, BPF_REG_FP))
|
||||
if (bpf_is_seen_register(ctx, b2p[BPF_REG_FP]))
|
||||
EMIT(PPC_RAW_ADDI(b2p[BPF_REG_FP], 1,
|
||||
STACK_FRAME_MIN_SIZE + ctx->stack_size));
|
||||
}
|
||||
@ -139,7 +139,7 @@ static void bpf_jit_emit_common_epilogue(u32 *image, struct codegen_context *ctx
|
||||
|
||||
/* Restore NVRs */
|
||||
for (i = BPF_REG_6; i <= BPF_REG_10; i++)
|
||||
if (bpf_is_seen_register(ctx, i))
|
||||
if (bpf_is_seen_register(ctx, b2p[i]))
|
||||
PPC_BPF_LL(b2p[i], 1, bpf_jit_stack_offsetof(ctx, b2p[i]));
|
||||
|
||||
/* Tear down our stack frame */
|
||||
@ -330,9 +330,9 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
|
||||
* any issues.
|
||||
*/
|
||||
if (dst_reg >= BPF_PPC_NVR_MIN && dst_reg < 32)
|
||||
bpf_set_seen_register(ctx, insn[i].dst_reg);
|
||||
bpf_set_seen_register(ctx, dst_reg);
|
||||
if (src_reg >= BPF_PPC_NVR_MIN && src_reg < 32)
|
||||
bpf_set_seen_register(ctx, insn[i].src_reg);
|
||||
bpf_set_seen_register(ctx, src_reg);
|
||||
|
||||
switch (code) {
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user