summaryrefslogtreecommitdiff
path: root/target/linux
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2016-03-27 11:58:30 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2016-04-01 18:10:21 +0200
commitfc550f0d7bafdd01eb8b4f8125c1cbbcd8525f55 (patch)
tree0369112d9665509bd79723a2dd380be711c87a11 /target/linux
parent486234afd38eced4281f9d8f228feb24f7a9d54c (diff)
linux: update to 4.1.20, add solidrun patch for 4.4.6
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/config/Config.in.serial1
-rw-r--r--target/linux/patches/4.1.20/aufs.patch (renamed from target/linux/patches/4.1.16/aufs.patch)0
-rw-r--r--target/linux/patches/4.1.20/cleankernel.patch (renamed from target/linux/patches/4.1.16/cleankernel.patch)0
-rw-r--r--target/linux/patches/4.1.20/cris-header.patch (renamed from target/linux/patches/4.1.16/cris-header.patch)0
-rw-r--r--target/linux/patches/4.1.20/initramfs-nosizelimit.patch (renamed from target/linux/patches/4.1.16/initramfs-nosizelimit.patch)0
-rw-r--r--target/linux/patches/4.1.20/j2-core.patch (renamed from target/linux/patches/4.1.16/j2-core.patch)0
-rw-r--r--target/linux/patches/4.1.20/mtd-rootfs.patch (renamed from target/linux/patches/4.1.16/mtd-rootfs.patch)0
-rw-r--r--target/linux/patches/4.1.20/realtime.patch (renamed from target/linux/patches/4.1.16/realtime.patch)6057
-rw-r--r--target/linux/patches/4.1.20/regmap-default-on.patch (renamed from target/linux/patches/4.1.16/regmap-default-on.patch)0
-rw-r--r--target/linux/patches/4.1.20/remove-warn.patch (renamed from target/linux/patches/4.1.16/remove-warn.patch)0
-rw-r--r--target/linux/patches/4.1.20/startup.patch (renamed from target/linux/patches/4.1.16/startup.patch)0
-rw-r--r--target/linux/patches/4.1.20/use-libgcc-for-sh.patch (renamed from target/linux/patches/4.1.16/use-libgcc-for-sh.patch)0
12 files changed, 3550 insertions, 2508 deletions
diff --git a/target/linux/config/Config.in.serial b/target/linux/config/Config.in.serial
index 390a07b0b..d274a2d6d 100644
--- a/target/linux/config/Config.in.serial
+++ b/target/linux/config/Config.in.serial
@@ -162,6 +162,7 @@ config ADK_KERNEL_SERIAL_IMX
config ADK_KERNEL_SERIAL_AMBA_PL011
bool "AMBA PL011 serial driver"
select ADK_KERNEL_SERIAL_AMBA_PL011_CONSOLE
+ select ADK_KERNEL_SERIAL_OF_PLATFORM
depends on ADK_TARGET_BOARD_BCM28XX \
|| ADK_TARGET_SYSTEM_QEMU_ARM_REALVIEW_EB_MPCORE \
|| ADK_TARGET_SYSTEM_QEMU_ARM_VERSATILEPB \
diff --git a/target/linux/patches/4.1.16/aufs.patch b/target/linux/patches/4.1.20/aufs.patch
index 749c90989..749c90989 100644
--- a/target/linux/patches/4.1.16/aufs.patch
+++ b/target/linux/patches/4.1.20/aufs.patch
diff --git a/target/linux/patches/4.1.16/cleankernel.patch b/target/linux/patches/4.1.20/cleankernel.patch
index 59693f426..59693f426 100644
--- a/target/linux/patches/4.1.16/cleankernel.patch
+++ b/target/linux/patches/4.1.20/cleankernel.patch
diff --git a/target/linux/patches/4.1.16/cris-header.patch b/target/linux/patches/4.1.20/cris-header.patch
index 2b5a88461..2b5a88461 100644
--- a/target/linux/patches/4.1.16/cris-header.patch
+++ b/target/linux/patches/4.1.20/cris-header.patch
diff --git a/target/linux/patches/4.1.16/initramfs-nosizelimit.patch b/target/linux/patches/4.1.20/initramfs-nosizelimit.patch
index 40d2f6bd8..40d2f6bd8 100644
--- a/target/linux/patches/4.1.16/initramfs-nosizelimit.patch
+++ b/target/linux/patches/4.1.20/initramfs-nosizelimit.patch
diff --git a/target/linux/patches/4.1.16/j2-core.patch b/target/linux/patches/4.1.20/j2-core.patch
index 38136df2c..38136df2c 100644
--- a/target/linux/patches/4.1.16/j2-core.patch
+++ b/target/linux/patches/4.1.20/j2-core.patch
diff --git a/target/linux/patches/4.1.16/mtd-rootfs.patch b/target/linux/patches/4.1.20/mtd-rootfs.patch
index 5f6d82b5c..5f6d82b5c 100644
--- a/target/linux/patches/4.1.16/mtd-rootfs.patch
+++ b/target/linux/patches/4.1.20/mtd-rootfs.patch
diff --git a/target/linux/patches/4.1.16/realtime.patch b/target/linux/patches/4.1.20/realtime.patch
index 3b65f6148..9ea8309aa 100644
--- a/target/linux/patches/4.1.16/realtime.patch
+++ b/target/linux/patches/4.1.20/realtime.patch
@@ -1,6 +1,306 @@
-diff -Nur linux-4.1.13.orig/arch/alpha/mm/fault.c linux-4.1.13/arch/alpha/mm/fault.c
---- linux-4.1.13.orig/arch/alpha/mm/fault.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/alpha/mm/fault.c 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/Documentation/hwlat_detector.txt linux-4.1.20/Documentation/hwlat_detector.txt
+--- linux-4.1.20.orig/Documentation/hwlat_detector.txt 1970-01-01 01:00:00.000000000 +0100
++++ linux-4.1.20/Documentation/hwlat_detector.txt 2016-03-21 20:18:28.000000000 +0100
+@@ -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 -Nur linux-4.1.20.orig/Documentation/sysrq.txt linux-4.1.20/Documentation/sysrq.txt
+--- linux-4.1.20.orig/Documentation/sysrq.txt 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/Documentation/sysrq.txt 2016-03-21 20:18:28.000000000 +0100
+@@ -59,10 +59,17 @@
+ 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 -Nur linux-4.1.20.orig/Documentation/trace/histograms.txt linux-4.1.20/Documentation/trace/histograms.txt
+--- linux-4.1.20.orig/Documentation/trace/histograms.txt 1970-01-01 01:00:00.000000000 +0100
++++ linux-4.1.20/Documentation/trace/histograms.txt 2016-03-21 20:18:28.000000000 +0100
+@@ -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 -Nur linux-4.1.20.orig/arch/Kconfig linux-4.1.20/arch/Kconfig
+--- linux-4.1.20.orig/arch/Kconfig 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/Kconfig 2016-03-21 20:18:28.000000000 +0100
+@@ -6,6 +6,7 @@
+ 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
+@@ -49,6 +50,7 @@
+ 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 -Nur linux-4.1.20.orig/arch/alpha/mm/fault.c linux-4.1.20/arch/alpha/mm/fault.c
+--- linux-4.1.20.orig/arch/alpha/mm/fault.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/alpha/mm/fault.c 2016-03-21 20:18:28.000000000 +0100
@@ -23,8 +23,7 @@
#include <linux/smp.h>
#include <linux/interrupt.h>
@@ -20,9 +320,9 @@ diff -Nur linux-4.1.13.orig/arch/alpha/mm/fault.c linux-4.1.13/arch/alpha/mm/fau
goto no_context;
#ifdef CONFIG_ALPHA_LARGE_VMALLOC
-diff -Nur linux-4.1.13.orig/arch/arc/include/asm/futex.h linux-4.1.13/arch/arc/include/asm/futex.h
---- linux-4.1.13.orig/arch/arc/include/asm/futex.h 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arc/include/asm/futex.h 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/arch/arc/include/asm/futex.h linux-4.1.20/arch/arc/include/asm/futex.h
+--- linux-4.1.20.orig/arch/arc/include/asm/futex.h 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arc/include/asm/futex.h 2016-03-21 20:18:28.000000000 +0100
@@ -53,7 +53,7 @@
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
return -EFAULT;
@@ -68,9 +368,9 @@ diff -Nur linux-4.1.13.orig/arch/arc/include/asm/futex.h linux-4.1.13/arch/arc/i
*uval = val;
return val;
-diff -Nur linux-4.1.13.orig/arch/arc/mm/fault.c linux-4.1.13/arch/arc/mm/fault.c
---- linux-4.1.13.orig/arch/arc/mm/fault.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arc/mm/fault.c 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/arch/arc/mm/fault.c linux-4.1.20/arch/arc/mm/fault.c
+--- linux-4.1.20.orig/arch/arc/mm/fault.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arc/mm/fault.c 2016-03-21 20:18:28.000000000 +0100
@@ -86,7 +86,7 @@
* If we're in an interrupt or have no user
* context, we must not take the fault..
@@ -80,9 +380,29 @@ diff -Nur linux-4.1.13.orig/arch/arc/mm/fault.c linux-4.1.13/arch/arc/mm/fault.c
goto no_context;
if (user_mode(regs))
-diff -Nur linux-4.1.13.orig/arch/arm/include/asm/cmpxchg.h linux-4.1.13/arch/arm/include/asm/cmpxchg.h
---- linux-4.1.13.orig/arch/arm/include/asm/cmpxchg.h 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/include/asm/cmpxchg.h 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/Kconfig linux-4.1.20/arch/arm/Kconfig
+--- linux-4.1.20.orig/arch/arm/Kconfig 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/Kconfig 2016-03-21 20:18:28.000000000 +0100
+@@ -31,7 +31,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
++ select HAVE_ARCH_JUMP_LABEL if (!XIP_KERNEL && !PREEMPT_RT_BASE)
+ select HAVE_ARCH_KGDB
+ select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT)
+ select HAVE_ARCH_TRACEHOOK
+@@ -66,6 +66,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.1.20.orig/arch/arm/include/asm/cmpxchg.h linux-4.1.20/arch/arm/include/asm/cmpxchg.h
+--- linux-4.1.20.orig/arch/arm/include/asm/cmpxchg.h 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/include/asm/cmpxchg.h 2016-03-21 20:18:28.000000000 +0100
@@ -129,6 +129,8 @@
#else /* min ARCH >= ARMv6 */
@@ -92,9 +412,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/include/asm/cmpxchg.h linux-4.1.13/arch/arm
extern void __bad_cmpxchg(volatile void *ptr, int size);
/*
-diff -Nur linux-4.1.13.orig/arch/arm/include/asm/futex.h linux-4.1.13/arch/arm/include/asm/futex.h
---- linux-4.1.13.orig/arch/arm/include/asm/futex.h 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/include/asm/futex.h 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/include/asm/futex.h linux-4.1.20/arch/arm/include/asm/futex.h
+--- linux-4.1.20.orig/arch/arm/include/asm/futex.h 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/include/asm/futex.h 2016-03-21 20:18:28.000000000 +0100
@@ -93,6 +93,7 @@
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))
return -EFAULT;
@@ -136,9 +456,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/include/asm/futex.h linux-4.1.13/arch/arm/i
if (!ret) {
switch (cmp) {
-diff -Nur linux-4.1.13.orig/arch/arm/include/asm/switch_to.h linux-4.1.13/arch/arm/include/asm/switch_to.h
---- linux-4.1.13.orig/arch/arm/include/asm/switch_to.h 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/include/asm/switch_to.h 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/include/asm/switch_to.h linux-4.1.20/arch/arm/include/asm/switch_to.h
+--- linux-4.1.20.orig/arch/arm/include/asm/switch_to.h 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/include/asm/switch_to.h 2016-03-21 20:18:28.000000000 +0100
@@ -3,6 +3,13 @@
#include <linux/thread_info.h>
@@ -161,9 +481,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/include/asm/switch_to.h linux-4.1.13/arch/a
last = __switch_to(prev,task_thread_info(prev), task_thread_info(next)); \
} while (0)
-diff -Nur linux-4.1.13.orig/arch/arm/include/asm/thread_info.h linux-4.1.13/arch/arm/include/asm/thread_info.h
---- linux-4.1.13.orig/arch/arm/include/asm/thread_info.h 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/include/asm/thread_info.h 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/include/asm/thread_info.h linux-4.1.20/arch/arm/include/asm/thread_info.h
+--- linux-4.1.20.orig/arch/arm/include/asm/thread_info.h 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/include/asm/thread_info.h 2016-03-21 20:18:28.000000000 +0100
@@ -50,6 +50,7 @@
struct thread_info {
unsigned long flags; /* low level flags */
@@ -188,29 +508,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/include/asm/thread_info.h linux-4.1.13/arch
#define _TIF_UPROBE (1 << TIF_UPROBE)
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
-diff -Nur linux-4.1.13.orig/arch/arm/Kconfig linux-4.1.13/arch/arm/Kconfig
---- linux-4.1.13.orig/arch/arm/Kconfig 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/Kconfig 2015-11-29 09:23:09.477622951 +0100
-@@ -31,7 +31,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
-+ select HAVE_ARCH_JUMP_LABEL if (!XIP_KERNEL && !PREEMPT_RT_BASE)
- select HAVE_ARCH_KGDB
- select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT)
- select HAVE_ARCH_TRACEHOOK
-@@ -66,6 +66,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.1.13.orig/arch/arm/kernel/asm-offsets.c linux-4.1.13/arch/arm/kernel/asm-offsets.c
---- linux-4.1.13.orig/arch/arm/kernel/asm-offsets.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/kernel/asm-offsets.c 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/kernel/asm-offsets.c linux-4.1.20/arch/arm/kernel/asm-offsets.c
+--- linux-4.1.20.orig/arch/arm/kernel/asm-offsets.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/kernel/asm-offsets.c 2016-03-21 20:18:28.000000000 +0100
@@ -65,6 +65,7 @@
BLANK();
DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
@@ -219,9 +519,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/kernel/asm-offsets.c linux-4.1.13/arch/arm/
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 -Nur linux-4.1.13.orig/arch/arm/kernel/entry-armv.S linux-4.1.13/arch/arm/kernel/entry-armv.S
---- linux-4.1.13.orig/arch/arm/kernel/entry-armv.S 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/kernel/entry-armv.S 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/kernel/entry-armv.S linux-4.1.20/arch/arm/kernel/entry-armv.S
+--- linux-4.1.20.orig/arch/arm/kernel/entry-armv.S 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/kernel/entry-armv.S 2016-03-21 20:18:28.000000000 +0100
@@ -208,11 +208,18 @@
#ifdef CONFIG_PREEMPT
get_thread_info tsk
@@ -252,9 +552,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/kernel/entry-armv.S linux-4.1.13/arch/arm/k
reteq r8 @ go again
b 1b
#endif
-diff -Nur linux-4.1.13.orig/arch/arm/kernel/process.c linux-4.1.13/arch/arm/kernel/process.c
---- linux-4.1.13.orig/arch/arm/kernel/process.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/kernel/process.c 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/kernel/process.c linux-4.1.20/arch/arm/kernel/process.c
+--- linux-4.1.20.orig/arch/arm/kernel/process.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/kernel/process.c 2016-03-21 20:18:28.000000000 +0100
@@ -290,6 +290,30 @@
}
@@ -286,9 +586,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/kernel/process.c linux-4.1.13/arch/arm/kern
#ifdef CONFIG_KUSER_HELPERS
/*
* The vectors page is always readable from user space for the
-diff -Nur linux-4.1.13.orig/arch/arm/kernel/signal.c linux-4.1.13/arch/arm/kernel/signal.c
---- linux-4.1.13.orig/arch/arm/kernel/signal.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/kernel/signal.c 2015-11-29 09:23:09.477622951 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/kernel/signal.c linux-4.1.20/arch/arm/kernel/signal.c
+--- linux-4.1.20.orig/arch/arm/kernel/signal.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/kernel/signal.c 2016-03-21 20:18:28.000000000 +0100
@@ -568,7 +568,8 @@
do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
{
@@ -299,9 +599,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/kernel/signal.c linux-4.1.13/arch/arm/kerne
schedule();
} else {
if (unlikely(!user_mode(regs)))
-diff -Nur linux-4.1.13.orig/arch/arm/kernel/smp.c linux-4.1.13/arch/arm/kernel/smp.c
---- linux-4.1.13.orig/arch/arm/kernel/smp.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/kernel/smp.c 2015-11-29 09:23:09.481622687 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/kernel/smp.c linux-4.1.20/arch/arm/kernel/smp.c
+--- linux-4.1.20.orig/arch/arm/kernel/smp.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/kernel/smp.c 2016-03-21 20:18:28.000000000 +0100
@@ -213,8 +213,6 @@
flush_cache_louis();
local_flush_tlb_all();
@@ -321,9 +621,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/kernel/smp.c linux-4.1.13/arch/arm/kernel/s
pr_notice("CPU%u: shutdown\n", cpu);
/*
-diff -Nur linux-4.1.13.orig/arch/arm/kernel/unwind.c linux-4.1.13/arch/arm/kernel/unwind.c
---- linux-4.1.13.orig/arch/arm/kernel/unwind.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/kernel/unwind.c 2015-11-29 09:23:09.481622687 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/kernel/unwind.c linux-4.1.20/arch/arm/kernel/unwind.c
+--- linux-4.1.20.orig/arch/arm/kernel/unwind.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/kernel/unwind.c 2016-03-21 20:18:28.000000000 +0100
@@ -93,7 +93,7 @@
static const struct unwind_idx *__origin_unwind_idx;
extern const struct unwind_idx __stop_unwind_idx[];
@@ -375,9 +675,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/kernel/unwind.c linux-4.1.13/arch/arm/kerne
kfree(tab);
}
-diff -Nur linux-4.1.13.orig/arch/arm/kvm/arm.c linux-4.1.13/arch/arm/kvm/arm.c
---- linux-4.1.13.orig/arch/arm/kvm/arm.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/kvm/arm.c 2015-11-29 09:23:09.481622687 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/kvm/arm.c linux-4.1.20/arch/arm/kvm/arm.c
+--- linux-4.1.20.orig/arch/arm/kvm/arm.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/kvm/arm.c 2016-03-21 20:18:28.000000000 +0100
@@ -474,9 +474,9 @@
static void vcpu_pause(struct kvm_vcpu *vcpu)
@@ -390,9 +690,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/kvm/arm.c linux-4.1.13/arch/arm/kvm/arm.c
}
static int kvm_vcpu_initialized(struct kvm_vcpu *vcpu)
-diff -Nur linux-4.1.13.orig/arch/arm/kvm/psci.c linux-4.1.13/arch/arm/kvm/psci.c
---- linux-4.1.13.orig/arch/arm/kvm/psci.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/kvm/psci.c 2015-11-29 09:23:09.501621354 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/kvm/psci.c linux-4.1.20/arch/arm/kvm/psci.c
+--- linux-4.1.20.orig/arch/arm/kvm/psci.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/kvm/psci.c 2016-03-21 20:18:28.000000000 +0100
@@ -68,7 +68,7 @@
{
struct kvm *kvm = source_vcpu->kvm;
@@ -411,9 +711,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/kvm/psci.c linux-4.1.13/arch/arm/kvm/psci.c
return PSCI_RET_SUCCESS;
}
-diff -Nur linux-4.1.13.orig/arch/arm/mach-exynos/platsmp.c linux-4.1.13/arch/arm/mach-exynos/platsmp.c
---- linux-4.1.13.orig/arch/arm/mach-exynos/platsmp.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/mach-exynos/platsmp.c 2015-11-29 09:23:09.501621354 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/mach-exynos/platsmp.c linux-4.1.20/arch/arm/mach-exynos/platsmp.c
+--- linux-4.1.20.orig/arch/arm/mach-exynos/platsmp.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/mach-exynos/platsmp.c 2016-03-21 20:18:28.000000000 +0100
@@ -231,7 +231,7 @@
return (void __iomem *)(S5P_VA_SCU);
}
@@ -461,9 +761,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/mach-exynos/platsmp.c linux-4.1.13/arch/arm
return pen_release != -1 ? ret : 0;
}
-diff -Nur linux-4.1.13.orig/arch/arm/mach-hisi/platmcpm.c linux-4.1.13/arch/arm/mach-hisi/platmcpm.c
---- linux-4.1.13.orig/arch/arm/mach-hisi/platmcpm.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/mach-hisi/platmcpm.c 2015-11-29 09:23:09.501621354 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/mach-hisi/platmcpm.c linux-4.1.20/arch/arm/mach-hisi/platmcpm.c
+--- linux-4.1.20.orig/arch/arm/mach-hisi/platmcpm.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/mach-hisi/platmcpm.c 2016-03-21 20:18:28.000000000 +0100
@@ -57,7 +57,7 @@
static void __iomem *sysctrl, *fabric;
@@ -566,9 +866,20 @@ diff -Nur linux-4.1.13.orig/arch/arm/mach-hisi/platmcpm.c linux-4.1.13/arch/arm/
}
static void __naked hip04_mcpm_power_up_setup(unsigned int affinity_level)
-diff -Nur linux-4.1.13.orig/arch/arm/mach-omap2/omap-smp.c linux-4.1.13/arch/arm/mach-omap2/omap-smp.c
---- linux-4.1.13.orig/arch/arm/mach-omap2/omap-smp.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/mach-omap2/omap-smp.c 2015-11-29 09:23:09.501621354 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/mach-omap2/gpio.c linux-4.1.20/arch/arm/mach-omap2/gpio.c
+--- linux-4.1.20.orig/arch/arm/mach-omap2/gpio.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/mach-omap2/gpio.c 2016-03-21 20:18:28.000000000 +0100
+@@ -130,7 +130,6 @@
+ }
+
+ pwrdm = omap_hwmod_get_pwrdm(oh);
+- pdata->loses_context = pwrdm_can_ever_lose_context(pwrdm);
+
+ pdev = omap_device_build(name, id - 1, oh, pdata, sizeof(*pdata));
+ kfree(pdata);
+diff -Nur linux-4.1.20.orig/arch/arm/mach-omap2/omap-smp.c linux-4.1.20/arch/arm/mach-omap2/omap-smp.c
+--- linux-4.1.20.orig/arch/arm/mach-omap2/omap-smp.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/mach-omap2/omap-smp.c 2016-03-21 20:18:28.000000000 +0100
@@ -43,7 +43,7 @@
/* SCU base address */
static void __iomem *scu_base;
@@ -607,9 +918,67 @@ diff -Nur linux-4.1.13.orig/arch/arm/mach-omap2/omap-smp.c linux-4.1.13/arch/arm
return 0;
}
-diff -Nur linux-4.1.13.orig/arch/arm/mach-prima2/platsmp.c linux-4.1.13/arch/arm/mach-prima2/platsmp.c
---- linux-4.1.13.orig/arch/arm/mach-prima2/platsmp.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/mach-prima2/platsmp.c 2015-11-29 09:23:09.501621354 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/mach-omap2/powerdomain.c linux-4.1.20/arch/arm/mach-omap2/powerdomain.c
+--- linux-4.1.20.orig/arch/arm/mach-omap2/powerdomain.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/mach-omap2/powerdomain.c 2016-03-21 20:18:28.000000000 +0100
+@@ -1166,43 +1166,3 @@
+ return count;
+ }
+
+-/**
+- * pwrdm_can_ever_lose_context - can this powerdomain ever lose context?
+- * @pwrdm: struct powerdomain *
+- *
+- * Given a struct powerdomain * @pwrdm, returns 1 if the powerdomain
+- * can lose either memory or logic context or if @pwrdm is invalid, or
+- * returns 0 otherwise. This function is not concerned with how the
+- * powerdomain registers are programmed (i.e., to go off or not); it's
+- * concerned with whether it's ever possible for this powerdomain to
+- * go off while some other part of the chip is active. This function
+- * assumes that every powerdomain can go to either ON or INACTIVE.
+- */
+-bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm)
+-{
+- int i;
+-
+- if (!pwrdm) {
+- pr_debug("powerdomain: %s: invalid powerdomain pointer\n",
+- __func__);
+- return 1;
+- }
+-
+- if (pwrdm->pwrsts & PWRSTS_OFF)
+- return 1;
+-
+- if (pwrdm->pwrsts & PWRSTS_RET) {
+- if (pwrdm->pwrsts_logic_ret & PWRSTS_OFF)
+- return 1;
+-
+- for (i = 0; i < pwrdm->banks; i++)
+- if (pwrdm->pwrsts_mem_ret[i] & PWRSTS_OFF)
+- return 1;
+- }
+-
+- for (i = 0; i < pwrdm->banks; i++)
+- if (pwrdm->pwrsts_mem_on[i] & PWRSTS_OFF)
+- return 1;
+-
+- return 0;
+-}
+diff -Nur linux-4.1.20.orig/arch/arm/mach-omap2/powerdomain.h linux-4.1.20/arch/arm/mach-omap2/powerdomain.h
+--- linux-4.1.20.orig/arch/arm/mach-omap2/powerdomain.h 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/mach-omap2/powerdomain.h 2016-03-21 20:18:28.000000000 +0100
+@@ -244,7 +244,6 @@
+ int pwrdm_pre_transition(struct powerdomain *pwrdm);
+ int pwrdm_post_transition(struct powerdomain *pwrdm);
+ int pwrdm_get_context_loss_count(struct powerdomain *pwrdm);
+-bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm);
+
+ extern int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 state);
+
+diff -Nur linux-4.1.20.orig/arch/arm/mach-prima2/platsmp.c linux-4.1.20/arch/arm/mach-prima2/platsmp.c
+--- linux-4.1.20.orig/arch/arm/mach-prima2/platsmp.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/mach-prima2/platsmp.c 2016-03-21 20:18:28.000000000 +0100
@@ -22,7 +22,7 @@
static void __iomem *clk_base;
@@ -648,9 +1017,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/mach-prima2/platsmp.c linux-4.1.13/arch/arm
return pen_release != -1 ? -ENOSYS : 0;
}
-diff -Nur linux-4.1.13.orig/arch/arm/mach-qcom/platsmp.c linux-4.1.13/arch/arm/mach-qcom/platsmp.c
---- linux-4.1.13.orig/arch/arm/mach-qcom/platsmp.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/mach-qcom/platsmp.c 2015-11-29 09:23:09.501621354 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/mach-qcom/platsmp.c linux-4.1.20/arch/arm/mach-qcom/platsmp.c
+--- linux-4.1.20.orig/arch/arm/mach-qcom/platsmp.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/mach-qcom/platsmp.c 2016-03-21 20:18:28.000000000 +0100
@@ -46,7 +46,7 @@
extern void secondary_startup_arm(void);
@@ -689,9 +1058,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/mach-qcom/platsmp.c linux-4.1.13/arch/arm/m
return ret;
}
-diff -Nur linux-4.1.13.orig/arch/arm/mach-spear/platsmp.c linux-4.1.13/arch/arm/mach-spear/platsmp.c
---- linux-4.1.13.orig/arch/arm/mach-spear/platsmp.c 2015-11-09 23:34:10.000000000 +0100
-+++ linux-4.1.13/arch/arm/mach-spear/platsmp.c 2015-11-29 09:23:09.501621354 +0100
+diff -Nur linux-4.1.20.orig/arch/arm/mach-spear/platsmp.c linux-4.1.20/arch/arm/mach-spear/platsmp.c
+--- linux-4.1.20.orig/arch/arm/mach-spear/platsmp.c 2016-03-17 19:11:03.000000000 +0100
++++ linux-4.1.20/arch/arm/mach-spear/platsmp.c 2016-03-21 20:18:28.000000000 +0100
@@ -32,7 +32,7 @@
sync_cache_w(&pen_release);
}
@@ -730,9 +1099,9 @@ diff -Nur linux-4.1.13.orig/arch/arm/ma