powerpc allows using up to 8 registers to pass arguments between function
calls. This value is hardcoded in multiple places, use a define for this
value.

Signed-off-by: Alexis Lothoré (eBPF Foundation) <alexis.loth...@bootlin.com>
---
 arch/powerpc/net/bpf_jit_comp.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
index 
c0684733e9d6ac79b4cf653bf1b9ad40eb3e1aca..d313920a42c2310c6b5deab6d82e13af49c8ecb1
 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -22,6 +22,8 @@
 
 #include "bpf_jit.h"
 
+#define MAX_REGS_FOR_ARGS      8
+
 /* These offsets are from bpf prog end and stay the same across progs */
 static int bpf_jit_ool_stub, bpf_jit_long_branch_stub;
 
@@ -613,7 +615,7 @@ static void bpf_trampoline_save_args(u32 *image, struct 
codegen_context *ctx, in
        param_save_area_offset += STACK_FRAME_MIN_SIZE; /* param save area is 
past frame header */
 
        for (int i = 0; i < nr_regs; i++) {
-               if (i < 8) {
+               if (i < MAX_REGS_FOR_ARGS) {
                        EMIT(PPC_RAW_STL(_R3 + i, _R1, regs_off + i * SZL));
                } else {
                        EMIT(PPC_RAW_LL(_R3, _R1, param_save_area_offset + i * 
SZL));
@@ -626,7 +628,7 @@ static void bpf_trampoline_save_args(u32 *image, struct 
codegen_context *ctx, in
 static void bpf_trampoline_restore_args_regs(u32 *image, struct 
codegen_context *ctx,
                                             int nr_regs, int regs_off)
 {
-       for (int i = 0; i < nr_regs && i < 8; i++)
+       for (int i = 0; i < nr_regs && i < MAX_REGS_FOR_ARGS; i++)
                EMIT(PPC_RAW_LL(_R3 + i, _R1, regs_off + i * SZL));
 }
 
@@ -725,7 +727,9 @@ static int __arch_prepare_bpf_trampoline(struct 
bpf_tramp_image *im, void *rw_im
         *
         * Reserve space for at least 8 registers for now. This can be 
optimized later.
         */
-       bpf_frame_size += (nr_regs > 8 ? nr_regs : 8) * SZL;
+       bpf_frame_size +=
+               (nr_regs > MAX_REGS_FOR_ARGS ? nr_regs : MAX_REGS_FOR_ARGS) *
+               SZL;
 
        /* Room for struct bpf_tramp_run_ctx */
        run_ctx_off = bpf_frame_size;

-- 
2.49.0


Reply via email to