Message ID | 1360776645-14726-1-git-send-email-nschichan@freebox.fr (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
From: Nicolas Schichan <nschichan@freebox.fr> Date: Wed, 13 Feb 2013 18:30:39 +0100 > The original code was generating an lsl instructions using the value > of ARM_R8 (skb_headlen, possibly uninitialized if no skb_headlen > access was required) as a shift amount. > > Signed-off-by: Nicolas Schichan <nschichan@freebox.fr> ARM folks do you want to pick this up or would you like me to apply it to the 'net' tree?
Am 13.02.2013 18:30, schrieb Nicolas Schichan: > The original code was generating an lsl instructions using the value > of ARM_R8 (skb_headlen, possibly uninitialized if no skb_headlen > access was required) as a shift amount. > > Signed-off-by: Nicolas Schichan <nschichan@freebox.fr> > --- > Resent due to missing Signed-off-by > > arch/arm/net/bpf_jit_32.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c > index a34f1e2..6828ef6 100644 > --- a/arch/arm/net/bpf_jit_32.c > +++ b/arch/arm/net/bpf_jit_32.c > @@ -341,10 +341,17 @@ static void emit_load_be16(u8 cond, u8 r_res, u8 r_addr, struct jit_ctx *ctx) > > static inline void emit_swap16(u8 r_dst, u8 r_src, struct jit_ctx *ctx) > { > - emit(ARM_LSL_R(ARM_R1, r_src, 8), ctx); > - emit(ARM_ORR_S(r_dst, ARM_R1, r_src, SRTYPE_LSL, 8), ctx); > - emit(ARM_LSL_I(r_dst, r_dst, 8), ctx); > - emit(ARM_LSL_R(r_dst, r_dst, 8), ctx); > + /* r_dst = (r_src << 8) | (r_src >> 8) */ > + emit(ARM_LSL_I(ARM_R1, r_src, 8), ctx); > + emit(ARM_ORR_S(r_dst, ARM_R1, r_src, SRTYPE_LSR, 8), ctx); > + > + /* > + * we need to mask out the bits set in r_dst[23:16] due to > + * the first shift instruction. > + * > + * note that 0x8ff is the encoded immediate 0x00ff0000. > + */ > + emit(ARM_BIC_I(r_dst, r_dst, 0x8ff), ctx); > } > > #else /* ARMv6+ */ Acked-by: Mircea Gherzan <mgherzan@gmail.com>
On 02/13/2013 10:32 PM, Mircea Gherzan wrote:
[...]
> Acked-by: Mircea Gherzan <mgherzan@gmail.com>
Hi,
Thanks Mircea. Russel, David, do you have any preference as to which path this
patch should take (net tree or ARM tree) ?
Regards,
On Thu, Feb 14, 2013 at 02:40:09PM +0100, Nicolas Schichan wrote: > On 02/13/2013 10:32 PM, Mircea Gherzan wrote: > [...] >> Acked-by: Mircea Gherzan <mgherzan@gmail.com> > > Hi, > > Thanks Mircea. Russel, David, do you have any preference as to which path > this patch should take (net tree or ARM tree) ? I'm happy for either - I'm under the weather at the moment, so I'd be greatful if David could pick this one up this time around. Acked-by: Russell King <rmk+kernel@arm.linux.org.uk> Thanks.
From: Russell King - ARM Linux <linux@arm.linux.org.uk> Date: Thu, 14 Feb 2013 15:09:25 +0000 > On Thu, Feb 14, 2013 at 02:40:09PM +0100, Nicolas Schichan wrote: >> On 02/13/2013 10:32 PM, Mircea Gherzan wrote: >> [...] >>> Acked-by: Mircea Gherzan <mgherzan@gmail.com> >> >> Hi, >> >> Thanks Mircea. Russel, David, do you have any preference as to which path >> this patch should take (net tree or ARM tree) ? > > I'm happy for either - I'm under the weather at the moment, so I'd be > greatful if David could pick this one up this time around. > > Acked-by: Russell King <rmk+kernel@arm.linux.org.uk> Applied to 'net', thanks everyone.
diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c index a34f1e2..6828ef6 100644 --- a/arch/arm/net/bpf_jit_32.c +++ b/arch/arm/net/bpf_jit_32.c @@ -341,10 +341,17 @@ static void emit_load_be16(u8 cond, u8 r_res, u8 r_addr, struct jit_ctx *ctx) static inline void emit_swap16(u8 r_dst, u8 r_src, struct jit_ctx *ctx) { - emit(ARM_LSL_R(ARM_R1, r_src, 8), ctx); - emit(ARM_ORR_S(r_dst, ARM_R1, r_src, SRTYPE_LSL, 8), ctx); - emit(ARM_LSL_I(r_dst, r_dst, 8), ctx); - emit(ARM_LSL_R(r_dst, r_dst, 8), ctx); + /* r_dst = (r_src << 8) | (r_src >> 8) */ + emit(ARM_LSL_I(ARM_R1, r_src, 8), ctx); + emit(ARM_ORR_S(r_dst, ARM_R1, r_src, SRTYPE_LSR, 8), ctx); + + /* + * we need to mask out the bits set in r_dst[23:16] due to + * the first shift instruction. + * + * note that 0x8ff is the encoded immediate 0x00ff0000. + */ + emit(ARM_BIC_I(r_dst, r_dst, 0x8ff), ctx); } #else /* ARMv6+ */
The original code was generating an lsl instructions using the value of ARM_R8 (skb_headlen, possibly uninitialized if no skb_headlen access was required) as a shift amount. Signed-off-by: Nicolas Schichan <nschichan@freebox.fr> --- Resent due to missing Signed-off-by arch/arm/net/bpf_jit_32.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)