forked from luck/tmp_suning_uos_patched
s390: bpf: fix JMP32 code-gen
Commit626a5f66da
("s390: bpf: implement jitting of JMP32") added JMP32 code-gen support for s390. However it triggers the warning below due to some unusual gotos in the original s390 bpf jit code. Add a couple of additional "is_jmp32" initializations to fix this. Also fix the wrong opcode for the "llilf" instruction that was introduced with the same commit. arch/s390/net/bpf_jit_comp.c: In function 'bpf_jit_insn': arch/s390/net/bpf_jit_comp.c:248:55: warning: 'is_jmp32' may be used uninitialized in this function [-Wmaybe-uninitialized] _EMIT6(op1 | reg(b1, b2) << 16 | (rel & 0xffff), op2 | mask); \ ^ arch/s390/net/bpf_jit_comp.c:1211:8: note: 'is_jmp32' was declared here bool is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32; Fixes:626a5f66da
("s390: bpf: implement jitting of JMP32") Cc: Jiong Wang <jiong.wang@netronome.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Acked-by: Jiong Wang <jiong.wang@netronome.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
9fa3b47304
commit
ecc15f113c
|
@ -1154,7 +1154,7 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i
|
|||
mask = 0x7000; /* jnz */
|
||||
if (BPF_CLASS(insn->code) == BPF_JMP32) {
|
||||
/* llilf %w1,imm (load zero extend imm) */
|
||||
EMIT6_IMM(0xc0010000, REG_W1, imm);
|
||||
EMIT6_IMM(0xc00f0000, REG_W1, imm);
|
||||
/* nr %w1,%dst */
|
||||
EMIT2(0x1400, REG_W1, dst_reg);
|
||||
} else {
|
||||
|
@ -1216,6 +1216,7 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i
|
|||
REG_W1, dst_reg, src_reg);
|
||||
goto branch_oc;
|
||||
branch_ks:
|
||||
is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
|
||||
/* lgfi %w1,imm (load sign extend imm) */
|
||||
EMIT6_IMM(0xc0010000, REG_W1, imm);
|
||||
/* crj or cgrj %dst,%w1,mask,off */
|
||||
|
@ -1223,6 +1224,7 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i
|
|||
dst_reg, REG_W1, i, off, mask);
|
||||
break;
|
||||
branch_ku:
|
||||
is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
|
||||
/* lgfi %w1,imm (load sign extend imm) */
|
||||
EMIT6_IMM(0xc0010000, REG_W1, imm);
|
||||
/* clrj or clgrj %dst,%w1,mask,off */
|
||||
|
@ -1230,11 +1232,13 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i
|
|||
dst_reg, REG_W1, i, off, mask);
|
||||
break;
|
||||
branch_xs:
|
||||
is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
|
||||
/* crj or cgrj %dst,%src,mask,off */
|
||||
EMIT6_PCREL(0xec000000, (is_jmp32 ? 0x0076 : 0x0064),
|
||||
dst_reg, src_reg, i, off, mask);
|
||||
break;
|
||||
branch_xu:
|
||||
is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
|
||||
/* clrj or clgrj %dst,%src,mask,off */
|
||||
EMIT6_PCREL(0xec000000, (is_jmp32 ? 0x0077 : 0x0065),
|
||||
dst_reg, src_reg, i, off, mask);
|
||||
|
|
Loading…
Reference in New Issue
Block a user