OSDN Git Service

powerpc/bpf: Change register numbering for bpf_set/is_seen_register()
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Mon, 22 Mar 2021 16:37:47 +0000 (16:37 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sat, 3 Apr 2021 10:22:20 +0000 (21:22 +1100)
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
arch/powerpc/net/bpf_jit_comp64.c

index aaf1a88..51b3f44 100644 (file)
@@ -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) {
                /*