[mips*/octeon] Fix /proc/cpuinfo issues.
svn path=/dists/sid/linux/; revision=21652
This commit is contained in:
parent
5f0f41de53
commit
565d0dd6ae
|
@ -7,6 +7,7 @@ linux (3.14.13-3) UNRELEASED; urgency=medium
|
|||
#756134).
|
||||
* Rewrite postinst to not require File::stat perl module (Closes: #756207).
|
||||
* [mips*] Avoid smp_processor_id() in preemptible code.
|
||||
* [mips*/octeon] Fix /proc/cpuinfo issues.
|
||||
|
||||
[ Ben Hutchings ]
|
||||
* [amd64] Reject x32 executables if x32 ABI not supported
|
||||
|
|
66
debian/patches/bugfix/mips/MIPS-OCTEON-make-get_system_type-thread-safe.patch
vendored
Normal file
66
debian/patches/bugfix/mips/MIPS-OCTEON-make-get_system_type-thread-safe.patch
vendored
Normal file
|
@ -0,0 +1,66 @@
|
|||
From: Aaro Koskinen <aaro.koskinen@nsn.com>
|
||||
Date: Tue, 22 Jul 2014 14:51:08 +0300
|
||||
Subject: MIPS: OCTEON: make get_system_type() thread-safe
|
||||
Origin: https://git.kernel.org/cgit/linux/kernel/git/jhogan/mips.git/commit?id=726d129dfdc9622197a8c3f5947ce09c1a4c935e
|
||||
|
||||
get_system_type() is not thread-safe on OCTEON. It uses static data,
|
||||
also more dangerous issue is that it's calling cvmx_fuse_read_byte()
|
||||
every time without any synchronization. Currently it's possible to get
|
||||
processes stuck looping forever in kernel simply by launching multiple
|
||||
readers of /proc/cpuinfo:
|
||||
|
||||
(while true; do cat /proc/cpuinfo > /dev/null; done) &
|
||||
(while true; do cat /proc/cpuinfo > /dev/null; done) &
|
||||
...
|
||||
|
||||
Fix by initializing the system type string only once during the early
|
||||
boot.
|
||||
|
||||
Signed-off-by: Aaro Koskinen <aaro.koskinen@nsn.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Reviewed-by: Markos Chandras <markos.chandras@imgtec.com>
|
||||
Patchwork: http://patchwork.linux-mips.org/patch/7437/
|
||||
Signed-off-by: James Hogan <james.hogan@imgtec.com>
|
||||
---
|
||||
arch/mips/cavium-octeon/setup.c | 18 +++++++++++++-----
|
||||
1 file changed, 13 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c
|
||||
index 008e9c8..c9d9c62 100644
|
||||
--- a/arch/mips/cavium-octeon/setup.c
|
||||
+++ b/arch/mips/cavium-octeon/setup.c
|
||||
@@ -458,6 +458,18 @@ static void octeon_halt(void)
|
||||
octeon_kill_core(NULL);
|
||||
}
|
||||
|
||||
+static char __read_mostly octeon_system_type[80];
|
||||
+
|
||||
+static int __init init_octeon_system_type(void)
|
||||
+{
|
||||
+ snprintf(octeon_system_type, sizeof(octeon_system_type), "%s (%s)",
|
||||
+ cvmx_board_type_to_string(octeon_bootinfo->board_type),
|
||||
+ octeon_model_get_string(read_c0_prid()));
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+early_initcall(init_octeon_system_type);
|
||||
+
|
||||
/**
|
||||
* Return a string representing the system type
|
||||
*
|
||||
@@ -465,11 +477,7 @@ static void octeon_halt(void)
|
||||
*/
|
||||
const char *octeon_board_type_string(void)
|
||||
{
|
||||
- static char name[80];
|
||||
- sprintf(name, "%s (%s)",
|
||||
- cvmx_board_type_to_string(octeon_bootinfo->board_type),
|
||||
- octeon_model_get_string(read_c0_prid()));
|
||||
- return name;
|
||||
+ return octeon_system_type;
|
||||
}
|
||||
|
||||
const char *get_system_type(void)
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -65,6 +65,7 @@ bugfix/mips/MIPS-SB1-Fix-excessive-kernel-warnings.patch
|
|||
bugfix/mips/MIPS-ZBOOT-add-missing-linux-string.h-include.patch
|
||||
bugfix/mips/MIPS-Fix-branch-emulation-of-branch-likely-instructi.patch
|
||||
bugfix/mips/MIPS-ptrace-Avoid-smp_processor_id-in-preemptible-co.patch
|
||||
bugfix/mips/MIPS-OCTEON-make-get_system_type-thread-safe.patch
|
||||
bugfix/s390/s390-ptrace-fix-PSW-mask-check.patch
|
||||
|
||||
# Miscellaneous bug fixes
|
||||
|
|
Loading…
Reference in New Issue