diff --git a/debian/changelog b/debian/changelog index ce0e1d042..3b41a2222 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 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 000000000..288347e3b --- /dev/null +++ b/debian/patches/bugfix/mips/bpf-avoid-unreachable-code-on-little-endian.patch @@ -0,0 +1,49 @@ +From: Aurelien Jarno +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 +Cc: Markos Chandras +Cc: stable@vger.kernel.org # v4.2+ +Signed-off-by: Aurelien Jarno +--- + 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 000000000..1b63e1bbb --- /dev/null +++ b/debian/patches/bugfix/mips/bpf-fix-build-on-pre-r2-little-endian-cpus.patch @@ -0,0 +1,117 @@ +From: Aurelien Jarno +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 +Cc: Markos Chandras +Cc: stable@vger.kernel.org # v4.2+ +Signed-off-by: Aurelien Jarno +--- + 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 85425ffb9..b9805de9c 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