[linux] 01/01: [mips*el] Fix BPF assembly code for pre-R2 CPUs.

debian-kernel at lists.debian.org debian-kernel at lists.debian.org
Sat Sep 5 17:46:36 UTC 2015


This is an automated email from the git hooks/post-receive script.

aurel32 pushed a commit to branch master
in repository linux.

commit 5c7b00ac36a38fcbd458da241fce91081cbcafcf
Author: Aurelien Jarno <aurelien at aurel32.net>
Date:   Sat Sep 5 19:40:41 2015 +0200

    [mips*el] Fix BPF assembly code for pre-R2 CPUs.
---
 debian/changelog                                   |   4 +
 ...f-avoid-unreachable-code-on-little-endian.patch |  49 +++++++++
 ...pf-fix-build-on-pre-r2-little-endian-cpus.patch | 117 +++++++++++++++++++++
 debian/patches/series                              |   2 +
 4 files changed, 172 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index ce0e1d0..3b41a22 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,11 +1,15 @@
 linux (4.2-1~exp2) UNRELEASED; urgency=medium
 
+  [ Ben Hutchings ]
   * [mips*el/loongson-3] udeb: Add fb-modules containing radeon driver
     (Closes: #776274)
   * [hppa/parisc64-smp,[mips*el/loongson-3] udeb: Add i2c-modules and
     make fb-modules depend on it rather than including I2C modules
     directly
 
+  [ Aurelien Jarno ]
+  * [mips*el] Fix BPF assembly code for pre-R2 CPUs.
+
  -- Ben Hutchings <ben at decadent.org.uk>  Wed, 02 Sep 2015 00:29:36 +0100
 
 linux (4.2-1~exp1) experimental; urgency=medium
diff --git a/debian/patches/bugfix/mips/bpf-avoid-unreachable-code-on-little-endian.patch b/debian/patches/bugfix/mips/bpf-avoid-unreachable-code-on-little-endian.patch
new file mode 100644
index 0000000..288347e
--- /dev/null
+++ b/debian/patches/bugfix/mips/bpf-avoid-unreachable-code-on-little-endian.patch
@@ -0,0 +1,49 @@
+From: Aurelien Jarno <aurelien at aurel32.net>
+Date: Fri, 4 Sep 2015 16:32:17 +0200
+Subject: [1/2] MIPS: BPF: Avoid unreachable code on little endian
+Origin: http://www.linux-mips.org/archives/linux-mips/2015-09/msg00040.html
+
+On little endian, avoid generating the big endian version of the code
+by using #else in addition to #ifdef #endif. Also fix one alignment
+issue wrt delay slot.
+
+Cc: Ralf Baechle <ralf at linux-mips.org>
+Cc: Markos Chandras <markos.chandras at imgtec.com>
+Cc: stable at vger.kernel.org # v4.2+
+Signed-off-by: Aurelien Jarno <aurelien at aurel32.net>
+---
+ arch/mips/net/bpf_jit_asm.S | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/arch/mips/net/bpf_jit_asm.S b/arch/mips/net/bpf_jit_asm.S
+index e927260..4f54cb1 100644
+--- a/arch/mips/net/bpf_jit_asm.S
++++ b/arch/mips/net/bpf_jit_asm.S
+@@ -151,9 +151,10 @@ NESTED(bpf_slow_path_word, (6 * SZREG), $r_sp)
+ 	wsbh	t0, $r_s0
+ 	jr	$r_ra
+ 	 rotr	$r_A, t0, 16
+-#endif
++#else
+ 	jr	$r_ra
+-	move	$r_A, $r_s0
++	 move	$r_A, $r_s0
++#endif
+ 
+ 	END(bpf_slow_path_word)
+ 
+@@ -162,9 +163,10 @@ NESTED(bpf_slow_path_half, (6 * SZREG), $r_sp)
+ #ifdef CONFIG_CPU_LITTLE_ENDIAN
+ 	jr	$r_ra
+ 	 wsbh	$r_A, $r_s0
+-#endif
++#else
+ 	jr	$r_ra
+ 	 move	$r_A, $r_s0
++#endif
+ 
+ 	END(bpf_slow_path_half)
+ 
+-- 
+2.1.4
+
diff --git a/debian/patches/bugfix/mips/bpf-fix-build-on-pre-r2-little-endian-cpus.patch b/debian/patches/bugfix/mips/bpf-fix-build-on-pre-r2-little-endian-cpus.patch
new file mode 100644
index 0000000..1b63e1b
--- /dev/null
+++ b/debian/patches/bugfix/mips/bpf-fix-build-on-pre-r2-little-endian-cpus.patch
@@ -0,0 +1,117 @@
+From: Aurelien Jarno <aurelien at aurel32.net>
+Date: Sat, 5 Sep 2015 17:02:59 +0200
+Subject: [2/2] MIPS: BPF: Fix build on pre-R2 little endian CPUs
+Origin: http://www.linux-mips.org/archives/linux-mips/2015-09/msg00041.html
+
+The rotr, seh and wsbh instructions have been introduced with the R2
+ISA. Thus the current BPF code fails to build on pre-R2 little endian
+CPUs:
+
+    CC      arch/mips/net/bpf_jit.o
+    AS      arch/mips/net/bpf_jit_asm.o
+  /home/aurel32/linux-4.2/arch/mips/net/bpf_jit_asm.S: Assembler messages:
+  /home/aurel32/linux-4.2/arch/mips/net/bpf_jit_asm.S:67: Error: opcode not supported on this processor: mips32 (mips32) `wsbh $8,$19'
+  /home/aurel32/linux-4.2/arch/mips/net/bpf_jit_asm.S:68: Error: opcode not supported on this processor: mips32 (mips32) `rotr $19,$8,16'
+  /home/aurel32/linux-4.2/arch/mips/net/bpf_jit_asm.S:83: Error: opcode not supported on this processor: mips32 (mips32) `wsbh $8,$19'
+  /home/aurel32/linux-4.2/arch/mips/net/bpf_jit_asm.S:84: Error: opcode not supported on this processor: mips32 (mips32) `seh $19,$8'
+  /home/aurel32/linux-4.2/arch/mips/net/bpf_jit_asm.S:151: Error: opcode not supported on this processor: mips32 (mips32) `wsbh $8,$12'
+  /home/aurel32/linux-4.2/arch/mips/net/bpf_jit_asm.S:153: Error: opcode not supported on this processor: mips32 (mips32) `rotr $19,$8,16'
+  /home/aurel32/linux-4.2/arch/mips/net/bpf_jit_asm.S:164: Error: opcode not supported on this processor: mips32 (mips32) `wsbh $19,$12'
+  /home/aurel32/linux-4.2/scripts/Makefile.build:294: recipe for target 'arch/mips/net/bpf_jit_asm.o' failed
+
+Fix that by providing equivalent code for these CPUs.
+
+Cc: Ralf Baechle <ralf at linux-mips.org>
+Cc: Markos Chandras <markos.chandras at imgtec.com>
+Cc: stable at vger.kernel.org # v4.2+
+Signed-off-by: Aurelien Jarno <aurelien at aurel32.net>
+---
+ arch/mips/net/bpf_jit_asm.S | 42 ++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 42 insertions(+)
+
+diff --git a/arch/mips/net/bpf_jit_asm.S b/arch/mips/net/bpf_jit_asm.S
+index 4f54cb1..dabf417 100644
+--- a/arch/mips/net/bpf_jit_asm.S
++++ b/arch/mips/net/bpf_jit_asm.S
+@@ -64,8 +64,20 @@ sk_load_word_positive:
+ 	PTR_ADDU t1, $r_skb_data, offset
+ 	lw	$r_A, 0(t1)
+ #ifdef CONFIG_CPU_LITTLE_ENDIAN
++# if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
+ 	wsbh	t0, $r_A
+ 	rotr	$r_A, t0, 16
++# else
++	sll	t0, $r_A, 24
++	srl	t1, $r_A, 24
++	srl	t2, $r_A, 8
++	or	t0, t0, t1
++	andi	t2, t2, 0xff00
++	andi	t1, $r_A, 0xff00
++	or	t0, t0, t2
++	sll	t1, t1, 8
++	or	$r_A, t0, t1
++# endif
+ #endif
+ 	jr	$r_ra
+ 	 move	$r_ret, zero
+@@ -80,8 +92,16 @@ sk_load_half_positive:
+ 	PTR_ADDU t1, $r_skb_data, offset
+ 	lh	$r_A, 0(t1)
+ #ifdef CONFIG_CPU_LITTLE_ENDIAN
++# if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
+ 	wsbh	t0, $r_A
+ 	seh	$r_A, t0
++# else
++	sll	t0, $r_A, 24
++	andi	t1, $r_A, 0xff00
++	sra	t0, t0, 16
++	srl	t1, t1, 8
++	or	$r_A, t0, t1
++# endif
+ #endif
+ 	jr	$r_ra
+ 	 move	$r_ret, zero
+@@ -148,9 +168,22 @@ sk_load_byte_positive:
+ NESTED(bpf_slow_path_word, (6 * SZREG), $r_sp)
+ 	bpf_slow_path_common(4)
+ #ifdef CONFIG_CPU_LITTLE_ENDIAN
++# if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
+ 	wsbh	t0, $r_s0
+ 	jr	$r_ra
+ 	 rotr	$r_A, t0, 16
++# else
++	sll	t0, $r_s0, 24
++	srl	t1, $r_s0, 24
++	srl	t2, $r_s0, 8
++	or	t0, t0, t1
++	andi	t2, t2, 0xff00
++	andi	t1, $r_s0, 0xff00
++	or	t0, t0, t2
++	sll	t1, t1, 8
++	jr	$r_ra
++	 or	$r_A, t0, t1
++# endif
+ #else
+ 	jr	$r_ra
+ 	 move	$r_A, $r_s0
+@@ -161,8 +194,17 @@ NESTED(bpf_slow_path_word, (6 * SZREG), $r_sp)
+ NESTED(bpf_slow_path_half, (6 * SZREG), $r_sp)
+ 	bpf_slow_path_common(2)
+ #ifdef CONFIG_CPU_LITTLE_ENDIAN
++# if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
+ 	jr	$r_ra
+ 	 wsbh	$r_A, $r_s0
++# else
++	sll	t0, $r_s0, 8
++	andi	t1, $r_s0, 0xff00
++	andi	t0, t0, 0xff00
++	srl	t1, t1, 8
++	jr	$r_ra
++	 or	$r_A, t0, t1
++# endif
+ #else
+ 	jr	$r_ra
+ 	 move	$r_A, $r_s0
+-- 
+2.1.4
+
diff --git a/debian/patches/series b/debian/patches/series
index 85425ff..b9805de 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -46,6 +46,8 @@ debian/qxl-disable-modeset-by-default.patch
 
 # Arch bug fixes
 bugfix/mips/disable-advansys.patch
+bugfix/mips/bpf-avoid-unreachable-code-on-little-endian.patch
+bugfix/mips/bpf-fix-build-on-pre-r2-little-endian-cpus.patch
 bugfix/arm64/arm64-add-missing-dts-entry-for-X-Gene-platform.patch
 bugfix/arm64/arm64-removed-using-of-the-mask-attribute-in-the-dts.patch
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git



More information about the Kernel-svn-changes mailing list