summaryrefslogtreecommitdiff
path: root/target
diff options
context:
space:
mode:
Diffstat (limited to 'target')
-rw-r--r--target/linux/patches/4.6.6/patch-realtime7152
1 files changed, 3372 insertions, 3780 deletions
diff --git a/target/linux/patches/4.6.6/patch-realtime b/target/linux/patches/4.6.6/patch-realtime
index 6fb397726..dbaa94b0a 100644
--- a/target/linux/patches/4.6.6/patch-realtime
+++ b/target/linux/patches/4.6.6/patch-realtime
@@ -1,334 +1,6 @@
-diff --git a/Documentation/hwlat_detector.txt b/Documentation/hwlat_detector.txt
-new file mode 100644
-index 000000000000..cb61516483d3
---- /dev/null
-+++ b/Documentation/hwlat_detector.txt
-@@ -0,0 +1,64 @@
-+Introduction:
-+-------------
-+
-+The module hwlat_detector is a special purpose kernel module that is used to
-+detect large system latencies induced by the behavior of certain underlying
-+hardware or firmware, independent of Linux itself. The code was developed
-+originally to detect SMIs (System Management Interrupts) on x86 systems,
-+however there is nothing x86 specific about this patchset. It was
-+originally written for use by the "RT" patch since the Real Time
-+kernel is highly latency sensitive.
-+
-+SMIs are usually not serviced by the Linux kernel, which typically does not
-+even know that they are occuring. SMIs are instead are set up by BIOS code
-+and are serviced by BIOS code, usually for "critical" events such as
-+management of thermal sensors and fans. Sometimes though, SMIs are used for
-+other tasks and those tasks can spend an inordinate amount of time in the
-+handler (sometimes measured in milliseconds). Obviously this is a problem if
-+you are trying to keep event service latencies down in the microsecond range.
-+
-+The hardware latency detector works by hogging all of the cpus for configurable
-+amounts of time (by calling stop_machine()), polling the CPU Time Stamp Counter
-+for some period, then looking for gaps in the TSC data. Any gap indicates a
-+time when the polling was interrupted and since the machine is stopped and
-+interrupts turned off the only thing that could do that would be an SMI.
-+
-+Note that the SMI detector should *NEVER* be used in a production environment.
-+It is intended to be run manually to determine if the hardware platform has a
-+problem with long system firmware service routines.
-+
-+Usage:
-+------
-+
-+Loading the module hwlat_detector passing the parameter "enabled=1" (or by
-+setting the "enable" entry in "hwlat_detector" debugfs toggled on) is the only
-+step required to start the hwlat_detector. It is possible to redefine the
-+threshold in microseconds (us) above which latency spikes will be taken
-+into account (parameter "threshold=").
-+
-+Example:
-+
-+ # modprobe hwlat_detector enabled=1 threshold=100
-+
-+After the module is loaded, it creates a directory named "hwlat_detector" under
-+the debugfs mountpoint, "/debug/hwlat_detector" for this text. It is necessary
-+to have debugfs mounted, which might be on /sys/debug on your system.
-+
-+The /debug/hwlat_detector interface contains the following files:
-+
-+count - number of latency spikes observed since last reset
-+enable - a global enable/disable toggle (0/1), resets count
-+max - maximum hardware latency actually observed (usecs)
-+sample - a pipe from which to read current raw sample data
-+ in the format <timestamp> <latency observed usecs>
-+ (can be opened O_NONBLOCK for a single sample)
-+threshold - minimum latency value to be considered (usecs)
-+width - time period to sample with CPUs held (usecs)
-+ must be less than the total window size (enforced)
-+window - total period of sampling, width being inside (usecs)
-+
-+By default we will set width to 500,000 and window to 1,000,000, meaning that
-+we will sample every 1,000,000 usecs (1s) for 500,000 usecs (0.5s). If we
-+observe any latencies that exceed the threshold (initially 100 usecs),
-+then we write to a global sample ring buffer of 8K samples, which is
-+consumed by reading from the "sample" (pipe) debugfs file interface.
-diff --git a/Documentation/sysrq.txt b/Documentation/sysrq.txt
-index 13f5619b2203..f64d075ba647 100644
---- a/Documentation/sysrq.txt
-+++ b/Documentation/sysrq.txt
-@@ -59,10 +59,17 @@ On PowerPC - Press 'ALT - Print Screen (or F13) - <command key>,
- On other - If you know of the key combos for other architectures, please
- let me know so I can add them to this section.
-
--On all - write a character to /proc/sysrq-trigger. e.g.:
--
-+On all - write a character to /proc/sysrq-trigger, e.g.:
- echo t > /proc/sysrq-trigger
-
-+On all - Enable network SysRq by writing a cookie to icmp_echo_sysrq, e.g.
-+ echo 0x01020304 >/proc/sys/net/ipv4/icmp_echo_sysrq
-+ Send an ICMP echo request with this pattern plus the particular
-+ SysRq command key. Example:
-+ # ping -c1 -s57 -p0102030468
-+ will trigger the SysRq-H (help) command.
-+
-+
- * What are the 'command' keys?
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 'b' - Will immediately reboot the system without syncing or unmounting
-diff --git a/Documentation/trace/histograms.txt b/Documentation/trace/histograms.txt
-new file mode 100644
-index 000000000000..6f2aeabf7faa
---- /dev/null
-+++ b/Documentation/trace/histograms.txt
-@@ -0,0 +1,186 @@
-+ Using the Linux Kernel Latency Histograms
-+
-+
-+This document gives a short explanation how to enable, configure and use
-+latency histograms. Latency histograms are primarily relevant in the
-+context of real-time enabled kernels (CONFIG_PREEMPT/CONFIG_PREEMPT_RT)
-+and are used in the quality management of the Linux real-time
-+capabilities.
-+
-+
-+* Purpose of latency histograms
-+
-+A latency histogram continuously accumulates the frequencies of latency
-+data. There are two types of histograms
-+- potential sources of latencies
-+- effective latencies
-+
-+
-+* Potential sources of latencies
-+
-+Potential sources of latencies are code segments where interrupts,
-+preemption or both are disabled (aka critical sections). To create
-+histograms of potential sources of latency, the kernel stores the time
-+stamp at the start of a critical section, determines the time elapsed
-+when the end of the section is reached, and increments the frequency
-+counter of that latency value - irrespective of whether any concurrently
-+running process is affected by latency or not.
-+- Configuration items (in the Kernel hacking/Tracers submenu)
-+ CONFIG_INTERRUPT_OFF_LATENCY
-+ CONFIG_PREEMPT_OFF_LATENCY
-+
-+
-+* Effective latencies
-+
-+Effective latencies are actually occuring during wakeup of a process. To
-+determine effective latencies, the kernel stores the time stamp when a
-+process is scheduled to be woken up, and determines the duration of the
-+wakeup time shortly before control is passed over to this process. Note
-+that the apparent latency in user space may be somewhat longer, since the
-+process may be interrupted after control is passed over to it but before
-+the execution in user space takes place. Simply measuring the interval
-+between enqueuing and wakeup may also not appropriate in cases when a
-+process is scheduled as a result of a timer expiration. The timer may have
-+missed its deadline, e.g. due to disabled interrupts, but this latency
-+would not be registered. Therefore, the offsets of missed timers are
-+recorded in a separate histogram. If both wakeup latency and missed timer
-+offsets are configured and enabled, a third histogram may be enabled that
-+records the overall latency as a sum of the timer latency, if any, and the
-+wakeup latency. This histogram is called "timerandwakeup".
-+- Configuration items (in the Kernel hacking/Tracers submenu)
-+ CONFIG_WAKEUP_LATENCY
-+ CONFIG_MISSED_TIMER_OFSETS
-+
-+
-+* Usage
-+
-+The interface to the administration of the latency histograms is located
-+in the debugfs file system. To mount it, either enter
-+
-+mount -t sysfs nodev /sys
-+mount -t debugfs nodev /sys/kernel/debug
-+
-+from shell command line level, or add
-+
-+nodev /sys sysfs defaults 0 0
-+nodev /sys/kernel/debug debugfs defaults 0 0
-+
-+to the file /etc/fstab. All latency histogram related files are then
-+available in the directory /sys/kernel/debug/tracing/latency_hist. A
-+particular histogram type is enabled by writing non-zero to the related
-+variable in the /sys/kernel/debug/tracing/latency_hist/enable directory.
-+Select "preemptirqsoff" for the histograms of potential sources of
-+latencies and "wakeup" for histograms of effective latencies etc. The
-+histogram data - one per CPU - are available in the files
-+
-+/sys/kernel/debug/tracing/latency_hist/preemptoff/CPUx
-+/sys/kernel/debug/tracing/latency_hist/irqsoff/CPUx
-+/sys/kernel/debug/tracing/latency_hist/preemptirqsoff/CPUx
-+/sys/kernel/debug/tracing/latency_hist/wakeup/CPUx
-+/sys/kernel/debug/tracing/latency_hist/wakeup/sharedprio/CPUx
-+/sys/kernel/debug/tracing/latency_hist/missed_timer_offsets/CPUx
-+/sys/kernel/debug/tracing/latency_hist/timerandwakeup/CPUx
-+
-+The histograms are reset by writing non-zero to the file "reset" in a
-+particular latency directory. To reset all latency data, use
-+
-+#!/bin/sh
-+
-+TRACINGDIR=/sys/kernel/debug/tracing
-+HISTDIR=$TRACINGDIR/latency_hist
-+
-+if test -d $HISTDIR
-+then
-+ cd $HISTDIR
-+ for i in `find . | grep /reset$`
-+ do
-+ echo 1 >$i
-+ done
-+fi
-+
-+
-+* Data format
-+
-+Latency data are stored with a resolution of one microsecond. The
-+maximum latency is 10,240 microseconds. The data are only valid, if the
-+overflow register is empty. Every output line contains the latency in
-+microseconds in the first row and the number of samples in the second
-+row. To display only lines with a positive latency count, use, for
-+example,
-+
-+grep -v " 0$" /sys/kernel/debug/tracing/latency_hist/preemptoff/CPU0
-+
-+#Minimum latency: 0 microseconds.
-+#Average latency: 0 microseconds.
-+#Maximum latency: 25 microseconds.
-+#Total samples: 3104770694
-+#There are 0 samples greater or equal than 10240 microseconds
-+#usecs samples
-+ 0 2984486876
-+ 1 49843506
-+ 2 58219047
-+ 3 5348126
-+ 4 2187960
-+ 5 3388262
-+ 6 959289
-+ 7 208294
-+ 8 40420
-+ 9 4485
-+ 10 14918
-+ 11 18340
-+ 12 25052
-+ 13 19455
-+ 14 5602
-+ 15 969
-+ 16 47
-+ 17 18
-+ 18 14
-+ 19 1
-+ 20 3
-+ 21 2
-+ 22 5
-+ 23 2
-+ 25 1
-+
-+
-+* Wakeup latency of a selected process
-+
-+To only collect wakeup latency data of a particular process, write the
-+PID of the requested process to
-+
-+/sys/kernel/debug/tracing/latency_hist/wakeup/pid
-+
-+PIDs are not considered, if this variable is set to 0.
-+
-+
-+* Details of the process with the highest wakeup latency so far
-+
-+Selected data of the process that suffered from the highest wakeup
-+latency that occurred in a particular CPU are available in the file
-+
-+/sys/kernel/debug/tracing/latency_hist/wakeup/max_latency-CPUx.
-+
-+In addition, other relevant system data at the time when the
-+latency occurred are given.
-+
-+The format of the data is (all in one line):
-+<PID> <Priority> <Latency> (<Timeroffset>) <Command> \
-+<- <PID> <Priority> <Command> <Timestamp>
-+
-+The value of <Timeroffset> is only relevant in the combined timer
-+and wakeup latency recording. In the wakeup recording, it is
-+always 0, in the missed_timer_offsets recording, it is the same
-+as <Latency>.
-+
-+When retrospectively searching for the origin of a latency and
-+tracing was not enabled, it may be helpful to know the name and
-+some basic data of the task that (finally) was switching to the
-+late real-tlme task. In addition to the victim's data, also the
-+data of the possible culprit are therefore displayed after the
-+"<-" symbol.
-+
-+Finally, the timestamp of the time when the latency occurred
-+in <seconds>.<microseconds> after the most recent system boot
-+is provided.
-+
-+These data are also reset when the wakeup histogram is reset.
-diff --git a/arch/Kconfig b/arch/Kconfig
-index 81869a5e7e17..54cfbcbdaa02 100644
---- a/arch/Kconfig
-+++ b/arch/Kconfig
-@@ -9,6 +9,7 @@ config OPROFILE
- tristate "OProfile system profiling"
- depends on PROFILING
- depends on HAVE_OPROFILE
-+ depends on !PREEMPT_RT_FULL
- select RING_BUFFER
- select RING_BUFFER_ALLOW_SWAP
- help
-@@ -52,6 +53,7 @@ config KPROBES
- config JUMP_LABEL
- bool "Optimize very unlikely/likely branches"
- depends on HAVE_ARCH_JUMP_LABEL
-+ depends on (!INTERRUPT_OFF_HIST && !PREEMPT_OFF_HIST && !WAKEUP_LATENCY_HIST && !MISSED_TIMER_OFFSETS_HIST)
- help
- This option enables a transparent branch optimization that
- makes certain almost-always-true or almost-always-false branch
-diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
-index cdfa6c2b7626..fa885f5eb8c9 100644
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -35,7 +35,7 @@ config ARM
- select HARDIRQS_SW_RESEND
- select HAVE_ARCH_AUDITSYSCALL if (AEABI && !OABI_COMPAT)
- select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6
-- select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU
-+ select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU && !PREEMPT_RT_BASE
- select HAVE_ARCH_KGDB if !CPU_ENDIAN_BE32 && MMU
- select HAVE_ARCH_MMAP_RND_BITS if MMU
- select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT)
-@@ -71,6 +71,7 @@ config ARM
- select HAVE_PERF_EVENTS
- select HAVE_PERF_REGS
- select HAVE_PERF_USER_STACK_DUMP
-+ select HAVE_PREEMPT_LAZY
- select HAVE_RCU_TABLE_FREE if (SMP && ARM_LPAE)
- select HAVE_REGS_AND_STACK_ACCESS_API
- select HAVE_SYSCALL_TRACEPOINTS
-diff --git a/arch/arm/include/asm/switch_to.h b/arch/arm/include/asm/switch_to.h
-index 12ebfcc1d539..c962084605bc 100644
---- a/arch/arm/include/asm/switch_to.h
-+++ b/arch/arm/include/asm/switch_to.h
+diff -Nur linux-4.6.6.orig/arch/arm/include/asm/switch_to.h linux-4.6.6/arch/arm/include/asm/switch_to.h
+--- linux-4.6.6.orig/arch/arm/include/asm/switch_to.h 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/include/asm/switch_to.h 2016-08-22 21:27:46.269819745 +0200
@@ -3,6 +3,13 @@
#include <linux/thread_info.h>
@@ -343,7 +15,7 @@ index 12ebfcc1d539..c962084605bc 100644
/*
* For v7 SMP cores running a preemptible kernel we may be pre-empted
* during a TLB maintenance operation, so execute an inner-shareable dsb
-@@ -25,6 +32,7 @@ extern struct task_struct *__switch_to(struct task_struct *, struct thread_info
+@@ -25,6 +32,7 @@
#define switch_to(prev,next,last) \
do { \
__complete_pending_tlbi(); \
@@ -351,11 +23,10 @@ index 12ebfcc1d539..c962084605bc 100644
last = __switch_to(prev,task_thread_info(prev), task_thread_info(next)); \
} while (0)
-diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
-index 776757d1604a..1f36a4eccc72 100644
---- a/arch/arm/include/asm/thread_info.h
-+++ b/arch/arm/include/asm/thread_info.h
-@@ -49,6 +49,7 @@ struct cpu_context_save {
+diff -Nur linux-4.6.6.orig/arch/arm/include/asm/thread_info.h linux-4.6.6/arch/arm/include/asm/thread_info.h
+--- linux-4.6.6.orig/arch/arm/include/asm/thread_info.h 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/include/asm/thread_info.h 2016-08-22 21:27:46.269819745 +0200
+@@ -49,6 +49,7 @@
struct thread_info {
unsigned long flags; /* low level flags */
int preempt_count; /* 0 => preemptable, <0 => bug */
@@ -363,7 +34,7 @@ index 776757d1604a..1f36a4eccc72 100644
mm_segment_t addr_limit; /* address limit */
struct task_struct *task; /* main task structure */
__u32 cpu; /* cpu */
-@@ -142,7 +143,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
+@@ -142,7 +143,8 @@
#define TIF_SYSCALL_TRACE 4 /* syscall trace active */
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
#define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
@@ -373,7 +44,7 @@ index 776757d1604a..1f36a4eccc72 100644
#define TIF_NOHZ 12 /* in adaptive nohz mode */
#define TIF_USING_IWMMXT 17
-@@ -152,6 +154,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
+@@ -152,6 +154,7 @@
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
@@ -381,7 +52,7 @@ index 776757d1604a..1f36a4eccc72 100644
#define _TIF_UPROBE (1 << TIF_UPROBE)
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
-@@ -167,7 +170,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
+@@ -167,7 +170,8 @@
* Change these and you break ASM code in entry-common.S
*/
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
@@ -391,11 +62,30 @@ index 776757d1604a..1f36a4eccc72 100644
#endif /* __KERNEL__ */
#endif /* __ASM_ARM_THREAD_INFO_H */
-diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c
-index 27d05813ff09..5a3742215cde 100644
---- a/arch/arm/kernel/asm-offsets.c
-+++ b/arch/arm/kernel/asm-offsets.c
-@@ -65,6 +65,7 @@ int main(void)
+diff -Nur linux-4.6.6.orig/arch/arm/Kconfig linux-4.6.6/arch/arm/Kconfig
+--- linux-4.6.6.orig/arch/arm/Kconfig 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/Kconfig 2016-08-22 21:27:46.261819236 +0200
+@@ -35,7 +35,7 @@
+ select HARDIRQS_SW_RESEND
+ select HAVE_ARCH_AUDITSYSCALL if (AEABI && !OABI_COMPAT)
+ select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6
+- select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU
++ select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU && !PREEMPT_RT_BASE
+ select HAVE_ARCH_KGDB if !CPU_ENDIAN_BE32 && MMU
+ select HAVE_ARCH_MMAP_RND_BITS if MMU
+ select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT)
+@@ -71,6 +71,7 @@
+ select HAVE_PERF_EVENTS
+ select HAVE_PERF_REGS
+ select HAVE_PERF_USER_STACK_DUMP
++ select HAVE_PREEMPT_LAZY
+ select HAVE_RCU_TABLE_FREE if (SMP && ARM_LPAE)
+ select HAVE_REGS_AND_STACK_ACCESS_API
+ select HAVE_SYSCALL_TRACEPOINTS
+diff -Nur linux-4.6.6.orig/arch/arm/kernel/asm-offsets.c linux-4.6.6/arch/arm/kernel/asm-offsets.c
+--- linux-4.6.6.orig/arch/arm/kernel/asm-offsets.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/kernel/asm-offsets.c 2016-08-22 21:27:46.293821284 +0200
+@@ -65,6 +65,7 @@
BLANK();
DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count));
@@ -403,11 +93,10 @@ index 27d05813ff09..5a3742215cde 100644
DEFINE(TI_ADDR_LIMIT, offsetof(struct thread_info, addr_limit));
DEFINE(TI_TASK, offsetof(struct thread_info, task));
DEFINE(TI_CPU, offsetof(struct thread_info, cpu));
-diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
-index e2550500486d..3125de9e9783 100644
---- a/arch/arm/kernel/entry-armv.S
-+++ b/arch/arm/kernel/entry-armv.S
-@@ -215,11 +215,18 @@ ENDPROC(__dabt_svc)
+diff -Nur linux-4.6.6.orig/arch/arm/kernel/entry-armv.S linux-4.6.6/arch/arm/kernel/entry-armv.S
+--- linux-4.6.6.orig/arch/arm/kernel/entry-armv.S 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/kernel/entry-armv.S 2016-08-22 21:27:46.305822058 +0200
+@@ -215,11 +215,18 @@
#ifdef CONFIG_PREEMPT
get_thread_info tsk
ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
@@ -428,7 +117,7 @@ index e2550500486d..3125de9e9783 100644
#endif
svc_exit r5, irq = 1 @ return from exception
-@@ -234,8 +241,14 @@ ENDPROC(__irq_svc)
+@@ -234,8 +241,14 @@
1: bl preempt_schedule_irq @ irq en/disable is done inside
ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS
tst r0, #_TIF_NEED_RESCHED
@@ -444,10 +133,9 @@ index e2550500486d..3125de9e9783 100644
#endif
__und_fault:
-diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
-index 30a7228eaceb..c3bd6cbfce4b 100644
---- a/arch/arm/kernel/entry-common.S
-+++ b/arch/arm/kernel/entry-common.S
+diff -Nur linux-4.6.6.orig/arch/arm/kernel/entry-common.S linux-4.6.6/arch/arm/kernel/entry-common.S
+--- linux-4.6.6.orig/arch/arm/kernel/entry-common.S 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/kernel/entry-common.S 2016-08-22 21:27:46.305822058 +0200
@@ -36,7 +36,9 @@
UNWIND(.cantunwind )
disable_irq_notrace @ disable interrupts
@@ -459,7 +147,7 @@ index 30a7228eaceb..c3bd6cbfce4b 100644
bne fast_work_pending
/* perform architecture specific actions before user return */
-@@ -62,8 +64,11 @@ ENDPROC(ret_fast_syscall)
+@@ -62,8 +64,11 @@
str r0, [sp, #S_R0 + S_OFF]! @ save returned r0
disable_irq_notrace @ disable interrupts
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
@@ -472,11 +160,10 @@ index 30a7228eaceb..c3bd6cbfce4b 100644
UNWIND(.fnend )
ENDPROC(ret_fast_syscall)
-diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
-index 4adfb46e3ee9..15f1d94b47c5 100644
---- a/arch/arm/kernel/process.c
-+++ b/arch/arm/kernel/process.c
-@@ -319,6 +319,30 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
+diff -Nur linux-4.6.6.orig/arch/arm/kernel/process.c linux-4.6.6/arch/arm/kernel/process.c
+--- linux-4.6.6.orig/arch/arm/kernel/process.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/kernel/process.c 2016-08-22 21:27:46.313822571 +0200
+@@ -319,6 +319,30 @@
}
#ifdef CONFIG_MMU
@@ -507,11 +194,10 @@ index 4adfb46e3ee9..15f1d94b47c5 100644
#ifdef CONFIG_KUSER_HELPERS
/*
* The vectors page is always readable from user space for the
-diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
-index 7b8f2141427b..96541e00b74a 100644
---- a/arch/arm/kernel/signal.c
-+++ b/arch/arm/kernel/signal.c
-@@ -572,7 +572,8 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
+diff -Nur linux-4.6.6.orig/arch/arm/kernel/signal.c linux-4.6.6/arch/arm/kernel/signal.c
+--- linux-4.6.6.orig/arch/arm/kernel/signal.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/kernel/signal.c 2016-08-22 21:27:46.313822571 +0200
+@@ -572,7 +572,8 @@
*/
trace_hardirqs_off();
do {
@@ -521,11 +207,10 @@ index 7b8f2141427b..96541e00b74a 100644
schedule();
} else {
if (unlikely(!user_mode(regs)))
-diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
-index baee70267f29..ad157ec494f9 100644
---- a/arch/arm/kernel/smp.c
-+++ b/arch/arm/kernel/smp.c
-@@ -234,8 +234,6 @@ int __cpu_disable(void)
+diff -Nur linux-4.6.6.orig/arch/arm/kernel/smp.c linux-4.6.6/arch/arm/kernel/smp.c
+--- linux-4.6.6.orig/arch/arm/kernel/smp.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/kernel/smp.c 2016-08-22 21:27:46.313822571 +0200
+@@ -234,8 +234,6 @@
flush_cache_louis();
local_flush_tlb_all();
@@ -534,7 +219,7 @@ index baee70267f29..ad157ec494f9 100644
return 0;
}
-@@ -251,6 +249,9 @@ void __cpu_die(unsigned int cpu)
+@@ -251,6 +249,9 @@
pr_err("CPU%u: cpu didn't die\n", cpu);
return;
}
@@ -544,11 +229,10 @@ index baee70267f29..ad157ec494f9 100644
pr_notice("CPU%u: shutdown\n", cpu);
/*
-diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c
-index 0bee233fef9a..314cfb232a63 100644
---- a/arch/arm/kernel/unwind.c
-+++ b/arch/arm/kernel/unwind.c
-@@ -93,7 +93,7 @@ extern const struct unwind_idx __start_unwind_idx[];
+diff -Nur linux-4.6.6.orig/arch/arm/kernel/unwind.c linux-4.6.6/arch/arm/kernel/unwind.c
+--- linux-4.6.6.orig/arch/arm/kernel/unwind.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/kernel/unwind.c 2016-08-22 21:27:46.317822824 +0200
+@@ -93,7 +93,7 @@
static const struct unwind_idx *__origin_unwind_idx;
extern const struct unwind_idx __stop_unwind_idx[];
@@ -557,7 +241,7 @@ index 0bee233fef9a..314cfb232a63 100644
static LIST_HEAD(unwind_tables);
/* Convert a prel31 symbol to an absolute address */
-@@ -201,7 +201,7 @@ static const struct unwind_idx *unwind_find_idx(unsigned long addr)
+@@ -201,7 +201,7 @@
/* module unwind tables */
struct unwind_table *table;
@@ -566,7 +250,7 @@ index 0bee233fef9a..314cfb232a63 100644
list_for_each_entry(table, &unwind_tables, list) {
if (addr >= table->begin_addr &&
addr < table->end_addr) {
-@@ -213,7 +213,7 @@ static const struct unwind_idx *unwind_find_idx(unsigned long addr)
+@@ -213,7 +213,7 @@
break;
}
}
@@ -575,7 +259,7 @@ index 0bee233fef9a..314cfb232a63 100644
}
pr_debug("%s: idx = %p\n", __func__, idx);
-@@ -529,9 +529,9 @@ struct unwind_table *unwind_table_add(unsigned long start, unsigned long size,
+@@ -529,9 +529,9 @@
tab->begin_addr = text_addr;
tab->end_addr = text_addr + text_size;
@@ -587,7 +271,7 @@ index 0bee233fef9a..314cfb232a63 100644
return tab;
}
-@@ -543,9 +543,9 @@ void unwind_table_del(struct unwind_table *tab)
+@@ -543,9 +543,9 @@
if (!tab)
return;
@@ -599,11 +283,10 @@ index 0bee233fef9a..314cfb232a63 100644
kfree(tab);
}
-diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
-index 72b11d91ede2..34068c59d0c5 100644
---- a/arch/arm/kvm/arm.c
-+++ b/arch/arm/kvm/arm.c
-@@ -582,7 +582,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
+diff -Nur linux-4.6.6.orig/arch/arm/kvm/arm.c linux-4.6.6/arch/arm/kvm/arm.c
+--- linux-4.6.6.orig/arch/arm/kvm/arm.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/kvm/arm.c 2016-08-22 21:27:46.321823084 +0200
+@@ -582,7 +582,7 @@
* involves poking the GIC, which must be done in a
* non-preemptible context.
*/
@@ -612,7 +295,7 @@ index 72b11d91ede2..34068c59d0c5 100644
kvm_pmu_flush_hwstate(vcpu);
kvm_timer_flush_hwstate(vcpu);
kvm_vgic_flush_hwstate(vcpu);
-@@ -603,7 +603,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
+@@ -603,7 +603,7 @@
kvm_pmu_sync_hwstate(vcpu);
kvm_timer_sync_hwstate(vcpu);
kvm_vgic_sync_hwstate(vcpu);
@@ -621,7 +304,7 @@ index 72b11d91ede2..34068c59d0c5 100644
continue;
}
-@@ -659,7 +659,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
+@@ -659,7 +659,7 @@
kvm_vgic_sync_hwstate(vcpu);
@@ -630,11 +313,10 @@ index 72b11d91ede2..34068c59d0c5 100644
ret = handle_exit(vcpu, run, ret);
}
-diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c
-index 85c3be63d644..8a950aec7834 100644
---- a/arch/arm/mach-exynos/platsmp.c
-+++ b/arch/arm/mach-exynos/platsmp.c
-@@ -229,7 +229,7 @@ static void __iomem *scu_base_addr(void)
+diff -Nur linux-4.6.6.orig/arch/arm/mach-exynos/platsmp.c linux-4.6.6/arch/arm/mach-exynos/platsmp.c
+--- linux-4.6.6.orig/arch/arm/mach-exynos/platsmp.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/mach-exynos/platsmp.c 2016-08-22 21:27:46.329823597 +0200
+@@ -229,7 +229,7 @@
return (void __iomem *)(S5P_VA_SCU);
}
@@ -643,7 +325,7 @@ index 85c3be63d644..8a950aec7834 100644
static void exynos_secondary_init(unsigned int cpu)
{
-@@ -242,8 +242,8 @@ static void exynos_secondary_init(unsigned int cpu)
+@@ -242,8 +242,8 @@
/*
* Synchronise with the boot thread.
*/
@@ -654,7 +336,7 @@ index 85c3be63d644..8a950aec7834 100644
}
int exynos_set_boot_addr(u32 core_id, unsigned long boot_addr)
-@@ -307,7 +307,7 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -307,7 +307,7 @@
* Set synchronisation state between this boot processor
* and the secondary one
*/
@@ -663,7 +345,7 @@ index 85c3be63d644..8a950aec7834 100644
/*
* The secondary processor is waiting to be released from
-@@ -334,7 +334,7 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -334,7 +334,7 @@
if (timeout == 0) {
printk(KERN_ERR "cpu1 power enable failed");
@@ -672,7 +354,7 @@ index 85c3be63d644..8a950aec7834 100644
return -ETIMEDOUT;
}
}
-@@ -380,7 +380,7 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -380,7 +380,7 @@
* calibrations, then wait for it to finish
*/
fail:
@@ -681,10 +363,9 @@ index 85c3be63d644..8a950aec7834 100644
return pen_release != -1 ? ret : 0;
}
-diff --git a/arch/arm/mach-hisi/platmcpm.c b/arch/arm/mach-hisi/platmcpm.c
-index 4b653a8cb75c..b03d5a922cb1 100644
---- a/arch/arm/mach-hisi/platmcpm.c
-+++ b/arch/arm/mach-hisi/platmcpm.c
+diff -Nur linux-4.6.6.orig/arch/arm/mach-hisi/platmcpm.c linux-4.6.6/arch/arm/mach-hisi/platmcpm.c
+--- linux-4.6.6.orig/arch/arm/mach-hisi/platmcpm.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/mach-hisi/platmcpm.c 2016-08-22 21:27:46.337824110 +0200
@@ -61,7 +61,7 @@
static void __iomem *sysctrl, *fabric;
@@ -694,7 +375,7 @@ index 4b653a8cb75c..b03d5a922cb1 100644
static u32 fabric_phys_addr;
/*
* [0]: bootwrapper physical address
-@@ -113,7 +113,7 @@ static int hip04_boot_secondary(unsigned int l_cpu, struct task_struct *idle)
+@@ -113,7 +113,7 @@
if (cluster >= HIP04_MAX_CLUSTERS || cpu >= HIP04_MAX_CPUS_PER_CLUSTER)
return -EINVAL;
@@ -703,7 +384,7 @@ index 4b653a8cb75c..b03d5a922cb1 100644
if (hip04_cpu_table[cluster][cpu])
goto out;
-@@ -147,7 +147,7 @@ static int hip04_boot_secondary(unsigned int l_cpu, struct task_struct *idle)
+@@ -147,7 +147,7 @@
out:
hip04_cpu_table[cluster][cpu]++;
@@ -712,7 +393,7 @@ index 4b653a8cb75c..b03d5a922cb1 100644
return 0;
}
-@@ -162,11 +162,11 @@ static void hip04_cpu_die(unsigned int l_cpu)
+@@ -162,11 +162,11 @@
cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
@@ -726,7 +407,7 @@ index 4b653a8cb75c..b03d5a922cb1 100644
return;
} else if (hip04_cpu_table[cluster][cpu] > 1) {
pr_err("Cluster %d CPU%d boots multiple times\n", cluster, cpu);
-@@ -174,7 +174,7 @@ static void hip04_cpu_die(unsigned int l_cpu)
+@@ -174,7 +174,7 @@
}
last_man = hip04_cluster_is_down(cluster);
@@ -735,7 +416,7 @@ index 4b653a8cb75c..b03d5a922cb1 100644
if (last_man) {
/* Since it's Cortex A15, disable L2 prefetching. */
asm volatile(
-@@ -203,7 +203,7 @@ static int hip04_cpu_kill(unsigned int l_cpu)
+@@ -203,7 +203,7 @@
cpu >= HIP04_MAX_CPUS_PER_CLUSTER);
count = TIMEOUT_MSEC / POLL_MSEC;
@@ -744,7 +425,7 @@ index 4b653a8cb75c..b03d5a922cb1 100644
for (tries = 0; tries < count; tries++) {
if (hip04_cpu_table[cluster][cpu])
goto err;
-@@ -211,10 +211,10 @@ static int hip04_cpu_kill(unsigned int l_cpu)
+@@ -211,10 +211,10 @@
data = readl_relaxed(sysctrl + SC_CPU_RESET_STATUS(cluster));
if (data & CORE_WFI_STATUS(cpu))
break;
@@ -757,7 +438,7 @@ index 4b653a8cb75c..b03d5a922cb1 100644
}
if (tries >= count)
goto err;
-@@ -231,10 +231,10 @@ static int hip04_cpu_kill(unsigned int l_cpu)
+@@ -231,10 +231,10 @@
goto err;
if (hip04_cluster_is_down(cluster))
hip04_set_snoop_filter(cluster, 0);
@@ -770,11 +451,10 @@ index 4b653a8cb75c..b03d5a922cb1 100644
return 0;
}
#endif
-diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
-index 8973fae25436..dd905b9602a0 100644
---- a/arch/arm/mach-imx/Kconfig
-+++ b/arch/arm/mach-imx/Kconfig
-@@ -526,7 +526,7 @@ config SOC_IMX6Q
+diff -Nur linux-4.6.6.orig/arch/arm/mach-imx/Kconfig linux-4.6.6/arch/arm/mach-imx/Kconfig
+--- linux-4.6.6.orig/arch/arm/mach-imx/Kconfig 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/mach-imx/Kconfig 2016-08-22 21:27:46.337824110 +0200
+@@ -526,7 +526,7 @@
bool "i.MX6 Quad/DualLite support"
select ARM_ERRATA_764369 if SMP
select HAVE_ARM_SCU if SMP
@@ -783,10 +463,9 @@ index 8973fae25436..dd905b9602a0 100644
select PCI_DOMAINS if PCI
select PINCTRL_IMX6Q
select SOC_IMX6
-diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
-index c625cc10d9f9..6cbad704cc3d 100644
---- a/arch/arm/mach-omap2/omap-smp.c
-+++ b/arch/arm/mach-omap2/omap-smp.c
+diff -Nur linux-4.6.6.orig/arch/arm/mach-omap2/omap-smp.c linux-4.6.6/arch/arm/mach-omap2/omap-smp.c
+--- linux-4.6.6.orig/arch/arm/mach-omap2/omap-smp.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/mach-omap2/omap-smp.c 2016-08-22 21:27:46.345824623 +0200
@@ -43,7 +43,7 @@
/* SCU base address */
static void __iomem *scu_base;
@@ -796,7 +475,7 @@ index c625cc10d9f9..6cbad704cc3d 100644
void __iomem *omap4_get_scu_base(void)
{
-@@ -74,8 +74,8 @@ static void omap4_secondary_init(unsigned int cpu)
+@@ -74,8 +74,8 @@
/*
* Synchronise with the boot thread.
*/
@@ -807,7 +486,7 @@ index c625cc10d9f9..6cbad704cc3d 100644
}
static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle)
-@@ -89,7 +89,7 @@ static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -89,7 +89,7 @@
* Set synchronisation state between this boot processor
* and the secondary one
*/
@@ -816,7 +495,7 @@ index c625cc10d9f9..6cbad704cc3d 100644
/*
* Update the AuxCoreBoot0 with boot state for secondary core.
-@@ -166,7 +166,7 @@ static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -166,7 +166,7 @@
* Now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
@@ -825,10 +504,9 @@ index c625cc10d9f9..6cbad704cc3d 100644
return 0;
}
-diff --git a/arch/arm/mach-prima2/platsmp.c b/arch/arm/mach-prima2/platsmp.c
-index 0875b99add18..18b6d98d2581 100644
---- a/arch/arm/mach-prima2/platsmp.c
-+++ b/arch/arm/mach-prima2/platsmp.c
+diff -Nur linux-4.6.6.orig/arch/arm/mach-prima2/platsmp.c linux-4.6.6/arch/arm/mach-prima2/platsmp.c
+--- linux-4.6.6.orig/arch/arm/mach-prima2/platsmp.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/mach-prima2/platsmp.c 2016-08-22 21:27:46.353825136 +0200
@@ -22,7 +22,7 @@
static void __iomem *clk_base;
@@ -838,7 +516,7 @@ index 0875b99add18..18b6d98d2581 100644
static void sirfsoc_secondary_init(unsigned int cpu)
{
-@@ -36,8 +36,8 @@ static void sirfsoc_secondary_init(unsigned int cpu)
+@@ -36,8 +36,8 @@
/*
* Synchronise with the boot thread.
*/
@@ -849,7 +527,7 @@ index 0875b99add18..18b6d98d2581 100644
}
static const struct of_device_id clk_ids[] = {
-@@ -75,7 +75,7 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -75,7 +75,7 @@
/* make sure write buffer is drained */
mb();
@@ -858,7 +536,7 @@ index 0875b99add18..18b6d98d2581 100644
/*
* The secondary processor is waiting to be released from
-@@ -107,7 +107,7 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -107,7 +107,7 @@
* now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
@@ -867,10 +545,9 @@ index 0875b99add18..18b6d98d2581 100644
return pen_release != -1 ? -ENOSYS : 0;
}
-diff --git a/arch/arm/mach-qcom/platsmp.c b/arch/arm/mach-qcom/platsmp.c
-index 5494c9e0c909..e8ce157d3548 100644
---- a/arch/arm/mach-qcom/platsmp.c
-+++ b/arch/arm/mach-qcom/platsmp.c
+diff -Nur linux-4.6.6.orig/arch/arm/mach-qcom/platsmp.c linux-4.6.6/arch/arm/mach-qcom/platsmp.c
+--- linux-4.6.6.orig/arch/arm/mach-qcom/platsmp.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/mach-qcom/platsmp.c 2016-08-22 21:27:46.361825650 +0200
@@ -46,7 +46,7 @@
extern void secondary_startup_arm(void);
@@ -880,7 +557,7 @@ index 5494c9e0c909..e8ce157d3548 100644
#ifdef CONFIG_HOTPLUG_CPU
static void qcom_cpu_die(unsigned int cpu)
-@@ -60,8 +60,8 @@ static void qcom_secondary_init(unsigned int cpu)
+@@ -60,8 +60,8 @@
/*
* Synchronise with the boot thread.
*/
@@ -891,7 +568,7 @@ index 5494c9e0c909..e8ce157d3548 100644
}
static int scss_release_secondary(unsigned int cpu)
-@@ -284,7 +284,7 @@ static int qcom_boot_secondary(unsigned int cpu, int (*func)(unsigned int))
+@@ -284,7 +284,7 @@
* set synchronisation state between this boot processor
* and the secondary one
*/
@@ -900,7 +577,7 @@ index 5494c9e0c909..e8ce157d3548 100644
/*
* Send the secondary CPU a soft interrupt, thereby causing
-@@ -297,7 +297,7 @@ static int qcom_boot_secondary(unsigned int cpu, int (*func)(unsigned int))
+@@ -297,7 +297,7 @@
* now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
@@ -909,11 +586,10 @@ index 5494c9e0c909..e8ce157d3548 100644
return ret;
}
-diff --git a/arch/arm/mach-spear/platsmp.c b/arch/arm/mach-spear/platsmp.c
-index 8d1e2d551786..7fa56cc78118 100644
---- a/arch/arm/mach-spear/platsmp.c
-+++ b/arch/arm/mach-spear/platsmp.c
-@@ -32,7 +32,7 @@ static void write_pen_release(int val)
+diff -Nur linux-4.6.6.orig/arch/arm/mach-spear/platsmp.c linux-4.6.6/arch/arm/mach-spear/platsmp.c
+--- linux-4.6.6.orig/arch/arm/mach-spear/platsmp.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/mach-spear/platsmp.c 2016-08-22 21:27:46.365825902 +0200
+@@ -32,7 +32,7 @@
sync_cache_w(&pen_release);
}
@@ -922,7 +598,7 @@ index 8d1e2d551786..7fa56cc78118 100644
static void __iomem *scu_base = IOMEM(VA_SCU_BASE);
-@@ -47,8 +47,8 @@ static void spear13xx_secondary_init(unsigned int cpu)
+@@ -47,8 +47,8 @@
/*
* Synchronise with the boot thread.
*/
@@ -933,7 +609,7 @@ index 8d1e2d551786..7fa56cc78118 100644
}
static int spear13xx_boot_secondary(unsigned int cpu, struct task_struct *idle)
-@@ -59,7 +59,7 @@ static int spear13xx_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -59,7 +59,7 @@
* set synchronisation state between this boot processor
* and the secondary one
*/
@@ -942,7 +618,7 @@ index 8d1e2d551786..7fa56cc78118 100644
/*
* The secondary processor is waiting to be released from
-@@ -84,7 +84,7 @@ static int spear13xx_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -84,7 +84,7 @@
* now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
@@ -951,11 +627,10 @@ index 8d1e2d551786..7fa56cc78118 100644
return pen_release != -1 ? -ENOSYS : 0;
}
-diff --git a/arch/arm/mach-sti/platsmp.c b/arch/arm/mach-sti/platsmp.c
-index ea5a2277ee46..b988e081ac79 100644
---- a/arch/arm/mach-sti/platsmp.c
-+++ b/arch/arm/mach-sti/platsmp.c
-@@ -35,7 +35,7 @@ static void write_pen_release(int val)
+diff -Nur linux-4.6.6.orig/arch/arm/mach-sti/platsmp.c linux-4.6.6/arch/arm/mach-sti/platsmp.c
+--- linux-4.6.6.orig/arch/arm/mach-sti/platsmp.c 2016-08-10 12:54:57.000000000 +0200
++++ linux-4.6.6/arch/arm/mach-sti/platsmp.c 2016-08-22 21:27:46.369826163 +0200
+@@ -35,7 +35,7 @@
sync_cache_w(&pen_release);
}
@@ -964,7 +639,7 @@ index ea5a2277ee46..b988e081ac79 100644
static void sti_secondary_init(unsigned int cpu)
{
-@@ -48,8 +48,8 @@ static void sti_secondary_init(unsigned int cpu)
+@@ -48,8 +48