On Thu, Apr 24, 2014 at 03:50:13PM +0100, Markos Chandras wrote: > diff --git a/arch/mips/net/bpf_jit.c b/arch/mips/net/bpf_jit.c > new file mode 100644 > index 0000000..864e5b7 > --- /dev/null > +++ b/arch/mips/net/bpf_jit.c ... cut ... > + off = offsetof(struct sk_buff, protocol); > + emit_half_load(r_A, r_skb, off, ctx); > +#ifdef CONFIG_CPU_LITTLE_ENDIAN > + /* This needs little endian fixup */ > + if (cpu_has_mips_r1) { Doesn't cpu_has_mips_r1 cover everything >= r1? ie. everything will now take this path, including systems >= r2. Don't you want the inverse (!cpu_has_mips_r2) instead? Paul > + /* Get first byte */ > + emit_andi(r_tmp_imm, r_A, 0xff, ctx); > + /* Shift it */ > + emit_sll(r_tmp, r_tmp_imm, 8, ctx); > + /* Get second byte */ > + emit_srl(r_tmp_imm, r_A, 8, ctx); > + emit_andi(r_tmp_imm, r_tmp_imm, 0xff, ctx); > + /* Put everyting together in r_A */ > + emit_or(r_A, r_tmp, r_tmp_imm, ctx); > + } else { > + /* R2 and later have the wsbh instruction */ > + emit_wsbh(r_A, r_A, ctx); > + }
Attachment:
signature.asc
Description: Digital signature