diff options
-rw-r--r-- | mk/kernel-ver.mk | 4 | ||||
-rw-r--r-- | target/avr32/grasshopper/patches/4.8.15/0001-grasshopper.patch (renamed from target/avr32/grasshopper/patches/4.8.11/0001-grasshopper.patch) | 0 | ||||
-rw-r--r-- | target/avr32/grasshopper/patches/4.8.15/0002-grasshopper-led-pwm.patch (renamed from target/avr32/grasshopper/patches/4.8.11/0002-grasshopper-led-pwm.patch) | 0 | ||||
-rw-r--r-- | target/avr32/grasshopper/patches/4.8.15/0003-grasshopper-mmc.patch (renamed from target/avr32/grasshopper/patches/4.8.11/0003-grasshopper-mmc.patch) | 0 | ||||
-rw-r--r-- | target/avr32/grasshopper/patches/4.8.15/0004-grasshopper-i2c.patch (renamed from target/avr32/grasshopper/patches/4.8.11/0004-grasshopper-i2c.patch) | 0 | ||||
-rw-r--r-- | target/avr32/grasshopper/patches/4.8.15/0005-grasshopper-usart.patch (renamed from target/avr32/grasshopper/patches/4.8.11/0005-grasshopper-usart.patch) | 0 | ||||
-rw-r--r-- | target/avr32/grasshopper/patches/4.8.15/0100-netfilter-init-fix.patch (renamed from target/avr32/grasshopper/patches/4.8.11/0100-netfilter-init-fix.patch) | 0 | ||||
-rw-r--r-- | target/config/Config.in.kernelversion | 2 | ||||
-rw-r--r-- | target/linux/patches/4.8.11/sparc32.patch | 31 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/crisv32.patch (renamed from target/linux/patches/4.8.11/crisv32.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/crisv32_ethernet_driver.patch (renamed from target/linux/patches/4.8.11/crisv32_ethernet_driver.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/initramfs-nosizelimit.patch (renamed from target/linux/patches/4.8.11/initramfs-nosizelimit.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/ld-or1k.patch (renamed from target/linux/patches/4.8.11/ld-or1k.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/macsonic.patch (renamed from target/linux/patches/4.8.11/macsonic.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/microblaze-sigaltstack.patch (renamed from target/linux/patches/4.8.11/microblaze-sigaltstack.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/or1k-more-ram.patch (renamed from target/linux/patches/4.8.11/or1k-more-ram.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/patch-realtime (renamed from target/linux/patches/4.8.11/patch-realtime) | 6947 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/sh2.patch (renamed from target/linux/patches/4.8.11/sh2.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/startup.patch (renamed from target/linux/patches/4.8.11/startup.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.8.15/vdso2.patch (renamed from target/linux/patches/4.8.11/vdso2.patch) | 0 |
20 files changed, 3339 insertions, 3645 deletions
diff --git a/mk/kernel-ver.mk b/mk/kernel-ver.mk index 58f95dd55..ecc5c26ef 100644 --- a/mk/kernel-ver.mk +++ b/mk/kernel-ver.mk @@ -22,10 +22,10 @@ KERNEL_VERSION:= $(KERNEL_FILE_VER)-$(KERNEL_RELEASE) KERNEL_HASH:= 029098dcffab74875e086ae970e3828456838da6e0ba22ce3f64ef764f3d7f1a endif ifeq ($(ADK_TARGET_KERNEL_VERSION_4_8),y) -KERNEL_FILE_VER:= 4.8.11 +KERNEL_FILE_VER:= 4.8.15 KERNEL_RELEASE:= 1 KERNEL_VERSION:= $(KERNEL_FILE_VER)-$(KERNEL_RELEASE) -KERNEL_HASH:= cc0f42f408ba3e51f8b0e93e3d8050ff18569456d286cb2a1aca3327dd06890f +KERNEL_HASH:= 1605260913729b7b72a64a0598b782725e365dab57d49dec188373d634538fee endif ifeq ($(ADK_TARGET_KERNEL_VERSION_4_4),y) KERNEL_FILE_VER:= 4.4.30 diff --git a/target/avr32/grasshopper/patches/4.8.11/0001-grasshopper.patch b/target/avr32/grasshopper/patches/4.8.15/0001-grasshopper.patch index 0fa4535c2..0fa4535c2 100644 --- a/target/avr32/grasshopper/patches/4.8.11/0001-grasshopper.patch +++ b/target/avr32/grasshopper/patches/4.8.15/0001-grasshopper.patch diff --git a/target/avr32/grasshopper/patches/4.8.11/0002-grasshopper-led-pwm.patch b/target/avr32/grasshopper/patches/4.8.15/0002-grasshopper-led-pwm.patch index 977c91523..977c91523 100644 --- a/target/avr32/grasshopper/patches/4.8.11/0002-grasshopper-led-pwm.patch +++ b/target/avr32/grasshopper/patches/4.8.15/0002-grasshopper-led-pwm.patch diff --git a/target/avr32/grasshopper/patches/4.8.11/0003-grasshopper-mmc.patch b/target/avr32/grasshopper/patches/4.8.15/0003-grasshopper-mmc.patch index f87d4731b..f87d4731b 100644 --- a/target/avr32/grasshopper/patches/4.8.11/0003-grasshopper-mmc.patch +++ b/target/avr32/grasshopper/patches/4.8.15/0003-grasshopper-mmc.patch diff --git a/target/avr32/grasshopper/patches/4.8.11/0004-grasshopper-i2c.patch b/target/avr32/grasshopper/patches/4.8.15/0004-grasshopper-i2c.patch index b0796ed5a..b0796ed5a 100644 --- a/target/avr32/grasshopper/patches/4.8.11/0004-grasshopper-i2c.patch +++ b/target/avr32/grasshopper/patches/4.8.15/0004-grasshopper-i2c.patch diff --git a/target/avr32/grasshopper/patches/4.8.11/0005-grasshopper-usart.patch b/target/avr32/grasshopper/patches/4.8.15/0005-grasshopper-usart.patch index 448647c29..448647c29 100644 --- a/target/avr32/grasshopper/patches/4.8.11/0005-grasshopper-usart.patch +++ b/target/avr32/grasshopper/patches/4.8.15/0005-grasshopper-usart.patch diff --git a/target/avr32/grasshopper/patches/4.8.11/0100-netfilter-init-fix.patch b/target/avr32/grasshopper/patches/4.8.15/0100-netfilter-init-fix.patch index 9d80e8b53..9d80e8b53 100644 --- a/target/avr32/grasshopper/patches/4.8.11/0100-netfilter-init-fix.patch +++ b/target/avr32/grasshopper/patches/4.8.15/0100-netfilter-init-fix.patch diff --git a/target/config/Config.in.kernelversion b/target/config/Config.in.kernelversion index 6f999bd91..47fba887b 100644 --- a/target/config/Config.in.kernelversion +++ b/target/config/Config.in.kernelversion @@ -32,7 +32,7 @@ config ADK_TARGET_KERNEL_VERSION_4_9 depends on !ADK_TARGET_SYSTEM_QEMU_ARM_VERSATILEPB_NOMMU config ADK_TARGET_KERNEL_VERSION_4_8 - bool "4.8.11" + bool "4.8.15" depends on !ADK_TARGET_ARCH_CRIS depends on !ADK_TARGET_ARCH_METAG depends on !ADK_TARGET_ARCH_NDS32 diff --git a/target/linux/patches/4.8.11/sparc32.patch b/target/linux/patches/4.8.11/sparc32.patch deleted file mode 100644 index b11e3b7f1..000000000 --- a/target/linux/patches/4.8.11/sparc32.patch +++ /dev/null @@ -1,31 +0,0 @@ -commit 07b5ab3f71d318e52c18cc3b73c1d44c908aacfa -Author: Andreas Larsson <andreas@gaisler.com> -Date: Wed Nov 9 10:43:05 2016 +0100 - - sparc32: Fix inverted invalid_frame_pointer checks on sigreturns - - Signed-off-by: Andreas Larsson <andreas@gaisler.com> - Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/arch/sparc/kernel/signal_32.c b/arch/sparc/kernel/signal_32.c -index c3c12ef..9c0c8fd 100644 ---- a/arch/sparc/kernel/signal_32.c -+++ b/arch/sparc/kernel/signal_32.c -@@ -89,7 +89,7 @@ asmlinkage void do_sigreturn(struct pt_regs *regs) - sf = (struct signal_frame __user *) regs->u_regs[UREG_FP]; - - /* 1. Make sure we are not getting garbage from the user */ -- if (!invalid_frame_pointer(sf, sizeof(*sf))) -+ if (invalid_frame_pointer(sf, sizeof(*sf))) - goto segv_and_exit; - - if (get_user(ufp, &sf->info.si_regs.u_regs[UREG_FP])) -@@ -150,7 +150,7 @@ asmlinkage void do_rt_sigreturn(struct pt_regs *regs) - - synchronize_user_stack(); - sf = (struct rt_signal_frame __user *) regs->u_regs[UREG_FP]; -- if (!invalid_frame_pointer(sf, sizeof(*sf))) -+ if (invalid_frame_pointer(sf, sizeof(*sf))) - goto segv; - - if (get_user(ufp, &sf->regs.u_regs[UREG_FP])) diff --git a/target/linux/patches/4.8.11/crisv32.patch b/target/linux/patches/4.8.15/crisv32.patch index cb9b0d028..cb9b0d028 100644 --- a/target/linux/patches/4.8.11/crisv32.patch +++ b/target/linux/patches/4.8.15/crisv32.patch diff --git a/target/linux/patches/4.8.11/crisv32_ethernet_driver.patch b/target/linux/patches/4.8.15/crisv32_ethernet_driver.patch index 0cef202fc..0cef202fc 100644 --- a/target/linux/patches/4.8.11/crisv32_ethernet_driver.patch +++ b/target/linux/patches/4.8.15/crisv32_ethernet_driver.patch diff --git a/target/linux/patches/4.8.11/initramfs-nosizelimit.patch b/target/linux/patches/4.8.15/initramfs-nosizelimit.patch index 40d2f6bd8..40d2f6bd8 100644 --- a/target/linux/patches/4.8.11/initramfs-nosizelimit.patch +++ b/target/linux/patches/4.8.15/initramfs-nosizelimit.patch diff --git a/target/linux/patches/4.8.11/ld-or1k.patch b/target/linux/patches/4.8.15/ld-or1k.patch index 264f9166f..264f9166f 100644 --- a/target/linux/patches/4.8.11/ld-or1k.patch +++ b/target/linux/patches/4.8.15/ld-or1k.patch diff --git a/target/linux/patches/4.8.11/macsonic.patch b/target/linux/patches/4.8.15/macsonic.patch index 75a6fcad2..75a6fcad2 100644 --- a/target/linux/patches/4.8.11/macsonic.patch +++ b/target/linux/patches/4.8.15/macsonic.patch diff --git a/target/linux/patches/4.8.11/microblaze-sigaltstack.patch b/target/linux/patches/4.8.15/microblaze-sigaltstack.patch index c4064e8b9..c4064e8b9 100644 --- a/target/linux/patches/4.8.11/microblaze-sigaltstack.patch +++ b/target/linux/patches/4.8.15/microblaze-sigaltstack.patch diff --git a/target/linux/patches/4.8.11/or1k-more-ram.patch b/target/linux/patches/4.8.15/or1k-more-ram.patch index de848c838..de848c838 100644 --- a/target/linux/patches/4.8.11/or1k-more-ram.patch +++ b/target/linux/patches/4.8.15/or1k-more-ram.patch diff --git a/target/linux/patches/4.8.11/patch-realtime b/target/linux/patches/4.8.15/patch-realtime index 91b37c52f..d3a9ebee7 100644 --- a/target/linux/patches/4.8.11/patch-realtime +++ b/target/linux/patches/4.8.15/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 3a3b30ac2a75..9e0745cafbd8 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 fd6e9712af81..085134ee13e9 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 a9c4e48bb7ec..6eefe4f32302 100644 ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -36,7 +36,7 @@ config ARM - select HAVE_ARCH_AUDITSYSCALL if (AEABI && !OABI_COMPAT) - select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6 - select HAVE_ARCH_HARDENED_USERCOPY -- 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) -@@ -75,6 +75,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.8.15.orig/arch/arm/include/asm/switch_to.h linux-4.8.15/arch/arm/include/asm/switch_to.h +--- linux-4.8.15.orig/arch/arm/include/asm/switch_to.h 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/include/asm/switch_to.h 2017-01-01 17:07:11.543137886 +0100 @@ -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.8.15.orig/arch/arm/include/asm/thread_info.h linux-4.8.15/arch/arm/include/asm/thread_info.h +--- linux-4.8.15.orig/arch/arm/include/asm/thread_info.h 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/include/asm/thread_info.h 2017-01-01 17:07:11.547138137 +0100 +@@ -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 608008229c7d..3866da3f7bb7 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.8.15.orig/arch/arm/Kconfig linux-4.8.15/arch/arm/Kconfig +--- linux-4.8.15.orig/arch/arm/Kconfig 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/Kconfig 2017-01-01 17:07:11.487134269 +0100 +@@ -36,7 +36,7 @@ + select HAVE_ARCH_AUDITSYSCALL if (AEABI && !OABI_COMPAT) + select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6 + select HAVE_ARCH_HARDENED_USERCOPY +- 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) +@@ -75,6 +75,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.8.15.orig/arch/arm/kernel/asm-offsets.c linux-4.8.15/arch/arm/kernel/asm-offsets.c +--- linux-4.8.15.orig/arch/arm/kernel/asm-offsets.c 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/kernel/asm-offsets.c 2017-01-01 17:07:11.587140711 +0100 +@@ -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 608008229c7d..3866da3f7bb7 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 9f157e7c51e7..468e224d76aa 100644 ---- a/arch/arm/kernel/entry-armv.S -+++ b/arch/arm/kernel/entry-armv.S -@@ -220,11 +220,18 @@ ENDPROC(__dabt_svc) +diff -Nur linux-4.8.15.orig/arch/arm/kernel/entry-armv.S linux-4.8.15/arch/arm/kernel/entry-armv.S +--- linux-4.8.15.orig/arch/arm/kernel/entry-armv.S 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/kernel/entry-armv.S 2017-01-01 17:07:11.611142259 +0100 +@@ -220,11 +220,18 @@ #ifdef CONFIG_PREEMPT ldr r8, [tsk, #TI_PREEMPT] @ get preempt count @@ -428,7 +117,7 @@ index 9f157e7c51e7..468e224d76aa 100644 #endif svc_exit r5, irq = 1 @ return from exception -@@ -239,8 +246,14 @@ ENDPROC(__irq_svc) +@@ -239,8 +246,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 9f157e7c51e7..468e224d76aa 100644 #endif __und_fault: -diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S -index 10c3283d6c19..8872937862cc 100644 ---- a/arch/arm/kernel/entry-common.S -+++ b/arch/arm/kernel/entry-common.S +diff -Nur linux-4.8.15.orig/arch/arm/kernel/entry-common.S linux-4.8.15/arch/arm/kernel/entry-common.S +--- linux-4.8.15.orig/arch/arm/kernel/entry-common.S 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/kernel/entry-common.S 2017-01-01 17:07:11.615142513 +0100 @@ -36,7 +36,9 @@ UNWIND(.cantunwind ) disable_irq_notrace @ disable interrupts @@ -459,7 +147,7 @@ index 10c3283d6c19..8872937862cc 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,40 @@ index 10c3283d6c19..8872937862cc 100644 UNWIND(.fnend ) ENDPROC(ret_fast_syscall) -diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c -index 612eb530f33f..cd3006dc1fd3 100644 ---- a/arch/arm/kernel/process.c -+++ b/arch/arm/kernel/process.c -@@ -323,6 +323,30 @@ unsigned long arch_randomize_brk(struct mm_struct *mm) +diff -Nur linux-4.8.15.orig/arch/arm/kernel/patch.c linux-4.8.15/arch/arm/kernel/patch.c +--- linux-4.8.15.orig/arch/arm/kernel/patch.c 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/kernel/patch.c 2017-01-01 17:07:11.623143039 +0100 +@@ -15,7 +15,7 @@ + unsigned int insn; + }; + +-static DEFINE_SPINLOCK(patch_lock); ++static DEFINE_RAW_SPINLOCK(patch_lock); + + static void __kprobes *patch_map(void *addr, int fixmap, unsigned long *flags) + __acquires(&patch_lock) +@@ -32,7 +32,7 @@ + return addr; + + if (flags) +- spin_lock_irqsave(&patch_lock, *flags); ++ raw_spin_lock_irqsave(&patch_lock, *flags); + else + __acquire(&patch_lock); + +@@ -47,7 +47,7 @@ + clear_fixmap(fixmap); + + if (flags) +- spin_unlock_irqrestore(&patch_lock, *flags); ++ raw_spin_unlock_irqrestore(&patch_lock, *flags); + else + __release(&patch_lock); + } +diff -Nur linux-4.8.15.orig/arch/arm/kernel/process.c linux-4.8.15/arch/arm/kernel/process.c +--- linux-4.8.15.orig/arch/arm/kernel/process.c 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/kernel/process.c 2017-01-01 17:07:11.631143548 +0100 +@@ -323,6 +323,30 @@ } #ifdef CONFIG_MMU @@ -507,11 +224,10 @@ index 612eb530f33f..cd3006dc1fd3 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.8.15.orig/arch/arm/kernel/signal.c linux-4.8.15/arch/arm/kernel/signal.c +--- linux-4.8.15.orig/arch/arm/kernel/signal.c 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/kernel/signal.c 2017-01-01 17:07:11.659145353 +0100 +@@ -572,7 +572,8 @@ */ trace_hardirqs_off(); do { @@ -521,11 +237,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 861521606c6d..e5ca865d321b 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.8.15.orig/arch/arm/kernel/smp.c linux-4.8.15/arch/arm/kernel/smp.c +--- linux-4.8.15.orig/arch/arm/kernel/smp.c 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/kernel/smp.c 2017-01-01 17:07:11.671146131 +0100 +@@ -234,8 +234,6 @@ flush_cache_louis(); local_flush_tlb_all(); @@ -534,7 +249,7 @@ index 861521606c6d..e5ca865d321b 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 +259,10 @@ index 861521606c6d..e5ca865d321b 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.8.15.orig/arch/arm/kernel/unwind.c linux-4.8.15/arch/arm/kernel/unwind.c +--- linux-4.8.15.orig/arch/arm/kernel/unwind.c 2016-12-15 17:50:48.000000000 +0100 ++++ linux-4.8.15/arch/arm/kernel/unwind.c 2017-01-01 17:07:11.671146131 +0100 +@@ -93,7 +93,7 @@ static const struct unwind_idx *__origin_unwind_idx; extern const struct unwind_idx __stop_unwind_idx[]; @@ -557,7 +271,7 @@ index 0bee233fef9a..314cfb232a63 100644 |