[kernel] r21723 - in dists/sid/linux/debian: . patches patches/bugfix/mips

Aurelien Jarno aurel32 at moszumanska.debian.org
Sun Aug 10 12:39:26 UTC 2014


Author: aurel32
Date: Sun Aug 10 12:39:26 2014
New Revision: 21723

Log:
* [mips*] Fix FP emulation for unaligned accesses.

Added:
   dists/sid/linux/debian/patches/bugfix/mips/MIPS-Remove-BUG_ON-is_fpu_owner-in-do_ade.patch
Modified:
   dists/sid/linux/debian/changelog
   dists/sid/linux/debian/patches/series

Modified: dists/sid/linux/debian/changelog
==============================================================================
--- dists/sid/linux/debian/changelog	Sat Aug  9 22:52:54 2014	(r21722)
+++ dists/sid/linux/debian/changelog	Sun Aug 10 12:39:26 2014	(r21723)
@@ -1,3 +1,10 @@
+linux (3.14.15-3) UNRELEASED; urgency=medium
+  
+  [ Aurelien Jarno ]
+  * [mips*] Fix FP emulation for unaligned accesses.
+
+ -- Aurelien Jarno <aurel32 at debian.org>  Thu, 24 Jul 2014 21:05:08 +0200
+
 linux (3.14.15-2) unstable; urgency=medium
 
   [ Aurelien Jarno ]

Added: dists/sid/linux/debian/patches/bugfix/mips/MIPS-Remove-BUG_ON-is_fpu_owner-in-do_ade.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/bugfix/mips/MIPS-Remove-BUG_ON-is_fpu_owner-in-do_ade.patch	Sun Aug 10 12:39:26 2014	(r21723)
@@ -0,0 +1,63 @@
+From: Huacai Chen <chenhc at lemote.com>
+Date: Wed, 16 Jul 2014 09:19:16 +0800
+Subject: MIPS: Remove BUG_ON(!is_fpu_owner()) in do_ade()
+Origin: https://git.kernel.org/linus/2e5767a27337812f6850b3fa362419e2f085e5c3
+
+In do_ade(), is_fpu_owner() isn't preempt-safe. For example, when an
+unaligned ldc1 is executed, do_cpu() is called and then FPU will be
+enabled (and TIF_USEDFPU will be set for the current process). Then,
+do_ade() is called because the access is unaligned.  If the current
+process is preempted at this time, TIF_USEDFPU will be cleard.  So when
+the process is scheduled again, BUG_ON(!is_fpu_owner()) is triggered.
+
+This small program can trigger this BUG in a preemptible kernel:
+
+int main (int argc, char *argv[])
+{
+        double u64[2];
+
+        while (1) {
+                asm volatile (
+                        ".set push \n\t"
+                        ".set noreorder \n\t"
+                        "ldc1 $f3, 4(%0) \n\t"
+                        ".set pop \n\t"
+                        ::"r"(u64):
+                );
+        }
+
+        return 0;
+}
+
+V2: Remove the BUG_ON() unconditionally due to Paul's suggestion.
+
+Signed-off-by: Huacai Chen <chenhc at lemote.com>
+Signed-off-by: Jie Chen <chenj at lemote.com>
+Signed-off-by: Rui Wang <wangr at lemote.com>
+Cc: <stable at vger.kernel.org>
+Cc: John Crispin <john at phrozen.org>
+Cc: Steven J. Hill <Steven.Hill at imgtec.com>
+Cc: linux-mips at linux-mips.org
+Cc: Fuxin Zhang <zhangfx at lemote.com>
+Cc: Zhangjin Wu <wuzhangjin at gmail.com>
+Cc: stable at vger.kernel.org
+Signed-off-by: Ralf Baechle <ralf at linux-mips.org>
+---
+ arch/mips/kernel/unaligned.c |    1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/arch/mips/kernel/unaligned.c b/arch/mips/kernel/unaligned.c
+index 2b35172..e11906d 100644
+--- a/arch/mips/kernel/unaligned.c
++++ b/arch/mips/kernel/unaligned.c
+@@ -690,7 +690,6 @@ static void emulate_load_store_insn(struct pt_regs *regs,
+ 	case sdc1_op:
+ 		die_if_kernel("Unaligned FP access in kernel code", regs);
+ 		BUG_ON(!used_math());
+-		BUG_ON(!is_fpu_owner());
+ 
+ 		lose_fpu(1);	/* Save FPU state for the emulator. */
+ 		res = fpu_emulator_cop1Handler(regs, &current->thread.fpu, 1,
+-- 
+1.7.10.4
+

Modified: dists/sid/linux/debian/patches/series
==============================================================================
--- dists/sid/linux/debian/patches/series	Sat Aug  9 22:52:54 2014	(r21722)
+++ dists/sid/linux/debian/patches/series	Sun Aug 10 12:39:26 2014	(r21723)
@@ -69,6 +69,7 @@
 bugfix/mips/MIPS-O32-32-bit-Fix-bug-which-can-cause-incorrect-sy.patch
 bugfix/mips/MIPS-tlbex-fix-a-missing-statement-for-HUGETLB.patch
 bugfix/mips/MIPS-prevent-user-from-setting-FCSR-cause-bits.patch
+bugfix/mips/MIPS-Remove-BUG_ON-is_fpu_owner-in-do_ade.patch
 
 # Miscellaneous bug fixes
 bugfix/all/misc-bmp085-Enable-building-as-a-module.patch



More information about the Kernel-svn-changes mailing list