diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2017-05-19 03:41:24 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2017-05-19 03:41:24 +0200 |
commit | e29b0f2b4531f8d84040b21fa2aade94f80b6021 (patch) | |
tree | 58d955c9e234f18dbf9b95e767cd91ebde9db2c7 | |
parent | 5d158b6bfd62bdd9b1e8aaee771e0daaac36116e (diff) |
linux: update 4.9.x kernel, disable avr32 for latest kernel versions
-rw-r--r-- | mk/kernel-ver.mk | 4 | ||||
-rw-r--r-- | target/config/Config.in.kernelversion | 5 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/crisv32_ethernet_driver.patch (renamed from target/linux/patches/4.9.22/crisv32_ethernet_driver.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/h8300.patch (renamed from target/linux/patches/4.9.22/h8300.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/initramfs-nosizelimit.patch (renamed from target/linux/patches/4.9.22/initramfs-nosizelimit.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/ld-or1k.patch (renamed from target/linux/patches/4.9.22/ld-or1k.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/macsonic.patch (renamed from target/linux/patches/4.9.22/macsonic.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/microblaze-sigaltstack.patch (renamed from target/linux/patches/4.9.22/microblaze-sigaltstack.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/or1k-more-ram.patch (renamed from target/linux/patches/4.9.22/or1k-more-ram.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/patch-realtime (renamed from target/linux/patches/4.9.22/patch-realtime) | 3923 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/sh2.patch (renamed from target/linux/patches/4.9.22/sh2.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/startup.patch (renamed from target/linux/patches/4.9.22/startup.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/4.9.28/vdso2.patch (renamed from target/linux/patches/4.9.22/vdso2.patch) | 0 |
13 files changed, 2429 insertions, 1503 deletions
diff --git a/mk/kernel-ver.mk b/mk/kernel-ver.mk index 746d13db7..79f3ccd37 100644 --- a/mk/kernel-ver.mk +++ b/mk/kernel-ver.mk @@ -28,10 +28,10 @@ KERNEL_VERSION:= $(KERNEL_FILE_VER)-$(KERNEL_RELEASE) KERNEL_HASH:= dcc547c505e4b4d150c32426547e4aad070d7b4b103bfd559f1674c9fc7fe00b endif ifeq ($(ADK_TARGET_KERNEL_VERSION_4_9),y) -KERNEL_FILE_VER:= 4.9.22 +KERNEL_FILE_VER:= 4.9.28 KERNEL_RELEASE:= 1 KERNEL_VERSION:= $(KERNEL_FILE_VER)-$(KERNEL_RELEASE) -KERNEL_HASH:= dbdb1c58706a9010627f1fb68f3246f37544f2b6e2df524925c181e249b8036a +KERNEL_HASH:= 05d1f32f0d4853e4b31e1f9a834cb4d2695d026d6518f9287a4a2f3c28a4a928 endif ifeq ($(ADK_TARGET_KERNEL_VERSION_4_6),y) KERNEL_FILE_VER:= 4.6.2 diff --git a/target/config/Config.in.kernelversion b/target/config/Config.in.kernelversion index 13c1f1781..32ccf6227 100644 --- a/target/config/Config.in.kernelversion +++ b/target/config/Config.in.kernelversion @@ -18,6 +18,7 @@ default ADK_TARGET_KERNEL_VERSION_4_9 config ADK_TARGET_KERNEL_VERSION_GIT bool "git" + depends on !ADK_TARGET_ARCH_AVR32 depends on !ADK_TARGET_ARCH_NDS32 depends on !ADK_TARGET_ARCH_RISCV32 depends on !ADK_TARGET_ARCH_RISCV64 @@ -28,6 +29,7 @@ config ADK_TARGET_KERNEL_VERSION_GIT config ADK_TARGET_KERNEL_VERSION_4_11 bool "4.11" + depends on !ADK_TARGET_ARCH_AVR32 depends on !ADK_TARGET_ARCH_CRIS depends on !ADK_TARGET_ARCH_METAG depends on !ADK_TARGET_ARCH_NDS32 @@ -37,6 +39,7 @@ config ADK_TARGET_KERNEL_VERSION_4_11 config ADK_TARGET_KERNEL_VERSION_4_10 bool "4.10.16" + depends on !ADK_TARGET_ARCH_AVR32 depends on !ADK_TARGET_ARCH_CRIS depends on !ADK_TARGET_ARCH_METAG depends on !ADK_TARGET_ARCH_NDS32 @@ -45,7 +48,7 @@ config ADK_TARGET_KERNEL_VERSION_4_10 depends on !ADK_TARGET_SYSTEM_QEMU_ARM_VERSATILEPB_NOMMU config ADK_TARGET_KERNEL_VERSION_4_9 - bool "4.9.22" + bool "4.9.28" 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.9.22/crisv32_ethernet_driver.patch b/target/linux/patches/4.9.28/crisv32_ethernet_driver.patch index 0cef202fc..0cef202fc 100644 --- a/target/linux/patches/4.9.22/crisv32_ethernet_driver.patch +++ b/target/linux/patches/4.9.28/crisv32_ethernet_driver.patch diff --git a/target/linux/patches/4.9.22/h8300.patch b/target/linux/patches/4.9.28/h8300.patch index a58b3f137..a58b3f137 100644 --- a/target/linux/patches/4.9.22/h8300.patch +++ b/target/linux/patches/4.9.28/h8300.patch diff --git a/target/linux/patches/4.9.22/initramfs-nosizelimit.patch b/target/linux/patches/4.9.28/initramfs-nosizelimit.patch index 40d2f6bd8..40d2f6bd8 100644 --- a/target/linux/patches/4.9.22/initramfs-nosizelimit.patch +++ b/target/linux/patches/4.9.28/initramfs-nosizelimit.patch diff --git a/target/linux/patches/4.9.22/ld-or1k.patch b/target/linux/patches/4.9.28/ld-or1k.patch index 264f9166f..264f9166f 100644 --- a/target/linux/patches/4.9.22/ld-or1k.patch +++ b/target/linux/patches/4.9.28/ld-or1k.patch diff --git a/target/linux/patches/4.9.22/macsonic.patch b/target/linux/patches/4.9.28/macsonic.patch index 75a6fcad2..75a6fcad2 100644 --- a/target/linux/patches/4.9.22/macsonic.patch +++ b/target/linux/patches/4.9.28/macsonic.patch diff --git a/target/linux/patches/4.9.22/microblaze-sigaltstack.patch b/target/linux/patches/4.9.28/microblaze-sigaltstack.patch index c4064e8b9..c4064e8b9 100644 --- a/target/linux/patches/4.9.22/microblaze-sigaltstack.patch +++ b/target/linux/patches/4.9.28/microblaze-sigaltstack.patch diff --git a/target/linux/patches/4.9.22/or1k-more-ram.patch b/target/linux/patches/4.9.28/or1k-more-ram.patch index de848c838..de848c838 100644 --- a/target/linux/patches/4.9.22/or1k-more-ram.patch +++ b/target/linux/patches/4.9.28/or1k-more-ram.patch diff --git a/target/linux/patches/4.9.22/patch-realtime b/target/linux/patches/4.9.28/patch-realtime index 271c2db5a..ab9028ddd 100644 --- a/target/linux/patches/4.9.22/patch-realtime +++ b/target/linux/patches/4.9.28/patch-realtime @@ -1,6 +1,6 @@ -diff -Nur linux-4.9.22.orig/arch/arm/include/asm/irq.h linux-4.9.22/arch/arm/include/asm/irq.h ---- linux-4.9.22.orig/arch/arm/include/asm/irq.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/include/asm/irq.h 2017-04-18 17:19:16.618770722 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/include/asm/irq.h linux-4.9.28/arch/arm/include/asm/irq.h +--- linux-4.9.28.orig/arch/arm/include/asm/irq.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/include/asm/irq.h 2017-05-19 03:37:25.122174217 +0200 @@ -22,6 +22,8 @@ #endif @@ -10,9 +10,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/include/asm/irq.h linux-4.9.22/arch/arm/inc struct irqaction; struct pt_regs; extern void migrate_irqs(void); -diff -Nur linux-4.9.22.orig/arch/arm/include/asm/switch_to.h linux-4.9.22/arch/arm/include/asm/switch_to.h ---- linux-4.9.22.orig/arch/arm/include/asm/switch_to.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/include/asm/switch_to.h 2017-04-18 17:19:16.618770722 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/include/asm/switch_to.h linux-4.9.28/arch/arm/include/asm/switch_to.h +--- linux-4.9.28.orig/arch/arm/include/asm/switch_to.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/include/asm/switch_to.h 2017-05-19 03:37:25.122174217 +0200 @@ -3,6 +3,13 @@ #include <linux/thread_info.h> @@ -35,9 +35,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/include/asm/switch_to.h linux-4.9.22/arch/a last = __switch_to(prev,task_thread_info(prev), task_thread_info(next)); \ } while (0) -diff -Nur linux-4.9.22.orig/arch/arm/include/asm/thread_info.h linux-4.9.22/arch/arm/include/asm/thread_info.h ---- linux-4.9.22.orig/arch/arm/include/asm/thread_info.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/include/asm/thread_info.h 2017-04-18 17:19:16.618770722 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/include/asm/thread_info.h linux-4.9.28/arch/arm/include/asm/thread_info.h +--- linux-4.9.28.orig/arch/arm/include/asm/thread_info.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/include/asm/thread_info.h 2017-05-19 03:37:25.122174217 +0200 @@ -49,6 +49,7 @@ struct thread_info { unsigned long flags; /* low level flags */ @@ -74,9 +74,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/include/asm/thread_info.h linux-4.9.22/arch #endif /* __KERNEL__ */ #endif /* __ASM_ARM_THREAD_INFO_H */ -diff -Nur linux-4.9.22.orig/arch/arm/Kconfig linux-4.9.22/arch/arm/Kconfig ---- linux-4.9.22.orig/arch/arm/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/Kconfig 2017-04-18 17:19:16.618770722 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/Kconfig linux-4.9.28/arch/arm/Kconfig +--- linux-4.9.28.orig/arch/arm/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/Kconfig 2017-05-19 03:37:25.122174217 +0200 @@ -36,7 +36,7 @@ select HAVE_ARCH_AUDITSYSCALL if (AEABI && !OABI_COMPAT) select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6 @@ -94,9 +94,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/Kconfig linux-4.9.22/arch/arm/Kconfig select HAVE_RCU_TABLE_FREE if (SMP && ARM_LPAE) select HAVE_REGS_AND_STACK_ACCESS_API select HAVE_SYSCALL_TRACEPOINTS -diff -Nur linux-4.9.22.orig/arch/arm/kernel/asm-offsets.c linux-4.9.22/arch/arm/kernel/asm-offsets.c ---- linux-4.9.22.orig/arch/arm/kernel/asm-offsets.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/kernel/asm-offsets.c 2017-04-18 17:19:16.618770722 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/kernel/asm-offsets.c linux-4.9.28/arch/arm/kernel/asm-offsets.c +--- linux-4.9.28.orig/arch/arm/kernel/asm-offsets.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/kernel/asm-offsets.c 2017-05-19 03:37:25.122174217 +0200 @@ -65,6 +65,7 @@ BLANK(); DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); @@ -105,9 +105,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/kernel/asm-offsets.c linux-4.9.22/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.9.22.orig/arch/arm/kernel/entry-armv.S linux-4.9.22/arch/arm/kernel/entry-armv.S ---- linux-4.9.22.orig/arch/arm/kernel/entry-armv.S 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/kernel/entry-armv.S 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/kernel/entry-armv.S linux-4.9.28/arch/arm/kernel/entry-armv.S +--- linux-4.9.28.orig/arch/arm/kernel/entry-armv.S 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/kernel/entry-armv.S 2017-05-19 03:37:25.122174217 +0200 @@ -220,11 +220,18 @@ #ifdef CONFIG_PREEMPT @@ -145,9 +145,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/kernel/entry-armv.S linux-4.9.22/arch/arm/k #endif __und_fault: -diff -Nur linux-4.9.22.orig/arch/arm/kernel/entry-common.S linux-4.9.22/arch/arm/kernel/entry-common.S ---- linux-4.9.22.orig/arch/arm/kernel/entry-common.S 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/kernel/entry-common.S 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/kernel/entry-common.S linux-4.9.28/arch/arm/kernel/entry-common.S +--- linux-4.9.28.orig/arch/arm/kernel/entry-common.S 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/kernel/entry-common.S 2017-05-19 03:37:25.122174217 +0200 @@ -36,7 +36,9 @@ UNWIND(.cantunwind ) disable_irq_notrace @ disable interrupts @@ -172,9 +172,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/kernel/entry-common.S linux-4.9.22/arch/arm UNWIND(.fnend ) ENDPROC(ret_fast_syscall) -diff -Nur linux-4.9.22.orig/arch/arm/kernel/patch.c linux-4.9.22/arch/arm/kernel/patch.c ---- linux-4.9.22.orig/arch/arm/kernel/patch.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/kernel/patch.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/kernel/patch.c linux-4.9.28/arch/arm/kernel/patch.c +--- linux-4.9.28.orig/arch/arm/kernel/patch.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/kernel/patch.c 2017-05-19 03:37:25.122174217 +0200 @@ -15,7 +15,7 @@ unsigned int insn; }; @@ -202,9 +202,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/kernel/patch.c linux-4.9.22/arch/arm/kernel else __release(&patch_lock); } -diff -Nur linux-4.9.22.orig/arch/arm/kernel/process.c linux-4.9.22/arch/arm/kernel/process.c ---- linux-4.9.22.orig/arch/arm/kernel/process.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/kernel/process.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/kernel/process.c linux-4.9.28/arch/arm/kernel/process.c +--- linux-4.9.28.orig/arch/arm/kernel/process.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/kernel/process.c 2017-05-19 03:37:25.122174217 +0200 @@ -322,6 +322,30 @@ } @@ -236,9 +236,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/kernel/process.c linux-4.9.22/arch/arm/kern #ifdef CONFIG_KUSER_HELPERS /* * The vectors page is always readable from user space for the -diff -Nur linux-4.9.22.orig/arch/arm/kernel/signal.c linux-4.9.22/arch/arm/kernel/signal.c ---- linux-4.9.22.orig/arch/arm/kernel/signal.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/kernel/signal.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/kernel/signal.c linux-4.9.28/arch/arm/kernel/signal.c +--- linux-4.9.28.orig/arch/arm/kernel/signal.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/kernel/signal.c 2017-05-19 03:37:25.122174217 +0200 @@ -572,7 +572,8 @@ */ trace_hardirqs_off(); @@ -249,9 +249,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/kernel/signal.c linux-4.9.22/arch/arm/kerne schedule(); } else { if (unlikely(!user_mode(regs))) -diff -Nur linux-4.9.22.orig/arch/arm/kernel/smp.c linux-4.9.22/arch/arm/kernel/smp.c ---- linux-4.9.22.orig/arch/arm/kernel/smp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/kernel/smp.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/kernel/smp.c linux-4.9.28/arch/arm/kernel/smp.c +--- linux-4.9.28.orig/arch/arm/kernel/smp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/kernel/smp.c 2017-05-19 03:37:25.122174217 +0200 @@ -234,8 +234,6 @@ flush_cache_louis(); local_flush_tlb_all(); @@ -271,9 +271,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/kernel/smp.c linux-4.9.22/arch/arm/kernel/s pr_notice("CPU%u: shutdown\n", cpu); /* -diff -Nur linux-4.9.22.orig/arch/arm/kernel/unwind.c linux-4.9.22/arch/arm/kernel/unwind.c ---- linux-4.9.22.orig/arch/arm/kernel/unwind.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/kernel/unwind.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/kernel/unwind.c linux-4.9.28/arch/arm/kernel/unwind.c +--- linux-4.9.28.orig/arch/arm/kernel/unwind.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/kernel/unwind.c 2017-05-19 03:37:25.122174217 +0200 @@ -93,7 +93,7 @@ static const struct unwind_idx *__origin_unwind_idx; extern const struct unwind_idx __stop_unwind_idx[]; @@ -325,9 +325,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/kernel/unwind.c linux-4.9.22/arch/arm/kerne kfree(tab); } -diff -Nur linux-4.9.22.orig/arch/arm/kvm/arm.c linux-4.9.22/arch/arm/kvm/arm.c ---- linux-4.9.22.orig/arch/arm/kvm/arm.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/kvm/arm.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/kvm/arm.c linux-4.9.28/arch/arm/kvm/arm.c +--- linux-4.9.28.orig/arch/arm/kvm/arm.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/kvm/arm.c 2017-05-19 03:37:25.122174217 +0200 @@ -619,7 +619,7 @@ * involves poking the GIC, which must be done in a * non-preemptible context. @@ -355,9 +355,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/kvm/arm.c linux-4.9.22/arch/arm/kvm/arm.c ret = handle_exit(vcpu, run, ret); } -diff -Nur linux-4.9.22.orig/arch/arm/mach-exynos/platsmp.c linux-4.9.22/arch/arm/mach-exynos/platsmp.c ---- linux-4.9.22.orig/arch/arm/mach-exynos/platsmp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/mach-exynos/platsmp.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/mach-exynos/platsmp.c linux-4.9.28/arch/arm/mach-exynos/platsmp.c +--- linux-4.9.28.orig/arch/arm/mach-exynos/platsmp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/mach-exynos/platsmp.c 2017-05-19 03:37:25.122174217 +0200 @@ -229,7 +229,7 @@ return (void __iomem *)(S5P_VA_SCU); } @@ -405,9 +405,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/mach-exynos/platsmp.c linux-4.9.22/arch/arm return pen_release != -1 ? ret : 0; } -diff -Nur linux-4.9.22.orig/arch/arm/mach-hisi/platmcpm.c linux-4.9.22/arch/arm/mach-hisi/platmcpm.c ---- linux-4.9.22.orig/arch/arm/mach-hisi/platmcpm.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/mach-hisi/platmcpm.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/mach-hisi/platmcpm.c linux-4.9.28/arch/arm/mach-hisi/platmcpm.c +--- linux-4.9.28.orig/arch/arm/mach-hisi/platmcpm.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/mach-hisi/platmcpm.c 2017-05-19 03:37:25.122174217 +0200 @@ -61,7 +61,7 @@ static void __iomem *sysctrl, *fabric; @@ -493,9 +493,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/mach-hisi/platmcpm.c linux-4.9.22/arch/arm/ return 0; } #endif -diff -Nur linux-4.9.22.orig/arch/arm/mach-omap2/omap-smp.c linux-4.9.22/arch/arm/mach-omap2/omap-smp.c ---- linux-4.9.22.orig/arch/arm/mach-omap2/omap-smp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/mach-omap2/omap-smp.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/mach-omap2/omap-smp.c linux-4.9.28/arch/arm/mach-omap2/omap-smp.c +--- linux-4.9.28.orig/arch/arm/mach-omap2/omap-smp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/mach-omap2/omap-smp.c 2017-05-19 03:37:25.122174217 +0200 @@ -64,7 +64,7 @@ .startup_addr = omap5_secondary_startup, }; @@ -534,9 +534,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/mach-omap2/omap-smp.c linux-4.9.22/arch/arm return 0; } -diff -Nur linux-4.9.22.orig/arch/arm/mach-prima2/platsmp.c linux-4.9.22/arch/arm/mach-prima2/platsmp.c ---- linux-4.9.22.orig/arch/arm/mach-prima2/platsmp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/mach-prima2/platsmp.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/mach-prima2/platsmp.c linux-4.9.28/arch/arm/mach-prima2/platsmp.c +--- linux-4.9.28.orig/arch/arm/mach-prima2/platsmp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/mach-prima2/platsmp.c 2017-05-19 03:37:25.122174217 +0200 @@ -22,7 +22,7 @@ static void __iomem *clk_base; @@ -575,9 +575,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/mach-prima2/platsmp.c linux-4.9.22/arch/arm return pen_release != -1 ? -ENOSYS : 0; } -diff -Nur linux-4.9.22.orig/arch/arm/mach-qcom/platsmp.c linux-4.9.22/arch/arm/mach-qcom/platsmp.c ---- linux-4.9.22.orig/arch/arm/mach-qcom/platsmp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/mach-qcom/platsmp.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/mach-qcom/platsmp.c linux-4.9.28/arch/arm/mach-qcom/platsmp.c +--- linux-4.9.28.orig/arch/arm/mach-qcom/platsmp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/mach-qcom/platsmp.c 2017-05-19 03:37:25.122174217 +0200 @@ -46,7 +46,7 @@ extern void secondary_startup_arm(void); @@ -616,9 +616,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/mach-qcom/platsmp.c linux-4.9.22/arch/arm/m return ret; } -diff -Nur linux-4.9.22.orig/arch/arm/mach-spear/platsmp.c linux-4.9.22/arch/arm/mach-spear/platsmp.c ---- linux-4.9.22.orig/arch/arm/mach-spear/platsmp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/mach-spear/platsmp.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/mach-spear/platsmp.c linux-4.9.28/arch/arm/mach-spear/platsmp.c +--- linux-4.9.28.orig/arch/arm/mach-spear/platsmp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/mach-spear/platsmp.c 2017-05-19 03:37:25.122174217 +0200 @@ -32,7 +32,7 @@ sync_cache_w(&pen_release); } @@ -657,9 +657,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/mach-spear/platsmp.c linux-4.9.22/arch/arm/ return pen_release != -1 ? -ENOSYS : 0; } -diff -Nur linux-4.9.22.orig/arch/arm/mach-sti/platsmp.c linux-4.9.22/arch/arm/mach-sti/platsmp.c ---- linux-4.9.22.orig/arch/arm/mach-sti/platsmp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/mach-sti/platsmp.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/mach-sti/platsmp.c linux-4.9.28/arch/arm/mach-sti/platsmp.c +--- linux-4.9.28.orig/arch/arm/mach-sti/platsmp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/mach-sti/platsmp.c 2017-05-19 03:37:25.122174217 +0200 @@ -35,7 +35,7 @@ sync_cache_w(&pen_release); } @@ -698,9 +698,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/mach-sti/platsmp.c linux-4.9.22/arch/arm/ma return pen_release != -1 ? -ENOSYS : 0; } -diff -Nur linux-4.9.22.orig/arch/arm/mm/fault.c linux-4.9.22/arch/arm/mm/fault.c ---- linux-4.9.22.orig/arch/arm/mm/fault.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/mm/fault.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/mm/fault.c linux-4.9.28/arch/arm/mm/fault.c +--- linux-4.9.28.orig/arch/arm/mm/fault.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/mm/fault.c 2017-05-19 03:37:25.122174217 +0200 @@ -430,6 +430,9 @@ if (addr < TASK_SIZE) return do_page_fault(addr, fsr, regs); @@ -721,9 +721,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/mm/fault.c linux-4.9.22/arch/arm/mm/fault.c do_bad_area(addr, fsr, regs); return 0; } -diff -Nur linux-4.9.22.orig/arch/arm/mm/highmem.c linux-4.9.22/arch/arm/mm/highmem.c ---- linux-4.9.22.orig/arch/arm/mm/highmem.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/mm/highmem.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/mm/highmem.c linux-4.9.28/arch/arm/mm/highmem.c +--- linux-4.9.28.orig/arch/arm/mm/highmem.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/mm/highmem.c 2017-05-19 03:37:25.126174470 +0200 @@ -34,6 +34,11 @@ return *ptep; } @@ -854,9 +854,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/mm/highmem.c linux-4.9.22/arch/arm/mm/highm + } +} +#endif -diff -Nur linux-4.9.22.orig/arch/arm/plat-versatile/platsmp.c linux-4.9.22/arch/arm/plat-versatile/platsmp.c ---- linux-4.9.22.orig/arch/arm/plat-versatile/platsmp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm/plat-versatile/platsmp.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm/plat-versatile/platsmp.c linux-4.9.28/arch/arm/plat-versatile/platsmp.c +--- linux-4.9.28.orig/arch/arm/plat-versatile/platsmp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm/plat-versatile/platsmp.c 2017-05-19 03:37:25.126174470 +0200 @@ -32,7 +32,7 @@ sync_cache_w(&pen_release); } @@ -895,9 +895,9 @@ diff -Nur linux-4.9.22.orig/arch/arm/plat-versatile/platsmp.c linux-4.9.22/arch/ return pen_release != -1 ? -ENOSYS : 0; } -diff -Nur linux-4.9.22.orig/arch/arm64/include/asm/thread_info.h linux-4.9.22/arch/arm64/include/asm/thread_info.h ---- linux-4.9.22.orig/arch/arm64/include/asm/thread_info.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm64/include/asm/thread_info.h 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm64/include/asm/thread_info.h linux-4.9.28/arch/arm64/include/asm/thread_info.h +--- linux-4.9.28.orig/arch/arm64/include/asm/thread_info.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm64/include/asm/thread_info.h 2017-05-19 03:37:25.126174470 +0200 @@ -49,6 +49,7 @@ mm_segment_t addr_limit; /* address limit */ struct task_struct *task; /* main task structure */ @@ -933,9 +933,9 @@ diff -Nur linux-4.9.22.orig/arch/arm64/include/asm/thread_info.h linux-4.9.22/ar #define _TIF_SYSCALL_WORK (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \ _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP | \ -diff -Nur linux-4.9.22.orig/arch/arm64/Kconfig linux-4.9.22/arch/arm64/Kconfig ---- linux-4.9.22.orig/arch/arm64/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm64/Kconfig 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm64/Kconfig linux-4.9.28/arch/arm64/Kconfig +--- linux-4.9.28.orig/arch/arm64/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm64/Kconfig 2017-05-19 03:37:25.126174470 +0200 @@ -91,6 +91,7 @@ select HAVE_PERF_EVENTS select HAVE_PERF_REGS @@ -953,9 +953,9 @@ diff -Nur linux-4.9.22.orig/arch/arm64/Kconfig linux-4.9.22/arch/arm64/Kconfig select SWIOTLB_XEN select PARAVIRT help -diff -Nur linux-4.9.22.orig/arch/arm64/kernel/asm-offsets.c linux-4.9.22/arch/arm64/kernel/asm-offsets.c ---- linux-4.9.22.orig/arch/arm64/kernel/asm-offsets.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm64/kernel/asm-offsets.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm64/kernel/asm-offsets.c linux-4.9.28/arch/arm64/kernel/asm-offsets.c +--- linux-4.9.28.orig/arch/arm64/kernel/asm-offsets.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm64/kernel/asm-offsets.c 2017-05-19 03:37:25.126174470 +0200 @@ -38,6 +38,7 @@ BLANK(); DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); @@ -964,9 +964,9 @@ diff -Nur linux-4.9.22.orig/arch/arm64/kernel/asm-offsets.c linux-4.9.22/arch/ar 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.9.22.orig/arch/arm64/kernel/entry.S linux-4.9.22/arch/arm64/kernel/entry.S ---- linux-4.9.22.orig/arch/arm64/kernel/entry.S 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm64/kernel/entry.S 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm64/kernel/entry.S linux-4.9.28/arch/arm64/kernel/entry.S +--- linux-4.9.28.orig/arch/arm64/kernel/entry.S 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm64/kernel/entry.S 2017-05-19 03:37:25.126174470 +0200 @@ -428,11 +428,16 @@ #ifdef CONFIG_PREEMPT @@ -995,9 +995,9 @@ diff -Nur linux-4.9.22.orig/arch/arm64/kernel/entry.S linux-4.9.22/arch/arm64/ke ret x24 #endif -diff -Nur linux-4.9.22.orig/arch/arm64/kernel/signal.c linux-4.9.22/arch/arm64/kernel/signal.c ---- linux-4.9.22.orig/arch/arm64/kernel/signal.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/arm64/kernel/signal.c 2017-04-18 17:19:16.622770857 +0200 +diff -Nur linux-4.9.28.orig/arch/arm64/kernel/signal.c linux-4.9.28/arch/arm64/kernel/signal.c +--- linux-4.9.28.orig/arch/arm64/kernel/signal.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/arm64/kernel/signal.c 2017-05-19 03:37:25.126174470 +0200 @@ -409,7 +409,7 @@ */ trace_hardirqs_off(); @@ -1007,9 +1007,9 @@ diff -Nur linux-4.9.22.orig/arch/arm64/kernel/signal.c linux-4.9.22/arch/arm64/k schedule(); } else { local_irq_enable(); -diff -Nur linux-4.9.22.orig/arch/Kconfig linux-4.9.22/arch/Kconfig ---- linux-4.9.22.orig/arch/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/Kconfig 2017-04-18 17:19:16.618770722 +0200 +diff -Nur linux-4.9.28.orig/arch/Kconfig linux-4.9.28/arch/Kconfig +--- linux-4.9.28.orig/arch/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/Kconfig 2017-05-19 03:37:25.122174217 +0200 @@ -9,6 +9,7 @@ tristate "OProfile system profiling" depends on PROFILING @@ -1026,10 +1026,10 @@ diff -Nur linux-4.9.22.orig/arch/Kconfig linux-4.9.22/arch/Kconfig help This option enables a transparent branch optimization that makes certain almost-always-true or almost-always-false branch -diff -Nur linux-4.9.22.orig/arch/mips/Kconfig linux-4.9.22/arch/mips/Kconfig ---- linux-4.9.22.orig/arch/mips/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/mips/Kconfig 2017-04-18 17:19:16.622770857 +0200 -@@ -2514,7 +2514,7 @@ +diff -Nur linux-4.9.28.orig/arch/mips/Kconfig linux-4.9.28/arch/mips/Kconfig +--- linux-4.9.28.orig/arch/mips/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/mips/Kconfig 2017-05-19 03:37:25.126174470 +0200 +@@ -2515,7 +2515,7 @@ # config HIGHMEM bool "High Memory Support" @@ -1038,9 +1038,9 @@ diff -Nur linux-4.9.22.orig/arch/mips/Kconfig linux-4.9.22/arch/mips/Kconfig config CPU_SUPPORTS_HIGHMEM bool -diff -Nur linux-4.9.22.orig/arch/powerpc/include/asm/thread_info.h linux-4.9.22/arch/powerpc/include/asm/thread_info.h ---- linux-4.9.22.orig/arch/powerpc/include/asm/thread_info.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/powerpc/include/asm/thread_info.h 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/powerpc/include/asm/thread_info.h linux-4.9.28/arch/powerpc/include/asm/thread_info.h +--- linux-4.9.28.orig/arch/powerpc/include/asm/thread_info.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/powerpc/include/asm/thread_info.h 2017-05-19 03:37:25.126174470 +0200 @@ -43,6 +43,8 @@ int cpu; /* cpu we're on */ int preempt_count; /* 0 => preemptable, @@ -1087,9 +1087,9 @@ diff -Nur linux-4.9.22.orig/arch/powerpc/include/asm/thread_info.h linux-4.9.22/ /* Bits in local_flags */ /* Don't move TLF_NAPPING without adjusting the code in entry_32.S */ -diff -Nur linux-4.9.22.orig/arch/powerpc/Kconfig linux-4.9.22/arch/powerpc/Kconfig ---- linux-4.9.22.orig/arch/powerpc/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/powerpc/Kconfig 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/powerpc/Kconfig linux-4.9.28/arch/powerpc/Kconfig +--- linux-4.9.28.orig/arch/powerpc/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/powerpc/Kconfig 2017-05-19 03:37:25.126174470 +0200 @@ -52,10 +52,11 @@ config RWSEM_GENERIC_SPINLOCK @@ -1120,9 +1120,9 @@ diff -Nur linux-4.9.22.orig/arch/powerpc/Kconfig linux-4.9.22/arch/powerpc/Kconf source kernel/Kconfig.hz source kernel/Kconfig.preempt -diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/asm-offsets.c linux-4.9.22/arch/powerpc/kernel/asm-offsets.c ---- linux-4.9.22.orig/arch/powerpc/kernel/asm-offsets.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/powerpc/kernel/asm-offsets.c 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/powerpc/kernel/asm-offsets.c linux-4.9.28/arch/powerpc/kernel/asm-offsets.c +--- linux-4.9.28.orig/arch/powerpc/kernel/asm-offsets.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/powerpc/kernel/asm-offsets.c 2017-05-19 03:37:25.126174470 +0200 @@ -156,6 +156,7 @@ DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); DEFINE(TI_LOCAL_FLAGS, offsetof(struct thread_info, local_flags)); @@ -1131,9 +1131,9 @@ diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/asm-offsets.c linux-4.9.22/arch/ DEFINE(TI_TASK, offsetof(struct thread_info, task)); DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); -diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/entry_32.S linux-4.9.22/arch/powerpc/kernel/entry_32.S ---- linux-4.9.22.orig/arch/powerpc/kernel/entry_32.S 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/powerpc/kernel/entry_32.S 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/powerpc/kernel/entry_32.S linux-4.9.28/arch/powerpc/kernel/entry_32.S +--- linux-4.9.28.orig/arch/powerpc/kernel/entry_32.S 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/powerpc/kernel/entry_32.S 2017-05-19 03:37:25.126174470 +0200 @@ -835,7 +835,14 @@ cmpwi 0,r0,0 /* if non-zero, just restore regs and return */ bne restore @@ -1182,9 +1182,9 @@ diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/entry_32.S linux-4.9.22/arch/pow bne- do_resched andi. r0,r9,_TIF_USER_WORK_MASK beq restore_user -diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/entry_64.S linux-4.9.22/arch/powerpc/kernel/entry_64.S ---- linux-4.9.22.orig/arch/powerpc/kernel/entry_64.S 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/powerpc/kernel/entry_64.S 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/powerpc/kernel/entry_64.S linux-4.9.28/arch/powerpc/kernel/entry_64.S +--- linux-4.9.28.orig/arch/powerpc/kernel/entry_64.S 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/powerpc/kernel/entry_64.S 2017-05-19 03:37:25.126174470 +0200 @@ -656,7 +656,7 @@ bl restore_math b restore @@ -1223,9 +1223,9 @@ diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/entry_64.S linux-4.9.22/arch/pow bne 1b /* -diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/irq.c linux-4.9.22/arch/powerpc/kernel/irq.c ---- linux-4.9.22.orig/arch/powerpc/kernel/irq.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/powerpc/kernel/irq.c 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/powerpc/kernel/irq.c linux-4.9.28/arch/powerpc/kernel/irq.c +--- linux-4.9.28.orig/arch/powerpc/kernel/irq.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/powerpc/kernel/irq.c 2017-05-19 03:37:25.126174470 +0200 @@ -638,6 +638,7 @@ } } @@ -1242,9 +1242,9 @@ diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/irq.c linux-4.9.22/arch/powerpc/ irq_hw_number_t virq_to_hw(unsigned int virq) { -diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/misc_32.S linux-4.9.22/arch/powerpc/kernel/misc_32.S ---- linux-4.9.22.orig/arch/powerpc/kernel/misc_32.S 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/powerpc/kernel/misc_32.S 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/powerpc/kernel/misc_32.S linux-4.9.28/arch/powerpc/kernel/misc_32.S +--- linux-4.9.28.orig/arch/powerpc/kernel/misc_32.S 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/powerpc/kernel/misc_32.S 2017-05-19 03:37:25.126174470 +0200 @@ -41,6 +41,7 @@ * We store the saved ksp_limit in the unused part * of the STACK_FRAME_OVERHEAD @@ -1261,9 +1261,9 @@ diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/misc_32.S linux-4.9.22/arch/powe /* * void call_do_irq(struct pt_regs *regs, struct thread_info *irqtp); -diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/misc_64.S linux-4.9.22/arch/powerpc/kernel/misc_64.S ---- linux-4.9.22.orig/arch/powerpc/kernel/misc_64.S 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/powerpc/kernel/misc_64.S 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/powerpc/kernel/misc_64.S linux-4.9.28/arch/powerpc/kernel/misc_64.S +--- linux-4.9.28.orig/arch/powerpc/kernel/misc_64.S 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/powerpc/kernel/misc_64.S 2017-05-19 03:37:25.126174470 +0200 @@ -31,6 +31,7 @@ .text @@ -1280,9 +1280,9 @@ diff -Nur linux-4.9.22.orig/arch/powerpc/kernel/misc_64.S linux-4.9.22/arch/powe _GLOBAL(call_do_irq) mflr r0 -diff -Nur linux-4.9.22.orig/arch/powerpc/kvm/Kconfig linux-4.9.22/arch/powerpc/kvm/Kconfig ---- linux-4.9.22.orig/arch/powerpc/kvm/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/powerpc/kvm/Kconfig 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/powerpc/kvm/Kconfig linux-4.9.28/arch/powerpc/kvm/Kconfig +--- linux-4.9.28.orig/arch/powerpc/kvm/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/powerpc/kvm/Kconfig 2017-05-19 03:37:25.126174470 +0200 @@ -175,6 +175,7 @@ config KVM_MPIC bool "KVM in-kernel MPIC emulation" @@ -1291,9 +1291,9 @@ diff -Nur linux-4.9.22.orig/arch/powerpc/kvm/Kconfig linux-4.9.22/arch/powerpc/k select HAVE_KVM_IRQCHIP select HAVE_KVM_IRQFD select HAVE_KVM_IRQ_ROUTING -diff -Nur linux-4.9.22.orig/arch/powerpc/platforms/ps3/device-init.c linux-4.9.22/arch/powerpc/platforms/ps3/device-init.c ---- linux-4.9.22.orig/arch/powerpc/platforms/ps3/device-init.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/powerpc/platforms/ps3/device-init.c 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/powerpc/platforms/ps3/device-init.c linux-4.9.28/arch/powerpc/platforms/ps3/device-init.c +--- linux-4.9.28.orig/arch/powerpc/platforms/ps3/device-init.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/powerpc/platforms/ps3/device-init.c 2017-05-19 03:37:25.126174470 +0200 @@ -752,7 +752,7 @@ } pr_debug("%s:%u: notification %s issued\n", __func__, __LINE__, op); @@ -1303,9 +1303,9 @@ diff -Nur linux-4.9.22.orig/arch/powerpc/platforms/ps3/device-init.c linux-4.9.2 dev->done.done || kthread_should_stop()); if (kthread_should_stop()) res = -EINTR; -diff -Nur linux-4.9.22.orig/arch/sh/kernel/irq.c linux-4.9.22/arch/sh/kernel/irq.c ---- linux-4.9.22.orig/arch/sh/kernel/irq.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/sh/kernel/irq.c 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/sh/kernel/irq.c linux-4.9.28/arch/sh/kernel/irq.c +--- linux-4.9.28.orig/arch/sh/kernel/irq.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/sh/kernel/irq.c 2017-05-19 03:37:25.126174470 +0200 @@ -147,6 +147,7 @@ hardirq_ctx[cpu] = NULL; } @@ -1322,9 +1322,9 @@ diff -Nur linux-4.9.22.orig/arch/sh/kernel/irq.c linux-4.9.22/arch/sh/kernel/irq #else static inline void handle_one_irq(unsigned int irq) { -diff -Nur linux-4.9.22.orig/arch/sparc/Kconfig linux-4.9.22/arch/sparc/Kconfig ---- linux-4.9.22.orig/arch/sparc/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/sparc/Kconfig 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/sparc/Kconfig linux-4.9.28/arch/sparc/Kconfig +--- linux-4.9.28.orig/arch/sparc/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/sparc/Kconfig 2017-05-19 03:37:25.126174470 +0200 @@ -194,12 +194,10 @@ source kernel/Kconfig.hz @@ -1340,9 +1340,9 @@ diff -Nur linux-4.9.22.orig/arch/sparc/Kconfig linux-4.9.22/arch/sparc/Kconfig config GENERIC_HWEIGHT bool -diff -Nur linux-4.9.22.orig/arch/sparc/kernel/irq_64.c linux-4.9.22/arch/sparc/kernel/irq_64.c ---- linux-4.9.22.orig/arch/sparc/kernel/irq_64.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/sparc/kernel/irq_64.c 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/sparc/kernel/irq_64.c linux-4.9.28/arch/sparc/kernel/irq_64.c +--- linux-4.9.28.orig/arch/sparc/kernel/irq_64.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/sparc/kernel/irq_64.c 2017-05-19 03:37:25.126174470 +0200 @@ -854,6 +854,7 @@ set_irq_regs(old_regs); } @@ -1359,9 +1359,9 @@ diff -Nur linux-4.9.22.orig/arch/sparc/kernel/irq_64.c linux-4.9.22/arch/sparc/k #ifdef CONFIG_HOTPLUG_CPU void fixup_irqs(void) -diff -Nur linux-4.9.22.orig/arch/x86/crypto/aesni-intel_glue.c linux-4.9.22/arch/x86/crypto/aesni-intel_glue.c ---- linux-4.9.22.orig/arch/x86/crypto/aesni-intel_glue.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/crypto/aesni-intel_glue.c 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/crypto/aesni-intel_glue.c linux-4.9.28/arch/x86/crypto/aesni-intel_glue.c +--- linux-4.9.28.orig/arch/x86/crypto/aesni-intel_glue.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/crypto/aesni-intel_glue.c 2017-05-19 03:37:25.130174719 +0200 @@ -372,14 +372,14 @@ err = blkcipher_walk_virt(desc, &walk); desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP; @@ -1454,9 +1454,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/crypto/aesni-intel_glue.c linux-4.9.22/arch return err; } -diff -Nur linux-4.9.22.orig/arch/x86/crypto/cast5_avx_glue.c linux-4.9.22/arch/x86/crypto/cast5_avx_glue.c ---- linux-4.9.22.orig/arch/x86/crypto/cast5_avx_glue.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/crypto/cast5_avx_glue.c 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/crypto/cast5_avx_glue.c linux-4.9.28/arch/x86/crypto/cast5_avx_glue.c +--- linux-4.9.28.orig/arch/x86/crypto/cast5_avx_glue.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/crypto/cast5_avx_glue.c 2017-05-19 03:37:25.130174719 +0200 @@ -59,7 +59,7 @@ static int ecb_crypt(struct blkcipher_desc *desc, struct blkcipher_walk *walk, bool enc) @@ -1536,9 +1536,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/crypto/cast5_avx_glue.c linux-4.9.22/arch/x if (walk.nbytes) { ctr_crypt_final(desc, &walk); err = blkcipher_walk_done(desc, &walk, 0); -diff -Nur linux-4.9.22.orig/arch/x86/crypto/glue_helper.c linux-4.9.22/arch/x86/crypto/glue_helper.c ---- linux-4.9.22.orig/arch/x86/crypto/glue_helper.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/crypto/glue_helper.c 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/crypto/glue_helper.c linux-4.9.28/arch/x86/crypto/glue_helper.c +--- linux-4.9.28.orig/arch/x86/crypto/glue_helper.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/crypto/glue_helper.c 2017-05-19 03:37:25.130174719 +0200 @@ -39,7 +39,7 @@ void *ctx = crypto_blkcipher_ctx(desc->tfm); const unsigned int bsize = 128 / 8; @@ -1654,9 +1654,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/crypto/glue_helper.c linux-4.9.22/arch/x86/ return err; } EXPORT_SYMBOL_GPL(glue_xts_crypt_128bit); -diff -Nur linux-4.9.22.orig/arch/x86/entry/common.c linux-4.9.22/arch/x86/entry/common.c ---- linux-4.9.22.orig/arch/x86/entry/common.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/entry/common.c 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/entry/common.c linux-4.9.28/arch/x86/entry/common.c +--- linux-4.9.28.orig/arch/x86/entry/common.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/entry/common.c 2017-05-19 03:37:25.130174719 +0200 @@ -129,7 +129,7 @@ #define EXIT_TO_USERMODE_LOOP_FLAGS \ @@ -1684,9 +1684,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/entry/common.c linux-4.9.22/arch/x86/entry/ if (cached_flags & _TIF_UPROBE) uprobe_notify_resume(regs); -diff -Nur linux-4.9.22.orig/arch/x86/entry/entry_32.S linux-4.9.22/arch/x86/entry/entry_32.S ---- linux-4.9.22.orig/arch/x86/entry/entry_32.S 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/entry/entry_32.S 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/entry/entry_32.S linux-4.9.28/arch/x86/entry/entry_32.S +--- linux-4.9.28.orig/arch/x86/entry/entry_32.S 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/entry/entry_32.S 2017-05-19 03:37:25.130174719 +0200 @@ -308,8 +308,25 @@ ENTRY(resume_kernel) DISABLE_INTERRUPTS(CLBR_ANY) @@ -1713,9 +1713,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/entry/entry_32.S linux-4.9.22/arch/x86/entr testl $X86_EFLAGS_IF, PT_EFLAGS(%esp) # interrupts off (exception path) ? jz restore_all call preempt_schedule_irq -diff -Nur linux-4.9.22.orig/arch/x86/entry/entry_64.S linux-4.9.22/arch/x86/entry/entry_64.S ---- linux-4.9.22.orig/arch/x86/entry/entry_64.S 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/entry/entry_64.S 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/entry/entry_64.S linux-4.9.28/arch/x86/entry/entry_64.S +--- linux-4.9.28.orig/arch/x86/entry/entry_64.S 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/entry/entry_64.S 2017-05-19 03:37:25.130174719 +0200 @@ -546,7 +546,23 @@ bt $9, EFLAGS(%rsp) /* were interrupts off? */ jnc 1f @@ -1756,9 +1756,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/entry/entry_64.S linux-4.9.22/arch/x86/entr #ifdef CONFIG_XEN idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0 -diff -Nur linux-4.9.22.orig/arch/x86/include/asm/preempt.h linux-4.9.22/arch/x86/include/asm/preempt.h ---- linux-4.9.22.orig/arch/x86/include/asm/preempt.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/include/asm/preempt.h 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/include/asm/preempt.h linux-4.9.28/arch/x86/include/asm/preempt.h +--- linux-4.9.28.orig/arch/x86/include/asm/preempt.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/include/asm/preempt.h 2017-05-19 03:37:25.130174719 +0200 @@ -79,17 +79,46 @@ * a decrement which hits zero means we have no preempt_count and should * reschedule. @@ -1807,9 +1807,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/include/asm/preempt.h linux-4.9.22/arch/x86 } #ifdef CONFIG_PREEMPT -diff -Nur linux-4.9.22.orig/arch/x86/include/asm/signal.h linux-4.9.22/arch/x86/include/asm/signal.h ---- linux-4.9.22.orig/arch/x86/include/asm/signal.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/include/asm/signal.h 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/include/asm/signal.h linux-4.9.28/arch/x86/include/asm/signal.h +--- linux-4.9.28.orig/arch/x86/include/asm/signal.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/include/asm/signal.h 2017-05-19 03:37:25.130174719 +0200 @@ -27,6 +27,19 @@ #define SA_IA32_ABI 0x02000000u #define SA_X32_ABI 0x01000000u @@ -1830,9 +1830,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/include/asm/signal.h linux-4.9.22/arch/x86/ #ifndef CONFIG_COMPAT typedef sigset_t compat_sigset_t; #endif -diff -Nur linux-4.9.22.orig/arch/x86/include/asm/stackprotector.h linux-4.9.22/arch/x86/include/asm/stackprotector.h ---- linux-4.9.22.orig/arch/x86/include/asm/stackprotector.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/include/asm/stackprotector.h 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/include/asm/stackprotector.h linux-4.9.28/arch/x86/include/asm/stackprotector.h +--- linux-4.9.28.orig/arch/x86/include/asm/stackprotector.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/include/asm/stackprotector.h 2017-05-19 03:37:25.130174719 +0200 @@ -59,7 +59,7 @@ */ static __always_inline void boot_init_stack_canary(void) @@ -1858,9 +1858,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/include/asm/stackprotector.h linux-4.9.22/a tsc = rdtsc(); canary += tsc + (tsc << 32UL); -diff -Nur linux-4.9.22.orig/arch/x86/include/asm/thread_info.h linux-4.9.22/arch/x86/include/asm/thread_info.h ---- linux-4.9.22.orig/arch/x86/include/asm/thread_info.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/include/asm/thread_info.h 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/include/asm/thread_info.h linux-4.9.28/arch/x86/include/asm/thread_info.h +--- linux-4.9.28.orig/arch/x86/include/asm/thread_info.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/include/asm/thread_info.h 2017-05-19 03:37:25.130174719 +0200 @@ -54,11 +54,14 @@ struct thread_info { @@ -1912,9 +1912,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/include/asm/thread_info.h linux-4.9.22/arch #define STACK_WARN (THREAD_SIZE/8) /* -diff -Nur linux-4.9.22.orig/arch/x86/include/asm/uv/uv_bau.h linux-4.9.22/arch/x86/include/asm/uv/uv_bau.h ---- linux-4.9.22.orig/arch/x86/include/asm/uv/uv_bau.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/include/asm/uv/uv_bau.h 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/include/asm/uv/uv_bau.h linux-4.9.28/arch/x86/include/asm/uv/uv_bau.h +--- linux-4.9.28.orig/arch/x86/include/asm/uv/uv_bau.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/include/asm/uv/uv_bau.h 2017-05-19 03:37:25.130174719 +0200 @@ -624,9 +624,9 @@ cycles_t send_message; cycles_t period_end; @@ -1948,9 +1948,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/include/asm/uv/uv_bau.h linux-4.9.22/arch/x return 1; } -diff -Nur linux-4.9.22.orig/arch/x86/Kconfig linux-4.9.22/arch/x86/Kconfig ---- linux-4.9.22.orig/arch/x86/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/Kconfig 2017-04-18 17:19:16.626771037 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/Kconfig linux-4.9.28/arch/x86/Kconfig +--- linux-4.9.28.orig/arch/x86/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/Kconfig 2017-05-19 03:37:25.130174719 +0200 @@ -17,6 +17,7 @@ ### Arch settings config X86 @@ -1981,9 +1981,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/Kconfig linux-4.9.22/arch/x86/Kconfig ---help--- Enable maximum number of CPUS and NUMA Nodes for this architecture. If unsure, say N. -diff -Nur linux-4.9.22.orig/arch/x86/kernel/acpi/boot.c linux-4.9.22/arch/x86/kernel/acpi/boot.c ---- linux-4.9.22.orig/arch/x86/kernel/acpi/boot.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/kernel/acpi/boot.c 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/kernel/acpi/boot.c linux-4.9.28/arch/x86/kernel/acpi/boot.c +--- linux-4.9.28.orig/arch/x86/kernel/acpi/boot.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/kernel/acpi/boot.c 2017-05-19 03:37:25.130174719 +0200 @@ -87,7 +87,9 @@ * ->ioapic_mutex * ->ioapic_lock @@ -1994,9 +1994,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/acpi/boot.c linux-4.9.22/arch/x86/ke /* -------------------------------------------------------------------------- Boot-time Configuration -diff -Nur linux-4.9.22.orig/arch/x86/kernel/apic/io_apic.c linux-4.9.22/arch/x86/kernel/apic/io_apic.c ---- linux-4.9.22.orig/arch/x86/kernel/apic/io_apic.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/kernel/apic/io_apic.c 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/kernel/apic/io_apic.c linux-4.9.28/arch/x86/kernel/apic/io_apic.c +--- linux-4.9.28.orig/arch/x86/kernel/apic/io_apic.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/kernel/apic/io_apic.c 2017-05-19 03:37:25.130174719 +0200 @@ -1712,7 +1712,8 @@ static inline bool ioapic_irqd_mask(struct irq_data *data) { @@ -2007,9 +2007,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/apic/io_apic.c linux-4.9.22/arch/x86 mask_ioapic_irq(data); return true; } -diff -Nur linux-4.9.22.orig/arch/x86/kernel/asm-offsets.c linux-4.9.22/arch/x86/kernel/asm-offsets.c ---- linux-4.9.22.orig/arch/x86/kernel/asm-offsets.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/kernel/asm-offsets.c 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/kernel/asm-offsets.c linux-4.9.28/arch/x86/kernel/asm-offsets.c +--- linux-4.9.28.orig/arch/x86/kernel/asm-offsets.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/kernel/asm-offsets.c 2017-05-19 03:37:25.130174719 +0200 @@ -36,6 +36,7 @@ BLANK(); @@ -2024,9 +2024,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/asm-offsets.c linux-4.9.22/arch/x86/ DEFINE(PTREGS_SIZE, sizeof(struct pt_regs)); + DEFINE(_PREEMPT_ENABLED, PREEMPT_ENABLED); } -diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x86/kernel/cpu/mcheck/mce.c ---- linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/kernel/cpu/mcheck/mce.c 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.28/arch/x86/kernel/cpu/mcheck/mce.c +--- linux-4.9.28.orig/arch/x86/kernel/cpu/mcheck/mce.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/kernel/cpu/mcheck/mce.c 2017-05-19 03:37:25.130174719 +0200 @@ -41,6 +41,8 @@ #include <linux/debugfs.h> #include <linux/irq_work.h> @@ -2036,7 +2036,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x #include <linux/jump_label.h> #include <asm/processor.h> -@@ -1317,7 +1319,7 @@ +@@ -1307,7 +1309,7 @@ static unsigned long check_interval = INITIAL_CHECK_INTERVAL; static DEFINE_PER_CPU(unsigned long, mce_next_interval); /* in jiffies */ @@ -2045,7 +2045,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x static unsigned long mce_adjust_timer_default(unsigned long interval) { -@@ -1326,32 +1328,18 @@ +@@ -1316,32 +1318,18 @@ static unsigned long (*mce_adjust_timer)(unsigned long interval) = mce_adjust_timer_default; @@ -2084,7 +2084,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x iv = __this_cpu_read(mce_next_interval); if (mce_available(this_cpu_ptr(&cpu_info))) { -@@ -1374,7 +1362,7 @@ +@@ -1364,7 +1352,7 @@ done: __this_cpu_write(mce_next_interval, iv); @@ -2093,7 +2093,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x } /* -@@ -1382,7 +1370,7 @@ +@@ -1372,7 +1360,7 @@ */ void mce_timer_kick(unsigned long interval) { @@ -2102,7 +2102,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x unsigned long iv = __this_cpu_read(mce_next_interval); __restart_timer(t, interval); -@@ -1397,7 +1385,7 @@ +@@ -1387,7 +1375,7 @@ int cpu; for_each_online_cpu(cpu) @@ -2111,7 +2111,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x } static void mce_do_trigger(struct work_struct *work) -@@ -1407,6 +1395,56 @@ +@@ -1397,6 +1385,56 @@ static DECLARE_WORK(mce_trigger_work, mce_do_trigger); @@ -2168,7 +2168,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x /* * Notify the user(s) about new machine check events. * Can be called from interrupt context, but not from machine check/NMI -@@ -1414,19 +1452,8 @@ +@@ -1404,19 +1442,8 @@ */ int mce_notify_irq(void) { @@ -2189,7 +2189,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x return 1; } return 0; -@@ -1732,7 +1759,7 @@ +@@ -1722,7 +1749,7 @@ } } @@ -2198,7 +2198,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x { unsigned long iv = check_interval * HZ; -@@ -1741,16 +1768,17 @@ +@@ -1731,16 +1758,17 @@ per_cpu(mce_next_interval, cpu) = iv; @@ -2220,7 +2220,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x mce_start_timer(cpu, t); } -@@ -2475,6 +2503,8 @@ +@@ -2465,6 +2493,8 @@ if (!mce_available(raw_cpu_ptr(&cpu_info))) return; @@ -2229,7 +2229,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x if (!(action & CPU_TASKS_FROZEN)) cmci_clear(); -@@ -2497,6 +2527,7 @@ +@@ -2487,6 +2517,7 @@ if (b->init) wrmsrl(msr_ops.ctl(i), b->ctl); } @@ -2237,7 +2237,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x } /* Get notified when a cpu comes on/off. Be hotplug friendly. */ -@@ -2504,7 +2535,6 @@ +@@ -2494,7 +2525,6 @@ mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { unsigned int cpu = (unsigned long)hcpu; @@ -2245,7 +2245,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x switch (action & ~CPU_TASKS_FROZEN) { case CPU_ONLINE: -@@ -2524,11 +2554,9 @@ +@@ -2514,11 +2544,9 @@ break; case CPU_DOWN_PREPARE: smp_call_function_single(cpu, mce_disable_cpu, &action, 1); @@ -2257,7 +2257,7 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x break; } -@@ -2567,6 +2595,10 @@ +@@ -2557,6 +2585,10 @@ goto err_out; } @@ -2268,9 +2268,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/cpu/mcheck/mce.c linux-4.9.22/arch/x if (!zalloc_cpumask_var(&mce_device_initialized, GFP_KERNEL)) { err = -ENOMEM; goto err_out; -diff -Nur linux-4.9.22.orig/arch/x86/kernel/irq_32.c linux-4.9.22/arch/x86/kernel/irq_32.c ---- linux-4.9.22.orig/arch/x86/kernel/irq_32.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/kernel/irq_32.c 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/kernel/irq_32.c linux-4.9.28/arch/x86/kernel/irq_32.c +--- linux-4.9.28.orig/arch/x86/kernel/irq_32.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/kernel/irq_32.c 2017-05-19 03:37:25.130174719 +0200 @@ -127,6 +127,7 @@ cpu, per_cpu(hardirq_stack, cpu), per_cpu(softirq_stack, cpu)); } @@ -2287,9 +2287,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/irq_32.c linux-4.9.22/arch/x86/kerne bool handle_irq(struct irq_desc *desc, struct pt_regs *regs) { -diff -Nur linux-4.9.22.orig/arch/x86/kernel/process_32.c linux-4.9.22/arch/x86/kernel/process_32.c ---- linux-4.9.22.orig/arch/x86/kernel/process_32.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/kernel/process_32.c 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/kernel/process_32.c linux-4.9.28/arch/x86/kernel/process_32.c +--- linux-4.9.28.orig/arch/x86/kernel/process_32.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/kernel/process_32.c 2017-05-19 03:37:25.130174719 +0200 @@ -35,6 +35,7 @@ #include <linux/uaccess.h> #include <linux/io.h> @@ -2343,9 +2343,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/kernel/process_32.c linux-4.9.22/arch/x86/k /* * Leave lazy mode, flushing any hypercalls made here. * This must be done before restoring TLS segments so -diff -Nur linux-4.9.22.orig/arch/x86/kvm/lapic.c linux-4.9.22/arch/x86/kvm/lapic.c ---- linux-4.9.22.orig/arch/x86/kvm/lapic.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/kvm/lapic.c 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/kvm/lapic.c linux-4.9.28/arch/x86/kvm/lapic.c +--- linux-4.9.28.orig/arch/x86/kvm/lapic.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/kvm/lapic.c 2017-05-19 03:37:25.134174924 +0200 @@ -1939,6 +1939,7 @@ hrtimer_init(&apic->lapic_timer.timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED); @@ -2354,9 +2354,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/kvm/lapic.c linux-4.9.22/arch/x86/kvm/lapic /* * APIC is created enabled. This will prevent kvm_lapic_set_base from -diff -Nur linux-4.9.22.orig/arch/x86/kvm/x86.c linux-4.9.22/arch/x86/kvm/x86.c ---- linux-4.9.22.orig/arch/x86/kvm/x86.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/kvm/x86.c 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/kvm/x86.c linux-4.9.28/arch/x86/kvm/x86.c +--- linux-4.9.28.orig/arch/x86/kvm/x86.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/kvm/x86.c 2017-05-19 03:37:25.134174924 +0200 @@ -5933,6 +5933,13 @@ goto out; } @@ -2371,9 +2371,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/kvm/x86.c linux-4.9.22/arch/x86/kvm/x86.c r = kvm_mmu_module_init(); if (r) goto out_free_percpu; -diff -Nur linux-4.9.22.orig/arch/x86/mm/highmem_32.c linux-4.9.22/arch/x86/mm/highmem_32.c ---- linux-4.9.22.orig/arch/x86/mm/highmem_32.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/mm/highmem_32.c 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/mm/highmem_32.c linux-4.9.28/arch/x86/mm/highmem_32.c +--- linux-4.9.28.orig/arch/x86/mm/highmem_32.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/mm/highmem_32.c 2017-05-19 03:37:25.134174924 +0200 @@ -32,10 +32,11 @@ */ void *kmap_atomic_prot(struct page *page, pgprot_t prot) @@ -2418,9 +2418,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/mm/highmem_32.c linux-4.9.22/arch/x86/mm/hi } EXPORT_SYMBOL(__kunmap_atomic); -diff -Nur linux-4.9.22.orig/arch/x86/mm/iomap_32.c linux-4.9.22/arch/x86/mm/iomap_32.c ---- linux-4.9.22.orig/arch/x86/mm/iomap_32.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/mm/iomap_32.c 2017-04-18 17:19:16.630771208 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/mm/iomap_32.c linux-4.9.28/arch/x86/mm/iomap_32.c +--- linux-4.9.28.orig/arch/x86/mm/iomap_32.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/mm/iomap_32.c 2017-05-19 03:37:25.134174924 +0200 @@ -56,6 +56,7 @@ void *kmap_atomic_prot_pfn(unsigned long pfn, pgprot_t prot) @@ -2453,9 +2453,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/mm/iomap_32.c linux-4.9.22/arch/x86/mm/ioma kpte_clear_flush(kmap_pte-idx, vaddr); kmap_atomic_idx_pop(); } -diff -Nur linux-4.9.22.orig/arch/x86/mm/pageattr.c linux-4.9.22/arch/x86/mm/pageattr.c ---- linux-4.9.22.orig/arch/x86/mm/pageattr.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/mm/pageattr.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/mm/pageattr.c linux-4.9.28/arch/x86/mm/pageattr.c +--- linux-4.9.28.orig/arch/x86/mm/pageattr.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/mm/pageattr.c 2017-05-19 03:37:25.134174924 +0200 @@ -214,7 +214,15 @@ int in_flags, struct page **pages) { @@ -2472,9 +2472,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/mm/pageattr.c linux-4.9.22/arch/x86/mm/page BUG_ON(irqs_disabled()); -diff -Nur linux-4.9.22.orig/arch/x86/platform/uv/tlb_uv.c linux-4.9.22/arch/x86/platform/uv/tlb_uv.c ---- linux-4.9.22.orig/arch/x86/platform/uv/tlb_uv.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/platform/uv/tlb_uv.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/platform/uv/tlb_uv.c linux-4.9.28/arch/x86/platform/uv/tlb_uv.c +--- linux-4.9.28.orig/arch/x86/platform/uv/tlb_uv.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/platform/uv/tlb_uv.c 2017-05-19 03:37:25.134174924 +0200 @@ -748,9 +748,9 @@ quiesce_local_uvhub(hmaster); @@ -2561,9 +2561,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/platform/uv/tlb_uv.c linux-4.9.22/arch/x86/ } } -diff -Nur linux-4.9.22.orig/arch/x86/platform/uv/uv_time.c linux-4.9.22/arch/x86/platform/uv/uv_time.c ---- linux-4.9.22.orig/arch/x86/platform/uv/uv_time.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/arch/x86/platform/uv/uv_time.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/arch/x86/platform/uv/uv_time.c linux-4.9.28/arch/x86/platform/uv/uv_time.c +--- linux-4.9.28.orig/arch/x86/platform/uv/uv_time.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/arch/x86/platform/uv/uv_time.c 2017-05-19 03:37:25.134174924 +0200 @@ -57,7 +57,7 @@ /* There is one of these allocated per node */ @@ -2644,9 +2644,9 @@ diff -Nur linux-4.9.22.orig/arch/x86/platform/uv/uv_time.c linux-4.9.22/arch/x86 } /* -diff -Nur linux-4.9.22.orig/block/blk-core.c linux-4.9.22/block/blk-core.c ---- linux-4.9.22.orig/block/blk-core.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/block/blk-core.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/block/blk-core.c linux-4.9.28/block/blk-core.c +--- linux-4.9.28.orig/block/blk-core.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/block/blk-core.c 2017-05-19 03:37:25.134174924 +0200 @@ -125,6 +125,9 @@ INIT_LIST_HEAD(&rq->queuelist); @@ -2740,9 +2740,9 @@ diff -Nur linux-4.9.22.orig/block/blk-core.c linux-4.9.22/block/blk-core.c } void blk_finish_plug(struct blk_plug *plug) -diff -Nur linux-4.9.22.orig/block/blk-ioc.c linux-4.9.22/block/blk-ioc.c ---- linux-4.9.22.orig/block/blk-ioc.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/block/blk-ioc.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/block/blk-ioc.c linux-4.9.28/block/blk-ioc.c +--- linux-4.9.28.orig/block/blk-ioc.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/block/blk-ioc.c 2017-05-19 03:37:25.134174924 +0200 @@ -7,6 +7,7 @@ #include <linux/bio.h> #include <linux/blkdev.h> @@ -2769,9 +2769,9 @@ diff -Nur linux-4.9.22.orig/block/blk-ioc.c linux-4.9.22/block/blk-ioc.c goto retry; } } -diff -Nur linux-4.9.22.orig/block/blk-mq.c linux-4.9.22/block/blk-mq.c ---- linux-4.9.22.orig/block/blk-mq.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/block/blk-mq.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/block/blk-mq.c linux-4.9.28/block/blk-mq.c +--- linux-4.9.28.orig/block/blk-mq.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/block/blk-mq.c 2017-05-19 03:37:25.134174924 +0200 @@ -72,7 +72,7 @@ static void blk_mq_freeze_queue_wait(struct request_queue *q) @@ -2880,9 +2880,9 @@ diff -Nur linux-4.9.22.orig/block/blk-mq.c linux-4.9.22/block/blk-mq.c } kblockd_schedule_work_on(blk_mq_hctx_next_cpu(hctx), &hctx->run_work); -diff -Nur linux-4.9.22.orig/block/blk-mq.h linux-4.9.22/block/blk-mq.h ---- linux-4.9.22.orig/block/blk-mq.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/block/blk-mq.h 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/block/blk-mq.h linux-4.9.28/block/blk-mq.h +--- linux-4.9.28.orig/block/blk-mq.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/block/blk-mq.h 2017-05-19 03:37:25.134174924 +0200 @@ -72,12 +72,12 @@ */ static inline struct blk_mq_ctx *blk_mq_get_ctx(struct request_queue *q) @@ -2898,9 +2898,9 @@ diff -Nur linux-4.9.22.orig/block/blk-mq.h linux-4.9.22/block/blk-mq.h } struct blk_mq_alloc_data { -diff -Nur linux-4.9.22.orig/block/blk-softirq.c linux-4.9.22/block/blk-softirq.c ---- linux-4.9.22.orig/block/blk-softirq.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/block/blk-softirq.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/block/blk-softirq.c linux-4.9.28/block/blk-softirq.c +--- linux-4.9.28.orig/block/blk-softirq.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/block/blk-softirq.c 2017-05-19 03:37:25.134174924 +0200 @@ -51,6 +51,7 @@ raise_softirq_irqoff(BLOCK_SOFTIRQ); @@ -2925,9 +2925,9 @@ diff -Nur linux-4.9.22.orig/block/blk-softirq.c linux-4.9.22/block/blk-softirq.c } /** -diff -Nur linux-4.9.22.orig/block/bounce.c linux-4.9.22/block/bounce.c ---- linux-4.9.22.orig/block/bounce.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/block/bounce.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/block/bounce.c linux-4.9.28/block/bounce.c +--- linux-4.9.28.orig/block/bounce.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/block/bounce.c 2017-05-19 03:37:25.134174924 +0200 @@ -55,11 +55,11 @@ unsigned long flags; unsigned char *vto; @@ -2942,9 +2942,9 @@ diff -Nur linux-4.9.22.orig/block/bounce.c linux-4.9.22/block/bounce.c } #else /* CONFIG_HIGHMEM */ -diff -Nur linux-4.9.22.orig/crypto/algapi.c linux-4.9.22/crypto/algapi.c ---- linux-4.9.22.orig/crypto/algapi.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/crypto/algapi.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/crypto/algapi.c linux-4.9.28/crypto/algapi.c +--- linux-4.9.28.orig/crypto/algapi.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/crypto/algapi.c 2017-05-19 03:37:25.134174924 +0200 @@ -719,13 +719,13 @@ int crypto_register_notifier(struct notifier_block *nb) @@ -2961,9 +2961,9 @@ diff -Nur linux-4.9.22.orig/crypto/algapi.c linux-4.9.22/crypto/algapi.c } EXPORT_SYMBOL_GPL(crypto_unregister_notifier); -diff -Nur linux-4.9.22.orig/crypto/api.c linux-4.9.22/crypto/api.c ---- linux-4.9.22.orig/crypto/api.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/crypto/api.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/crypto/api.c linux-4.9.28/crypto/api.c +--- linux-4.9.28.orig/crypto/api.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/crypto/api.c 2017-05-19 03:37:25.134174924 +0200 @@ -31,7 +31,7 @@ DECLARE_RWSEM(crypto_alg_sem); EXPORT_SYMBOL_GPL(crypto_alg_sem); @@ -2986,9 +2986,9 @@ diff -Nur linux-4.9.22.orig/crypto/api.c linux-4.9.22/crypto/api.c } return ok; -diff -Nur linux-4.9.22.orig/crypto/internal.h linux-4.9.22/crypto/internal.h ---- linux-4.9.22.orig/crypto/internal.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/crypto/internal.h 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/crypto/internal.h linux-4.9.28/crypto/internal.h +--- linux-4.9.28.orig/crypto/internal.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/crypto/internal.h 2017-05-19 03:37:25.138175108 +0200 @@ -47,7 +47,7 @@ extern struct list_head crypto_alg_list; @@ -3007,9 +3007,9 @@ diff -Nur linux-4.9.22.orig/crypto/internal.h linux-4.9.22/crypto/internal.h } #endif /* _CRYPTO_INTERNAL_H */ -diff -Nur linux-4.9.22.orig/Documentation/sysrq.txt linux-4.9.22/Documentation/sysrq.txt ---- linux-4.9.22.orig/Documentation/sysrq.txt 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/Documentation/sysrq.txt 2017-04-18 17:19:16.618770722 +0200 +diff -Nur linux-4.9.28.orig/Documentation/sysrq.txt linux-4.9.28/Documentation/sysrq.txt +--- linux-4.9.28.orig/Documentation/sysrq.txt 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/Documentation/sysrq.txt 2017-05-19 03:37:25.118174016 +0200 @@ -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. @@ -3030,9 +3030,9 @@ diff -Nur linux-4.9.22.orig/Documentation/sysrq.txt linux-4.9.22/Documentation/s * What are the 'command' keys? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 'b' - Will immediately reboot the system without syncing or unmounting -diff -Nur linux-4.9.22.orig/Documentation/trace/histograms.txt linux-4.9.22/Documentation/trace/histograms.txt ---- linux-4.9.22.orig/Documentation/trace/histograms.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/Documentation/trace/histograms.txt 2017-04-18 17:19:16.618770722 +0200 +diff -Nur linux-4.9.28.orig/Documentation/trace/histograms.txt linux-4.9.28/Documentation/trace/histograms.txt +--- linux-4.9.28.orig/Documentation/trace/histograms.txt 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/Documentation/trace/histograms.txt 2017-05-19 03:37:25.118174016 +0200 @@ -0,0 +1,186 @@ + Using the Linux Kernel Latency Histograms + @@ -3220,9 +3220,9 @@ diff -Nur linux-4.9.22.orig/Documentation/trace/histograms.txt linux-4.9.22/Docu +is provided. + +These data are also reset when the wakeup histogram is reset. -diff -Nur linux-4.9.22.orig/drivers/acpi/acpica/acglobal.h linux-4.9.22/drivers/acpi/acpica/acglobal.h ---- linux-4.9.22.orig/drivers/acpi/acpica/acglobal.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/acpi/acpica/acglobal.h 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/drivers/acpi/acpica/acglobal.h linux-4.9.28/drivers/acpi/acpica/acglobal.h +--- linux-4.9.28.orig/drivers/acpi/acpica/acglobal.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/acpi/acpica/acglobal.h 2017-05-19 03:37:25.138175108 +0200 @@ -116,7 +116,7 @@ * interrupt level */ @@ -3232,9 +3232,9 @@ diff -Nur linux-4.9.22.orig/drivers/acpi/acpica/acglobal.h linux-4.9.22/drivers/ ACPI_GLOBAL(acpi_spinlock, acpi_gbl_reference_count_lock); /* Mutex for _OSI support */ -diff -Nur linux-4.9.22.orig/drivers/acpi/acpica/hwregs.c linux-4.9.22/drivers/acpi/acpica/hwregs.c ---- linux-4.9.22.orig/drivers/acpi/acpica/hwregs.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/acpi/acpica/hwregs.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/drivers/acpi/acpica/hwregs.c linux-4.9.28/drivers/acpi/acpica/hwregs.c +--- linux-4.9.28.orig/drivers/acpi/acpica/hwregs.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/acpi/acpica/hwregs.c 2017-05-19 03:37:25.138175108 +0200 @@ -363,14 +363,14 @@ ACPI_BITMASK_ALL_FIXED_STATUS, ACPI_FORMAT_UINT64(acpi_gbl_xpm1a_status.address))); @@ -3252,9 +3252,9 @@ diff -Nur linux-4.9.22.orig/drivers/acpi/acpica/hwregs.c linux-4.9.22/drivers/ac if (ACPI_FAILURE(status)) { goto exit; -diff -Nur linux-4.9.22.orig/drivers/acpi/acpica/hwxface.c linux-4.9.22/drivers/acpi/acpica/hwxface.c ---- linux-4.9.22.orig/drivers/acpi/acpica/hwxface.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/acpi/acpica/hwxface.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/drivers/acpi/acpica/hwxface.c linux-4.9.28/drivers/acpi/acpica/hwxface.c +--- linux-4.9.28.orig/drivers/acpi/acpica/hwxface.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/acpi/acpica/hwxface.c 2017-05-19 03:37:25.138175108 +0200 @@ -373,7 +373,7 @@ return_ACPI_STATUS(AE_BAD_PARAMETER); } @@ -3273,9 +3273,9 @@ diff -Nur linux-4.9.22.orig/drivers/acpi/acpica/hwxface.c linux-4.9.22/drivers/a return_ACPI_STATUS(status); } -diff -Nur linux-4.9.22.orig/drivers/acpi/acpica/utmutex.c linux-4.9.22/drivers/acpi/acpica/utmutex.c ---- linux-4.9.22.orig/drivers/acpi/acpica/utmutex.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/acpi/acpica/utmutex.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/drivers/acpi/acpica/utmutex.c linux-4.9.28/drivers/acpi/acpica/utmutex.c +--- linux-4.9.28.orig/drivers/acpi/acpica/utmutex.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/acpi/acpica/utmutex.c 2017-05-19 03:37:25.138175108 +0200 @@ -88,7 +88,7 @@ return_ACPI_STATUS (status); } @@ -3294,9 +3294,9 @@ diff -Nur linux-4.9.22.orig/drivers/acpi/acpica/utmutex.c linux-4.9.22/drivers/a acpi_os_delete_lock(acpi_gbl_reference_count_lock); /* Delete the reader/writer lock */ -diff -Nur linux-4.9.22.orig/drivers/ata/libata-sff.c linux-4.9.22/drivers/ata/libata-sff.c ---- linux-4.9.22.orig/drivers/ata/libata-sff.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/ata/libata-sff.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/drivers/ata/libata-sff.c linux-4.9.28/drivers/ata/libata-sff.c +--- linux-4.9.28.orig/drivers/ata/libata-sff.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/ata/libata-sff.c 2017-05-19 03:37:25.138175108 +0200 @@ -678,9 +678,9 @@ unsigned long flags; unsigned int consumed; @@ -3345,9 +3345,9 @@ diff -Nur linux-4.9.22.orig/drivers/ata/libata-sff.c linux-4.9.22/drivers/ata/li } else { buf = page_address(page); consumed = ap->ops->sff_data_xfer(dev, buf + offset, -diff -Nur linux-4.9.22.orig/drivers/block/zram/zcomp.c linux-4.9.22/drivers/block/zram/zcomp.c ---- linux-4.9.22.orig/drivers/block/zram/zcomp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/block/zram/zcomp.c 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/drivers/block/zram/zcomp.c linux-4.9.28/drivers/block/zram/zcomp.c +--- linux-4.9.28.orig/drivers/block/zram/zcomp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/block/zram/zcomp.c 2017-05-19 03:37:25.138175108 +0200 @@ -118,12 +118,19 @@ struct zcomp_strm *zcomp_stream_get(struct zcomp *comp) @@ -3378,9 +3378,9 @@ diff -Nur linux-4.9.22.orig/drivers/block/zram/zcomp.c linux-4.9.22/drivers/bloc *per_cpu_ptr(comp->stream, cpu) = zstrm; break; case CPU_DEAD: -diff -Nur linux-4.9.22.orig/drivers/block/zram/zcomp.h linux-4.9.22/drivers/block/zram/zcomp.h ---- linux-4.9.22.orig/drivers/block/zram/zcomp.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/block/zram/zcomp.h 2017-04-18 17:19:16.634771367 +0200 +diff -Nur linux-4.9.28.orig/drivers/block/zram/zcomp.h linux-4.9.28/drivers/block/zram/zcomp.h +--- linux-4.9.28.orig/drivers/block/zram/zcomp.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/block/zram/zcomp.h 2017-05-19 03:37:25.138175108 +0200 @@ -14,6 +14,7 @@ /* compression/decompression buffer */ void *buffer; @@ -3389,9 +3389,9 @@ diff -Nur linux-4.9.22.orig/drivers/block/zram/zcomp.h linux-4.9.22/drivers/bloc }; /* dynamic per-device compression frontend */ -diff -Nur linux-4.9.22.orig/drivers/block/zram/zram_drv.c linux-4.9.22/drivers/block/zram/zram_drv.c ---- linux-4.9.22.orig/drivers/block/zram/zram_drv.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/block/zram/zram_drv.c 2017-04-18 17:19:16.638771524 +0200 +diff -Nur linux-4.9.28.orig/drivers/block/zram/zram_drv.c linux-4.9.28/drivers/block/zram/zram_drv.c +--- linux-4.9.28.orig/drivers/block/zram/zram_drv.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/block/zram/zram_drv.c 2017-05-19 03:37:25.138175108 +0200 @@ -528,6 +528,8 @@ goto out_error; } @@ -3415,14 +3415,14 @@ diff -Nur linux-4.9.22.orig/drivers/block/zram/zram_drv.c linux-4.9.22/drivers/b if (!handle || zram_test_flag(meta, index, ZRAM_ZERO)) { - bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value); + zram_unlock_table(&meta->table[index]); - clear_page(mem); + memset(mem, 0, PAGE_SIZE); return 0; } + zstrm = zcomp_stream_get(zram->comp); cmem = zs_map_object(meta->mem_pool, handle, ZS_MM_RO); if (size == PAGE_SIZE) { - copy_page(mem, cmem); + memcpy(mem, cmem, PAGE_SIZE); } else { - struct zcomp_strm *zstrm = zcomp_stream_get(zram->comp); - @@ -3506,9 +3506,9 @@ diff -Nur linux-4.9.22.orig/drivers/block/zram/zram_drv.c linux-4.9.22/drivers/b atomic64_inc(&zram->stats.notify_free); } -diff -Nur linux-4.9.22.orig/drivers/block/zram/zram_drv.h linux-4.9.22/drivers/block/zram/zram_drv.h ---- linux-4.9.22.orig/drivers/block/zram/zram_drv.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/block/zram/zram_drv.h 2017-04-18 17:19:16.638771524 +0200 +diff -Nur linux-4.9.28.orig/drivers/block/zram/zram_drv.h linux-4.9.28/drivers/block/zram/zram_drv.h +--- linux-4.9.28.orig/drivers/block/zram/zram_drv.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/block/zram/zram_drv.h 2017-05-19 03:37:25.138175108 +0200 @@ -73,6 +73,9 @@ struct zram_table_entry { unsigned long handle; @@ -3562,10 +3562,18 @@ diff -Nur linux-4.9.22.orig/drivers/block/zram/zram_drv.h linux-4.9.22/drivers/b +#endif /* CONFIG_PREEMPT_RT_BASE */ + #endif -diff -Nur linux-4.9.22.orig/drivers/char/random.c linux-4.9.22/drivers/char/random.c ---- linux-4.9.22.orig/drivers/char/random.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/char/random.c 2017-04-18 17:19:16.638771524 +0200 -@@ -1028,8 +1028,6 @@ +diff -Nur linux-4.9.28.orig/drivers/char/random.c linux-4.9.28/drivers/char/random.c +--- linux-4.9.28.orig/drivers/char/random.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/char/random.c 2017-05-19 03:37:25.138175108 +0200 +@@ -262,6 +262,7 @@ + #include <linux/syscalls.h> + #include <linux/completion.h> + #include <linux/uuid.h> ++#include <linux/locallock.h> + #include <crypto/chacha20.h> + + #include <asm/processor.h> +@@ -1028,8 +1029,6 @@ } sample; long delta, delta2, delta3; @@ -3574,7 +3582,7 @@ diff -Nur linux-4.9.22.orig/drivers/char/random.c linux-4.9.22/drivers/char/rand sample.jiffies = jiffies; sample.cycles = random_get_entropy(); sample.num = num; -@@ -1070,7 +1068,6 @@ +@@ -1070,7 +1069,6 @@ */ credit_entropy_bits(r, min_t(int, fls(delta>>1), 11)); } @@ -3582,7 +3590,7 @@ diff -Nur linux-4.9.22.orig/drivers/char/random.c linux-4.9.22/drivers/char/rand } void add_input_randomness(unsigned int type, unsigned int code, -@@ -1123,28 +1120,27 @@ +@@ -1123,28 +1121,27 @@ return *(ptr + f->reg_idx++); } @@ -3616,9 +3624,58 @@ diff -Nur linux-4.9.22.orig/drivers/char/random.c linux-4.9.22/drivers/char/rand fast_mix(fast_pool); add_interrupt_bench(cycles); -diff -Nur linux-4.9.22.orig/drivers/clocksource/tcb_clksrc.c linux-4.9.22/drivers/clocksource/tcb_clksrc.c ---- linux-4.9.22.orig/drivers/clocksource/tcb_clksrc.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/clocksource/tcb_clksrc.c 2017-04-18 17:19:16.638771524 +0200 +@@ -2056,6 +2053,7 @@ + * goal of being quite fast and not depleting entropy. + */ + static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_long); ++static DEFINE_LOCAL_IRQ_LOCK(batched_entropy_long_lock); + unsigned long get_random_long(void) + { + unsigned long ret; +@@ -2064,13 +2062,13 @@ + if (arch_get_random_long(&ret)) + return ret; + +- batch = &get_cpu_var(batched_entropy_long); ++ batch = &get_locked_var(batched_entropy_long_lock, batched_entropy_long); + if (batch->position % ARRAY_SIZE(batch->entropy_long) == 0) { + extract_crng((u8 *)batch->entropy_long); + batch->position = 0; + } + ret = batch->entropy_long[batch->position++]; +- put_cpu_var(batched_entropy_long); ++ put_locked_var(batched_entropy_long_lock, batched_entropy_long); + return ret; + } + EXPORT_SYMBOL(get_random_long); +@@ -2082,6 +2080,8 @@ + } + #else + static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_int); ++static DEFINE_LOCAL_IRQ_LOCK(batched_entropy_int_lock); ++ + unsigned int get_random_int(void) + { + unsigned int ret; +@@ -2090,13 +2090,13 @@ + if (arch_get_random_int(&ret)) + return ret; + +- batch = &get_cpu_var(batched_entropy_int); ++ batch = &get_locked_var(batched_entropy_int_lock, batched_entropy_int); + if (batch->position % ARRAY_SIZE(batch->entropy_int) == 0) { + extract_crng((u8 *)batch->entropy_int); + batch->position = 0; + } + ret = batch->entropy_int[batch->position++]; +- put_cpu_var(batched_entropy_int); ++ put_locked_var(batched_entropy_int_lock, batched_entropy_int); + return ret; + } + #endif +diff -Nur linux-4.9.28.orig/drivers/clocksource/tcb_clksrc.c linux-4.9.28/drivers/clocksource/tcb_clksrc.c +--- linux-4.9.28.orig/drivers/clocksource/tcb_clksrc.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/clocksource/tcb_clksrc.c 2017-05-19 03:37:25.138175108 +0200 @@ -23,8 +23,7 @@ * this 32 bit free-running counter. the second channel is not used. * @@ -3776,9 +3833,9 @@ diff -Nur linux-4.9.22.orig/drivers/clocksource/tcb_clksrc.c linux-4.9.22/driver if (ret) goto err_unregister_clksrc; -diff -Nur linux-4.9.22.orig/drivers/clocksource/timer-atmel-pit.c linux-4.9.22/drivers/clocksource/timer-atmel-pit.c ---- linux-4.9.22.orig/drivers/clocksource/timer-atmel-pit.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/clocksource/timer-atmel-pit.c 2017-04-18 17:19:16.638771524 +0200 +diff -Nur linux-4.9.28.orig/drivers/clocksource/timer-atmel-pit.c linux-4.9.28/drivers/clocksource/timer-atmel-pit.c +--- linux-4.9.28.orig/drivers/clocksource/timer-atmel-pit.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/clocksource/timer-atmel-pit.c 2017-05-19 03:37:25.138175108 +0200 @@ -46,6 +46,7 @@ u32 cycle; u32 cnt; @@ -3833,9 +3890,9 @@ diff -Nur linux-4.9.22.orig/drivers/clocksource/timer-atmel-pit.c linux-4.9.22/d /* Set up and register clockevents */ data->clkevt.name = "pit"; data->clkevt.features = CLOCK_EVT_FEAT_PERIODIC; -diff -Nur linux-4.9.22.orig/drivers/clocksource/timer-atmel-st.c linux-4.9.22/drivers/clocksource/timer-atmel-st.c ---- linux-4.9.22.orig/drivers/clocksource/timer-atmel-st.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/clocksource/timer-atmel-st.c 2017-04-18 17:19:16.638771524 +0200 +diff -Nur linux-4.9.28.orig/drivers/clocksource/timer-atmel-st.c linux-4.9.28/drivers/clocksource/timer-atmel-st.c +--- linux-4.9.28.orig/drivers/clocksource/timer-atmel-st.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/clocksource/timer-atmel-st.c 2017-05-19 03:37:25.138175108 +0200 @@ -115,18 +115,29 @@ last_crtr = read_CRTR(); } @@ -3916,9 +3973,9 @@ diff -Nur linux-4.9.22.orig/drivers/clocksource/timer-atmel-st.c linux-4.9.22/dr sclk = of_clk_get(node, 0); if (IS_ERR(sclk)) { pr_err("Unable to get slow clock\n"); -diff -Nur linux-4.9.22.orig/drivers/connector/cn_proc.c linux-4.9.22/drivers/connector/cn_proc.c ---- linux-4.9.22.orig/drivers/connector/cn_proc.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/connector/cn_proc.c 2017-04-18 17:19:16.638771524 +0200 +diff -Nur linux-4.9.28.orig/drivers/connector/cn_proc.c linux-4.9.28/drivers/connector/cn_proc.c +--- linux-4.9.28.orig/drivers/connector/cn_proc.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/connector/cn_proc.c 2017-05-19 03:37:25.138175108 +0200 @@ -32,6 +32,7 @@ #include <linux/pid_namespace.h> @@ -3949,9 +4006,9 @@ diff -Nur linux-4.9.22.orig/drivers/connector/cn_proc.c linux-4.9.22/drivers/con } void proc_fork_connector(struct task_struct *task) -diff -Nur linux-4.9.22.orig/drivers/cpufreq/Kconfig.x86 linux-4.9.22/drivers/cpufreq/Kconfig.x86 ---- linux-4.9.22.orig/drivers/cpufreq/Kconfig.x86 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/cpufreq/Kconfig.x86 2017-04-18 17:19:16.638771524 +0200 +diff -Nur linux-4.9.28.orig/drivers/cpufreq/Kconfig.x86 linux-4.9.28/drivers/cpufreq/Kconfig.x86 +--- linux-4.9.28.orig/drivers/cpufreq/Kconfig.x86 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/cpufreq/Kconfig.x86 2017-05-19 03:37:25.138175108 +0200 @@ -124,7 +124,7 @@ config X86_POWERNOW_K8 @@ -3961,10 +4018,10 @@ diff -Nur linux-4.9.22.orig/drivers/cpufreq/Kconfig.x86 linux-4.9.22/drivers/cpu help This adds the CPUFreq driver for K8/early Opteron/Athlon64 processors. Support for K10 and newer processors is now in acpi-cpufreq. -diff -Nur linux-4.9.22.orig/drivers/gpu/drm/i915/i915_gem_execbuffer.c linux-4.9.22/drivers/gpu/drm/i915/i915_gem_execbuffer.c ---- linux-4.9.22.orig/drivers/gpu/drm/i915/i915_gem_execbuffer.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/gpu/drm/i915/i915_gem_execbuffer.c 2017-04-18 17:19:16.638771524 +0200 -@@ -1537,7 +1537,9 @@ +diff -Nur linux-4.9.28.orig/drivers/gpu/drm/i915/i915_gem_execbuffer.c linux-4.9.28/drivers/gpu/drm/i915/i915_gem_execbuffer.c +--- linux-4.9.28.orig/drivers/gpu/drm/i915/i915_gem_execbuffer.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/gpu/drm/i915/i915_gem_execbuffer.c 2017-05-19 03:37:25.138175108 +0200 +@@ -1489,7 +1489,9 @@ if (ret) return ret; @@ -3974,9 +4031,9 @@ diff -Nur linux-4.9.22.orig/drivers/gpu/drm/i915/i915_gem_execbuffer.c linux-4.9 i915_gem_execbuffer_move_to_active(vmas, params->request); -diff -Nur linux-4.9.22.orig/drivers/gpu/drm/i915/i915_gem_shrinker.c linux-4.9.22/drivers/gpu/drm/i915/i915_gem_shrinker.c ---- linux-4.9.22.orig/drivers/gpu/drm/i915/i915_gem_shrinker.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/gpu/drm/i915/i915_gem_shrinker.c 2017-04-18 17:19:16.638771524 +0200 +diff -Nur linux-4.9.28.orig/drivers/gpu/drm/i915/i915_gem_shrinker.c linux-4.9.28/drivers/gpu/drm/i915/i915_gem_shrinker.c +--- linux-4.9.28.orig/drivers/gpu/drm/i915/i915_gem_shrinker.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/gpu/drm/i915/i915_gem_shrinker.c 2017-05-19 03:37:25.138175108 +0200 @@ -40,7 +40,7 @@ if (!mutex_is_locked(mutex)) return false; @@ -3986,9 +4043,9 @@ diff -Nur linux-4.9.22.orig/drivers/gpu/drm/i915/i915_gem_shrinker.c linux-4.9.2 return mutex->owner == task; #else /* Since UP may be pre-empted, we cannot assume that we own the lock */ -diff -Nur linux-4.9.22.orig/drivers/gpu/drm/i915/i915_irq.c linux-4.9.22/drivers/gpu/drm/i915/i915_irq.c ---- linux-4.9.22.orig/drivers/gpu/drm/i915/i915_irq.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/gpu/drm/i915/i915_irq.c 2017-04-18 17:19:16.638771524 +0200 +diff -Nur linux-4.9.28.orig/drivers/gpu/drm/i915/i915_irq.c linux-4.9.28/drivers/gpu/drm/i915/i915_irq.c +--- linux-4.9.28.orig/drivers/gpu/drm/i915/i915_irq.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/gpu/drm/i915/i915_irq.c 2017-05-19 03:37:25.142175268 +0200 @@ -812,6 +812,7 @@ spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); @@ -4005,10 +4062,10 @@ diff -Nur linux-4.9.22.orig/drivers/gpu/drm/i915/i915_irq.c linux-4.9.22/drivers spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); -diff -Nur linux-4.9.22.orig/drivers/gpu/drm/i915/intel_display.c linux-4.9.22/drivers/gpu/drm/i915/intel_display.c ---- linux-4.9.22.orig/drivers/gpu/drm/i915/intel_display.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/gpu/drm/i915/intel_display.c 2017-04-18 17:19:16.642771680 +0200 -@@ -12141,7 +12141,7 @@ +diff -Nur linux-4.9.28.orig/drivers/gpu/drm/i915/intel_display.c linux-4.9.28/drivers/gpu/drm/i915/intel_display.c +--- linux-4.9.28.orig/drivers/gpu/drm/i915/intel_display.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/gpu/drm/i915/intel_display.c 2017-05-19 03:37:25.142175268 +0200 +@@ -12131,7 +12131,7 @@ struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_flip_work *work; @@ -4017,9 +4074,9 @@ diff -Nur linux-4.9.22.orig/drivers/gpu/drm/i915/intel_display.c linux-4.9.22/dr if (crtc == NULL) return; -diff -Nur linux-4.9.22.orig/drivers/gpu/drm/i915/intel_sprite.c linux-4.9.22/drivers/gpu/drm/i915/intel_sprite.c ---- linux-4.9.22.orig/drivers/gpu/drm/i915/intel_sprite.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/gpu/drm/i915/intel_sprite.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/gpu/drm/i915/intel_sprite.c linux-4.9.28/drivers/gpu/drm/i915/intel_sprite.c +--- linux-4.9.28.orig/drivers/gpu/drm/i915/intel_sprite.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/gpu/drm/i915/intel_sprite.c 2017-05-19 03:37:25.142175268 +0200 @@ -35,6 +35,7 @@ #include <drm/drm_rect.h> #include <drm/drm_atomic.h> @@ -4069,9 +4126,9 @@ diff -Nur linux-4.9.22.orig/drivers/gpu/drm/i915/intel_sprite.c linux-4.9.22/dri if (crtc->debug.start_vbl_count && crtc->debug.start_vbl_count != end_vbl_count) { -diff -Nur linux-4.9.22.orig/drivers/gpu/drm/msm/msm_gem_shrinker.c linux-4.9.22/drivers/gpu/drm/msm/msm_gem_shrinker.c ---- linux-4.9.22.orig/drivers/gpu/drm/msm/msm_gem_shrinker.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/gpu/drm/msm/msm_gem_shrinker.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/gpu/drm/msm/msm_gem_shrinker.c linux-4.9.28/drivers/gpu/drm/msm/msm_gem_shrinker.c +--- linux-4.9.28.orig/drivers/gpu/drm/msm/msm_gem_shrinker.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/gpu/drm/msm/msm_gem_shrinker.c 2017-05-19 03:37:25.142175268 +0200 @@ -23,7 +23,7 @@ if (!mutex_is_locked(mutex)) return false; @@ -4081,9 +4138,9 @@ diff -Nur linux-4.9.22.orig/drivers/gpu/drm/msm/msm_gem_shrinker.c linux-4.9.22/ return mutex->owner == task; #else /* Since UP may be pre-empted, we cannot assume that we own the lock */ -diff -Nur linux-4.9.22.orig/drivers/gpu/drm/radeon/radeon_display.c linux-4.9.22/drivers/gpu/drm/radeon/radeon_display.c ---- linux-4.9.22.orig/drivers/gpu/drm/radeon/radeon_display.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/gpu/drm/radeon/radeon_display.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/gpu/drm/radeon/radeon_display.c linux-4.9.28/drivers/gpu/drm/radeon/radeon_display.c +--- linux-4.9.28.orig/drivers/gpu/drm/radeon/radeon_display.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/gpu/drm/radeon/radeon_display.c 2017-05-19 03:37:25.142175268 +0200 @@ -1845,6 +1845,7 @@ struct radeon_device *rdev = dev->dev_private; @@ -4100,9 +4157,9 @@ diff -Nur linux-4.9.22.orig/drivers/gpu/drm/radeon/radeon_display.c linux-4.9.22 /* Decode into vertical and horizontal scanout position. */ *vpos = position & 0x1fff; -diff -Nur linux-4.9.22.orig/drivers/hv/vmbus_drv.c linux-4.9.22/drivers/hv/vmbus_drv.c ---- linux-4.9.22.orig/drivers/hv/vmbus_drv.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/hv/vmbus_drv.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/hv/vmbus_drv.c linux-4.9.28/drivers/hv/vmbus_drv.c +--- linux-4.9.28.orig/drivers/hv/vmbus_drv.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/hv/vmbus_drv.c 2017-05-19 03:37:25.142175268 +0200 @@ -761,6 +761,8 @@ void *page_addr; struct hv_message *msg; @@ -4121,9 +4178,9 @@ diff -Nur linux-4.9.22.orig/drivers/hv/vmbus_drv.c linux-4.9.22/drivers/hv/vmbus } -diff -Nur linux-4.9.22.orig/drivers/ide/alim15x3.c linux-4.9.22/drivers/ide/alim15x3.c ---- linux-4.9.22.orig/drivers/ide/alim15x3.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/ide/alim15x3.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/ide/alim15x3.c linux-4.9.28/drivers/ide/alim15x3.c +--- linux-4.9.28.orig/drivers/ide/alim15x3.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/ide/alim15x3.c 2017-05-19 03:37:25.142175268 +0200 @@ -234,7 +234,7 @@ isa_dev = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, NULL); @@ -4142,9 +4199,9 @@ diff -Nur linux-4.9.22.orig/drivers/ide/alim15x3.c linux-4.9.22/drivers/ide/alim return 0; } -diff -Nur linux-4.9.22.orig/drivers/ide/hpt366.c linux-4.9.22/drivers/ide/hpt366.c ---- linux-4.9.22.orig/drivers/ide/hpt366.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/ide/hpt366.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/ide/hpt366.c linux-4.9.28/drivers/ide/hpt366.c +--- linux-4.9.28.orig/drivers/ide/hpt366.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/ide/hpt366.c 2017-05-19 03:37:25.142175268 +0200 @@ -1236,7 +1236,7 @@ dma_old = inb(base + 2); @@ -4163,9 +4220,9 @@ diff -Nur linux-4.9.22.orig/drivers/ide/hpt366.c linux-4.9.22/drivers/ide/hpt366 printk(KERN_INFO " %s: BM-DMA at 0x%04lx-0x%04lx\n", hwif->name, base, base + 7); -diff -Nur linux-4.9.22.orig/drivers/ide/ide-io.c linux-4.9.22/drivers/ide/ide-io.c ---- linux-4.9.22.orig/drivers/ide/ide-io.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/ide/ide-io.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/ide/ide-io.c linux-4.9.28/drivers/ide/ide-io.c +--- linux-4.9.28.orig/drivers/ide/ide-io.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/ide/ide-io.c 2017-05-19 03:37:25.146175423 +0200 @@ -659,7 +659,7 @@ /* disable_irq_nosync ?? */ disable_irq(hwif->irq); @@ -4175,9 +4232,9 @@ diff -Nur linux-4.9.22.orig/drivers/ide/ide-io.c linux-4.9.22/drivers/ide/ide-io if (hwif->polling) { startstop = handler(drive); } else if (drive_is_ready(drive)) { -diff -Nur linux-4.9.22.orig/drivers/ide/ide-iops.c linux-4.9.22/drivers/ide/ide-iops.c ---- linux-4.9.22.orig/drivers/ide/ide-iops.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/ide/ide-iops.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/ide/ide-iops.c linux-4.9.28/drivers/ide/ide-iops.c +--- linux-4.9.28.orig/drivers/ide/ide-iops.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/ide/ide-iops.c 2017-05-19 03:37:25.146175423 +0200 @@ -129,12 +129,12 @@ if ((stat & ATA_BUSY) == 0) break; @@ -4193,9 +4250,9 @@ diff -Nur linux-4.9.22.orig/drivers/ide/ide-iops.c linux-4.9.22/drivers/ide/ide- } /* * Allow status to settle, then read it again. -diff -Nur linux-4.9.22.orig/drivers/ide/ide-io-std.c linux-4.9.22/drivers/ide/ide-io-std.c ---- linux-4.9.22.orig/drivers/ide/ide-io-std.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/ide/ide-io-std.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/ide/ide-io-std.c linux-4.9.28/drivers/ide/ide-io-std.c +--- linux-4.9.28.orig/drivers/ide/ide-io-std.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/ide/ide-io-std.c 2017-05-19 03:37:25.142175268 +0200 @@ -175,7 +175,7 @@ unsigned long uninitialized_var(flags); @@ -4232,9 +4289,9 @@ diff -Nur linux-4.9.22.orig/drivers/ide/ide-io-std.c linux-4.9.22/drivers/ide/id if (((len + 1) & 3) < 2) return; -diff -Nur linux-4.9.22.orig/drivers/ide/ide-probe.c linux-4.9.22/drivers/ide/ide-probe.c ---- linux-4.9.22.orig/drivers/ide/ide-probe.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/ide/ide-probe.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/ide/ide-probe.c linux-4.9.28/drivers/ide/ide-probe.c +--- linux-4.9.28.orig/drivers/ide/ide-probe.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/ide/ide-probe.c 2017-05-19 03:37:25.146175423 +0200 @@ -196,10 +196,10 @@ int bswap = 1; @@ -4248,9 +4305,9 @@ diff -Nur linux-4.9.22.orig/drivers/ide/ide-probe.c linux-4.9.22/drivers/ide/ide drive->dev_flags |= IDE_DFLAG_ID_READ; #ifdef DEBUG -diff -Nur linux-4.9.22.orig/drivers/ide/ide-taskfile.c linux-4.9.22/drivers/ide/ide-taskfile.c ---- linux-4.9.22.orig/drivers/ide/ide-taskfile.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/ide/ide-taskfile.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/ide/ide-taskfile.c linux-4.9.28/drivers/ide/ide-taskfile.c +--- linux-4.9.28.orig/drivers/ide/ide-taskfile.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/ide/ide-taskfile.c 2017-05-19 03:37:25.146175423 +0200 @@ -250,7 +250,7 @@ page_is_high = PageHighMem(page); @@ -4278,9 +4335,9 @@ diff -Nur linux-4.9.22.orig/drivers/ide/ide-taskfile.c linux-4.9.22/drivers/ide/ ide_set_handler(drive, &task_pio_intr, WAIT_WORSTCASE); -diff -Nur linux-4.9.22.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c linux-4.9.22/drivers/infiniband/ulp/ipoib/ipoib_multicast.c ---- linux-4.9.22.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/infiniband/ulp/ipoib/ipoib_multicast.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c linux-4.9.28/drivers/infiniband/ulp/ipoib/ipoib_multicast.c +--- linux-4.9.28.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/infiniband/ulp/ipoib/ipoib_multicast.c 2017-05-19 03:37:25.146175423 +0200 @@ -902,7 +902,7 @@ ipoib_dbg_mcast(priv, "restarting multicast task\n"); @@ -4299,9 +4356,9 @@ diff -Nur linux-4.9.22.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c linux /* * make sure the in-flight joins have finished before we attempt -diff -Nur linux-4.9.22.orig/drivers/input/gameport/gameport.c linux-4.9.22/drivers/input/gameport/gameport.c ---- linux-4.9.22.orig/drivers/input/gameport/gameport.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/input/gameport/gameport.c 2017-04-18 17:19:16.642771680 +0200 +diff -Nur linux-4.9.28.orig/drivers/input/gameport/gameport.c linux-4.9.28/drivers/input/gameport/gameport.c +--- linux-4.9.28.orig/drivers/input/gameport/gameport.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/input/gameport/gameport.c 2017-05-19 03:37:25.146175423 +0200 @@ -91,13 +91,13 @@ tx = ~0; @@ -4347,9 +4404,9 @@ diff -Nur linux-4.9.22.orig/drivers/input/gameport/gameport.c linux-4.9.22/drive udelay(i * 10); if (t2 - t1 < tx) tx = t2 - t1; } -diff -Nur linux-4.9.22.orig/drivers/iommu/amd_iommu.c linux-4.9.22/drivers/iommu/amd_iommu.c ---- linux-4.9.22.orig/drivers/iommu/amd_iommu.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/iommu/amd_iommu.c 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/iommu/amd_iommu.c linux-4.9.28/drivers/iommu/amd_iommu.c +--- linux-4.9.28.orig/drivers/iommu/amd_iommu.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/iommu/amd_iommu.c 2017-05-19 03:37:25.146175423 +0200 @@ -1923,10 +1923,10 @@ int ret; @@ -4378,9 +4435,9 @@ diff -Nur linux-4.9.22.orig/drivers/iommu/amd_iommu.c linux-4.9.22/drivers/iommu if (WARN_ON(!dev_data->domain)) return; -diff -Nur linux-4.9.22.orig/drivers/iommu/intel-iommu.c linux-4.9.22/drivers/iommu/intel-iommu.c ---- linux-4.9.22.orig/drivers/iommu/intel-iommu.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/iommu/intel-iommu.c 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/iommu/intel-iommu.c linux-4.9.28/drivers/iommu/intel-iommu.c +--- linux-4.9.28.orig/drivers/iommu/intel-iommu.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/iommu/intel-iommu.c 2017-05-19 03:37:25.146175423 +0200 @@ -479,7 +479,7 @@ struct deferred_flush_table *tables; }; @@ -4411,9 +4468,9 @@ diff -Nur linux-4.9.22.orig/drivers/iommu/intel-iommu.c linux-4.9.22/drivers/iom } static void intel_unmap(struct device *dev, dma_addr_t dev_addr, size_t size) -diff -Nur linux-4.9.22.orig/drivers/iommu/iova.c linux-4.9.22/drivers/iommu/iova.c ---- linux-4.9.22.orig/drivers/iommu/iova.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/iommu/iova.c 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/iommu/iova.c linux-4.9.28/drivers/iommu/iova.c +--- linux-4.9.28.orig/drivers/iommu/iova.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/iommu/iova.c 2017-05-19 03:37:25.146175423 +0200 @@ -22,6 +22,7 @@ #include <linux/slab.h> #include <linux/smp.h> @@ -4467,9 +4524,9 @@ diff -Nur linux-4.9.22.orig/drivers/iommu/iova.c linux-4.9.22/drivers/iommu/iova return iova_pfn; } -diff -Nur linux-4.9.22.orig/drivers/leds/trigger/Kconfig linux-4.9.22/drivers/leds/trigger/Kconfig ---- linux-4.9.22.orig/drivers/leds/trigger/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/leds/trigger/Kconfig 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/leds/trigger/Kconfig linux-4.9.28/drivers/leds/trigger/Kconfig +--- linux-4.9.28.orig/drivers/leds/trigger/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/leds/trigger/Kconfig 2017-05-19 03:37:25.146175423 +0200 @@ -69,7 +69,7 @@ config LEDS_TRIGGER_CPU @@ -4479,9 +4536,9 @@ diff -Nur linux-4.9.22.orig/drivers/leds/trigger/Kconfig linux-4.9.22/drivers/le help This allows LEDs to be controlled by active CPUs. This shows the active CPUs across an array of LEDs so you can see which -diff -Nur linux-4.9.22.orig/drivers/md/bcache/Kconfig linux-4.9.22/drivers/md/bcache/Kconfig ---- linux-4.9.22.orig/drivers/md/bcache/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/md/bcache/Kconfig 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/md/bcache/Kconfig linux-4.9.28/drivers/md/bcache/Kconfig +--- linux-4.9.28.orig/drivers/md/bcache/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/md/bcache/Kconfig 2017-05-19 03:37:25.146175423 +0200 @@ -1,6 +1,7 @@ config BCACHE @@ -4490,9 +4547,9 @@ diff -Nur linux-4.9.22.orig/drivers/md/bcache/Kconfig linux-4.9.22/drivers/md/bc ---help--- Allows a block device to be used as cache for other devices; uses a btree for indexing and the layout is optimized for SSDs. -diff -Nur linux-4.9.22.orig/drivers/md/dm-rq.c linux-4.9.22/drivers/md/dm-rq.c ---- linux-4.9.22.orig/drivers/md/dm-rq.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/md/dm-rq.c 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/md/dm-rq.c linux-4.9.28/drivers/md/dm-rq.c +--- linux-4.9.28.orig/drivers/md/dm-rq.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/md/dm-rq.c 2017-05-19 03:37:25.146175423 +0200 @@ -842,7 +842,7 @@ /* Establish tio->ti before queuing work (map_tio_request) */ tio->ti = ti; @@ -4502,9 +4559,9 @@ diff -Nur linux-4.9.22.orig/drivers/md/dm-rq.c linux-4.9.22/drivers/md/dm-rq.c } } -diff -Nur linux-4.9.22.orig/drivers/md/raid5.c linux-4.9.22/drivers/md/raid5.c ---- linux-4.9.22.orig/drivers/md/raid5.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/md/raid5.c 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/md/raid5.c linux-4.9.28/drivers/md/raid5.c +--- linux-4.9.28.orig/drivers/md/raid5.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/md/raid5.c 2017-05-19 03:37:25.146175423 +0200 @@ -1928,8 +1928,9 @@ struct raid5_percpu *percpu; unsigned long cpu; @@ -4542,9 +4599,9 @@ diff -Nur linux-4.9.22.orig/drivers/md/raid5.c linux-4.9.22/drivers/md/raid5.c err = cpuhp_state_add_instance(CPUHP_MD_RAID5_PREPARE, &conf->node); if (!err) { conf->scribble_disks = max(conf->raid_disks, -diff -Nur linux-4.9.22.orig/drivers/md/raid5.h linux-4.9.22/drivers/md/raid5.h ---- linux-4.9.22.orig/drivers/md/raid5.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/md/raid5.h 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/md/raid5.h linux-4.9.28/drivers/md/raid5.h +--- linux-4.9.28.orig/drivers/md/raid5.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/md/raid5.h 2017-05-19 03:37:25.150175574 +0200 @@ -504,6 +504,7 @@ int recovery_disabled; /* per cpu variables */ @@ -4553,9 +4610,9 @@ diff -Nur linux-4.9.22.orig/drivers/md/raid5.h linux-4.9.22/drivers/md/raid5.h struct page *spare_page; /* Used when checking P/Q in raid6 */ struct flex_array *scribble; /* space for constructing buffer * lists and performing address -diff -Nur linux-4.9.22.orig/drivers/misc/Kconfig linux-4.9.22/drivers/misc/Kconfig ---- linux-4.9.22.orig/drivers/misc/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/misc/Kconfig 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/misc/Kconfig linux-4.9.28/drivers/misc/Kconfig +--- linux-4.9.28.orig/drivers/misc/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/misc/Kconfig 2017-05-19 03:37:25.150175574 +0200 @@ -54,6 +54,7 @@ config ATMEL_TCLIB bool "Atmel AT32/AT91 Timer/Counter Library" @@ -4590,9 +4647,9 @@ diff -Nur linux-4.9.22.orig/drivers/misc/Kconfig linux-4.9.22/drivers/misc/Kconf config DUMMY_IRQ tristate "Dummy IRQ handler" default n -diff -Nur linux-4.9.22.orig/drivers/mmc/host/mmci.c linux-4.9.22/drivers/mmc/host/mmci.c ---- linux-4.9.22.orig/drivers/mmc/host/mmci.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/mmc/host/mmci.c 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/mmc/host/mmci.c linux-4.9.28/drivers/mmc/host/mmci.c +--- linux-4.9.28.orig/drivers/mmc/host/mmci.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/mmc/host/mmci.c 2017-05-19 03:37:25.150175574 +0200 @@ -1147,15 +1147,12 @@ struct sg_mapping_iter *sg_miter = &host->sg_miter; struct variant_data *variant = host->variant; @@ -4618,9 +4675,9 @@ diff -Nur linux-4.9.22.orig/drivers/mmc/host/mmci.c linux-4.9.22/drivers/mmc/hos /* * If we have less than the fifo 'half-full' threshold to transfer, * trigger a PIO interrupt as soon as any data is available. -diff -Nur linux-4.9.22.orig/drivers/net/ethernet/3com/3c59x.c linux-4.9.22/drivers/net/ethernet/3com/3c59x.c ---- linux-4.9.22.orig/drivers/net/ethernet/3com/3c59x.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/net/ethernet/3com/3c59x.c 2017-04-18 17:19:16.646771835 +0200 +diff -Nur linux-4.9.28.orig/drivers/net/ethernet/3com/3c59x.c linux-4.9.28/drivers/net/ethernet/3com/3c59x.c +--- linux-4.9.28.orig/drivers/net/ethernet/3com/3c59x.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/net/ethernet/3com/3c59x.c 2017-05-19 03:37:25.150175574 +0200 @@ -842,9 +842,9 @@ { struct vortex_private *vp = netdev_priv(dev); @@ -4648,9 +4705,9 @@ diff -Nur linux-4.9.22.orig/drivers/net/ethernet/3com/3c59x.c linux-4.9.22/drive } } -diff -Nur linux-4.9.22.orig/drivers/net/ethernet/realtek/8139too.c linux-4.9.22/drivers/net/ethernet/realtek/8139too.c ---- linux-4.9.22.orig/drivers/net/ethernet/realtek/8139too.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/net/ethernet/realtek/8139too.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/net/ethernet/realtek/8139too.c linux-4.9.28/drivers/net/ethernet/realtek/8139too.c +--- linux-4.9.28.orig/drivers/net/ethernet/realtek/8139too.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/net/ethernet/realtek/8139too.c 2017-05-19 03:37:25.150175574 +0200 @@ -2233,7 +2233,7 @@ struct rtl8139_private *tp = netdev_priv(dev); const int irq = tp->pci_dev->irq; @@ -4660,9 +4717,9 @@ diff -Nur linux-4.9.22.orig/drivers/net/ethernet/realtek/8139too.c linux-4.9.22/ rtl8139_interrupt(irq, dev); enable_irq(irq); } -diff -Nur linux-4.9.22.orig/drivers/net/wireless/intersil/orinoco/orinoco_usb.c linux-4.9.22/drivers/net/wireless/intersil/orinoco/orinoco_usb.c ---- linux-4.9.22.orig/drivers/net/wireless/intersil/orinoco/orinoco_usb.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/net/wireless/intersil/orinoco/orinoco_usb.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/net/wireless/intersil/orinoco/orinoco_usb.c linux-4.9.28/drivers/net/wireless/intersil/orinoco/orinoco_usb.c +--- linux-4.9.28.orig/drivers/net/wireless/intersil/orinoco/orinoco_usb.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/net/wireless/intersil/orinoco/orinoco_usb.c 2017-05-19 03:37:25.150175574 +0200 @@ -697,7 +697,7 @@ while (!ctx->done.done && msecs--) udelay(1000); @@ -4672,9 +4729,9 @@ diff -Nur linux-4.9.22.orig/drivers/net/wireless/intersil/orinoco/orinoco_usb.c ctx->done.done); } break; -diff -Nur linux-4.9.22.orig/drivers/pci/access.c linux-4.9.22/drivers/pci/access.c ---- linux-4.9.22.orig/drivers/pci/access.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/pci/access.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/pci/access.c linux-4.9.28/drivers/pci/access.c +--- linux-4.9.28.orig/drivers/pci/access.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/pci/access.c 2017-05-19 03:37:25.150175574 +0200 @@ -672,7 +672,7 @@ WARN_ON(!dev->block_cfg_access); @@ -4684,9 +4741,9 @@ diff -Nur linux-4.9.22.orig/drivers/pci/access.c linux-4.9.22/drivers/pci/access raw_spin_unlock_irqrestore(&pci_lock, flags); } EXPORT_SYMBOL_GPL(pci_cfg_access_unlock); -diff -Nur linux-4.9.22.orig/drivers/pinctrl/qcom/pinctrl-msm.c linux-4.9.22/drivers/pinctrl/qcom/pinctrl-msm.c ---- linux-4.9.22.orig/drivers/pinctrl/qcom/pinctrl-msm.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/pinctrl/qcom/pinctrl-msm.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/pinctrl/qcom/pinctrl-msm.c linux-4.9.28/drivers/pinctrl/qcom/pinctrl-msm.c +--- linux-4.9.28.orig/drivers/pinctrl/qcom/pinctrl-msm.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/pinctrl/qcom/pinctrl-msm.c 2017-05-19 03:37:25.150175574 +0200 @@ -61,7 +61,7 @@ struct notifier_block restart_nb; int irq; @@ -4892,9 +4949,9 @@ diff -Nur linux-4.9.22.orig/drivers/pinctrl/qcom/pinctrl-msm.c linux-4.9.22/driv res = platform_get_resource(pdev, IORESOURCE_MEM, 0); pctrl->regs = devm_ioremap_resource(&pdev->dev, res); -diff -Nur linux-4.9.22.orig/drivers/scsi/fcoe/fcoe.c linux-4.9.22/drivers/scsi/fcoe/fcoe.c ---- linux-4.9.22.orig/drivers/scsi/fcoe/fcoe.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/scsi/fcoe/fcoe.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/scsi/fcoe/fcoe.c linux-4.9.28/drivers/scsi/fcoe/fcoe.c +--- linux-4.9.28.orig/drivers/scsi/fcoe/fcoe.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/scsi/fcoe/fcoe.c 2017-05-19 03:37:25.150175574 +0200 @@ -1455,11 +1455,11 @@ static int fcoe_alloc_paged_crc_eof(struct sk_buff *skb, int tlen) { @@ -4949,9 +5006,9 @@ diff -Nur linux-4.9.22.orig/drivers/scsi/fcoe/fcoe.c linux-4.9.22/drivers/scsi/f kfree_skb(skb); } -diff -Nur linux-4.9.22.orig/drivers/scsi/fcoe/fcoe_ctlr.c linux-4.9.22/drivers/scsi/fcoe/fcoe_ctlr.c ---- linux-4.9.22.orig/drivers/scsi/fcoe/fcoe_ctlr.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/scsi/fcoe/fcoe_ctlr.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/scsi/fcoe/fcoe_ctlr.c linux-4.9.28/drivers/scsi/fcoe/fcoe_ctlr.c +--- linux-4.9.28.orig/drivers/scsi/fcoe/fcoe_ctlr.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/scsi/fcoe/fcoe_ctlr.c 2017-05-19 03:37:25.150175574 +0200 @@ -834,7 +834,7 @@ INIT_LIST_HEAD(&del_list); @@ -4970,9 +5027,9 @@ diff -Nur linux-4.9.22.orig/drivers/scsi/fcoe/fcoe_ctlr.c linux-4.9.22/drivers/s list_for_each_entry_safe(fcf, next, &del_list, list) { /* Removes fcf from current list */ -diff -Nur linux-4.9.22.orig/drivers/scsi/libfc/fc_exch.c linux-4.9.22/drivers/scsi/libfc/fc_exch.c ---- linux-4.9.22.orig/drivers/scsi/libfc/fc_exch.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/scsi/libfc/fc_exch.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/scsi/libfc/fc_exch.c linux-4.9.28/drivers/scsi/libfc/fc_exch.c +--- linux-4.9.28.orig/drivers/scsi/libfc/fc_exch.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/scsi/libfc/fc_exch.c 2017-05-19 03:37:25.150175574 +0200 @@ -814,10 +814,10 @@ } memset(ep, 0, sizeof(*ep)); @@ -4986,9 +5043,9 @@ diff -Nur linux-4.9.22.orig/drivers/scsi/libfc/fc_exch.c linux-4.9.22/drivers/sc /* peek cache of free slot */ if (pool->left != FC_XID_UNKNOWN) { -diff -Nur linux-4.9.22.orig/drivers/scsi/libsas/sas_ata.c linux-4.9.22/drivers/scsi/libsas/sas_ata.c ---- linux-4.9.22.orig/drivers/scsi/libsas/sas_ata.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/scsi/libsas/sas_ata.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/scsi/libsas/sas_ata.c linux-4.9.28/drivers/scsi/libsas/sas_ata.c +--- linux-4.9.28.orig/drivers/scsi/libsas/sas_ata.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/scsi/libsas/sas_ata.c 2017-05-19 03:37:25.150175574 +0200 @@ -190,7 +190,7 @@ /* TODO: audit callers to ensure they are ready for qc_issue to * unconditionally re-enable interrupts @@ -5007,9 +5064,9 @@ diff -Nur linux-4.9.22.orig/drivers/scsi/libsas/sas_ata.c linux-4.9.22/drivers/s return ret; } -diff -Nur linux-4.9.22.orig/drivers/scsi/qla2xxx/qla_inline.h linux-4.9.22/drivers/scsi/qla2xxx/qla_inline.h ---- linux-4.9.22.orig/drivers/scsi/qla2xxx/qla_inline.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/scsi/qla2xxx/qla_inline.h 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/scsi/qla2xxx/qla_inline.h linux-4.9.28/drivers/scsi/qla2xxx/qla_inline.h +--- linux-4.9.28.orig/drivers/scsi/qla2xxx/qla_inline.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/scsi/qla2xxx/qla_inline.h 2017-05-19 03:37:25.150175574 +0200 @@ -59,12 +59,12 @@ { unsigned long flags; @@ -5025,9 +5082,9 @@ diff -Nur linux-4.9.22.orig/drivers/scsi/qla2xxx/qla_inline.h linux-4.9.22/drive } static inline uint8_t * -diff -Nur linux-4.9.22.orig/drivers/scsi/qla2xxx/qla_isr.c linux-4.9.22/drivers/scsi/qla2xxx/qla_isr.c ---- linux-4.9.22.orig/drivers/scsi/qla2xxx/qla_isr.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/scsi/qla2xxx/qla_isr.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/scsi/qla2xxx/qla_isr.c linux-4.9.28/drivers/scsi/qla2xxx/qla_isr.c +--- linux-4.9.28.orig/drivers/scsi/qla2xxx/qla_isr.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/scsi/qla2xxx/qla_isr.c 2017-05-19 03:37:25.154175725 +0200 @@ -3125,7 +3125,11 @@ * kref_put(). */ @@ -5040,9 +5097,9 @@ diff -Nur linux-4.9.22.orig/drivers/scsi/qla2xxx/qla_isr.c linux-4.9.22/drivers/ } /* -diff -Nur linux-4.9.22.orig/drivers/thermal/x86_pkg_temp_thermal.c linux-4.9.22/drivers/thermal/x86_pkg_temp_thermal.c ---- linux-4.9.22.orig/drivers/thermal/x86_pkg_temp_thermal.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/thermal/x86_pkg_temp_thermal.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/thermal/x86_pkg_temp_thermal.c linux-4.9.28/drivers/thermal/x86_pkg_temp_thermal.c +--- linux-4.9.28.orig/drivers/thermal/x86_pkg_temp_thermal.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/thermal/x86_pkg_temp_thermal.c 2017-05-19 03:37:25.154175725 +0200 @@ -29,6 +29,7 @@ #include <linux/pm.h> #include <linux/thermal.h> @@ -5145,9 +5202,9 @@ diff -Nur linux-4.9.22.orig/drivers/thermal/x86_pkg_temp_thermal.c linux-4.9.22/ for_each_online_cpu(i) cancel_delayed_work_sync( &per_cpu(pkg_temp_thermal_threshold_work, i)); -diff -Nur linux-4.9.22.orig/drivers/tty/serial/8250/8250_core.c linux-4.9.22/drivers/tty/serial/8250/8250_core.c ---- linux-4.9.22.orig/drivers/tty/serial/8250/8250_core.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/tty/serial/8250/8250_core.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/tty/serial/8250/8250_core.c linux-4.9.28/drivers/tty/serial/8250/8250_core.c +--- linux-4.9.28.orig/drivers/tty/serial/8250/8250_core.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/tty/serial/8250/8250_core.c 2017-05-19 03:37:25.154175725 +0200 @@ -58,7 +58,16 @@ static unsigned int skip_txen_test; /* force skip of txen test at init time */ @@ -5166,9 +5223,9 @@ diff -Nur linux-4.9.22.orig/drivers/tty/serial/8250/8250_core.c linux-4.9.22/dri #include <asm/serial.h> /* -diff -Nur linux-4.9.22.orig/drivers/tty/serial/8250/8250_port.c linux-4.9.22/drivers/tty/serial/8250/8250_port.c ---- linux-4.9.22.orig/drivers/tty/serial/8250/8250_port.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/tty/serial/8250/8250_port.c 2017-04-18 17:19:16.650771990 +0200 +diff -Nur linux-4.9.28.orig/drivers/tty/serial/8250/8250_port.c linux-4.9.28/drivers/tty/serial/8250/8250_port.c +--- linux-4.9.28.orig/drivers/tty/serial/8250/8250_port.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/tty/serial/8250/8250_port.c 2017-05-19 03:37:25.154175725 +0200 @@ -35,6 +35,7 @@ #include <linux/nmi.h> #include <linux/mutex.h> @@ -5189,9 +5246,9 @@ diff -Nur linux-4.9.22.orig/drivers/tty/serial/8250/8250_port.c linux-4.9.22/dri locked = spin_trylock_irqsave(&port->lock, flags); else spin_lock_irqsave(&port->lock, flags); -diff -Nur linux-4.9.22.orig/drivers/tty/serial/amba-pl011.c linux-4.9.22/drivers/tty/serial/amba-pl011.c ---- linux-4.9.22.orig/drivers/tty/serial/amba-pl011.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/tty/serial/amba-pl011.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/drivers/tty/serial/amba-pl011.c linux-4.9.28/drivers/tty/serial/amba-pl011.c +--- linux-4.9.28.orig/drivers/tty/serial/amba-pl011.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/tty/serial/amba-pl011.c 2017-05-19 03:37:25.154175725 +0200 @@ -2194,13 +2194,19 @@ clk_enable(uap->clk); @@ -5225,9 +5282,9 @@ diff -Nur linux-4.9.22.orig/drivers/tty/serial/amba-pl011.c linux-4.9.22/drivers clk_disable(uap->clk); } -diff -Nur linux-4.9.22.orig/drivers/tty/serial/omap-serial.c linux-4.9.22/drivers/tty/serial/omap-serial.c ---- linux-4.9.22.orig/drivers/tty/serial/omap-serial.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/tty/serial/omap-serial.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/drivers/tty/serial/omap-serial.c linux-4.9.28/drivers/tty/serial/omap-serial.c +--- linux-4.9.28.orig/drivers/tty/serial/omap-serial.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/tty/serial/omap-serial.c 2017-05-19 03:37:25.154175725 +0200 @@ -1257,13 +1257,10 @@ pm_runtime_get_sync(up->dev); @@ -5255,9 +5312,9 @@ diff -Nur linux-4.9.22.orig/drivers/tty/serial/omap-serial.c linux-4.9.22/driver } static int __init -diff -Nur linux-4.9.22.orig/drivers/usb/core/hcd.c linux-4.9.22/drivers/usb/core/hcd.c ---- linux-4.9.22.orig/drivers/usb/core/hcd.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/usb/core/hcd.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/drivers/usb/core/hcd.c linux-4.9.28/drivers/usb/core/hcd.c +--- linux-4.9.28.orig/drivers/usb/core/hcd.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/usb/core/hcd.c 2017-05-19 03:37:25.154175725 +0200 @@ -1764,9 +1764,9 @@ * and no one may trigger the above deadlock situation when * running complete() in tasklet. @@ -5270,9 +5327,9 @@ diff -Nur linux-4.9.22.orig/drivers/usb/core/hcd.c linux-4.9.22/drivers/usb/core usb_anchor_resume_wakeups(anchor); atomic_dec(&urb->use_count); -diff -Nur linux-4.9.22.orig/drivers/usb/gadget/function/f_fs.c linux-4.9.22/drivers/usb/gadget/function/f_fs.c ---- linux-4.9.22.orig/drivers/usb/gadget/function/f_fs.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/usb/gadget/function/f_fs.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/drivers/usb/gadget/function/f_fs.c linux-4.9.28/drivers/usb/gadget/function/f_fs.c +--- linux-4.9.28.orig/drivers/usb/gadget/function/f_fs.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/usb/gadget/function/f_fs.c 2017-05-19 03:37:25.154175725 +0200 @@ -1593,7 +1593,7 @@ pr_info("%s(): freeing\n", __func__); ffs_data_clear(ffs); @@ -5282,9 +5339,9 @@ diff -Nur linux-4.9.22.orig/drivers/usb/gadget/function/f_fs.c linux-4.9.22/driv kfree(ffs->dev_name); kfree(ffs); } -diff -Nur linux-4.9.22.orig/drivers/usb/gadget/legacy/inode.c linux-4.9.22/drivers/usb/gadget/legacy/inode.c ---- linux-4.9.22.orig/drivers/usb/gadget/legacy/inode.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/drivers/usb/gadget/legacy/inode.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/drivers/usb/gadget/legacy/inode.c linux-4.9.28/drivers/usb/gadget/legacy/inode.c +--- linux-4.9.28.orig/drivers/usb/gadget/legacy/inode.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/drivers/usb/gadget/legacy/inode.c 2017-05-19 03:37:25.154175725 +0200 @@ -346,7 +346,7 @@ spin_unlock_irq (&epdata->dev->lock); @@ -5303,9 +5360,9 @@ diff -Nur linux-4.9.22.orig/drivers/usb/gadget/legacy/inode.c linux-4.9.22/drive if (epdata->status == -ECONNRESET) epdata->status = -EINTR; } else { -diff -Nur linux-4.9.22.orig/fs/aio.c linux-4.9.22/fs/aio.c ---- linux-4.9.22.orig/fs/aio.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/aio.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/fs/aio.c linux-4.9.28/fs/aio.c +--- linux-4.9.28.orig/fs/aio.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/aio.c 2017-05-19 03:37:25.154175725 +0200 @@ -40,6 +40,7 @@ #include <linux/ramfs.h> #include <linux/percpu-refcount.h> @@ -5381,9 +5438,9 @@ diff -Nur linux-4.9.22.orig/fs/aio.c linux-4.9.22/fs/aio.c static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm) { unsigned i, new_nr; -diff -Nur linux-4.9.22.orig/fs/autofs4/autofs_i.h linux-4.9.22/fs/autofs4/autofs_i.h ---- linux-4.9.22.orig/fs/autofs4/autofs_i.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/autofs4/autofs_i.h 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/fs/autofs4/autofs_i.h linux-4.9.28/fs/autofs4/autofs_i.h +--- linux-4.9.28.orig/fs/autofs4/autofs_i.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/autofs4/autofs_i.h 2017-05-19 03:37:25.154175725 +0200 @@ -31,6 +31,7 @@ #include <linux/sched.h> #include <linux/mount.h> @@ -5392,9 +5449,9 @@ diff -Nur linux-4.9.22.orig/fs/autofs4/autofs_i.h linux-4.9.22/fs/autofs4/autofs #include <asm/current.h> #include <linux/uaccess.h> -diff -Nur linux-4.9.22.orig/fs/autofs4/expire.c linux-4.9.22/fs/autofs4/expire.c ---- linux-4.9.22.orig/fs/autofs4/expire.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/autofs4/expire.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/fs/autofs4/expire.c linux-4.9.28/fs/autofs4/expire.c +--- linux-4.9.28.orig/fs/autofs4/expire.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/autofs4/expire.c 2017-05-19 03:37:25.154175725 +0200 @@ -148,7 +148,7 @@ parent = p->d_parent; if (!spin_trylock(&parent->d_lock)) { @@ -5404,9 +5461,9 @@ diff -Nur linux-4.9.22.orig/fs/autofs4/expire.c linux-4.9.22/fs/autofs4/expire.c goto relock; } spin_unlock(&p->d_lock); -diff -Nur linux-4.9.22.orig/fs/buffer.c linux-4.9.22/fs/buffer.c ---- linux-4.9.22.orig/fs/buffer.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/buffer.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/fs/buffer.c linux-4.9.28/fs/buffer.c +--- linux-4.9.28.orig/fs/buffer.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/buffer.c 2017-05-19 03:37:25.158175874 +0200 @@ -301,8 +301,7 @@ * decide that the page is now completely done. */ @@ -5474,9 +5531,9 @@ diff -Nur linux-4.9.22.orig/fs/buffer.c linux-4.9.22/fs/buffer.c preempt_disable(); __this_cpu_inc(bh_accounting.nr); recalc_bh_state(); -diff -Nur linux-4.9.22.orig/fs/cifs/readdir.c linux-4.9.22/fs/cifs/readdir.c ---- linux-4.9.22.orig/fs/cifs/readdir.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/cifs/readdir.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/fs/cifs/readdir.c linux-4.9.28/fs/cifs/readdir.c +--- linux-4.9.28.orig/fs/cifs/readdir.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/cifs/readdir.c 2017-05-19 03:37:25.158175874 +0200 @@ -80,7 +80,7 @@ struct inode *inode; struct super_block *sb = parent->d_sb; @@ -5486,9 +5543,9 @@ diff -Nur linux-4.9.22.orig/fs/cifs/readdir.c linux-4.9.22/fs/cifs/readdir.c cifs_dbg(FYI, "%s: for %s\n", __func__, name->name); -diff -Nur linux-4.9.22.orig/fs/dcache.c linux-4.9.22/fs/dcache.c ---- linux-4.9.22.orig/fs/dcache.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/dcache.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/fs/dcache.c linux-4.9.28/fs/dcache.c +--- linux-4.9.28.orig/fs/dcache.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/dcache.c 2017-05-19 03:37:25.158175874 +0200 @@ -19,6 +19,7 @@ #include <linux/mm.h> #include <linux/fs.h> @@ -5594,9 +5651,9 @@ diff -Nur linux-4.9.22.orig/fs/dcache.c linux-4.9.22/fs/dcache.c dcache_init_early(); inode_init_early(); } -diff -Nur linux-4.9.22.orig/fs/eventpoll.c linux-4.9.22/fs/eventpoll.c ---- linux-4.9.22.orig/fs/eventpoll.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/eventpoll.c 2017-04-18 17:19:16.654772144 +0200 +diff -Nur linux-4.9.28.orig/fs/eventpoll.c linux-4.9.28/fs/eventpoll.c +--- linux-4.9.28.orig/fs/eventpoll.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/eventpoll.c 2017-05-19 03:37:25.158175874 +0200 @@ -510,12 +510,12 @@ */ static void ep_poll_safewake(wait_queue_head_t *wq) @@ -5612,9 +5669,9 @@ diff -Nur linux-4.9.22.orig/fs/eventpoll.c linux-4.9.22/fs/eventpoll.c } static void ep_remove_wait_queue(struct eppoll_entry *pwq) -diff -Nur linux-4.9.22.orig/fs/exec.c linux-4.9.22/fs/exec.c ---- linux-4.9.22.orig/fs/exec.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/exec.c 2017-04-18 17:19:16.658772300 +0200 +diff -Nur linux-4.9.28.orig/fs/exec.c linux-4.9.28/fs/exec.c +--- linux-4.9.28.orig/fs/exec.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/exec.c 2017-05-19 03:37:25.158175874 +0200 @@ -1017,12 +1017,14 @@ } } @@ -5630,9 +5687,9 @@ diff -Nur linux-4.9.22.orig/fs/exec.c linux-4.9.22/fs/exec.c task_unlock(tsk); if (old_mm) { up_read(&old_mm->mmap_sem); -diff -Nur linux-4.9.22.orig/fs/fuse/dir.c linux-4.9.22/fs/fuse/dir.c ---- linux-4.9.22.orig/fs/fuse/dir.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/fuse/dir.c 2017-04-18 17:19:16.658772300 +0200 +diff -Nur linux-4.9.28.orig/fs/fuse/dir.c linux-4.9.28/fs/fuse/dir.c +--- linux-4.9.28.orig/fs/fuse/dir.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/fuse/dir.c 2017-05-19 03:37:25.158175874 +0200 @@ -1191,7 +1191,7 @@ struct inode *dir = d_inode(parent); struct fuse_conn *fc; @@ -5642,9 +5699,9 @@ diff -Nur linux-4.9.22.orig/fs/fuse/dir.c linux-4.9.22/fs/fuse/dir.c if (!o->nodeid) { /* -diff -Nur linux-4.9.22.orig/fs/jbd2/checkpoint.c linux-4.9.22/fs/jbd2/checkpoint.c ---- linux-4.9.22.orig/fs/jbd2/checkpoint.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/jbd2/checkpoint.c 2017-04-18 17:19:16.658772300 +0200 +diff -Nur linux-4.9.28.orig/fs/jbd2/checkpoint.c linux-4.9.28/fs/jbd2/checkpoint.c +--- linux-4.9.28.orig/fs/jbd2/checkpoint.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/jbd2/checkpoint.c 2017-05-19 03:37:25.158175874 +0200 @@ -116,6 +116,8 @@ nblocks = jbd2_space_needed(journal); while (jbd2_log_space_left(journal) < nblocks) { @@ -5654,9 +5711,9 @@ diff -Nur linux-4.9.22.orig/fs/jbd2/checkpoint.c linux-4.9.22/fs/jbd2/checkpoint mutex_lock(&journal->j_checkpoint_mutex); /* -diff -Nur linux-4.9.22.orig/fs/locks.c linux-4.9.22/fs/locks.c ---- linux-4.9.22.orig/fs/locks.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/locks.c 2017-04-18 17:19:16.658772300 +0200 +diff -Nur linux-4.9.28.orig/fs/locks.c linux-4.9.28/fs/locks.c +--- linux-4.9.28.orig/fs/locks.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/locks.c 2017-05-19 03:37:25.158175874 +0200 @@ -935,7 +935,7 @@ return -ENOMEM; } @@ -5797,9 +5854,9 @@ diff -Nur linux-4.9.22.orig/fs/locks.c linux-4.9.22/fs/locks.c locks_dispose_list(&dispose); } -diff -Nur linux-4.9.22.orig/fs/namei.c linux-4.9.22/fs/namei.c ---- linux-4.9.22.orig/fs/namei.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/namei.c 2017-04-18 17:19:16.658772300 +0200 +diff -Nur linux-4.9.28.orig/fs/namei.c linux-4.9.28/fs/namei.c +--- linux-4.9.28.orig/fs/namei.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/namei.c 2017-05-19 03:37:25.158175874 +0200 @@ -1626,7 +1626,7 @@ { struct dentry *dentry = ERR_PTR(-ENOENT), *old; @@ -5818,9 +5875,9 @@ diff -Nur linux-4.9.22.orig/fs/namei.c linux-4.9.22/fs/namei.c if (unlikely(IS_DEADDIR(dir_inode))) return -ENOENT; -diff -Nur linux-4.9.22.orig/fs/namespace.c linux-4.9.22/fs/namespace.c ---- linux-4.9.22.orig/fs/namespace.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/namespace.c 2017-04-18 17:19:16.658772300 +0200 +diff -Nur linux-4.9.28.orig/fs/namespace.c linux-4.9.28/fs/namespace.c +--- linux-4.9.28.orig/fs/namespace.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/namespace.c 2017-05-19 03:37:25.158175874 +0200 @@ -14,6 +14,7 @@ #include <linux/mnt_namespace.h> #include <linux/user_namespace.h> @@ -5843,9 +5900,9 @@ diff -Nur linux-4.9.22.orig/fs/namespace.c linux-4.9.22/fs/namespace.c /* * After the slowpath clears MNT_WRITE_HOLD, mnt_is_readonly will * be set to match its requirements. So we must not load that until -diff -Nur linux-4.9.22.orig/fs/nfs/delegation.c linux-4.9.22/fs/nfs/delegation.c ---- linux-4.9.22.orig/fs/nfs/delegation.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/nfs/delegation.c 2017-04-18 17:19:16.658772300 +0200 +diff -Nur linux-4.9.28.orig/fs/nfs/delegation.c linux-4.9.28/fs/nfs/delegation.c +--- linux-4.9.28.orig/fs/nfs/delegation.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/nfs/delegation.c 2017-05-19 03:37:25.158175874 +0200 @@ -150,11 +150,11 @@ sp = state->owner; /* Block nfs4_proc_unlck */ @@ -5860,9 +5917,9 @@ diff -Nur linux-4.9.22.orig/fs/nfs/delegation.c linux-4.9.22/fs/nfs/delegation.c err = -EAGAIN; mutex_unlock(&sp->so_delegreturn_mutex); put_nfs_open_context(ctx); -diff -Nur linux-4.9.22.orig/fs/nfs/dir.c linux-4.9.22/fs/nfs/dir.c ---- linux-4.9.22.orig/fs/nfs/dir.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/nfs/dir.c 2017-04-18 17:19:16.658772300 +0200 +diff -Nur linux-4.9.28.orig/fs/nfs/dir.c linux-4.9.28/fs/nfs/dir.c +--- linux-4.9.28.orig/fs/nfs/dir.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/nfs/dir.c 2017-05-19 03:37:25.162176025 +0200 @@ -485,7 +485,7 @@ void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry) { @@ -5905,9 +5962,9 @@ diff -Nur linux-4.9.22.orig/fs/nfs/dir.c linux-4.9.22/fs/nfs/dir.c } else error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); trace_nfs_rmdir_exit(dir, dentry, error); -diff -Nur linux-4.9.22.orig/fs/nfs/inode.c linux-4.9.22/fs/nfs/inode.c ---- linux-4.9.22.orig/fs/nfs/inode.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/nfs/inode.c 2017-04-18 17:19:16.658772300 +0200 +diff -Nur linux-4.9.28.orig/fs/nfs/inode.c linux-4.9.28/fs/nfs/inode.c +--- linux-4.9.28.orig/fs/nfs/inode.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/nfs/inode.c 2017-05-19 03:37:25.162176025 +0200 @@ -1957,7 +1957,11 @@ nfsi->nrequests = 0; nfsi->commit_info.ncommit = 0; @@ -5920,9 +5977,9 @@ diff -Nur linux-4.9.22.orig/fs/nfs/inode.c linux-4.9.22/fs/nfs/inode.c nfs4_init_once(nfsi); } -diff -Nur linux-4.9.22.orig/fs/nfs/nfs4_fs.h linux-4.9.22/fs/nfs/nfs4_fs.h ---- linux-4.9.22.orig/fs/nfs/nfs4_fs.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/nfs/nfs4_fs.h 2017-04-18 17:19:16.658772300 +0200 +diff -Nur linux-4.9.28.orig/fs/nfs/nfs4_fs.h linux-4.9.28/fs/nfs/nfs4_fs.h +--- linux-4.9.28.orig/fs/nfs/nfs4_fs.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/nfs/nfs4_fs.h 2017-05-19 03:37:25.162176025 +0200 @@ -111,7 +111,7 @@ unsigned long so_flags; struct list_head so_states; @@ -5932,9 +5989,9 @@ diff -Nur linux-4.9.22.orig/fs/nfs/nfs4_fs.h linux-4.9.22/fs/nfs/nfs4_fs.h struct mutex so_delegreturn_mutex; }; -diff -Nur linux-4.9.22.orig/fs/nfs/nfs4proc.c linux-4.9.22/fs/nfs/nfs4proc.c ---- linux-4.9.22.orig/fs/nfs/nfs4proc.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/nfs/nfs4proc.c 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/fs/nfs/nfs4proc.c linux-4.9.28/fs/nfs/nfs4proc.c +--- linux-4.9.28.orig/fs/nfs/nfs4proc.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/nfs/nfs4proc.c 2017-05-19 03:37:25.162176025 +0200 @@ -2695,7 +2695,7 @@ unsigned int seq; int ret; @@ -5953,9 +6010,9 @@ diff -Nur linux-4.9.22.orig/fs/nfs/nfs4proc.c linux-4.9.22/fs/nfs/nfs4proc.c nfs4_schedule_stateid_recovery(server, state); } out: -diff -Nur linux-4.9.22.orig/fs/nfs/nfs4state.c linux-4.9.22/fs/nfs/nfs4state.c ---- linux-4.9.22.orig/fs/nfs/nfs4state.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/nfs/nfs4state.c 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/fs/nfs/nfs4state.c linux-4.9.28/fs/nfs/nfs4state.c +--- linux-4.9.28.orig/fs/nfs/nfs4state.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/nfs/nfs4state.c 2017-05-19 03:37:25.162176025 +0200 @@ -488,7 +488,7 @@ nfs4_init_seqid_counter(&sp->so_seqid); atomic_set(&sp->so_count, 1); @@ -6004,9 +6061,9 @@ diff -Nur linux-4.9.22.orig/fs/nfs/nfs4state.c linux-4.9.22/fs/nfs/nfs4state.c return status; } -diff -Nur linux-4.9.22.orig/fs/nfs/unlink.c linux-4.9.22/fs/nfs/unlink.c ---- linux-4.9.22.orig/fs/nfs/unlink.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/nfs/unlink.c 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/fs/nfs/unlink.c linux-4.9.28/fs/nfs/unlink.c +--- linux-4.9.28.orig/fs/nfs/unlink.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/nfs/unlink.c 2017-05-19 03:37:25.162176025 +0200 @@ -12,7 +12,7 @@ #include <linux/sunrpc/clnt.h> #include <linux/nfs_fs.h> @@ -6086,9 +6143,9 @@ diff -Nur linux-4.9.22.orig/fs/nfs/unlink.c linux-4.9.22/fs/nfs/unlink.c status = -EBUSY; spin_lock(&dentry->d_lock); -diff -Nur linux-4.9.22.orig/fs/ntfs/aops.c linux-4.9.22/fs/ntfs/aops.c ---- linux-4.9.22.orig/fs/ntfs/aops.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/ntfs/aops.c 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/fs/ntfs/aops.c linux-4.9.28/fs/ntfs/aops.c +--- linux-4.9.28.orig/fs/ntfs/aops.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/ntfs/aops.c 2017-05-19 03:37:25.162176025 +0200 @@ -92,13 +92,13 @@ ofs = 0; if (file_ofs < init_size) @@ -6152,9 +6209,9 @@ diff -Nur linux-4.9.22.orig/fs/ntfs/aops.c linux-4.9.22/fs/ntfs/aops.c } /** -diff -Nur linux-4.9.22.orig/fs/proc/base.c linux-4.9.22/fs/proc/base.c ---- linux-4.9.22.orig/fs/proc/base.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/proc/base.c 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/fs/proc/base.c linux-4.9.28/fs/proc/base.c +--- linux-4.9.28.orig/fs/proc/base.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/proc/base.c 2017-05-19 03:37:25.162176025 +0200 @@ -1834,7 +1834,7 @@ child = d_hash_and_lookup(dir, &qname); @@ -6164,9 +6221,9 @@ diff -Nur linux-4.9.22.orig/fs/proc/base.c linux-4.9.22/fs/proc/base.c child = d_alloc_parallel(dir, &qname, &wq); if (IS_ERR(child)) goto end_instantiate; -diff -Nur linux-4.9.22.orig/fs/proc/proc_sysctl.c linux-4.9.22/fs/proc/proc_sysctl.c ---- linux-4.9.22.orig/fs/proc/proc_sysctl.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/proc/proc_sysctl.c 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/fs/proc/proc_sysctl.c linux-4.9.28/fs/proc/proc_sysctl.c +--- linux-4.9.28.orig/fs/proc/proc_sysctl.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/proc/proc_sysctl.c 2017-05-19 03:37:25.162176025 +0200 @@ -632,7 +632,7 @@ child = d_lookup(dir, &qname); @@ -6176,10 +6233,10 @@ diff -Nur linux-4.9.22.orig/fs/proc/proc_sysctl.c linux-4.9.22/fs/proc/proc_sysc child = d_alloc_parallel(dir, &qname, &wq); if (IS_ERR(child)) return false; -diff -Nur linux-4.9.22.orig/fs/timerfd.c linux-4.9.22/fs/timerfd.c ---- linux-4.9.22.orig/fs/timerfd.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/fs/timerfd.c 2017-04-18 17:19:16.662772455 +0200 -@@ -460,7 +460,10 @@ +diff -Nur linux-4.9.28.orig/fs/timerfd.c linux-4.9.28/fs/timerfd.c +--- linux-4.9.28.orig/fs/timerfd.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/fs/timerfd.c 2017-05-19 03:37:25.162176025 +0200 +@@ -471,7 +471,10 @@ break; } spin_unlock_irq(&ctx->wqh.lock); @@ -6191,9 +6248,9 @@ diff -Nur linux-4.9.22.orig/fs/timerfd.c linux-4.9.22/fs/timerfd.c } /* -diff -Nur linux-4.9.22.orig/include/acpi/platform/aclinux.h linux-4.9.22/include/acpi/platform/aclinux.h ---- linux-4.9.22.orig/include/acpi/platform/aclinux.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/acpi/platform/aclinux.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/acpi/platform/aclinux.h linux-4.9.28/include/acpi/platform/aclinux.h +--- linux-4.9.28.orig/include/acpi/platform/aclinux.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/acpi/platform/aclinux.h 2017-05-19 03:37:25.166176182 +0200 @@ -133,6 +133,7 @@ #define acpi_cache_t struct kmem_cache @@ -6223,9 +6280,9 @@ diff -Nur linux-4.9.22.orig/include/acpi/platform/aclinux.h linux-4.9.22/include /* * OSL interfaces used by debugger/disassembler */ -diff -Nur linux-4.9.22.orig/include/asm-generic/bug.h linux-4.9.22/include/asm-generic/bug.h ---- linux-4.9.22.orig/include/asm-generic/bug.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/asm-generic/bug.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/asm-generic/bug.h linux-4.9.28/include/asm-generic/bug.h +--- linux-4.9.28.orig/include/asm-generic/bug.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/asm-generic/bug.h 2017-05-19 03:37:25.166176182 +0200 @@ -215,6 +215,20 @@ # define WARN_ON_SMP(x) ({0;}) #endif @@ -6247,9 +6304,9 @@ diff -Nur linux-4.9.22.orig/include/asm-generic/bug.h linux-4.9.22/include/asm-g #endif /* __ASSEMBLY__ */ #endif -diff -Nur linux-4.9.22.orig/include/linux/blkdev.h linux-4.9.22/include/linux/blkdev.h ---- linux-4.9.22.orig/include/linux/blkdev.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/blkdev.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/linux/blkdev.h linux-4.9.28/include/linux/blkdev.h +--- linux-4.9.28.orig/include/linux/blkdev.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/blkdev.h 2017-05-19 03:37:25.166176182 +0200 @@ -89,6 +89,7 @@ struct list_head queuelist; union { @@ -6267,9 +6324,9 @@ diff -Nur linux-4.9.22.orig/include/linux/blkdev.h linux-4.9.22/include/linux/bl struct percpu_ref q_usage_counter; struct list_head all_q_node; -diff -Nur linux-4.9.22.orig/include/linux/blk-mq.h linux-4.9.22/include/linux/blk-mq.h ---- linux-4.9.22.orig/include/linux/blk-mq.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/blk-mq.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/linux/blk-mq.h linux-4.9.28/include/linux/blk-mq.h +--- linux-4.9.28.orig/include/linux/blk-mq.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/blk-mq.h 2017-05-19 03:37:25.166176182 +0200 @@ -209,7 +209,7 @@ return unique_tag & BLK_MQ_UNIQUE_TAG_MASK; } @@ -6279,9 +6336,9 @@ diff -Nur linux-4.9.22.orig/include/linux/blk-mq.h linux-4.9.22/include/linux/bl int blk_mq_request_started(struct request *rq); void blk_mq_start_request(struct request *rq); void blk_mq_end_request(struct request *rq, int error); -diff -Nur linux-4.9.22.orig/include/linux/bottom_half.h linux-4.9.22/include/linux/bottom_half.h ---- linux-4.9.22.orig/include/linux/bottom_half.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/bottom_half.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/linux/bottom_half.h linux-4.9.28/include/linux/bottom_half.h +--- linux-4.9.28.orig/include/linux/bottom_half.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/bottom_half.h 2017-05-19 03:37:25.166176182 +0200 @@ -3,6 +3,39 @@ #include <linux/preempt.h> @@ -6329,9 +6386,9 @@ diff -Nur linux-4.9.22.orig/include/linux/bottom_half.h linux-4.9.22/include/lin +#endif #endif /* _LINUX_BH_H */ -diff -Nur linux-4.9.22.orig/include/linux/buffer_head.h linux-4.9.22/include/linux/buffer_head.h ---- linux-4.9.22.orig/include/linux/buffer_head.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/buffer_head.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/linux/buffer_head.h linux-4.9.28/include/linux/buffer_head.h +--- linux-4.9.28.orig/include/linux/buffer_head.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/buffer_head.h 2017-05-19 03:37:25.166176182 +0200 @@ -75,8 +75,50 @@ struct address_space *b_assoc_map; /* mapping this buffer is associated with */ @@ -6383,9 +6440,9 @@ diff -Nur linux-4.9.22.orig/include/linux/buffer_head.h linux-4.9.22/include/lin /* * macro tricks to expand the set_buffer_foo(), clear_buffer_foo() * and buffer_foo() functions. -diff -Nur linux-4.9.22.orig/include/linux/cgroup-defs.h linux-4.9.22/include/linux/cgroup-defs.h ---- linux-4.9.22.orig/include/linux/cgroup-defs.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/cgroup-defs.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/linux/cgroup-defs.h linux-4.9.28/include/linux/cgroup-defs.h +--- linux-4.9.28.orig/include/linux/cgroup-defs.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/cgroup-defs.h 2017-05-19 03:37:25.166176182 +0200 @@ -16,6 +16,7 @@ #include <linux/percpu-refcount.h> #include <linux/percpu-rwsem.h> @@ -6402,9 +6459,9 @@ diff -Nur linux-4.9.22.orig/include/linux/cgroup-defs.h linux-4.9.22/include/lin }; /* -diff -Nur linux-4.9.22.orig/include/linux/completion.h linux-4.9.22/include/linux/completion.h ---- linux-4.9.22.orig/include/linux/completion.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/completion.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/linux/completion.h linux-4.9.28/include/linux/completion.h +--- linux-4.9.28.orig/include/linux/completion.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/completion.h 2017-05-19 03:37:25.166176182 +0200 @@ -7,8 +7,7 @@ * Atomic wait-for-completion handler data structures. * See kernel/sched/completion.c for details. @@ -6438,9 +6495,9 @@ diff -Nur linux-4.9.22.orig/include/linux/completion.h linux-4.9.22/include/linu } /** -diff -Nur linux-4.9.22.orig/include/linux/cpu.h linux-4.9.22/include/linux/cpu.h ---- linux-4.9.22.orig/include/linux/cpu.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/cpu.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/linux/cpu.h linux-4.9.28/include/linux/cpu.h +--- linux-4.9.28.orig/include/linux/cpu.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/cpu.h 2017-05-19 03:37:25.166176182 +0200 @@ -182,6 +182,8 @@ extern void put_online_cpus(void); extern void cpu_hotplug_disable(void); @@ -6459,9 +6516,9 @@ diff -Nur linux-4.9.22.orig/include/linux/cpu.h linux-4.9.22/include/linux/cpu.h #define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0) #define __hotcpu_notifier(fn, pri) do { (void)(fn); } while (0) /* These aren't inline functions due to a GCC bug. */ -diff -Nur linux-4.9.22.orig/include/linux/dcache.h linux-4.9.22/include/linux/dcache.h ---- linux-4.9.22.orig/include/linux/dcache.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/dcache.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/linux/dcache.h linux-4.9.28/include/linux/dcache.h +--- linux-4.9.28.orig/include/linux/dcache.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/dcache.h 2017-05-19 03:37:25.166176182 +0200 @@ -11,6 +11,7 @@ #include <linux/rcupdate.h> #include <linux/lockref.h> @@ -6488,9 +6545,9 @@ diff -Nur linux-4.9.22.orig/include/linux/dcache.h linux-4.9.22/include/linux/dc extern struct dentry * d_splice_alias(struct inode *, struct dentry *); extern struct dentry * d_add_ci(struct dentry *, struct inode *, struct qstr *); extern struct dentry * d_exact_alias(struct dentry *, struct inode *); -diff -Nur linux-4.9.22.orig/include/linux/delay.h linux-4.9.22/include/linux/delay.h ---- linux-4.9.22.orig/include/linux/delay.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/delay.h 2017-04-18 17:19:16.662772455 +0200 +diff -Nur linux-4.9.28.orig/include/linux/delay.h linux-4.9.28/include/linux/delay.h +--- linux-4.9.28.orig/include/linux/delay.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/delay.h 2017-05-19 03:37:25.166176182 +0200 @@ -52,4 +52,10 @@ msleep(seconds * 1000); } @@ -6502,9 +6559,9 @@ diff -Nur linux-4.9.22.orig/include/linux/delay.h linux-4.9.22/include/linux/del +#endif + #endif /* defined(_LINUX_DELAY_H) */ -diff -Nur linux-4.9.22.orig/include/linux/highmem.h linux-4.9.22/include/linux/highmem.h ---- linux-4.9.22.orig/include/linux/highmem.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/highmem.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/highmem.h linux-4.9.28/include/linux/highmem.h +--- linux-4.9.28.orig/include/linux/highmem.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/highmem.h 2017-05-19 03:37:25.166176182 +0200 @@ -7,6 +7,7 @@ #include <linux/mm.h> #include <linux/uaccess.h> @@ -6587,9 +6644,9 @@ diff -Nur linux-4.9.22.orig/include/linux/highmem.h linux-4.9.22/include/linux/h #endif } -diff -Nur linux-4.9.22.orig/include/linux/hrtimer.h linux-4.9.22/include/linux/hrtimer.h ---- linux-4.9.22.orig/include/linux/hrtimer.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/hrtimer.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/hrtimer.h linux-4.9.28/include/linux/hrtimer.h +--- linux-4.9.28.orig/include/linux/hrtimer.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/hrtimer.h 2017-05-19 03:37:25.166176182 +0200 @@ -87,6 +87,9 @@ * @function: timer expiry callback function * @base: pointer to the timer base (per cpu and per clock) @@ -6690,9 +6747,9 @@ diff -Nur linux-4.9.22.orig/include/linux/hrtimer.h linux-4.9.22/include/linux/h } /* Forward a hrtimer so it expires after now: */ -diff -Nur linux-4.9.22.orig/include/linux/idr.h linux-4.9.22/include/linux/idr.h ---- linux-4.9.22.orig/include/linux/idr.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/idr.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/idr.h linux-4.9.28/include/linux/idr.h +--- linux-4.9.28.orig/include/linux/idr.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/idr.h 2017-05-19 03:37:25.166176182 +0200 @@ -95,10 +95,14 @@ * Each idr_preload() should be matched with an invocation of this * function. See idr_preload() for details. @@ -6708,9 +6765,9 @@ diff -Nur linux-4.9.22.orig/include/linux/idr.h linux-4.9.22/include/linux/idr.h /** * idr_find - return pointer for given id -diff -Nur linux-4.9.22.orig/include/linux/init_task.h linux-4.9.22/include/linux/init_task.h ---- linux-4.9.22.orig/include/linux/init_task.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/init_task.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/init_task.h linux-4.9.28/include/linux/init_task.h +--- linux-4.9.28.orig/include/linux/init_task.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/init_task.h 2017-05-19 03:37:25.166176182 +0200 @@ -150,6 +150,12 @@ # define INIT_PERF_EVENTS(tsk) #endif @@ -6724,7 +6781,15 @@ diff -Nur linux-4.9.22.orig/include/linux/init_task.h linux-4.9.22/include/linux #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN # define INIT_VTIME(tsk) \ .vtime_seqcount = SEQCNT_ZERO(tsk.vtime_seqcount), \ -@@ -250,6 +256,7 @@ +@@ -164,6 +170,7 @@ + #ifdef CONFIG_RT_MUTEXES + # define INIT_RT_MUTEXES(tsk) \ + .pi_waiters = RB_ROOT, \ ++ .pi_top_task = NULL, \ + .pi_waiters_leftmost = NULL, + #else + # define INIT_RT_MUTEXES(tsk) +@@ -250,6 +257,7 @@ .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ .pi_lock = __RAW_SPIN_LOCK_UNLOCKED(tsk.pi_lock), \ .timer_slack_ns = 50000, /* 50 usec default slack */ \ @@ -6732,9 +6797,9 @@ diff -Nur linux-4.9.22.orig/include/linux/init_task.h linux-4.9.22/include/linux .pids = { \ [PIDTYPE_PID] = INIT_PID_LINK(PIDTYPE_PID), \ [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \ -diff -Nur linux-4.9.22.orig/include/linux/interrupt.h linux-4.9.22/include/linux/interrupt.h ---- linux-4.9.22.orig/include/linux/interrupt.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/interrupt.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/interrupt.h linux-4.9.28/include/linux/interrupt.h +--- linux-4.9.28.orig/include/linux/interrupt.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/interrupt.h 2017-05-19 03:37:25.166176182 +0200 @@ -14,6 +14,7 @@ #include <linux/hrtimer.h> #include <linux/kref.h> @@ -6923,9 +6988,9 @@ diff -Nur linux-4.9.22.orig/include/linux/interrupt.h linux-4.9.22/include/linux /* * Autoprobing for irqs: * -diff -Nur linux-4.9.22.orig/include/linux/irqdesc.h linux-4.9.22/include/linux/irqdesc.h ---- linux-4.9.22.orig/include/linux/irqdesc.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/irqdesc.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/irqdesc.h linux-4.9.28/include/linux/irqdesc.h +--- linux-4.9.28.orig/include/linux/irqdesc.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/irqdesc.h 2017-05-19 03:37:25.166176182 +0200 @@ -66,6 +66,7 @@ unsigned int irqs_unhandled; atomic_t threads_handled; @@ -6934,9 +6999,9 @@ diff -Nur linux-4.9.22.orig/include/linux/irqdesc.h linux-4.9.22/include/linux/i raw_spinlock_t lock; struct cpumask *percpu_enabled; const struct cpumask *percpu_affinity; -diff -Nur linux-4.9.22.orig/include/linux/irqflags.h linux-4.9.22/include/linux/irqflags.h ---- linux-4.9.22.orig/include/linux/irqflags.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/irqflags.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/irqflags.h linux-4.9.28/include/linux/irqflags.h +--- linux-4.9.28.orig/include/linux/irqflags.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/irqflags.h 2017-05-19 03:37:25.166176182 +0200 @@ -25,8 +25,6 @@ # define trace_softirqs_enabled(p) ((p)->softirqs_enabled) # define trace_hardirq_enter() do { current->hardirq_context++; } while (0) @@ -6987,9 +7052,9 @@ diff -Nur linux-4.9.22.orig/include/linux/irqflags.h linux-4.9.22/include/linux/ +#endif + #endif -diff -Nur linux-4.9.22.orig/include/linux/irq.h linux-4.9.22/include/linux/irq.h ---- linux-4.9.22.orig/include/linux/irq.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/irq.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/irq.h linux-4.9.28/include/linux/irq.h +--- linux-4.9.28.orig/include/linux/irq.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/irq.h 2017-05-19 03:37:25.166176182 +0200 @@ -72,6 +72,7 @@ * IRQ_IS_POLLED - Always polled by another interrupt. Exclude * it from the spurious interrupt detection @@ -7014,9 +7079,9 @@ diff -Nur linux-4.9.22.orig/include/linux/irq.h linux-4.9.22/include/linux/irq.h #define IRQ_NO_BALANCING_MASK (IRQ_PER_CPU | IRQ_NO_BALANCING) -diff -Nur linux-4.9.22.orig/include/linux/irq_work.h linux-4.9.22/include/linux/irq_work.h ---- linux-4.9.22.orig/include/linux/irq_work.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/irq_work.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/irq_work.h linux-4.9.28/include/linux/irq_work.h +--- linux-4.9.28.orig/include/linux/irq_work.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/irq_work.h 2017-05-19 03:37:25.166176182 +0200 @@ -16,6 +16,7 @@ #define IRQ_WORK_BUSY 2UL #define IRQ_WORK_FLAGS 3UL @@ -7036,9 +7101,9 @@ diff -Nur linux-4.9.22.orig/include/linux/irq_work.h linux-4.9.22/include/linux/ +#endif + #endif /* _LINUX_IRQ_WORK_H */ -diff -Nur linux-4.9.22.orig/include/linux/jbd2.h linux-4.9.22/include/linux/jbd2.h ---- linux-4.9.22.orig/include/linux/jbd2.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/jbd2.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/jbd2.h linux-4.9.28/include/linux/jbd2.h +--- linux-4.9.28.orig/include/linux/jbd2.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/jbd2.h 2017-05-19 03:37:25.166176182 +0200 @@ -347,32 +347,56 @@ static inline void jbd_lock_bh_state(struct buffer_head *bh) @@ -7096,9 +7161,9 @@ diff -Nur linux-4.9.22.orig/include/linux/jbd2.h linux-4.9.22/include/linux/jbd2 } #define J_ASSERT(assert) BUG_ON(!(assert)) -diff -Nur linux-4.9.22.orig/include/linux/kdb.h linux-4.9.22/include/linux/kdb.h ---- linux-4.9.22.orig/include/linux/kdb.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/kdb.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/kdb.h linux-4.9.28/include/linux/kdb.h +--- linux-4.9.28.orig/include/linux/kdb.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/kdb.h 2017-05-19 03:37:25.166176182 +0200 @@ -167,6 +167,7 @@ extern __printf(1, 2) int kdb_printf(const char *, ...); typedef __printf(1, 2) int (*kdb_printf_t)(const char *, ...); @@ -7115,9 +7180,9 @@ diff -Nur linux-4.9.22.orig/include/linux/kdb.h linux-4.9.22/include/linux/kdb.h static inline void kdb_init(int level) {} static inline int kdb_register(char *cmd, kdb_func_t func, char *usage, char *help, short minlen) { return 0; } -diff -Nur linux-4.9.22.orig/include/linux/kernel.h linux-4.9.22/include/linux/kernel.h ---- linux-4.9.22.orig/include/linux/kernel.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/kernel.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/kernel.h linux-4.9.28/include/linux/kernel.h +--- linux-4.9.28.orig/include/linux/kernel.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/kernel.h 2017-05-19 03:37:25.166176182 +0200 @@ -194,6 +194,9 @@ */ # define might_sleep() \ @@ -7144,9 +7209,9 @@ diff -Nur linux-4.9.22.orig/include/linux/kernel.h linux-4.9.22/include/linux/ke } system_state; #define TAINT_PROPRIETARY_MODULE 0 -diff -Nur linux-4.9.22.orig/include/linux/list_bl.h linux-4.9.22/include/linux/list_bl.h ---- linux-4.9.22.orig/include/linux/list_bl.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/list_bl.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/list_bl.h linux-4.9.28/include/linux/list_bl.h +--- linux-4.9.28.orig/include/linux/list_bl.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/list_bl.h 2017-05-19 03:37:25.166176182 +0200 @@ -2,6 +2,7 @@ #define _LINUX_LIST_BL_H @@ -7209,9 +7274,9 @@ diff -Nur linux-4.9.22.orig/include/linux/list_bl.h linux-4.9.22/include/linux/l } static inline bool hlist_bl_is_locked(struct hlist_bl_head *b) -diff -Nur linux-4.9.22.orig/include/linux/locallock.h linux-4.9.22/include/linux/locallock.h ---- linux-4.9.22.orig/include/linux/locallock.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/locallock.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/locallock.h linux-4.9.28/include/linux/locallock.h +--- linux-4.9.28.orig/include/linux/locallock.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/locallock.h 2017-05-19 03:37:25.166176182 +0200 @@ -0,0 +1,278 @@ +#ifndef _LINUX_LOCALLOCK_H +#define _LINUX_LOCALLOCK_H @@ -7491,9 +7556,9 @@ diff -Nur linux-4.9.22.orig/include/linux/locallock.h linux-4.9.22/include/linux +#endif + +#endif -diff -Nur linux-4.9.22.orig/include/linux/mm_types.h linux-4.9.22/include/linux/mm_types.h ---- linux-4.9.22.orig/include/linux/mm_types.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/mm_types.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/mm_types.h linux-4.9.28/include/linux/mm_types.h +--- linux-4.9.28.orig/include/linux/mm_types.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/mm_types.h 2017-05-19 03:37:25.170176339 +0200 @@ -11,6 +11,7 @@ #include <linux/completion.h> #include <linux/cpumask.h> @@ -7512,9 +7577,9 @@ diff -Nur linux-4.9.22.orig/include/linux/mm_types.h linux-4.9.22/include/linux/ #ifdef CONFIG_X86_INTEL_MPX /* address of the bounds directory */ void __user *bd_addr; -diff -Nur linux-4.9.22.orig/include/linux/module.h linux-4.9.22/include/linux/module.h ---- linux-4.9.22.orig/include/linux/module.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/module.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/module.h linux-4.9.28/include/linux/module.h +--- linux-4.9.28.orig/include/linux/module.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/module.h 2017-05-19 03:37:25.170176339 +0200 @@ -496,6 +496,7 @@ struct module *__module_text_address(unsigned long addr); struct module *__module_address(unsigned long addr); @@ -7535,9 +7600,9 @@ diff -Nur linux-4.9.22.orig/include/linux/module.h linux-4.9.22/include/linux/mo static inline bool is_module_text_address(unsigned long addr) { -diff -Nur linux-4.9.22.orig/include/linux/mutex.h linux-4.9.22/include/linux/mutex.h ---- linux-4.9.22.orig/include/linux/mutex.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/mutex.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/mutex.h linux-4.9.28/include/linux/mutex.h +--- linux-4.9.28.orig/include/linux/mutex.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/mutex.h 2017-05-19 03:37:25.170176339 +0200 @@ -19,6 +19,17 @@ #include <asm/processor.h> #include <linux/osq_lock.h> @@ -7579,9 +7644,9 @@ diff -Nur linux-4.9.22.orig/include/linux/mutex.h linux-4.9.22/include/linux/mut extern int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock); #endif /* __LINUX_MUTEX_H */ -diff -Nur linux-4.9.22.orig/include/linux/mutex_rt.h linux-4.9.22/include/linux/mutex_rt.h ---- linux-4.9.22.orig/include/linux/mutex_rt.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/mutex_rt.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/mutex_rt.h linux-4.9.28/include/linux/mutex_rt.h +--- linux-4.9.28.orig/include/linux/mutex_rt.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/mutex_rt.h 2017-05-19 03:37:25.170176339 +0200 @@ -0,0 +1,89 @@ +#ifndef __LINUX_MUTEX_RT_H +#define __LINUX_MUTEX_RT_H @@ -7672,9 +7737,9 @@ diff -Nur linux-4.9.22.orig/include/linux/mutex_rt.h linux-4.9.22/include/linux/ +} while (0) + +#endif -diff -Nur linux-4.9.22.orig/include/linux/netdevice.h linux-4.9.22/include/linux/netdevice.h ---- linux-4.9.22.orig/include/linux/netdevice.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/netdevice.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/netdevice.h linux-4.9.28/include/linux/netdevice.h +--- linux-4.9.28.orig/include/linux/netdevice.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/netdevice.h 2017-05-19 03:37:25.170176339 +0200 @@ -396,7 +396,19 @@ typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **pskb); @@ -7758,9 +7823,9 @@ diff -Nur linux-4.9.22.orig/include/linux/netdevice.h linux-4.9.22/include/linux }; -diff -Nur linux-4.9.22.orig/include/linux/netfilter/x_tables.h linux-4.9.22/include/linux/netfilter/x_tables.h ---- linux-4.9.22.orig/include/linux/netfilter/x_tables.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/netfilter/x_tables.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/netfilter/x_tables.h linux-4.9.28/include/linux/netfilter/x_tables.h +--- linux-4.9.28.orig/include/linux/netfilter/x_tables.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/netfilter/x_tables.h 2017-05-19 03:37:25.170176339 +0200 @@ -4,6 +4,7 @@ #include <linux/netdevice.h> @@ -7796,9 +7861,9 @@ diff -Nur linux-4.9.22.orig/include/linux/netfilter/x_tables.h linux-4.9.22/incl } /* -diff -Nur linux-4.9.22.orig/include/linux/nfs_fs.h linux-4.9.22/include/linux/nfs_fs.h ---- linux-4.9.22.orig/include/linux/nfs_fs.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/nfs_fs.h 2017-04-18 17:19:16.666772610 +0200 +diff -Nur linux-4.9.28.orig/include/linux/nfs_fs.h linux-4.9.28/include/linux/nfs_fs.h +--- linux-4.9.28.orig/include/linux/nfs_fs.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/nfs_fs.h 2017-05-19 03:37:25.170176339 +0200 @@ -165,7 +165,11 @@ /* Readers: in-flight sillydelete RPC calls */ @@ -7811,9 +7876,9 @@ diff -Nur linux-4.9.22.orig/include/linux/nfs_fs.h linux-4.9.22/include/linux/nf #if IS_ENABLED(CONFIG_NFS_V4) struct nfs4_cached_acl *nfs4_acl; -diff -Nur linux-4.9.22.orig/include/linux/nfs_xdr.h linux-4.9.22/include/linux/nfs_xdr.h ---- linux-4.9.22.orig/include/linux/nfs_xdr.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/nfs_xdr.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/nfs_xdr.h linux-4.9.28/include/linux/nfs_xdr.h +--- linux-4.9.28.orig/include/linux/nfs_xdr.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/nfs_xdr.h 2017-05-19 03:37:25.170176339 +0200 @@ -1490,7 +1490,7 @@ struct nfs_removeargs args; struct nfs_removeres res; @@ -7823,9 +7888,9 @@ diff -Nur linux-4.9.22.orig/include/linux/nfs_xdr.h linux-4.9.22/include/linux/n struct rpc_cred *cred; struct nfs_fattr dir_attr; long timeout; -diff -Nur linux-4.9.22.orig/include/linux/notifier.h linux-4.9.22/include/linux/notifier.h ---- linux-4.9.22.orig/include/linux/notifier.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/notifier.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/notifier.h linux-4.9.28/include/linux/notifier.h +--- linux-4.9.28.orig/include/linux/notifier.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/notifier.h 2017-05-19 03:37:25.170176339 +0200 @@ -6,7 +6,7 @@ * * Alan Cox <Alan.Cox@linux.org> @@ -7905,9 +7970,9 @@ diff -Nur linux-4.9.22.orig/include/linux/notifier.h linux-4.9.22/include/linux/ /* CPU notfiers are defined in include/linux/cpu.h. */ /* netdevice notifiers are defined in include/linux/netdevice.h */ -diff -Nur linux-4.9.22.orig/include/linux/percpu.h linux-4.9.22/include/linux/percpu.h ---- linux-4.9.22.orig/include/linux/percpu.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/percpu.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/percpu.h linux-4.9.28/include/linux/percpu.h +--- linux-4.9.28.orig/include/linux/percpu.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/percpu.h 2017-05-19 03:37:25.170176339 +0200 @@ -18,6 +18,35 @@ #define PERCPU_MODULE_RESERVE 0 #endif @@ -7952,9 +8017,9 @@ diff -Nur linux-4.9.22.orig/include/linux/percpu.h linux-4.9.22/include/linux/pe extern bool is_kernel_percpu_address(unsigned long addr); #if !defined(CONFIG_SMP) || !defined(CONFIG_HAVE_SETUP_PER_CPU_AREA) -diff -Nur linux-4.9.22.orig/include/linux/percpu-rwsem.h linux-4.9.22/include/linux/percpu-rwsem.h ---- linux-4.9.22.orig/include/linux/percpu-rwsem.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/percpu-rwsem.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/percpu-rwsem.h linux-4.9.28/include/linux/percpu-rwsem.h +--- linux-4.9.28.orig/include/linux/percpu-rwsem.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/percpu-rwsem.h 2017-05-19 03:37:25.170176339 +0200 @@ -4,7 +4,7 @@ #include <linux/atomic.h> #include <linux/rwsem.h> @@ -8036,9 +8101,9 @@ diff -Nur linux-4.9.22.orig/include/linux/percpu-rwsem.h linux-4.9.22/include/li extern void percpu_down_write(struct percpu_rw_semaphore *); extern void percpu_up_write(struct percpu_rw_semaphore *); -diff -Nur linux-4.9.22.orig/include/linux/pid.h linux-4.9.22/include/linux/pid.h ---- linux-4.9.22.orig/include/linux/pid.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/pid.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/pid.h linux-4.9.28/include/linux/pid.h +--- linux-4.9.28.orig/include/linux/pid.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/pid.h 2017-05-19 03:37:25.170176339 +0200 @@ -2,6 +2,7 @@ #define _LINUX_PID_H @@ -8047,9 +8112,9 @@ diff -Nur linux-4.9.22.orig/include/linux/pid.h linux-4.9.22/include/linux/pid.h enum pid_type { -diff -Nur linux-4.9.22.orig/include/linux/preempt.h linux-4.9.22/include/linux/preempt.h ---- linux-4.9.22.orig/include/linux/preempt.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/preempt.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/preempt.h linux-4.9.28/include/linux/preempt.h +--- linux-4.9.28.orig/include/linux/preempt.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/preempt.h 2017-05-19 03:37:25.170176339 +0200 @@ -50,7 +50,11 @@ #define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT) #define NMI_OFFSET (1UL << NMI_SHIFT) @@ -8203,9 +8268,9 @@ diff -Nur linux-4.9.22.orig/include/linux/preempt.h linux-4.9.22/include/linux/p #ifdef CONFIG_PREEMPT_NOTIFIERS struct preempt_notifier; -diff -Nur linux-4.9.22.orig/include/linux/printk.h linux-4.9.22/include/linux/printk.h ---- linux-4.9.22.orig/include/linux/printk.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/printk.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/printk.h linux-4.9.28/include/linux/printk.h +--- linux-4.9.28.orig/include/linux/printk.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/printk.h 2017-05-19 03:37:25.170176339 +0200 @@ -126,9 +126,11 @@ #ifdef CONFIG_EARLY_PRINTK extern asmlinkage __printf(1, 2) @@ -8218,9 +8283,9 @@ diff -Nur linux-4.9.22.orig/include/linux/printk.h linux-4.9.22/include/linux/pr #endif #ifdef CONFIG_PRINTK_NMI -diff -Nur linux-4.9.22.orig/include/linux/radix-tree.h linux-4.9.22/include/linux/radix-tree.h ---- linux-4.9.22.orig/include/linux/radix-tree.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/radix-tree.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/radix-tree.h linux-4.9.28/include/linux/radix-tree.h +--- linux-4.9.28.orig/include/linux/radix-tree.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/radix-tree.h 2017-05-19 03:37:25.170176339 +0200 @@ -292,6 +292,8 @@ int radix_tree_preload(gfp_t gfp_mask); int radix_tree_maybe_preload(gfp_t gfp_mask); @@ -8242,9 +8307,9 @@ diff -Nur linux-4.9.22.orig/include/linux/radix-tree.h linux-4.9.22/include/linu /** * struct radix_tree_iter - radix tree iterator state * -diff -Nur linux-4.9.22.orig/include/linux/random.h linux-4.9.22/include/linux/random.h ---- linux-4.9.22.orig/include/linux/random.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/random.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/random.h linux-4.9.28/include/linux/random.h +--- linux-4.9.28.orig/include/linux/random.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/random.h 2017-05-19 03:37:25.170176339 +0200 @@ -31,7 +31,7 @@ extern void add_input_randomness(unsigned int type, unsigned int code, @@ -8254,9 +8319,9 @@ diff -Nur linux-4.9.22.orig/include/linux/random.h linux-4.9.22/include/linux/ra extern void get_random_bytes(void *buf, int nbytes); extern int add_random_ready_callback(struct random_ready_callback *rdy); -diff -Nur linux-4.9.22.orig/include/linux/rbtree_augmented.h linux-4.9.22/include/linux/rbtree_augmented.h ---- linux-4.9.22.orig/include/linux/rbtree_augmented.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/rbtree_augmented.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rbtree_augmented.h linux-4.9.28/include/linux/rbtree_augmented.h +--- linux-4.9.28.orig/include/linux/rbtree_augmented.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/rbtree_augmented.h 2017-05-19 03:37:25.170176339 +0200 @@ -26,6 +26,7 @@ #include <linux/compiler.h> @@ -8265,9 +8330,9 @@ diff -Nur linux-4.9.22.orig/include/linux/rbtree_augmented.h linux-4.9.22/includ /* * Please note - only struct rb_augment_callbacks and the prototypes for -diff -Nur linux-4.9.22.orig/include/linux/rbtree.h linux-4.9.22/include/linux/rbtree.h ---- linux-4.9.22.orig/include/linux/rbtree.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/rbtree.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rbtree.h linux-4.9.28/include/linux/rbtree.h +--- linux-4.9.28.orig/include/linux/rbtree.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/rbtree.h 2017-05-19 03:37:25.170176339 +0200 @@ -31,7 +31,7 @@ #include <linux/kernel.h> @@ -8277,9 +8342,9 @@ diff -Nur linux-4.9.22.orig/include/linux/rbtree.h linux-4.9.22/include/linux/rb struct rb_node { unsigned long __rb_parent_color; -diff -Nur linux-4.9.22.orig/include/linux/rcu_assign_pointer.h linux-4.9.22/include/linux/rcu_assign_pointer.h ---- linux-4.9.22.orig/include/linux/rcu_assign_pointer.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/rcu_assign_pointer.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rcu_assign_pointer.h linux-4.9.28/include/linux/rcu_assign_pointer.h +--- linux-4.9.28.orig/include/linux/rcu_assign_pointer.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/rcu_assign_pointer.h 2017-05-19 03:37:25.170176339 +0200 @@ -0,0 +1,54 @@ +#ifndef __LINUX_RCU_ASSIGN_POINTER_H__ +#define __LINUX_RCU_ASSIGN_POINTER_H__ @@ -8335,9 +8400,9 @@ diff -Nur linux-4.9.22.orig/include/linux/rcu_assign_pointer.h linux-4.9.22/incl +}) + +#endif -diff -Nur linux-4.9.22.orig/include/linux/rcupdate.h linux-4.9.22/include/linux/rcupdate.h ---- linux-4.9.22.orig/include/linux/rcupdate.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/rcupdate.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rcupdate.h linux-4.9.28/include/linux/rcupdate.h +--- linux-4.9.28.orig/include/linux/rcupdate.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/rcupdate.h 2017-05-19 03:37:25.170176339 +0200 @@ -46,6 +46,7 @@ #include <linux/compiler.h> #include <linux/ktime.h> @@ -8485,9 +8550,9 @@ diff -Nur linux-4.9.22.orig/include/linux/rcupdate.h linux-4.9.22/include/linux/ local_bh_enable(); } -diff -Nur linux-4.9.22.orig/include/linux/rcutree.h linux-4.9.22/include/linux/rcutree.h ---- linux-4.9.22.orig/include/linux/rcutree.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/rcutree.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rcutree.h linux-4.9.28/include/linux/rcutree.h +--- linux-4.9.28.orig/include/linux/rcutree.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/rcutree.h 2017-05-19 03:37:25.170176339 +0200 @@ -44,7 +44,11 @@ rcu_note_context_switch(); } @@ -8547,9 +8612,9 @@ diff -Nur linux-4.9.22.orig/include/linux/rcutree.h linux-4.9.22/include/linux/r void rcu_all_qs(void); /* RCUtree hotplug events */ -diff -Nur linux-4.9.22.orig/include/linux/rtmutex.h linux-4.9.22/include/linux/rtmutex.h ---- linux-4.9.22.orig/include/linux/rtmutex.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/rtmutex.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rtmutex.h linux-4.9.28/include/linux/rtmutex.h +--- linux-4.9.28.orig/include/linux/rtmutex.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/rtmutex.h 2017-05-19 03:37:25.170176339 +0200 @@ -13,11 +13,15 @@ #define __LINUX_RT_MUTEX_H @@ -8626,9 +8691,9 @@ diff -Nur linux-4.9.22.orig/include/linux/rtmutex.h linux-4.9.22/include/linux/r extern int rt_mutex_timed_lock(struct rt_mutex *lock, struct hrtimer_sleeper *timeout); -diff -Nur linux-4.9.22.orig/include/linux/rwlock_rt.h linux-4.9.22/include/linux/rwlock_rt.h ---- linux-4.9.22.orig/include/linux/rwlock_rt.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/rwlock_rt.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rwlock_rt.h linux-4.9.28/include/linux/rwlock_rt.h +--- linux-4.9.28.orig/include/linux/rwlock_rt.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/rwlock_rt.h 2017-05-19 03:37:25.170176339 +0200 @@ -0,0 +1,99 @@ +#ifndef __LINUX_RWLOCK_RT_H +#define __LINUX_RWLOCK_RT_H @@ -8729,9 +8794,9 @@ diff -Nur linux-4.9.22.orig/include/linux/rwlock_rt.h linux-4.9.22/include/linux + } while (0) + +#endif -diff -Nur linux-4.9.22.orig/include/linux/rwlock_types.h linux-4.9.22/include/linux/rwlock_types.h ---- linux-4.9.22.orig/include/linux/rwlock_types.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/rwlock_types.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rwlock_types.h linux-4.9.28/include/linux/rwlock_types.h +--- linux-4.9.28.orig/include/linux/rwlock_types.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/rwlock_types.h 2017-05-19 03:37:25.170176339 +0200 @@ -1,6 +1,10 @@ #ifndef __LINUX_RWLOCK_TYPES_H #define __LINUX_RWLOCK_TYPES_H @@ -8743,9 +8808,9 @@ diff -Nur linux-4.9.22.orig/include/linux/rwlock_types.h linux-4.9.22/include/li /* * include/linux/rwlock_types.h - generic rwlock type definitions * and initializers -diff -Nur linux-4.9.22.orig/include/linux/rwlock_types_rt.h linux-4.9.22/include/linux/rwlock_types_rt.h ---- linux-4.9.22.orig/include/linux/rwlock_types_rt.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/rwlock_types_rt.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rwlock_types_rt.h linux-4.9.28/include/linux/rwlock_types_rt.h +--- linux-4.9.28.orig/include/linux/rwlock_types_rt.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/rwlock_types_rt.h 2017-05-19 03:37:25.170176339 +0200 @@ -0,0 +1,33 @@ +#ifndef __LINUX_RWLOCK_TYPES_RT_H +#define __LINUX_RWLOCK_TYPES_RT_H @@ -8780,9 +8845,9 @@ diff -Nur linux-4.9.22.orig/include/linux/rwlock_types_rt.h linux-4.9.22/include + rwlock_t name = __RW_LOCK_UNLOCKED(name) + +#endif -diff -Nur linux-4.9.22.orig/include/linux/rwsem.h linux-4.9.22/include/linux/rwsem.h ---- linux-4.9.22.orig/include/linux/rwsem.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/rwsem.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rwsem.h linux-4.9.28/include/linux/rwsem.h +--- linux-4.9.28.orig/include/linux/rwsem.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/rwsem.h 2017-05-19 03:37:25.174176493 +0200 @@ -19,6 +19,10 @@ #include <linux/osq_lock.h> #endif @@ -8808,9 +8873,9 @@ diff -Nur linux-4.9.22.orig/include/linux/rwsem.h linux-4.9.22/include/linux/rws /* * lock for reading */ -diff -Nur linux-4.9.22.orig/include/linux/rwsem_rt.h linux-4.9.22/include/linux/rwsem_rt.h ---- linux-4.9.22.orig/include/linux/rwsem_rt.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/rwsem_rt.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/rwsem_rt.h linux-4.9.28/include/linux/rwsem_rt.h +--- linux-4.9.28.orig/include/linux/rwsem_rt.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/rwsem_rt.h 2017-05-19 03:37:25.174176493 +0200 @@ -0,0 +1,67 @@ +#ifndef _LINUX_RWSEM_RT_H +#define _LINUX_RWSEM_RT_H @@ -8879,9 +8944,48 @@ diff -Nur linux-4.9.22.orig/include/linux/rwsem_rt.h linux-4.9.22/include/linux/ +extern void __downgrade_write(struct rw_semaphore *sem); + +#endif -diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sched.h ---- linux-4.9.22.orig/include/linux/sched.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/sched.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/sched/rt.h linux-4.9.28/include/linux/sched/rt.h +--- linux-4.9.28.orig/include/linux/sched/rt.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/sched/rt.h 2017-05-19 03:37:25.174176493 +0200 +@@ -16,27 +16,20 @@ + } + + #ifdef CONFIG_RT_MUTEXES +-extern int rt_mutex_getprio(struct task_struct *p); +-extern void rt_mutex_setprio(struct task_struct *p, int prio); +-extern int rt_mutex_get_effective_prio(struct task_struct *task, int newprio); +-extern struct task_struct *rt_mutex_get_top_task(struct task_struct *task); ++/* ++ * Must hold either p->pi_lock or task_rq(p)->lock. ++ */ ++static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *p) ++{ ++ return p->pi_top_task; ++} ++extern void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task); + extern void rt_mutex_adjust_pi(struct task_struct *p); + static inline bool tsk_is_pi_blocked(struct task_struct *tsk) + { + return tsk->pi_blocked_on != NULL; + } + #else +-static inline int rt_mutex_getprio(struct task_struct *p) +-{ +- return p->normal_prio; +-} +- +-static inline int rt_mutex_get_effective_prio(struct task_struct *task, +- int newprio) +-{ +- return newprio; +-} +- + static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *task) + { + return NULL; +diff -Nur linux-4.9.28.orig/include/linux/sched.h linux-4.9.28/include/linux/sched.h +--- linux-4.9.28.orig/include/linux/sched.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/sched.h 2017-05-19 03:37:25.174176493 +0200 @@ -26,6 +26,7 @@ #include <linux/nodemask.h> #include <linux/mm_types.h> @@ -8955,7 +9059,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch int nr_cpus_allowed; cpumask_t cpus_allowed; -@@ -1654,6 +1674,9 @@ +@@ -1658,6 +1678,9 @@ struct task_cputime cputime_expires; struct list_head cpu_timers[3]; @@ -8965,7 +9069,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch /* process credentials */ const struct cred __rcu *ptracer_cred; /* Tracer's credentials at attach */ -@@ -1685,10 +1708,15 @@ +@@ -1689,10 +1712,15 @@ /* signal handlers */ struct signal_struct *signal; struct sighand_struct *sighand; @@ -8981,7 +9085,16 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch unsigned long sas_ss_sp; size_t sas_ss_size; -@@ -1917,6 +1945,12 @@ +@@ -1723,6 +1751,8 @@ + /* PI waiters blocked on a rt_mutex held by this task */ + struct rb_root pi_waiters; + struct rb_node *pi_waiters_leftmost; ++ /* Updated under owner's pi_lock and rq lock */ ++ struct task_struct *pi_top_task; + /* Deadlock detection and priority inheritance handling */ + struct rt_mutex_waiter *pi_blocked_on; + #endif +@@ -1921,6 +1951,12 @@ /* bitmask and counter of trace recursion */ unsigned long trace_recursion; #endif /* CONFIG_TRACING */ @@ -8994,7 +9107,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch #ifdef CONFIG_KCOV /* Coverage collection mode enabled for this task (0 if disabled). */ enum kcov_mode kcov_mode; -@@ -1942,9 +1976,23 @@ +@@ -1946,9 +1982,23 @@ unsigned int sequential_io; unsigned int sequential_io_avg; #endif @@ -9018,7 +9131,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch int pagefault_disabled; #ifdef CONFIG_MMU struct task_struct *oom_reaper_list; -@@ -1984,14 +2032,6 @@ +@@ -1988,14 +2038,6 @@ } #endif @@ -9033,7 +9146,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch #define TNF_MIGRATED 0x01 #define TNF_NO_GROUP 0x02 #define TNF_SHARED 0x04 -@@ -2207,6 +2247,15 @@ +@@ -2211,6 +2253,15 @@ extern void free_task(struct task_struct *tsk); #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0) @@ -9049,7 +9162,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch extern void __put_task_struct(struct task_struct *t); static inline void put_task_struct(struct task_struct *t) -@@ -2214,6 +2263,7 @@ +@@ -2218,6 +2269,7 @@ if (atomic_dec_and_test(&t->usage)) __put_task_struct(t); } @@ -9057,7 +9170,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch struct task_struct *task_rcu_dereference(struct task_struct **ptask); struct task_struct *try_get_task_struct(struct task_struct **ptask); -@@ -2255,6 +2305,7 @@ +@@ -2259,6 +2311,7 @@ /* * Per process flags */ @@ -9065,7 +9178,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch #define PF_EXITING 0x00000004 /* getting shut down */ #define PF_EXITPIDONE 0x00000008 /* pi exit done on shut down */ #define PF_VCPU 0x00000010 /* I'm a virtual CPU */ -@@ -2423,6 +2474,10 @@ +@@ -2427,6 +2480,10 @@ extern int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask); @@ -9076,7 +9189,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch #else static inline void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) -@@ -2435,6 +2490,9 @@ +@@ -2439,6 +2496,9 @@ return -EINVAL; return 0; } @@ -9086,7 +9199,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch #endif #ifdef CONFIG_NO_HZ_COMMON -@@ -2673,6 +2731,7 @@ +@@ -2677,6 +2737,7 @@ extern int wake_up_state(struct task_struct *tsk, unsigned int state); extern int wake_up_process(struct task_struct *tsk); @@ -9094,7 +9207,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch extern void wake_up_new_task(struct task_struct *tsk); #ifdef CONFIG_SMP extern void kick_process(struct task_struct *tsk); -@@ -2881,6 +2940,17 @@ +@@ -2885,6 +2946,17 @@ __mmdrop(mm); } @@ -9112,7 +9225,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch static inline void mmdrop_async_fn(struct work_struct *work) { struct mm_struct *mm = container_of(work, struct mm_struct, async_put_work); -@@ -3273,6 +3343,43 @@ +@@ -3277,6 +3349,43 @@ return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); } @@ -9156,7 +9269,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch static inline int restart_syscall(void) { set_tsk_thread_flag(current, TIF_SIGPENDING); -@@ -3304,6 +3411,51 @@ +@@ -3308,6 +3417,51 @@ return (state & TASK_INTERRUPTIBLE) || __fatal_signal_pending(p); } @@ -9208,7 +9321,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch /* * cond_resched() and cond_resched_lock(): latency reduction via * explicit rescheduling in places that are safe. The return -@@ -3329,12 +3481,16 @@ +@@ -3333,12 +3487,16 @@ __cond_resched_lock(lock); \ }) @@ -9225,7 +9338,7 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch static inline void cond_resched_rcu(void) { -@@ -3509,6 +3665,31 @@ +@@ -3513,6 +3671,31 @@ #endif /* CONFIG_SMP */ @@ -9257,9 +9370,9 @@ diff -Nur linux-4.9.22.orig/include/linux/sched.h linux-4.9.22/include/linux/sch extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask); extern long sched_getaffinity(pid_t pid, struct cpumask *mask); -diff -Nur linux-4.9.22.orig/include/linux/seqlock.h linux-4.9.22/include/linux/seqlock.h ---- linux-4.9.22.orig/include/linux/seqlock.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/seqlock.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/seqlock.h linux-4.9.28/include/linux/seqlock.h +--- linux-4.9.28.orig/include/linux/seqlock.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/seqlock.h 2017-05-19 03:37:25.174176493 +0200 @@ -220,20 +220,30 @@ return __read_seqcount_retry(s, start); } @@ -9398,9 +9511,9 @@ diff -Nur linux-4.9.22.orig/include/linux/seqlock.h linux-4.9.22/include/linux/s spin_unlock_irqrestore(&sl->lock, flags); } -diff -Nur linux-4.9.22.orig/include/linux/signal.h linux-4.9.22/include/linux/signal.h ---- linux-4.9.22.orig/include/linux/signal.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/signal.h 2017-04-18 17:19:16.670772765 +0200 +diff -Nur linux-4.9.28.orig/include/linux/signal.h linux-4.9.28/include/linux/signal.h +--- linux-4.9.28.orig/include/linux/signal.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/signal.h 2017-05-19 03:37:25.174176493 +0200 @@ -233,6 +233,7 @@ } @@ -9409,9 +9522,9 @@ diff -Nur linux-4.9.22.orig/include/linux/signal.h linux-4.9.22/include/linux/si /* Test if 'sig' is valid signal. Use this instead of testing _NSIG directly */ static inline int valid_signal(unsigned long sig) -diff -Nur linux-4.9.22.orig/include/linux/skbuff.h linux-4.9.22/include/linux/skbuff.h ---- linux-4.9.22.orig/include/linux/skbuff.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/skbuff.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/skbuff.h linux-4.9.28/include/linux/skbuff.h +--- linux-4.9.28.orig/include/linux/skbuff.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/skbuff.h 2017-05-19 03:37:25.174176493 +0200 @@ -284,6 +284,7 @@ __u32 qlen; @@ -9433,9 +9546,9 @@ diff -Nur linux-4.9.22.orig/include/linux/skbuff.h linux-4.9.22/include/linux/sk static inline void skb_queue_head_init_class(struct sk_buff_head *list, struct lock_class_key *class) { -diff -Nur linux-4.9.22.orig/include/linux/smp.h linux-4.9.22/include/linux/smp.h ---- linux-4.9.22.orig/include/linux/smp.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/smp.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/smp.h linux-4.9.28/include/linux/smp.h +--- linux-4.9.28.orig/include/linux/smp.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/smp.h 2017-05-19 03:37:25.174176493 +0200 @@ -120,6 +120,13 @@ extern void __init setup_nr_cpu_ids(void); extern void __init smp_init(void); @@ -9472,9 +9585,9 @@ diff -Nur linux-4.9.22.orig/include/linux/smp.h linux-4.9.22/include/linux/smp.h /* * Callback to arch code if there's nosmp or maxcpus=0 on the * boot command line: -diff -Nur linux-4.9.22.orig/include/linux/spinlock_api_smp.h linux-4.9.22/include/linux/spinlock_api_smp.h ---- linux-4.9.22.orig/include/linux/spinlock_api_smp.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/spinlock_api_smp.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/spinlock_api_smp.h linux-4.9.28/include/linux/spinlock_api_smp.h +--- linux-4.9.28.orig/include/linux/spinlock_api_smp.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/spinlock_api_smp.h 2017-05-19 03:37:25.174176493 +0200 @@ -189,6 +189,8 @@ return 0; } @@ -9485,9 +9598,9 @@ diff -Nur linux-4.9.22.orig/include/linux/spinlock_api_smp.h linux-4.9.22/includ +#endif #endif /* __LINUX_SPINLOCK_API_SMP_H */ -diff -Nur linux-4.9.22.orig/include/linux/spinlock.h linux-4.9.22/include/linux/spinlock.h ---- linux-4.9.22.orig/include/linux/spinlock.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/spinlock.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/spinlock.h linux-4.9.28/include/linux/spinlock.h +--- linux-4.9.28.orig/include/linux/spinlock.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/spinlock.h 2017-05-19 03:37:25.174176493 +0200 @@ -271,7 +271,11 @@ #define raw_spin_can_lock(lock) (!raw_spin_is_locked(lock)) @@ -9519,9 +9632,9 @@ diff -Nur linux-4.9.22.orig/include/linux/spinlock.h linux-4.9.22/include/linux/ +#endif /* !PREEMPT_RT_FULL */ + #endif /* __LINUX_SPINLOCK_H */ -diff -Nur linux-4.9.22.orig/include/linux/spinlock_rt.h linux-4.9.22/include/linux/spinlock_rt.h ---- linux-4.9.22.orig/include/linux/spinlock_rt.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/spinlock_rt.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/spinlock_rt.h linux-4.9.28/include/linux/spinlock_rt.h +--- linux-4.9.28.orig/include/linux/spinlock_rt.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/spinlock_rt.h 2017-05-19 03:37:25.174176493 +0200 @@ -0,0 +1,162 @@ +#ifndef __LINUX_SPINLOCK_RT_H +#define __LINUX_SPINLOCK_RT_H @@ -9685,9 +9798,9 @@ diff -Nur linux-4.9.22.orig/include/linux/spinlock_rt.h linux-4.9.22/include/lin + atomic_dec_and_spin_lock(atomic, lock) + +#endif -diff -Nur linux-4.9.22.orig/include/linux/spinlock_types.h linux-4.9.22/include/linux/spinlock_types.h ---- linux-4.9.22.orig/include/linux/spinlock_types.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/spinlock_types.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/spinlock_types.h linux-4.9.28/include/linux/spinlock_types.h +--- linux-4.9.28.orig/include/linux/spinlock_types.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/spinlock_types.h 2017-05-19 03:37:25.174176493 +0200 @@ -9,80 +9,15 @@ * Released under the General Public License (GPL). */ @@ -9776,9 +9889,9 @@ diff -Nur linux-4.9.22.orig/include/linux/spinlock_types.h linux-4.9.22/include/ -#include <linux/rwlock_types.h> - #endif /* __LINUX_SPINLOCK_TYPES_H */ -diff -Nur linux-4.9.22.orig/include/linux/spinlock_types_nort.h linux-4.9.22/include/linux/spinlock_types_nort.h ---- linux-4.9.22.orig/include/linux/spinlock_types_nort.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/spinlock_types_nort.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/spinlock_types_nort.h linux-4.9.28/include/linux/spinlock_types_nort.h +--- linux-4.9.28.orig/include/linux/spinlock_types_nort.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/spinlock_types_nort.h 2017-05-19 03:37:25.174176493 +0200 @@ -0,0 +1,33 @@ +#ifndef __LINUX_SPINLOCK_TYPES_NORT_H +#define __LINUX_SPINLOCK_TYPES_NORT_H @@ -9813,9 +9926,9 @@ diff -Nur linux-4.9.22.orig/include/linux/spinlock_types_nort.h linux-4.9.22/inc +#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) + +#endif -diff -Nur linux-4.9.22.orig/include/linux/spinlock_types_raw.h linux-4.9.22/include/linux/spinlock_types_raw.h ---- linux-4.9.22.orig/include/linux/spinlock_types_raw.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/spinlock_types_raw.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/spinlock_types_raw.h linux-4.9.28/include/linux/spinlock_types_raw.h +--- linux-4.9.28.orig/include/linux/spinlock_types_raw.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/spinlock_types_raw.h 2017-05-19 03:37:25.174176493 +0200 @@ -0,0 +1,56 @@ +#ifndef __LINUX_SPINLOCK_TYPES_RAW_H +#define __LINUX_SPINLOCK_TYPES_RAW_H @@ -9873,9 +9986,9 @@ diff -Nur linux-4.9.22.orig/include/linux/spinlock_types_raw.h linux-4.9.22/incl +#define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x) + +#endif -diff -Nur linux-4.9.22.orig/include/linux/spinlock_types_rt.h linux-4.9.22/include/linux/spinlock_types_rt.h ---- linux-4.9.22.orig/include/linux/spinlock_types_rt.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/spinlock_types_rt.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/spinlock_types_rt.h linux-4.9.28/include/linux/spinlock_types_rt.h +--- linux-4.9.28.orig/include/linux/spinlock_types_rt.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/spinlock_types_rt.h 2017-05-19 03:37:25.174176493 +0200 @@ -0,0 +1,48 @@ +#ifndef __LINUX_SPINLOCK_TYPES_RT_H +#define __LINUX_SPINLOCK_TYPES_RT_H @@ -9925,9 +10038,9 @@ diff -Nur linux-4.9.22.orig/include/linux/spinlock_types_rt.h linux-4.9.22/inclu + spinlock_t name = __SPIN_LOCK_UNLOCKED(name) + +#endif -diff -Nur linux-4.9.22.orig/include/linux/srcu.h linux-4.9.22/include/linux/srcu.h ---- linux-4.9.22.orig/include/linux/srcu.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/srcu.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/srcu.h linux-4.9.28/include/linux/srcu.h +--- linux-4.9.28.orig/include/linux/srcu.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/srcu.h 2017-05-19 03:37:25.174176493 +0200 @@ -84,10 +84,10 @@ void process_srcu(struct work_struct *work); @@ -9950,9 +10063,9 @@ diff -Nur linux-4.9.22.orig/include/linux/srcu.h linux-4.9.22/include/linux/srcu #define DEFINE_SRCU(name) __DEFINE_SRCU(name, /* not static */) #define DEFINE_STATIC_SRCU(name) __DEFINE_SRCU(name, static) -diff -Nur linux-4.9.22.orig/include/linux/suspend.h linux-4.9.22/include/linux/suspend.h ---- linux-4.9.22.orig/include/linux/suspend.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/suspend.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/suspend.h linux-4.9.28/include/linux/suspend.h +--- linux-4.9.28.orig/include/linux/suspend.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/suspend.h 2017-05-19 03:37:25.174176493 +0200 @@ -193,6 +193,12 @@ void (*end)(void); }; @@ -9966,9 +10079,9 @@ diff -Nur linux-4.9.22.orig/include/linux/suspend.h linux-4.9.22/include/linux/s #ifdef CONFIG_SUSPEND /** * suspend_set_ops - set platform dependent suspend operations -diff -Nur linux-4.9.22.orig/include/linux/swait.h linux-4.9.22/include/linux/swait.h ---- linux-4.9.22.orig/include/linux/swait.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/swait.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/swait.h linux-4.9.28/include/linux/swait.h +--- linux-4.9.28.orig/include/linux/swait.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/swait.h 2017-05-19 03:37:25.174176493 +0200 @@ -87,6 +87,7 @@ extern void swake_up(struct swait_queue_head *q); extern void swake_up_all(struct swait_queue_head *q); @@ -9977,9 +10090,9 @@ diff -Nur linux-4.9.22.orig/include/linux/swait.h linux-4.9.22/include/linux/swa extern void __prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait); extern void prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait, int state); -diff -Nur linux-4.9.22.orig/include/linux/swap.h linux-4.9.22/include/linux/swap.h ---- linux-4.9.22.orig/include/linux/swap.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/swap.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/swap.h linux-4.9.28/include/linux/swap.h +--- linux-4.9.28.orig/include/linux/swap.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/swap.h 2017-05-19 03:37:25.174176493 +0200 @@ -11,6 +11,7 @@ #include <linux/fs.h> #include <linux/atomic.h> @@ -10006,9 +10119,9 @@ diff -Nur linux-4.9.22.orig/include/linux/swap.h linux-4.9.22/include/linux/swap extern void lru_cache_add(struct page *); extern void lru_cache_add_anon(struct page *page); extern void lru_cache_add_file(struct page *page); -diff -Nur linux-4.9.22.orig/include/linux/swork.h linux-4.9.22/include/linux/swork.h ---- linux-4.9.22.orig/include/linux/swork.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/linux/swork.h 2017-04-18 17:19:16.674772920 +0200 +diff -Nur linux-4.9.28.orig/include/linux/swork.h linux-4.9.28/include/linux/swork.h +--- linux-4.9.28.orig/include/linux/swork.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/linux/swork.h 2017-05-19 03:37:25.174176493 +0200 @@ -0,0 +1,24 @@ +#ifndef _LINUX_SWORK_H +#define _LINUX_SWORK_H @@ -10034,9 +10147,9 @@ diff -Nur linux-4.9.22.orig/include/linux/swork.h linux-4.9.22/include/linux/swo +void swork_put(void); + +#endif /* _LINUX_SWORK_H */ -diff -Nur linux-4.9.22.orig/include/linux/thread_info.h linux-4.9.22/include/linux/thread_info.h ---- linux-4.9.22.orig/include/linux/thread_info.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/thread_info.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/linux/thread_info.h linux-4.9.28/include/linux/thread_info.h +--- linux-4.9.28.orig/include/linux/thread_info.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/thread_info.h 2017-05-19 03:37:25.174176493 +0200 @@ -107,7 +107,17 @@ #define test_thread_flag(flag) \ test_ti_thread_flag(current_thread_info(), flag) @@ -10056,9 +10169,9 @@ diff -Nur linux-4.9.22.orig/include/linux/thread_info.h linux-4.9.22/include/lin #ifndef CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES static inline int arch_within_stack_frames(const void * const stack, -diff -Nur linux-4.9.22.orig/include/linux/timer.h linux-4.9.22/include/linux/timer.h ---- linux-4.9.22.orig/include/linux/timer.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/timer.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/linux/timer.h linux-4.9.28/include/linux/timer.h +--- linux-4.9.28.orig/include/linux/timer.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/timer.h 2017-05-19 03:37:25.174176493 +0200 @@ -241,7 +241,7 @@ extern int try_to_del_timer_sync(struct timer_list *timer); @@ -10068,9 +10181,9 @@ diff -Nur linux-4.9.22.orig/include/linux/timer.h linux-4.9.22/include/linux/tim extern int del_timer_sync(struct timer_list *timer); #else # define del_timer_sync(t) del_timer(t) -diff -Nur linux-4.9.22.orig/include/linux/trace_events.h linux-4.9.22/include/linux/trace_events.h ---- linux-4.9.22.orig/include/linux/trace_events.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/trace_events.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/linux/trace_events.h linux-4.9.28/include/linux/trace_events.h +--- linux-4.9.28.orig/include/linux/trace_events.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/trace_events.h 2017-05-19 03:37:25.174176493 +0200 @@ -56,6 +56,9 @@ unsigned char flags; unsigned char preempt_count; @@ -10081,9 +10194,9 @@ diff -Nur linux-4.9.22.orig/include/linux/trace_events.h linux-4.9.22/include/li }; #define TRACE_EVENT_TYPE_MAX \ -diff -Nur linux-4.9.22.orig/include/linux/uaccess.h linux-4.9.22/include/linux/uaccess.h ---- linux-4.9.22.orig/include/linux/uaccess.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/uaccess.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/linux/uaccess.h linux-4.9.28/include/linux/uaccess.h +--- linux-4.9.28.orig/include/linux/uaccess.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/uaccess.h 2017-05-19 03:37:25.178176648 +0200 @@ -24,6 +24,7 @@ */ static inline void pagefault_disable(void) @@ -10100,9 +10213,9 @@ diff -Nur linux-4.9.22.orig/include/linux/uaccess.h linux-4.9.22/include/linux/u } /* -diff -Nur linux-4.9.22.orig/include/linux/uprobes.h linux-4.9.22/include/linux/uprobes.h ---- linux-4.9.22.orig/include/linux/uprobes.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/uprobes.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/linux/uprobes.h linux-4.9.28/include/linux/uprobes.h +--- linux-4.9.28.orig/include/linux/uprobes.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/uprobes.h 2017-05-19 03:37:25.178176648 +0200 @@ -27,6 +27,7 @@ #include <linux/errno.h> #include <linux/rbtree.h> @@ -10111,9 +10224,9 @@ diff -Nur linux-4.9.22.orig/include/linux/uprobes.h linux-4.9.22/include/linux/u struct vm_area_struct; struct mm_struct; -diff -Nur linux-4.9.22.orig/include/linux/vmstat.h linux-4.9.22/include/linux/vmstat.h ---- linux-4.9.22.orig/include/linux/vmstat.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/vmstat.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/linux/vmstat.h linux-4.9.28/include/linux/vmstat.h +--- linux-4.9.28.orig/include/linux/vmstat.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/vmstat.h 2017-05-19 03:37:25.178176648 +0200 @@ -33,7 +33,9 @@ */ static inline void __count_vm_event(enum vm_event_item item) @@ -10134,9 +10247,9 @@ diff -Nur linux-4.9.22.orig/include/linux/vmstat.h linux-4.9.22/include/linux/vm } static inline void count_vm_events(enum vm_event_item item, long delta) -diff -Nur linux-4.9.22.orig/include/linux/wait.h linux-4.9.22/include/linux/wait.h ---- linux-4.9.22.orig/include/linux/wait.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/linux/wait.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/linux/wait.h linux-4.9.28/include/linux/wait.h +--- linux-4.9.28.orig/include/linux/wait.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/linux/wait.h 2017-05-19 03:37:25.178176648 +0200 @@ -8,6 +8,7 @@ #include <linux/spinlock.h> #include <asm/current.h> @@ -10145,9 +10258,9 @@ diff -Nur linux-4.9.22.orig/include/linux/wait.h linux-4.9.22/include/linux/wait typedef struct __wait_queue wait_queue_t; typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, void *key); -diff -Nur linux-4.9.22.orig/include/net/dst.h linux-4.9.22/include/net/dst.h ---- linux-4.9.22.orig/include/net/dst.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/net/dst.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/net/dst.h linux-4.9.28/include/net/dst.h +--- linux-4.9.28.orig/include/net/dst.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/net/dst.h 2017-05-19 03:37:25.178176648 +0200 @@ -446,7 +446,7 @@ static inline int dst_neigh_output(struct dst_entry *dst, struct neighbour *n, struct sk_buff *skb) @@ -10157,9 +10270,9 @@ diff -Nur linux-4.9.22.orig/include/net/dst.h linux-4.9.22/include/net/dst.h if (dst->pending_confirm) { unsigned long now = jiffies; -diff -Nur linux-4.9.22.orig/include/net/gen_stats.h linux-4.9.22/include/net/gen_stats.h ---- linux-4.9.22.orig/include/net/gen_stats.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/net/gen_stats.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/net/gen_stats.h linux-4.9.28/include/net/gen_stats.h +--- linux-4.9.28.orig/include/net/gen_stats.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/net/gen_stats.h 2017-05-19 03:37:25.178176648 +0200 @@ -5,6 +5,7 @@ #include <linux/socket.h> #include <linux/rtnetlink.h> @@ -10199,9 +10312,9 @@ diff -Nur linux-4.9.22.orig/include/net/gen_stats.h linux-4.9.22/include/net/gen bool gen_estimator_active(const struct gnet_stats_basic_packed *bstats, const struct gnet_stats_rate_est64 *rate_est); #endif -diff -Nur linux-4.9.22.orig/include/net/neighbour.h linux-4.9.22/include/net/neighbour.h ---- linux-4.9.22.orig/include/net/neighbour.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/net/neighbour.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/net/neighbour.h linux-4.9.28/include/net/neighbour.h +--- linux-4.9.28.orig/include/net/neighbour.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/net/neighbour.h 2017-05-19 03:37:25.178176648 +0200 @@ -446,7 +446,7 @@ } #endif @@ -10220,9 +10333,9 @@ diff -Nur linux-4.9.22.orig/include/net/neighbour.h linux-4.9.22/include/net/nei const struct net_device *dev) { unsigned int seq; -diff -Nur linux-4.9.22.orig/include/net/netns/ipv4.h linux-4.9.22/include/net/netns/ipv4.h ---- linux-4.9.22.orig/include/net/netns/ipv4.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/net/netns/ipv4.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/net/netns/ipv4.h linux-4.9.28/include/net/netns/ipv4.h +--- linux-4.9.28.orig/include/net/netns/ipv4.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/net/netns/ipv4.h 2017-05-19 03:37:25.178176648 +0200 @@ -69,6 +69,7 @@ int sysctl_icmp_echo_ignore_all; @@ -10231,9 +10344,9 @@ diff -Nur linux-4.9.22.orig/include/net/netns/ipv4.h linux-4.9.22/include/net/ne int sysctl_icmp_ignore_bogus_error_responses; int sysctl_icmp_ratelimit; int sysctl_icmp_ratemask; -diff -Nur linux-4.9.22.orig/include/net/net_seq_lock.h linux-4.9.22/include/net/net_seq_lock.h ---- linux-4.9.22.orig/include/net/net_seq_lock.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/net/net_seq_lock.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/net/net_seq_lock.h linux-4.9.28/include/net/net_seq_lock.h +--- linux-4.9.28.orig/include/net/net_seq_lock.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/net/net_seq_lock.h 2017-05-19 03:37:25.178176648 +0200 @@ -0,0 +1,15 @@ +#ifndef __NET_NET_SEQ_LOCK_H__ +#define __NET_NET_SEQ_LOCK_H__ @@ -10250,9 +10363,9 @@ diff -Nur linux-4.9.22.orig/include/net/net_seq_lock.h linux-4.9.22/include/net/ +#endif + +#endif -diff -Nur linux-4.9.22.orig/include/net/sch_generic.h linux-4.9.22/include/net/sch_generic.h ---- linux-4.9.22.orig/include/net/sch_generic.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/include/net/sch_generic.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/net/sch_generic.h linux-4.9.28/include/net/sch_generic.h +--- linux-4.9.28.orig/include/net/sch_generic.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/net/sch_generic.h 2017-05-19 03:37:25.178176648 +0200 @@ -10,6 +10,7 @@ #include <linux/dynamic_queue_limits.h> #include <net/gen_stats.h> @@ -10320,9 +10433,9 @@ diff -Nur linux-4.9.22.orig/include/net/sch_generic.h linux-4.9.22/include/net/s { struct Qdisc *root = qdisc_root_sleeping(qdisc); -diff -Nur linux-4.9.22.orig/include/trace/events/hist.h linux-4.9.22/include/trace/events/hist.h ---- linux-4.9.22.orig/include/trace/events/hist.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/trace/events/hist.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/trace/events/hist.h linux-4.9.28/include/trace/events/hist.h +--- linux-4.9.28.orig/include/trace/events/hist.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/trace/events/hist.h 2017-05-19 03:37:25.178176648 +0200 @@ -0,0 +1,73 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM hist @@ -10397,9 +10510,9 @@ diff -Nur linux-4.9.22.orig/include/trace/events/hist.h linux-4.9.22/include/tra + +/* This part must be outside protection */ +#include <trace/define_trace.h> -diff -Nur linux-4.9.22.orig/include/trace/events/latency_hist.h linux-4.9.22/include/trace/events/latency_hist.h ---- linux-4.9.22.orig/include/trace/events/latency_hist.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/include/trace/events/latency_hist.h 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/trace/events/latency_hist.h linux-4.9.28/include/trace/events/latency_hist.h +--- linux-4.9.28.orig/include/trace/events/latency_hist.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/include/trace/events/latency_hist.h 2017-05-19 03:37:25.178176648 +0200 @@ -0,0 +1,29 @@ +#ifndef _LATENCY_HIST_H +#define _LATENCY_HIST_H @@ -10430,9 +10543,78 @@ diff -Nur linux-4.9.22.orig/include/trace/events/latency_hist.h linux-4.9.22/inc +} + +#endif /* _LATENCY_HIST_H */ -diff -Nur linux-4.9.22.orig/init/Kconfig linux-4.9.22/init/Kconfig ---- linux-4.9.22.orig/init/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/init/Kconfig 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/include/trace/events/sched.h linux-4.9.28/include/trace/events/sched.h +--- linux-4.9.28.orig/include/trace/events/sched.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/include/trace/events/sched.h 2017-05-19 03:37:25.178176648 +0200 +@@ -70,7 +70,7 @@ + TP_fast_assign( + memcpy(__entry->comm, p->comm, TASK_COMM_LEN); + __entry->pid = p->pid; +- __entry->prio = p->prio; ++ __entry->prio = p->prio; /* XXX SCHED_DEADLINE */ + __entry->success = 1; /* rudiment, kill when possible */ + __entry->target_cpu = task_cpu(p); + ), +@@ -147,6 +147,7 @@ + memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN); + __entry->next_pid = next->pid; + __entry->next_prio = next->prio; ++ /* XXX SCHED_DEADLINE */ + ), + + TP_printk("prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> next_comm=%s next_pid=%d next_prio=%d", +@@ -181,7 +182,7 @@ + TP_fast_assign( + memcpy(__entry->comm, p->comm, TASK_COMM_LEN); + __entry->pid = p->pid; +- __entry->prio = p->prio; ++ __entry->prio = p->prio; /* XXX SCHED_DEADLINE */ + __entry->orig_cpu = task_cpu(p); + __entry->dest_cpu = dest_cpu; + ), +@@ -206,7 +207,7 @@ + TP_fast_assign( + memcpy(__entry->comm, p->comm, TASK_COMM_LEN); + __entry->pid = p->pid; +- __entry->prio = p->prio; ++ __entry->prio = p->prio; /* XXX SCHED_DEADLINE */ + ), + + TP_printk("comm=%s pid=%d prio=%d", +@@ -253,7 +254,7 @@ + TP_fast_assign( + memcpy(__entry->comm, current->comm, TASK_COMM_LEN); + __entry->pid = pid_nr(pid); +- __entry->prio = current->prio; ++ __entry->prio = current->prio; /* XXX SCHED_DEADLINE */ + ), + + TP_printk("comm=%s pid=%d prio=%d", +@@ -413,9 +414,9 @@ + */ + TRACE_EVENT(sched_pi_setprio, + +- TP_PROTO(struct task_struct *tsk, int newprio), ++ TP_PROTO(struct task_struct *tsk, struct task_struct *pi_task), + +- TP_ARGS(tsk, newprio), ++ TP_ARGS(tsk, pi_task), + + TP_STRUCT__entry( + __array( char, comm, TASK_COMM_LEN ) +@@ -428,7 +429,8 @@ + memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN); + __entry->pid = tsk->pid; + __entry->oldprio = tsk->prio; +- __entry->newprio = newprio; ++ __entry->newprio = pi_task ? pi_task->prio : tsk->prio; ++ /* XXX SCHED_DEADLINE bits missing */ + ), + + TP_printk("comm=%s pid=%d oldprio=%d newprio=%d", +diff -Nur linux-4.9.28.orig/init/Kconfig linux-4.9.28/init/Kconfig +--- linux-4.9.28.orig/init/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/init/Kconfig 2017-05-19 03:37:25.178176648 +0200 @@ -506,7 +506,7 @@ config RCU_EXPERT @@ -10513,9 +10695,9 @@ diff -Nur linux-4.9.22.orig/init/Kconfig linux-4.9.22/init/Kconfig bool "SLUB per cpu partial cache" help Per cpu partial caches accellerate objects allocation and freeing -diff -Nur linux-4.9.22.orig/init/main.c linux-4.9.22/init/main.c ---- linux-4.9.22.orig/init/main.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/init/main.c 2017-04-18 17:19:16.682773230 +0200 +diff -Nur linux-4.9.28.orig/init/main.c linux-4.9.28/init/main.c +--- linux-4.9.28.orig/init/main.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/init/main.c 2017-05-19 03:37:25.178176648 +0200 @@ -507,6 +507,7 @@ setup_command_line(command_line); setup_nr_cpu_ids(); @@ -10524,18 +10706,18 @@ diff -Nur linux-4.9.22.orig/init/main.c linux-4.9.22/init/main.c boot_cpu_state_init(); smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */ -diff -Nur linux-4.9.22.orig/init/Makefile linux-4.9.22/init/Makefile ---- linux-4.9.22.orig/init/Makefile 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/init/Makefile 2017-04-18 17:19:16.678773075 +0200 +diff -Nur linux-4.9.28.orig/init/Makefile linux-4.9.28/init/Makefile +--- linux-4.9.28.orig/init/Makefile 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/init/Makefile 2017-05-19 03:37:25.178176648 +0200 @@ -35,4 +35,4 @@ include/generated/compile.h: FORCE @$($(quiet)chk_compile.h) $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \ - "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC) $(KBUILD_CFLAGS)" + "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CONFIG_PREEMPT_RT_FULL)" "$(CC) $(KBUILD_CFLAGS)" -diff -Nur linux-4.9.22.orig/ipc/sem.c linux-4.9.22/ipc/sem.c ---- linux-4.9.22.orig/ipc/sem.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/ipc/sem.c 2017-04-18 17:19:16.682773230 +0200 +diff -Nur linux-4.9.28.orig/ipc/sem.c linux-4.9.28/ipc/sem.c +--- linux-4.9.28.orig/ipc/sem.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/ipc/sem.c 2017-05-19 03:37:25.178176648 +0200 @@ -712,6 +712,13 @@ static void wake_up_sem_queue_prepare(struct list_head *pt, struct sem_queue *q, int error) @@ -10574,10 +10756,10 @@ diff -Nur linux-4.9.22.orig/ipc/sem.c linux-4.9.22/ipc/sem.c } static void unlink_queue(struct sem_array *sma, struct sem_queue *q) -diff -Nur linux-4.9.22.orig/kernel/cgroup.c linux-4.9.22/kernel/cgroup.c ---- linux-4.9.22.orig/kernel/cgroup.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/cgroup.c 2017-04-18 17:19:16.682773230 +0200 -@@ -5040,10 +5040,10 @@ +diff -Nur linux-4.9.28.orig/kernel/cgroup.c linux-4.9.28/kernel/cgroup.c +--- linux-4.9.28.orig/kernel/cgroup.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/cgroup.c 2017-05-19 03:37:25.178176648 +0200 +@@ -5041,10 +5041,10 @@ queue_work(cgroup_destroy_wq, &css->destroy_work); } @@ -10590,7 +10772,7 @@ diff -Nur linux-4.9.22.orig/kernel/cgroup.c linux-4.9.22/kernel/cgroup.c struct cgroup_subsys *ss = css->ss; struct cgroup *cgrp = css->cgroup; -@@ -5086,8 +5086,8 @@ +@@ -5087,8 +5087,8 @@ struct cgroup_subsys_state *css = container_of(ref, struct cgroup_subsys_state, refcnt); @@ -10601,7 +10783,7 @@ diff -Nur linux-4.9.22.orig/kernel/cgroup.c linux-4.9.22/kernel/cgroup.c } static void init_and_link_css(struct cgroup_subsys_state *css, -@@ -5739,6 +5739,7 @@ +@@ -5740,6 +5740,7 @@ */ cgroup_destroy_wq = alloc_workqueue("cgroup_destroy", 0, 1); BUG_ON(!cgroup_destroy_wq); @@ -10609,9 +10791,9 @@ diff -Nur linux-4.9.22.orig/kernel/cgroup.c linux-4.9.22/kernel/cgroup.c /* * Used to destroy pidlists and separate to serve as flush domain. -diff -Nur linux-4.9.22.orig/kernel/cpu.c linux-4.9.22/kernel/cpu.c ---- linux-4.9.22.orig/kernel/cpu.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/cpu.c 2017-04-18 17:19:16.682773230 +0200 +diff -Nur linux-4.9.28.orig/kernel/cpu.c linux-4.9.28/kernel/cpu.c +--- linux-4.9.28.orig/kernel/cpu.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/cpu.c 2017-05-19 03:37:25.182176801 +0200 @@ -239,6 +239,289 @@ #define cpuhp_lock_acquire() lock_map_acquire(&cpu_hotplug.dep_map) #define cpuhp_lock_release() lock_map_release(&cpu_hotplug.dep_map) @@ -10987,7 +11169,7 @@ diff -Nur linux-4.9.22.orig/kernel/cpu.c linux-4.9.22/kernel/cpu.c #endif /* CONFIG_SMP */ /* Boot processor state steps */ -@@ -1923,6 +2247,10 @@ +@@ -1924,6 +2248,10 @@ set_cpu_active(cpu, true); set_cpu_present(cpu, true); set_cpu_possible(cpu, true); @@ -10998,9 +11180,9 @@ diff -Nur linux-4.9.22.orig/kernel/cpu.c linux-4.9.22/kernel/cpu.c } /* -diff -Nur linux-4.9.22.orig/kernel/cpuset.c linux-4.9.22/kernel/cpuset.c ---- linux-4.9.22.orig/kernel/cpuset.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/cpuset.c 2017-04-18 17:19:16.682773230 +0200 +diff -Nur linux-4.9.28.orig/kernel/cpuset.c linux-4.9.28/kernel/cpuset.c +--- linux-4.9.28.orig/kernel/cpuset.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/cpuset.c 2017-05-19 03:37:25.182176801 +0200 @@ -284,7 +284,7 @@ */ @@ -11235,9 +11417,9 @@ diff -Nur linux-4.9.22.orig/kernel/cpuset.c linux-4.9.22/kernel/cpuset.c return allowed; } -diff -Nur linux-4.9.22.orig/kernel/debug/kdb/kdb_io.c linux-4.9.22/kernel/debug/kdb/kdb_io.c ---- linux-4.9.22.orig/kernel/debug/kdb/kdb_io.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/debug/kdb/kdb_io.c 2017-04-18 17:19:16.682773230 +0200 +diff -Nur linux-4.9.28.orig/kernel/debug/kdb/kdb_io.c linux-4.9.28/kernel/debug/kdb/kdb_io.c +--- linux-4.9.28.orig/kernel/debug/kdb/kdb_io.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/debug/kdb/kdb_io.c 2017-05-19 03:37:25.182176801 +0200 @@ -554,7 +554,6 @@ int linecount; int colcount; @@ -11275,9 +11457,9 @@ diff -Nur linux-4.9.22.orig/kernel/debug/kdb/kdb_io.c linux-4.9.22/kernel/debug/ return r; } -diff -Nur linux-4.9.22.orig/kernel/events/core.c linux-4.9.22/kernel/events/core.c ---- linux-4.9.22.orig/kernel/events/core.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/events/core.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/events/core.c linux-4.9.28/kernel/events/core.c +--- linux-4.9.28.orig/kernel/events/core.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/events/core.c 2017-05-19 03:37:25.182176801 +0200 @@ -1050,6 +1050,7 @@ raw_spin_lock_init(&cpuctx->hrtimer_lock); hrtimer_init(timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED); @@ -11294,9 +11476,9 @@ diff -Nur linux-4.9.22.orig/kernel/events/core.c linux-4.9.22/kernel/events/core /* * Since hrtimers have a fixed rate, we can do a static freq->period -diff -Nur linux-4.9.22.orig/kernel/exit.c linux-4.9.22/kernel/exit.c ---- linux-4.9.22.orig/kernel/exit.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/exit.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/exit.c linux-4.9.28/kernel/exit.c +--- linux-4.9.28.orig/kernel/exit.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/exit.c 2017-05-19 03:37:25.182176801 +0200 @@ -143,7 +143,7 @@ * Do this under ->siglock, we can race with another thread * doing sigqueue_free() if we have SIGQUEUE_PREALLOC signals. @@ -11306,9 +11488,9 @@ diff -Nur linux-4.9.22.orig/kernel/exit.c linux-4.9.22/kernel/exit.c tsk->sighand = NULL; spin_unlock(&sighand->siglock); -diff -Nur linux-4.9.22.orig/kernel/fork.c linux-4.9.22/kernel/fork.c ---- linux-4.9.22.orig/kernel/fork.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/fork.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/fork.c linux-4.9.28/kernel/fork.c +--- linux-4.9.28.orig/kernel/fork.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/fork.c 2017-05-19 03:37:25.182176801 +0200 @@ -76,6 +76,7 @@ #include <linux/compiler.h> #include <linux/sysctl.h> @@ -11382,7 +11564,15 @@ diff -Nur linux-4.9.22.orig/kernel/fork.c linux-4.9.22/kernel/fork.c static inline void __mmput(struct mm_struct *mm) { VM_BUG_ON(atomic_read(&mm->mm_users)); -@@ -1426,6 +1462,9 @@ +@@ -1417,6 +1453,7 @@ + #ifdef CONFIG_RT_MUTEXES + p->pi_waiters = RB_ROOT; + p->pi_waiters_leftmost = NULL; ++ p->pi_top_task = NULL; + p->pi_blocked_on = NULL; + #endif + } +@@ -1426,6 +1463,9 @@ */ static void posix_cpu_timers_init(struct task_struct *tsk) { @@ -11392,7 +11582,7 @@ diff -Nur linux-4.9.22.orig/kernel/fork.c linux-4.9.22/kernel/fork.c tsk->cputime_expires.prof_exp = 0; tsk->cputime_expires.virt_exp = 0; tsk->cputime_expires.sched_exp = 0; -@@ -1552,6 +1591,7 @@ +@@ -1552,6 +1592,7 @@ spin_lock_init(&p->alloc_lock); init_sigpending(&p->pending); @@ -11400,9 +11590,9 @@ diff -Nur linux-4.9.22.orig/kernel/fork.c linux-4.9.22/kernel/fork.c p->utime = p->stime = p->gtime = 0; p->utimescaled = p->stimescaled = 0; -diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c ---- linux-4.9.22.orig/kernel/futex.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/futex.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/futex.c linux-4.9.28/kernel/futex.c +--- linux-4.9.28.orig/kernel/futex.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/futex.c 2017-05-19 03:37:25.182176801 +0200 @@ -800,7 +800,7 @@ return 0; } @@ -11498,7 +11688,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c */ /* -@@ -978,10 +1020,12 @@ +@@ -978,10 +1020,13 @@ * the pi_state against the user space value. If correct, attach to * it. */ @@ -11508,11 +11698,12 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c struct futex_pi_state **ps) { pid_t pid = uval & FUTEX_TID_MASK; -+ int ret, uval2; ++ u32 uval2; ++ int ret; /* * Userspace might have messed up non-PI and PI futexes [3] -@@ -989,9 +1033,39 @@ +@@ -989,9 +1034,39 @@ if (unlikely(!pi_state)) return -EINVAL; @@ -11552,7 +11743,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c * Handle the owner died case: */ if (uval & FUTEX_OWNER_DIED) { -@@ -1006,11 +1080,11 @@ +@@ -1006,11 +1081,11 @@ * is not 0. Inconsistent state. [5] */ if (pid) @@ -11566,7 +11757,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c } /* -@@ -1022,14 +1096,14 @@ +@@ -1022,14 +1097,14 @@ * Take a ref on the state and return success. [6] */ if (!pid) @@ -11583,7 +11774,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c } /* -@@ -1038,11 +1112,29 @@ +@@ -1038,11 +1113,29 @@ * user space TID. [9/10] */ if (pid != task_pid_vnr(pi_state->owner)) @@ -11616,7 +11807,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c } /* -@@ -1093,6 +1185,9 @@ +@@ -1093,6 +1186,9 @@ /* * No existing pi state. First waiter. [2] @@ -11626,7 +11817,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c */ pi_state = alloc_pi_state(); -@@ -1117,17 +1212,18 @@ +@@ -1117,17 +1213,18 @@ return 0; } @@ -11649,7 +11840,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c /* * We are the first waiter - try to look up the owner based on -@@ -1146,7 +1242,7 @@ +@@ -1146,7 +1243,7 @@ if (unlikely(cmpxchg_futex_value_locked(&curval, uaddr, uval, newval))) return -EFAULT; @@ -11658,7 +11849,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c return curval != uval ? -EAGAIN : 0; } -@@ -1174,7 +1270,7 @@ +@@ -1174,7 +1271,7 @@ struct task_struct *task, int set_waiters) { u32 uval, newval, vpid = task_pid_vnr(task); @@ -11667,7 +11858,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c int ret; /* -@@ -1200,9 +1296,9 @@ +@@ -1200,9 +1297,9 @@ * Lookup existing state first. If it exists, try to attach to * its pi_state. */ @@ -11680,9 +11871,19 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c /* * No waiter and user TID is 0. We are here because the -@@ -1288,45 +1384,39 @@ - * memory barrier is required here to prevent the following - * store to lock_ptr from getting ahead of the plist_del. +@@ -1283,50 +1380,45 @@ + wake_q_add(wake_q, p); + __unqueue_futex(q); + /* +- * The waiting task can free the futex_q as soon as +- * q->lock_ptr = NULL is written, without taking any locks. A +- * memory barrier is required here to prevent the following +- * store to lock_ptr from getting ahead of the plist_del. ++ * The waiting task can free the futex_q as soon as q->lock_ptr = NULL ++ * is written, without taking any locks. This is possible in the event ++ * of a spurious wakeup, for example. A memory barrier is required here ++ * to prevent the following store to lock_ptr from getting ahead of the ++ * plist_del in __unqueue_futex(). */ - smp_wmb(); - q->lock_ptr = NULL; @@ -11700,7 +11901,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c - struct futex_pi_state *pi_state = this->pi_state; u32 uninitialized_var(curval), newval; + struct task_struct *new_owner; -+ bool deboost = false; ++ bool postunlock = false; WAKE_Q(wake_q); - bool deboost; + WAKE_Q(wake_sleeper_q); @@ -11749,7 +11950,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c */ newval = FUTEX_WAITERS | task_pid_vnr(new_owner); -@@ -1335,6 +1425,7 @@ +@@ -1335,6 +1427,7 @@ if (cmpxchg_futex_value_locked(&curval, uaddr, uval, newval)) { ret = -EFAULT; @@ -11757,7 +11958,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c } else if (curval != uval) { /* * If a unconditional UNLOCK_PI operation (user space did not -@@ -1347,10 +1438,9 @@ +@@ -1347,10 +1440,14 @@ else ret = -EINVAL; } @@ -11768,39 +11969,38 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c + + if (ret) + goto out_unlock; ++ ++ /* ++ * This is a point of no return; once we modify the uval there is no ++ * going back and subsequent operations must not fail. ++ */ raw_spin_lock(&pi_state->owner->pi_lock); WARN_ON(list_empty(&pi_state->list)); -@@ -1363,22 +1453,22 @@ +@@ -1363,22 +1460,15 @@ pi_state->owner = new_owner; raw_spin_unlock(&new_owner->pi_lock); -- raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock); -- ++ postunlock = __rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q, ++ &wake_sleeper_q); ++out_unlock: + raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock); + - deboost = rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q); -- - /* ++ if (postunlock) ++ rt_mutex_postunlock(&wake_q, &wake_sleeper_q); + +- /* - * First unlock HB so the waiter does not spin on it once he got woken - * up. Second wake up the waiter before the priority is adjusted. If we - * deboost first (and lose our higher priority), then the task might get - * scheduled away before the wake up can take place. -+ * We've updated the uservalue, this unlock cannot fail. - */ +- */ - spin_unlock(&hb->lock); - wake_up_q(&wake_q); - if (deboost) -+ deboost = __rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q, -+ &wake_sleeper_q); -+ -+out_unlock: -+ raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock); -+ -+ if (deboost) { -+ wake_up_q(&wake_q); -+ wake_up_q_sleeper(&wake_sleeper_q); - rt_mutex_adjust_prio(current); -+ } - +- rt_mutex_adjust_prio(current); +- - return 0; + return ret; } @@ -12110,8 +12310,8 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c /* Fixup the trylock return value: */ ret = ret ? 0 : -EWOULDBLOCK; + goto no_block; -+ } -+ + } + + rt_mutex_init_waiter(&rt_waiter, false); + + /* @@ -12146,8 +12346,8 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c + + spin_lock(q.lock_ptr); + goto no_block; - } - ++ } ++ + + if (unlikely(to)) + hrtimer_start_expires(&to->timer, HRTIMER_MODE_ABS); @@ -12194,7 +12394,19 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c goto out_put_key; out_unlock_put_key: -@@ -2631,7 +2788,7 @@ +@@ -2603,8 +2760,10 @@ + out_put_key: + put_futex_key(&q.key); + out: +- if (to) ++ if (to) { ++ hrtimer_cancel(&to->timer); + destroy_hrtimer_on_stack(&to->timer); ++ } + return ret != -EINTR ? ret : -ERESTARTNOINTR; + + uaddr_faulted: +@@ -2631,7 +2790,7 @@ u32 uninitialized_var(curval), uval, vpid = task_pid_vnr(current); union futex_key key = FUTEX_KEY_INIT; struct futex_hash_bucket *hb; @@ -12203,7 +12415,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c int ret; retry: -@@ -2655,12 +2812,48 @@ +@@ -2655,12 +2814,48 @@ * all and we at least want to know if user space fiddled * with the futex value instead of blindly unlocking. */ @@ -12257,7 +12469,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c */ if (!ret) goto out_putkey; -@@ -2675,7 +2868,6 @@ +@@ -2675,7 +2870,6 @@ * setting the FUTEX_WAITERS bit. Try again. */ if (ret == -EAGAIN) { @@ -12265,7 +12477,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c put_futex_key(&key); goto retry; } -@@ -2683,7 +2875,7 @@ +@@ -2683,7 +2877,7 @@ * wake_futex_pi has detected invalid state. Tell user * space. */ @@ -12274,7 +12486,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c } /* -@@ -2693,8 +2885,10 @@ +@@ -2693,8 +2887,10 @@ * preserve the WAITERS bit not the OWNER_DIED one. We are the * owner. */ @@ -12286,7 +12498,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c /* * If uval has changed, let user space handle it. -@@ -2708,7 +2902,6 @@ +@@ -2708,7 +2904,6 @@ return ret; pi_faulted: @@ -12294,7 +12506,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c put_futex_key(&key); ret = fault_in_user_writeable(uaddr); -@@ -2812,8 +3005,9 @@ +@@ -2812,8 +3007,9 @@ u32 __user *uaddr2) { struct hrtimer_sleeper timeout, *to = NULL; @@ -12305,7 +12517,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c union futex_key key2 = FUTEX_KEY_INIT; struct futex_q q = futex_q_init; int res, ret; -@@ -2838,10 +3032,7 @@ +@@ -2838,10 +3034,7 @@ * The waiter is allocated on our stack, manipulated by the requeue * code while we sleep on uaddr. */ @@ -12317,7 +12529,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, VERIFY_WRITE); if (unlikely(ret != 0)) -@@ -2872,20 +3063,55 @@ +@@ -2872,20 +3065,55 @@ /* Queue the futex_q, drop the hb lock, wait for wakeup. */ futex_wait_queue_me(hb, &q, to); @@ -12384,7 +12596,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c /* Check if the requeue code acquired the second futex for us. */ if (!q.rt_waiter) { -@@ -2894,16 +3120,19 @@ +@@ -2894,16 +3122,19 @@ * did a lock-steal - fix up the PI-state in that case. */ if (q.pi_state && (q.pi_state->owner != current)) { @@ -12408,7 +12620,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c } } else { struct rt_mutex *pi_mutex; -@@ -2915,10 +3144,14 @@ +@@ -2915,10 +3146,14 @@ */ WARN_ON(!q.pi_state); pi_mutex = &q.pi_state->pi_mutex; @@ -12426,7 +12638,7 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c /* * Fixup the pi_state owner and possibly acquire the lock if we * haven't already. -@@ -2936,13 +3169,20 @@ +@@ -2936,13 +3171,20 @@ * the fault, unlock the rt_mutex and return the fault to * userspace. */ @@ -12449,9 +12661,9 @@ diff -Nur linux-4.9.22.orig/kernel/futex.c linux-4.9.22/kernel/futex.c if (ret == -EINTR) { /* * We've already been requeued, but cannot restart by calling -diff -Nur linux-4.9.22.orig/kernel/irq/handle.c linux-4.9.22/kernel/irq/handle.c ---- linux-4.9.22.orig/kernel/irq/handle.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/irq/handle.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/irq/handle.c linux-4.9.28/kernel/irq/handle.c +--- linux-4.9.28.orig/kernel/irq/handle.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/irq/handle.c 2017-05-19 03:37:25.186176955 +0200 @@ -181,10 +181,16 @@ { irqreturn_t retval; @@ -12470,9 +12682,9 @@ diff -Nur linux-4.9.22.orig/kernel/irq/handle.c linux-4.9.22/kernel/irq/handle.c if (!noirqdebug) note_interrupt(desc, retval); -diff -Nur linux-4.9.22.orig/kernel/irq/manage.c linux-4.9.22/kernel/irq/manage.c ---- linux-4.9.22.orig/kernel/irq/manage.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/irq/manage.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/irq/manage.c linux-4.9.28/kernel/irq/manage.c +--- linux-4.9.28.orig/kernel/irq/manage.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/irq/manage.c 2017-05-19 03:37:25.186176955 +0200 @@ -22,6 +22,7 @@ #include "internals.h" @@ -12612,9 +12824,9 @@ diff -Nur linux-4.9.22.orig/kernel/irq/manage.c linux-4.9.22/kernel/irq/manage.c * interrupt controller has per-cpu registers. */ int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which, -diff -Nur linux-4.9.22.orig/kernel/irq/settings.h linux-4.9.22/kernel/irq/settings.h ---- linux-4.9.22.orig/kernel/irq/settings.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/irq/settings.h 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/irq/settings.h linux-4.9.28/kernel/irq/settings.h +--- linux-4.9.28.orig/kernel/irq/settings.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/irq/settings.h 2017-05-19 03:37:25.186176955 +0200 @@ -16,6 +16,7 @@ _IRQ_PER_CPU_DEVID = IRQ_PER_CPU_DEVID, _IRQ_IS_POLLED = IRQ_IS_POLLED, @@ -12648,9 +12860,9 @@ diff -Nur linux-4.9.22.orig/kernel/irq/settings.h linux-4.9.22/kernel/irq/settin static inline bool irq_settings_is_per_cpu(struct irq_desc *desc) { return desc->status_use_accessors & _IRQ_PER_CPU; -diff -Nur linux-4.9.22.orig/kernel/irq/spurious.c linux-4.9.22/kernel/irq/spurious.c ---- linux-4.9.22.orig/kernel/irq/spurious.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/irq/spurious.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/irq/spurious.c linux-4.9.28/kernel/irq/spurious.c +--- linux-4.9.28.orig/kernel/irq/spurious.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/irq/spurious.c 2017-05-19 03:37:25.186176955 +0200 @@ -442,6 +442,10 @@ static int __init irqfixup_setup(char *str) @@ -12673,9 +12885,9 @@ diff -Nur linux-4.9.22.orig/kernel/irq/spurious.c linux-4.9.22/kernel/irq/spurio irqfixup = 2; printk(KERN_WARNING "Misrouted IRQ fixup and polling support " "enabled\n"); -diff -Nur linux-4.9.22.orig/kernel/irq_work.c linux-4.9.22/kernel/irq_work.c ---- linux-4.9.22.orig/kernel/irq_work.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/irq_work.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/irq_work.c linux-4.9.28/kernel/irq_work.c +--- linux-4.9.28.orig/kernel/irq_work.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/irq_work.c 2017-05-19 03:37:25.186176955 +0200 @@ -17,6 +17,7 @@ #include <linux/cpu.h> #include <linux/notifier.h> @@ -12797,9 +13009,9 @@ diff -Nur linux-4.9.22.orig/kernel/irq_work.c linux-4.9.22/kernel/irq_work.c /* * Synchronize against the irq_work @entry, ensures the entry is not -diff -Nur linux-4.9.22.orig/kernel/Kconfig.locks linux-4.9.22/kernel/Kconfig.locks ---- linux-4.9.22.orig/kernel/Kconfig.locks 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/Kconfig.locks 2017-04-18 17:19:16.682773230 +0200 +diff -Nur linux-4.9.28.orig/kernel/Kconfig.locks linux-4.9.28/kernel/Kconfig.locks +--- linux-4.9.28.orig/kernel/Kconfig.locks 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/Kconfig.locks 2017-05-19 03:37:25.178176648 +0200 @@ -225,11 +225,11 @@ config MUTEX_SPIN_ON_OWNER @@ -12814,9 +13026,9 @@ diff -Nur linux-4.9.22.orig/kernel/Kconfig.locks linux-4.9.22/kernel/Kconfig.loc config LOCK_SPIN_ON_OWNER def_bool y -diff -Nur linux-4.9.22.orig/kernel/Kconfig.preempt linux-4.9.22/kernel/Kconfig.preempt ---- linux-4.9.22.orig/kernel/Kconfig.preempt 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/Kconfig.preempt 2017-04-18 17:19:16.682773230 +0200 +diff -Nur linux-4.9.28.orig/kernel/Kconfig.preempt linux-4.9.28/kernel/Kconfig.preempt +--- linux-4.9.28.orig/kernel/Kconfig.preempt 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/Kconfig.preempt 2017-05-19 03:37:25.178176648 +0200 @@ -1,3 +1,16 @@ +config PREEMPT + bool @@ -12869,9 +13081,9 @@ diff -Nur linux-4.9.22.orig/kernel/Kconfig.preempt linux-4.9.22/kernel/Kconfig.p endchoice config PREEMPT_COUNT -diff -Nur linux-4.9.22.orig/kernel/ksysfs.c linux-4.9.22/kernel/ksysfs.c ---- linux-4.9.22.orig/kernel/ksysfs.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/ksysfs.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/ksysfs.c linux-4.9.28/kernel/ksysfs.c +--- linux-4.9.28.orig/kernel/ksysfs.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/ksysfs.c 2017-05-19 03:37:25.186176955 +0200 @@ -136,6 +136,15 @@ #endif /* CONFIG_KEXEC_CORE */ @@ -12898,9 +13110,9 @@ diff -Nur linux-4.9.22.orig/kernel/ksysfs.c linux-4.9.22/kernel/ksysfs.c NULL }; -diff -Nur linux-4.9.22.orig/kernel/locking/lockdep.c linux-4.9.22/kernel/locking/lockdep.c ---- linux-4.9.22.orig/kernel/locking/lockdep.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/lockdep.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/lockdep.c linux-4.9.28/kernel/locking/lockdep.c +--- linux-4.9.28.orig/kernel/locking/lockdep.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/lockdep.c 2017-05-19 03:37:25.186176955 +0200 @@ -658,6 +658,7 @@ struct lockdep_subclass_key *key; struct hlist_head *hash_head; @@ -13003,9 +13215,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/lockdep.c linux-4.9.22/kernel/locking zap_class(class); } /* -diff -Nur linux-4.9.22.orig/kernel/locking/locktorture.c linux-4.9.22/kernel/locking/locktorture.c ---- linux-4.9.22.orig/kernel/locking/locktorture.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/locktorture.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/locktorture.c linux-4.9.28/kernel/locking/locktorture.c +--- linux-4.9.28.orig/kernel/locking/locktorture.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/locktorture.c 2017-05-19 03:37:25.186176955 +0200 @@ -26,7 +26,6 @@ #include <linux/kthread.h> #include <linux/sched/rt.h> @@ -13014,9 +13226,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/locktorture.c linux-4.9.22/kernel/loc #include <linux/mutex.h> #include <linux/rwsem.h> #include <linux/smp.h> -diff -Nur linux-4.9.22.orig/kernel/locking/Makefile linux-4.9.22/kernel/locking/Makefile ---- linux-4.9.22.orig/kernel/locking/Makefile 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/Makefile 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/Makefile linux-4.9.28/kernel/locking/Makefile +--- linux-4.9.28.orig/kernel/locking/Makefile 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/Makefile 2017-05-19 03:37:25.186176955 +0200 @@ -2,7 +2,7 @@ # and is generally not a function of system call inputs. KCOV_INSTRUMENT := n @@ -13049,9 +13261,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/Makefile linux-4.9.22/kernel/locking/ +obj-$(CONFIG_PREEMPT_RT_FULL) += rt.o rwsem-rt.o obj-$(CONFIG_QUEUED_RWLOCKS) += qrwlock.o obj-$(CONFIG_LOCK_TORTURE_TEST) += locktorture.o -diff -Nur linux-4.9.22.orig/kernel/locking/percpu-rwsem.c linux-4.9.22/kernel/locking/percpu-rwsem.c ---- linux-4.9.22.orig/kernel/locking/percpu-rwsem.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/percpu-rwsem.c 2017-04-18 17:19:16.686773386 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/percpu-rwsem.c linux-4.9.28/kernel/locking/percpu-rwsem.c +--- linux-4.9.28.orig/kernel/locking/percpu-rwsem.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/percpu-rwsem.c 2017-05-19 03:37:25.186176955 +0200 @@ -18,7 +18,7 @@ /* ->rw_sem represents the whole percpu_rw_semaphore for lockdep */ rcu_sync_init(&sem->rss, RCU_SCHED_SYNC); @@ -13079,9 +13291,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/percpu-rwsem.c linux-4.9.22/kernel/lo } EXPORT_SYMBOL_GPL(percpu_down_write); -diff -Nur linux-4.9.22.orig/kernel/locking/rt.c linux-4.9.22/kernel/locking/rt.c ---- linux-4.9.22.orig/kernel/locking/rt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/kernel/locking/rt.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/rt.c linux-4.9.28/kernel/locking/rt.c +--- linux-4.9.28.orig/kernel/locking/rt.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/kernel/locking/rt.c 2017-05-19 03:37:25.186176955 +0200 @@ -0,0 +1,331 @@ +/* + * kernel/rt.c @@ -13414,9 +13626,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rt.c linux-4.9.22/kernel/locking/rt.c + return 1; +} +EXPORT_SYMBOL(atomic_dec_and_mutex_lock); -diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking/rtmutex.c ---- linux-4.9.22.orig/kernel/locking/rtmutex.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/rtmutex.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/rtmutex.c linux-4.9.28/kernel/locking/rtmutex.c +--- linux-4.9.28.orig/kernel/locking/rtmutex.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/rtmutex.c 2017-05-19 03:37:25.186176955 +0200 @@ -7,6 +7,11 @@ * Copyright (C) 2005-2006 Timesys Corp., Thomas Gleixner <tglx@timesys.com> * Copyright (C) 2005 Kihon Technologies Inc., Steven Rostedt @@ -13450,7 +13662,166 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking /* * We can speed up the acquire/release, if there's no debugging state to be * set up. -@@ -414,6 +426,14 @@ +@@ -222,12 +234,25 @@ + } + #endif + ++#define STEAL_NORMAL 0 ++#define STEAL_LATERAL 1 ++/* ++ * Only use with rt_mutex_waiter_{less,equal}() ++ */ ++#define task_to_waiter(p) \ ++ &(struct rt_mutex_waiter){ .prio = (p)->prio, .deadline = (p)->dl.deadline } ++ + static inline int + rt_mutex_waiter_less(struct rt_mutex_waiter *left, +- struct rt_mutex_waiter *right) ++ struct rt_mutex_waiter *right, int mode) + { +- if (left->prio < right->prio) +- return 1; ++ if (mode == STEAL_NORMAL) { ++ if (left->prio < right->prio) ++ return 1; ++ } else { ++ if (left->prio <= right->prio) ++ return 1; ++ } + + /* + * If both waiters have dl_prio(), we check the deadlines of the +@@ -236,12 +261,30 @@ + * then right waiter has a dl_prio() too. + */ + if (dl_prio(left->prio)) +- return dl_time_before(left->task->dl.deadline, +- right->task->dl.deadline); ++ return dl_time_before(left->deadline, right->deadline); + + return 0; + } + ++static inline int ++rt_mutex_waiter_equal(struct rt_mutex_waiter *left, ++ struct rt_mutex_waiter *right) ++{ ++ if (left->prio != right->prio) ++ return 0; ++ ++ /* ++ * If both waiters have dl_prio(), we check the deadlines of the ++ * associated tasks. ++ * If left waiter has a dl_prio(), and we didn't return 0 above, ++ * then right waiter has a dl_prio() too. ++ */ ++ if (dl_prio(left->prio)) ++ return left->deadline == right->deadline; ++ ++ return 1; ++} ++ + static void + rt_mutex_enqueue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter) + { +@@ -253,7 +296,7 @@ + while (*link) { + parent = *link; + entry = rb_entry(parent, struct rt_mutex_waiter, tree_entry); +- if (rt_mutex_waiter_less(waiter, entry)) { ++ if (rt_mutex_waiter_less(waiter, entry, STEAL_NORMAL)) { + link = &parent->rb_left; + } else { + link = &parent->rb_right; +@@ -292,7 +335,7 @@ + while (*link) { + parent = *link; + entry = rb_entry(parent, struct rt_mutex_waiter, pi_tree_entry); +- if (rt_mutex_waiter_less(waiter, entry)) { ++ if (rt_mutex_waiter_less(waiter, entry, STEAL_NORMAL)) { + link = &parent->rb_left; + } else { + link = &parent->rb_right; +@@ -320,72 +363,16 @@ + RB_CLEAR_NODE(&waiter->pi_tree_entry); + } + +-/* +- * Calculate task priority from the waiter tree priority +- * +- * Return task->normal_prio when the waiter tree is empty or when +- * the waiter is not allowed to do priority boosting +- */ +-int rt_mutex_getprio(struct task_struct *task) +-{ +- if (likely(!task_has_pi_waiters(task))) +- return task->normal_prio; +- +- return min(task_top_pi_waiter(task)->prio, +- task->normal_prio); +-} +- +-struct task_struct *rt_mutex_get_top_task(struct task_struct *task) +-{ +- if (likely(!task_has_pi_waiters(task))) +- return NULL; +- +- return task_top_pi_waiter(task)->task; +-} +- +-/* +- * Called by sched_setscheduler() to get the priority which will be +- * effective after the change. +- */ +-int rt_mutex_get_effective_prio(struct task_struct *task, int newprio) +-{ +- if (!task_has_pi_waiters(task)) +- return newprio; +- +- if (task_top_pi_waiter(task)->task->prio <= newprio) +- return task_top_pi_waiter(task)->task->prio; +- return newprio; +-} +- +-/* +- * Adjust the priority of a task, after its pi_waiters got modified. +- * +- * This can be both boosting and unboosting. task->pi_lock must be held. +- */ +-static void __rt_mutex_adjust_prio(struct task_struct *task) ++static void rt_mutex_adjust_prio(struct task_struct *p) + { +- int prio = rt_mutex_getprio(task); ++ struct task_struct *pi_task = NULL; + +- if (task->prio != prio || dl_prio(prio)) +- rt_mutex_setprio(task, prio); +-} ++ lockdep_assert_held(&p->pi_lock); + +-/* +- * Adjust task priority (undo boosting). Called from the exit path of +- * rt_mutex_slowunlock() and rt_mutex_slowlock(). +- * +- * (Note: We do this outside of the protection of lock->wait_lock to +- * allow the lock to be taken while or before we readjust the priority +- * of task. We do not use the spin_xx_mutex() variants here as we are +- * outside of the debug path.) +- */ +-void rt_mutex_adjust_prio(struct task_struct *task) +-{ +- unsigned long flags; ++ if (task_has_pi_waiters(p)) ++ pi_task = task_top_pi_waiter(p)->task; + +- raw_spin_lock_irqsave(&task->pi_lock, flags); +- __rt_mutex_adjust_prio(task); +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); ++ rt_mutex_setprio(p, pi_task); + } + + /* +@@ -414,6 +401,14 @@ return debug_rt_mutex_detect_deadlock(waiter, chwalk); } @@ -13465,7 +13836,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking /* * Max number of times we'll walk the boosting chain: */ -@@ -421,7 +441,8 @@ +@@ -421,7 +416,8 @@ static inline struct rt_mutex *task_blocked_on_lock(struct task_struct *p) { @@ -13475,7 +13846,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking } /* -@@ -557,7 +578,7 @@ +@@ -557,7 +553,7 @@ * reached or the state of the chain has changed while we * dropped the locks. */ @@ -13484,7 +13855,43 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking goto out_unlock_pi; /* -@@ -719,13 +740,16 @@ +@@ -608,7 +604,7 @@ + * enabled we continue, but stop the requeueing in the chain + * walk. + */ +- if (waiter->prio == task->prio) { ++ if (rt_mutex_waiter_equal(waiter, task_to_waiter(task))) { + if (!detect_deadlock) + goto out_unlock_pi; + else +@@ -704,7 +700,26 @@ + + /* [7] Requeue the waiter in the lock waiter tree. */ + rt_mutex_dequeue(lock, waiter); ++ ++ /* ++ * Update the waiter prio fields now that we're dequeued. ++ * ++ * These values can have changed through either: ++ * ++ * sys_sched_set_scheduler() / sys_sched_setattr() ++ * ++ * or ++ * ++ * DL CBS enforcement advancing the effective deadline. ++ * ++ * Even though pi_waiters also uses these fields, and that tree is only ++ * updated in [11], we can do this here, since we hold [L], which ++ * serializes all pi_waiters access and rb_erase() does not care about ++ * the values of the node being removed. ++ */ + waiter->prio = task->prio; ++ waiter->deadline = task->dl.deadline; ++ + rt_mutex_enqueue(lock, waiter); + + /* [8] Release the task */ +@@ -719,13 +734,16 @@ * follow here. This is the end of the chain we are walking. */ if (!rt_mutex_owner(lock)) { @@ -13503,33 +13910,33 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking raw_spin_unlock_irq(&lock->wait_lock); return 0; } -@@ -818,6 +842,25 @@ +@@ -745,7 +763,7 @@ + */ + rt_mutex_dequeue_pi(task, prerequeue_top_waiter); + rt_mutex_enqueue_pi(task, waiter); +- __rt_mutex_adjust_prio(task); ++ rt_mutex_adjust_prio(task); + + } else if (prerequeue_top_waiter == waiter) { + /* +@@ -761,7 +779,7 @@ + rt_mutex_dequeue_pi(task, waiter); + waiter = rt_mutex_top_waiter(lock); + rt_mutex_enqueue_pi(task, waiter); +- __rt_mutex_adjust_prio(task); ++ rt_mutex_adjust_prio(task); + } else { + /* + * Nothing changed. No need to do any priority +@@ -818,6 +836,7 @@ return ret; } + -+#define STEAL_NORMAL 0 -+#define STEAL_LATERAL 1 -+ -+/* -+ * Note that RT tasks are excluded from lateral-steals to prevent the -+ * introduction of an unbounded latency -+ */ -+static inline int lock_is_stealable(struct task_struct *task, -+ struct task_struct *pendowner, int mode) -+{ -+ if (mode == STEAL_NORMAL || rt_task(task)) { -+ if (task->prio >= pendowner->prio) -+ return 0; -+ } else if (task->prio > pendowner->prio) -+ return 0; -+ return 1; -+} -+ /* * Try to take an rt-mutex * -@@ -828,8 +871,9 @@ +@@ -828,9 +847,12 @@ * @waiter: The waiter that is queued to the lock's wait tree if the * callsite called task_blocked_on_lock(), otherwise NULL */ @@ -13539,66 +13946,114 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + struct task_struct *task, + struct rt_mutex_waiter *waiter, int mode) { ++ lockdep_assert_held(&lock->wait_lock); ++ /* * Before testing whether we can acquire @lock, we set the -@@ -866,8 +910,10 @@ + * RT_MUTEX_HAS_WAITERS bit in @lock->owner. This forces all +@@ -866,8 +888,10 @@ * If waiter is not the highest priority waiter of * @lock, give up. */ - if (waiter != rt_mutex_top_waiter(lock)) + if (waiter != rt_mutex_top_waiter(lock)) { -+ /* XXX lock_is_stealable() ? */ ++ /* XXX rt_mutex_waiter_less() ? */ return 0; + } /* * We can acquire the lock. Remove the waiter from the -@@ -885,14 +931,10 @@ +@@ -885,14 +909,26 @@ * not need to be dequeued. */ if (rt_mutex_has_waiters(lock)) { -- /* -- * If @task->prio is greater than or equal to -- * the top waiter priority (kernel view), -- * @task lost. -- */ -- if (task->prio >= rt_mutex_top_waiter(lock)->prio) -- return 0; + struct task_struct *pown = rt_mutex_top_waiter(lock)->task; - -+ if (task != pown && !lock_is_stealable(task, pown, mode)) ++ ++ if (task != pown) + return 0; ++ ++ /* ++ * Note that RT tasks are excluded from lateral-steals ++ * to prevent the introduction of an unbounded latency. ++ */ ++ if (rt_task(task)) ++ mode = STEAL_NORMAL; + /* + * If @task->prio is greater than or equal to + * the top waiter priority (kernel view), + * @task lost. + */ +- if (task->prio >= rt_mutex_top_waiter(lock)->prio) ++ if (!rt_mutex_waiter_less(task_to_waiter(task), ++ rt_mutex_top_waiter(lock), ++ mode)) + return 0; +- /* * The current top waiter stays enqueued. We * don't have to change anything in the lock -@@ -936,10 +978,394 @@ +@@ -936,180 +972,592 @@ */ rt_mutex_set_owner(lock, task); - rt_mutex_deadlock_account_lock(lock, task); -+ return 1; -+} -+ +- + return 1; + } + +#ifdef CONFIG_PREEMPT_RT_FULL -+/* + /* +- * Task blocks on lock. +- * +- * Prepare waiter and propagate pi chain +- * +- * This must be called with lock->wait_lock held and interrupts disabled + * preemptible spin_lock functions: -+ */ + */ +-static int task_blocks_on_rt_mutex(struct rt_mutex *lock, +- struct rt_mutex_waiter *waiter, +- struct task_struct *task, +- enum rtmutex_chainwalk chwalk) +static inline void rt_spin_lock_fastlock(struct rt_mutex *lock, + void (*slowfn)(struct rt_mutex *lock, + bool mg_off), + bool do_mig_dis) -+{ + { +- struct task_struct *owner = rt_mutex_owner(lock); +- struct rt_mutex_waiter *top_waiter = waiter; +- struct rt_mutex *next_lock; +- int chain_walk = 0, res; + might_sleep_no_state_check(); -+ + +- /* +- * Early deadlock detection. We really don't want the task to +- * enqueue on itself just to untangle the mess later. It's not +- * only an optimization. We drop the locks, so another waiter +- * can come in before the chain walk detects the deadlock. So +- * the other will detect the deadlock and return -EDEADLOCK, +- * which is wrong, as the other waiter is not in a deadlock +- * situation. +- */ +- if (owner == task) +- return -EDEADLK; + if (do_mig_dis) + migrate_disable(); -+ + +- raw_spin_lock(&task->pi_lock); +- __rt_mutex_adjust_prio(task); +- waiter->task = task; +- waiter->lock = lock; +- waiter->prio = task->prio; + if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current))) + return; + else + slowfn(lock, do_mig_dis); +} -+ + +- /* Get the top priority waiter on the lock */ +- if (rt_mutex_has_waiters(lock)) +- top_waiter = rt_mutex_top_waiter(lock); +- rt_mutex_enqueue(lock, waiter); +static inline void rt_spin_lock_fastunlock(struct rt_mutex *lock, + void (*slowfn)(struct rt_mutex *lock)) +{ @@ -13617,6 +14072,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking +{ + int res = 0; +- task->pi_blocked_on = waiter; + rcu_read_lock(); + for (;;) { + if (owner != rt_mutex_owner(lock)) @@ -13639,10 +14095,11 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking +static int adaptive_wait(struct rt_mutex *lock, + struct task_struct *orig_owner) +{ - return 1; - } ++ return 1; ++} +#endif -+ + +- raw_spin_unlock(&task->pi_lock); +static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + struct rt_mutex_waiter *waiter, + struct task_struct *task, @@ -13661,44 +14118,85 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + struct rt_mutex_waiter waiter, *top_waiter; + unsigned long flags; + int ret; -+ + +- if (!owner) +- return 0; + rt_mutex_init_waiter(&waiter, true); -+ + +- raw_spin_lock(&owner->pi_lock); +- if (waiter == rt_mutex_top_waiter(lock)) { +- rt_mutex_dequeue_pi(owner, top_waiter); +- rt_mutex_enqueue_pi(owner, waiter); + raw_spin_lock_irqsave(&lock->wait_lock, flags); -+ + +- __rt_mutex_adjust_prio(owner); +- if (owner->pi_blocked_on) +- chain_walk = 1; +- } else if (rt_mutex_cond_detect_deadlock(waiter, chwalk)) { +- chain_walk = 1; + if (__try_to_take_rt_mutex(lock, self, NULL, STEAL_LATERAL)) { + raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + return; -+ } -+ + } + +- /* Store the lock on which owner is blocked or NULL */ +- next_lock = task_blocked_on_lock(owner); + BUG_ON(rt_mutex_owner(lock) == self); -+ -+ /* + +- raw_spin_unlock(&owner->pi_lock); + /* +- * Even if full deadlock detection is on, if the owner is not +- * blocked itself, we can avoid finding this out in the chain +- * walk. + * We save whatever state the task is in and we'll restore it + * after acquiring the lock taking real wakeups into account + * as well. We are serialized via pi_lock against wakeups. See + * try_to_wake_up(). -+ */ + */ +- if (!chain_walk || !next_lock) +- return 0; + raw_spin_lock(&self->pi_lock); + self->saved_state = self->state; + __set_current_state_no_track(TASK_UNINTERRUPTIBLE); + raw_spin_unlock(&self->pi_lock); -+ + +- /* +- * The owner can't disappear while holding a lock, +- * so the owner struct is protected by wait_lock. +- * Gets dropped in rt_mutex_adjust_prio_chain()! +- */ +- get_task_struct(owner); + ret = task_blocks_on_rt_mutex(lock, &waiter, self, RT_MUTEX_MIN_CHAINWALK); + BUG_ON(ret); -+ + +- raw_spin_unlock_irq(&lock->wait_lock); + for (;;) { + /* Try to acquire the lock again. */ + if (__try_to_take_rt_mutex(lock, self, &waiter, STEAL_LATERAL)) + break; -+ + +- res = rt_mutex_adjust_prio_chain(owner, chwalk, lock, +- next_lock, waiter, task); + top_waiter = rt_mutex_top_waiter(lock); + lock_owner = rt_mutex_owner(lock); -+ + +- raw_spin_lock_irq(&lock->wait_lock); + raw_spin_unlock_irqrestore(&lock->wait_lock, flags); -+ + +- return res; +-} + debug_rt_mutex_print_deadlock(&waiter); -+ + +-/* +- * Remove the top waiter from the current tasks pi waiter tree and +- * queue it up. +- * +- * Called with lock->wait_lock held and interrupts disabled. +- */ +-static void mark_wakeup_next_waiter(struct wake_q_head *wake_q, +- struct rt_mutex *lock) +-{ +- struct rt_mutex_waiter *waiter; + if (top_waiter != &waiter || adaptive_wait(lock, lock_owner)) { + if (mg_off) + migrate_enable(); @@ -13706,15 +14204,23 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + if (mg_off) + migrate_disable(); + } -+ + +- raw_spin_lock(¤t->pi_lock); + raw_spin_lock_irqsave(&lock->wait_lock, flags); -+ + +- waiter = rt_mutex_top_waiter(lock); + raw_spin_lock(&self->pi_lock); + __set_current_state_no_track(TASK_UNINTERRUPTIBLE); + raw_spin_unlock(&self->pi_lock); + } -+ -+ /* + + /* +- * Remove it from current->pi_waiters. We do not adjust a +- * possible priority boost right now. We execute wakeup in the +- * boosted mode and go back to normal after releasing +- * lock->wait_lock. +- */ +- rt_mutex_dequeue_pi(current, waiter); + * Restore the task state to current->saved_state. We set it + * to the original state above and the try_to_wake_up() code + * has possibly updated it when a real (non-rtmutex) wakeup @@ -13725,79 +14231,103 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + __set_current_state_no_track(self->saved_state); + self->saved_state = TASK_RUNNING; + raw_spin_unlock(&self->pi_lock); -+ -+ /* + + /* +- * As we are waking up the top waiter, and the waiter stays +- * queued on the lock until it gets the lock, this lock +- * obviously has waiters. Just set the bit here and this has +- * the added benefit of forcing all new tasks into the +- * slow path making sure no task of lower priority than +- * the top waiter can steal this lock. + * try_to_take_rt_mutex() sets the waiter bit + * unconditionally. We might have to fix that up: -+ */ + */ +- lock->owner = (void *) RT_MUTEX_HAS_WAITERS; + fixup_rt_mutex_waiters(lock); -+ + +- raw_spin_unlock(¤t->pi_lock); + BUG_ON(rt_mutex_has_waiters(lock) && &waiter == rt_mutex_top_waiter(lock)); + BUG_ON(!RB_EMPTY_NODE(&waiter.tree_entry)); + + raw_spin_unlock_irqrestore(&lock->wait_lock, flags); -+ + +- wake_q_add(wake_q, waiter->task); + debug_rt_mutex_free_waiter(&waiter); -+} -+ -+static void mark_wakeup_next_waiter(struct wake_q_head *wake_q, -+ struct wake_q_head *wake_sleeper_q, -+ struct rt_mutex *lock); -+/* + } + ++static bool __sched __rt_mutex_unlock_common(struct rt_mutex *lock, ++ struct wake_q_head *wake_q, ++ struct wake_q_head *wq_sleeper); + /* +- * Remove a waiter from a lock and give up +- * +- * Must be called with lock->wait_lock held and interrupts disabled. I must +- * have just failed to try_to_take_rt_mutex(). + * Slow path to release a rt_mutex spin_lock style -+ */ + */ +-static void remove_waiter(struct rt_mutex *lock, +- struct rt_mutex_waiter *waiter) +static void noinline __sched rt_spin_lock_slowunlock(struct rt_mutex *lock) -+{ + { +- bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock)); +- struct task_struct *owner = rt_mutex_owner(lock); +- struct rt_mutex *next_lock; + unsigned long flags; + WAKE_Q(wake_q); + WAKE_Q(wake_sleeper_q); -+ ++ bool postunlock; + +- raw_spin_lock(¤t->pi_lock); +- rt_mutex_dequeue(lock, waiter); +- current->pi_blocked_on = NULL; +- raw_spin_unlock(¤t->pi_lock); + raw_spin_lock_irqsave(&lock->wait_lock, flags); -+ -+ debug_rt_mutex_unlock(lock); -+ -+ if (!rt_mutex_has_waiters(lock)) { -+ lock->owner = NULL; -+ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); -+ return; -+ } -+ -+ mark_wakeup_next_waiter(&wake_q, &wake_sleeper_q, lock); -+ ++ postunlock = __rt_mutex_unlock_common(lock, &wake_q, &wake_sleeper_q); + raw_spin_unlock_irqrestore(&lock->wait_lock, flags); -+ wake_up_q(&wake_q); -+ wake_up_q_sleeper(&wake_sleeper_q); -+ -+ /* Undo pi boosting.when necessary */ -+ rt_mutex_adjust_prio(current); + +- /* +- * Only update priority if the waiter was the highest priority +- * waiter of the lock and there is an owner to update. +- */ +- if (!owner || !is_top_waiter) +- return; ++ if (postunlock) ++ rt_mutex_postunlock(&wake_q, &wake_sleeper_q); +} -+ + +- raw_spin_lock(&owner->pi_lock); +void __lockfunc rt_spin_lock__no_mg(spinlock_t *lock) +{ + rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock, false); + spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); +} +EXPORT_SYMBOL(rt_spin_lock__no_mg); -+ + +- rt_mutex_dequeue_pi(owner, waiter); +void __lockfunc rt_spin_lock(spinlock_t *lock) +{ + rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock, true); + spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); +} +EXPORT_SYMBOL(rt_spin_lock); -+ + +- if (rt_mutex_has_waiters(lock)) +- rt_mutex_enqueue_pi(owner, rt_mutex_top_waiter(lock)); +void __lockfunc __rt_spin_lock(struct rt_mutex *lock) +{ + rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock, true); +} +EXPORT_SYMBOL(__rt_spin_lock); -+ + +- __rt_mutex_adjust_prio(owner); +void __lockfunc __rt_spin_lock__no_mg(struct rt_mutex *lock) +{ + rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock, false); +} +EXPORT_SYMBOL(__rt_spin_lock__no_mg); -+ + +- /* Store the lock on which owner is blocked or NULL */ +- next_lock = task_blocked_on_lock(owner); +#ifdef CONFIG_DEBUG_LOCK_ALLOC +void __lockfunc rt_spin_lock_nested(spinlock_t *lock, int subclass) +{ @@ -13806,7 +14336,8 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking +} +EXPORT_SYMBOL(rt_spin_lock_nested); +#endif -+ + +- raw_spin_unlock(&owner->pi_lock); +void __lockfunc rt_spin_unlock__no_mg(spinlock_t *lock) +{ + /* NOTE: we always pass in '1' for nested, for simplicity */ @@ -13814,7 +14345,11 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + rt_spin_lock_fastunlock(&lock->lock, rt_spin_lock_slowunlock); +} +EXPORT_SYMBOL(rt_spin_unlock__no_mg); -+ + +- /* +- * Don't walk the chain, if the owner task is not blocked +- * itself. +- */ +void __lockfunc rt_spin_unlock(spinlock_t *lock) +{ + /* NOTE: we always pass in '1' for nested, for simplicity */ @@ -13964,13 +14499,39 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking +{ + return __try_to_take_rt_mutex(lock, task, waiter, STEAL_NORMAL); +} - - /* - * Task blocks on lock. -@@ -971,6 +1397,23 @@ - return -EDEADLK; - - raw_spin_lock(&task->pi_lock); ++ ++/* ++ * Task blocks on lock. ++ * ++ * Prepare waiter and propagate pi chain ++ * ++ * This must be called with lock->wait_lock held and interrupts disabled ++ */ ++static int task_blocks_on_rt_mutex(struct rt_mutex *lock, ++ struct rt_mutex_waiter *waiter, ++ struct task_struct *task, ++ enum rtmutex_chainwalk chwalk) ++{ ++ struct task_struct *owner = rt_mutex_owner(lock); ++ struct rt_mutex_waiter *top_waiter = waiter; ++ struct rt_mutex *next_lock; ++ int chain_walk = 0, res; ++ ++ lockdep_assert_held(&lock->wait_lock); ++ ++ /* ++ * Early deadlock detection. We really don't want the task to ++ * enqueue on itself just to untangle the mess later. It's not ++ * only an optimization. We drop the locks, so another waiter ++ * can come in before the chain walk detects the deadlock. So ++ * the other will detect the deadlock and return -EDEADLOCK, ++ * which is wrong, as the other waiter is not in a deadlock ++ * situation. ++ */ ++ if (owner == task) ++ return -EDEADLK; ++ ++ raw_spin_lock(&task->pi_lock); + + /* + * In the case of futex requeue PI, this will be a proxy @@ -13988,64 +14549,176 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + + BUG_ON(rt_mutex_real_waiter(task->pi_blocked_on)); + - __rt_mutex_adjust_prio(task); - waiter->task = task; - waiter->lock = lock; -@@ -994,7 +1437,7 @@ - rt_mutex_enqueue_pi(owner, waiter); - - __rt_mutex_adjust_prio(owner); -- if (owner->pi_blocked_on) ++ rt_mutex_adjust_prio(task); ++ waiter->task = task; ++ waiter->lock = lock; ++ waiter->prio = task->prio; ++ waiter->deadline = task->dl.deadline; ++ ++ /* Get the top priority waiter on the lock */ ++ if (rt_mutex_has_waiters(lock)) ++ top_waiter = rt_mutex_top_waiter(lock); ++ rt_mutex_enqueue(lock, waiter); ++ ++ task->pi_blocked_on = waiter; ++ ++ raw_spin_unlock(&task->pi_lock); ++ ++ if (!owner) ++ return 0; ++ ++ raw_spin_lock(&owner->pi_lock); ++ if (waiter == rt_mutex_top_waiter(lock)) { ++ rt_mutex_dequeue_pi(owner, top_waiter); ++ rt_mutex_enqueue_pi(owner, waiter); ++ ++ rt_mutex_adjust_prio(owner); + if (rt_mutex_real_waiter(owner->pi_blocked_on)) - chain_walk = 1; - } else if (rt_mutex_cond_detect_deadlock(waiter, chwalk)) { - chain_walk = 1; -@@ -1036,6 +1479,7 @@ - * Called with lock->wait_lock held and interrupts disabled. - */ - static void mark_wakeup_next_waiter(struct wake_q_head *wake_q, ++ chain_walk = 1; ++ } else if (rt_mutex_cond_detect_deadlock(waiter, chwalk)) { ++ chain_walk = 1; ++ } ++ ++ /* Store the lock on which owner is blocked or NULL */ ++ next_lock = task_blocked_on_lock(owner); ++ ++ raw_spin_unlock(&owner->pi_lock); ++ /* ++ * Even if full deadlock detection is on, if the owner is not ++ * blocked itself, we can avoid finding this out in the chain ++ * walk. ++ */ ++ if (!chain_walk || !next_lock) ++ return 0; ++ ++ /* ++ * The owner can't disappear while holding a lock, ++ * so the owner struct is protected by wait_lock. ++ * Gets dropped in rt_mutex_adjust_prio_chain()! ++ */ ++ get_task_struct(owner); ++ ++ raw_spin_unlock_irq(&lock->wait_lock); ++ ++ res = rt_mutex_adjust_prio_chain(owner, chwalk, lock, ++ next_lock, waiter, task); ++ ++ raw_spin_lock_irq(&lock->wait_lock); ++ ++ return res; ++} ++ ++/* ++ * Remove the top waiter from the current tasks pi waiter tree and ++ * queue it up. ++ * ++ * Called with lock->wait_lock held and interrupts disabled. ++ */ ++static void mark_wakeup_next_waiter(struct wake_q_head *wake_q, + struct wake_q_head *wake_sleeper_q, - struct rt_mutex *lock) - { - struct rt_mutex_waiter *waiter; -@@ -1064,7 +1508,10 @@ - - raw_spin_unlock(¤t->pi_lock); - -- wake_q_add(wake_q, waiter->task); ++ struct rt_mutex *lock) ++{ ++ struct rt_mutex_waiter *waiter; ++ ++ raw_spin_lock(¤t->pi_lock); ++ ++ waiter = rt_mutex_top_waiter(lock); ++ ++ /* ++ * Remove it from current->pi_waiters and deboost. ++ * ++ * We must in fact deboost here in order to ensure we call ++ * rt_mutex_setprio() to update p->pi_top_task before the ++ * task unblocks. ++ */ ++ rt_mutex_dequeue_pi(current, waiter); ++ rt_mutex_adjust_prio(current); ++ ++ /* ++ * As we are waking up the top waiter, and the waiter stays ++ * queued on the lock until it gets the lock, this lock ++ * obviously has waiters. Just set the bit here and this has ++ * the added benefit of forcing all new tasks into the ++ * slow path making sure no task of lower priority than ++ * the top waiter can steal this lock. ++ */ ++ lock->owner = (void *) RT_MUTEX_HAS_WAITERS; ++ ++ /* ++ * We deboosted before waking the top waiter task such that we don't ++ * run two tasks with the 'same' priority (and ensure the ++ * p->pi_top_task pointer points to a blocked task). This however can ++ * lead to priority inversion if we would get preempted after the ++ * deboost but before waking our donor task, hence the preempt_disable() ++ * before unlock. ++ * ++ * Pairs with preempt_enable() in rt_mutex_postunlock(); ++ */ ++ preempt_disable(); + if (waiter->savestate) + wake_q_add(wake_sleeper_q, waiter->task); + else + wake_q_add(wake_q, waiter->task); - } - - /* -@@ -1078,7 +1525,7 @@ - { - bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock)); - struct task_struct *owner = rt_mutex_owner(lock); -- struct rt_mutex *next_lock; ++ raw_spin_unlock(¤t->pi_lock); ++} ++ ++/* ++ * Remove a waiter from a lock and give up ++ * ++ * Must be called with lock->wait_lock held and interrupts disabled. I must ++ * have just failed to try_to_take_rt_mutex(). ++ */ ++static void remove_waiter(struct rt_mutex *lock, ++ struct rt_mutex_waiter *waiter) ++{ ++ bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock)); ++ struct task_struct *owner = rt_mutex_owner(lock); + struct rt_mutex *next_lock = NULL; - - raw_spin_lock(¤t->pi_lock); - rt_mutex_dequeue(lock, waiter); -@@ -1102,7 +1549,8 @@ - __rt_mutex_adjust_prio(owner); - - /* Store the lock on which owner is blocked or NULL */ -- next_lock = task_blocked_on_lock(owner); ++ ++ lockdep_assert_held(&lock->wait_lock); ++ ++ raw_spin_lock(¤t->pi_lock); ++ rt_mutex_dequeue(lock, waiter); ++ current->pi_blocked_on = NULL; ++ raw_spin_unlock(¤t->pi_lock); ++ ++ /* ++ * Only update priority if the waiter was the highest priority ++ * waiter of the lock and there is an owner to update. ++ */ ++ if (!owner || !is_top_waiter) ++ return; ++ ++ raw_spin_lock(&owner->pi_lock); ++ ++ rt_mutex_dequeue_pi(owner, waiter); ++ ++ if (rt_mutex_has_waiters(lock)) ++ rt_mutex_enqueue_pi(owner, rt_mutex_top_waiter(lock)); ++ ++ rt_mutex_adjust_prio(owner); ++ ++ /* Store the lock on which owner is blocked or NULL */ + if (rt_mutex_real_waiter(owner->pi_blocked_on)) + next_lock = task_blocked_on_lock(owner); - - raw_spin_unlock(&owner->pi_lock); ++ ++ raw_spin_unlock(&owner->pi_lock); ++ ++ /* ++ * Don't walk the chain, if the owner task is not blocked ++ * itself. ++ */ + if (!next_lock) + return; @@ -1138,21 +1586,30 @@ raw_spin_lock_irqsave(&task->pi_lock, flags); waiter = task->pi_blocked_on; - if (!waiter || (waiter->prio == task->prio && -+ if (!rt_mutex_real_waiter(waiter) || (waiter->prio == task->prio && - !dl_prio(task->prio))) { +- !dl_prio(task->prio))) { ++ if (!rt_mutex_real_waiter(waiter) || ++ rt_mutex_waiter_equal(waiter, task_to_waiter(task))) { raw_spin_unlock_irqrestore(&task->pi_lock, flags); return; } @@ -14110,23 +14783,39 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking if (ret) break; } -@@ -1223,35 +1682,94 @@ +@@ -1199,59 +1658,118 @@ + set_current_state(state); } - } --/* -- * Slow path lock function: -- */ --static int __sched --rt_mutex_slowlock(struct rt_mutex *lock, int state, -- struct hrtimer_sleeper *timeout, -- enum rtmutex_chainwalk chwalk) +- __set_current_state(TASK_RUNNING); +- return ret; ++ __set_current_state(TASK_RUNNING); ++ return ret; ++} ++ ++static void rt_mutex_handle_deadlock(int res, int detect_deadlock, ++ struct rt_mutex_waiter *w) ++{ ++ /* ++ * If the result is not -EDEADLOCK or the caller requested ++ * deadlock detection, nothing to do here. ++ */ ++ if (res != -EDEADLOCK || detect_deadlock) ++ return; ++ ++ /* ++ * Yell lowdly and stop the task right here. ++ */ ++ rt_mutex_print_deadlock(w); ++ while (1) { ++ set_current_state(TASK_INTERRUPTIBLE); ++ schedule(); ++ } ++} ++ +static __always_inline void ww_mutex_lock_acquired(struct ww_mutex *ww, + struct ww_acquire_ctx *ww_ctx) - { -- struct rt_mutex_waiter waiter; -- unsigned long flags; -- int ret = 0; ++{ +#ifdef CONFIG_DEBUG_MUTEXES + /* + * If this WARN_ON triggers, you used ww_mutex_lock to acquire, @@ -14135,10 +14824,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + * This should never happen, always use ww_mutex_unlock. + */ + DEBUG_LOCKS_WARN_ON(ww->ctx); - -- debug_rt_mutex_init_waiter(&waiter); -- RB_CLEAR_NODE(&waiter.pi_tree_entry); -- RB_CLEAR_NODE(&waiter.tree_entry); ++ + /* + * Not quite done after calling ww_acquire_done() ? + */ @@ -14158,58 +14844,85 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + DEBUG_LOCKS_WARN_ON(ww_ctx->acquired > 0); + ww_ctx->contending_lock = NULL; + } - - /* -- * Technically we could use raw_spin_[un]lock_irq() here, but this can -- * be called in early boot if the cmpxchg() fast path is disabled -- * (debug, no architecture support). In this case we will acquire the -- * rtmutex with lock->wait_lock held. But we cannot unconditionally -- * enable interrupts in that early boot case. So we need to use the -- * irqsave/restore variants. ++ ++ /* + * Naughty, using a different class will lead to undefined behavior! - */ -- raw_spin_lock_irqsave(&lock->wait_lock, flags); ++ */ + DEBUG_LOCKS_WARN_ON(ww_ctx->ww_class != ww->ww_class); +#endif + ww_ctx->acquired++; -+} -+ + } + +-static void rt_mutex_handle_deadlock(int res, int detect_deadlock, +- struct rt_mutex_waiter *w) +#ifdef CONFIG_PREEMPT_RT_FULL +static void ww_mutex_account_lock(struct rt_mutex *lock, + struct ww_acquire_ctx *ww_ctx) -+{ + { + struct ww_mutex *ww = container_of(lock, struct ww_mutex, base.lock); + struct rt_mutex_waiter *waiter, *n; + -+ /* + /* +- * If the result is not -EDEADLOCK or the caller requested +- * deadlock detection, nothing to do here. + * This branch gets optimized out for the common case, + * and is only important for ww_mutex_lock. -+ */ + */ +- if (res != -EDEADLOCK || detect_deadlock) +- return; + ww_mutex_lock_acquired(ww, ww_ctx); + ww->ctx = ww_ctx; -+ -+ /* + + /* +- * Yell lowdly and stop the task right here. + * Give any possible sleeping processes the chance to wake up, + * so they can recheck if they have to back off. -+ */ + */ +- rt_mutex_print_deadlock(w); +- while (1) { +- set_current_state(TASK_INTERRUPTIBLE); +- schedule(); + rbtree_postorder_for_each_entry_safe(waiter, n, &lock->waiters, + tree_entry) { + /* XXX debug rt mutex waiter wakeup */ + + BUG_ON(waiter->lock != lock); + rt_mutex_wake_waiter(waiter); -+ } -+} -+ + } + } + +-/* +- * Slow path lock function: +- */ +-static int __sched +-rt_mutex_slowlock(struct rt_mutex *lock, int state, +- struct hrtimer_sleeper *timeout, +- enum rtmutex_chainwalk chwalk) +-{ +- struct rt_mutex_waiter waiter; +- unsigned long flags; +- int ret = 0; +#else -+ + +- debug_rt_mutex_init_waiter(&waiter); +- RB_CLEAR_NODE(&waiter.pi_tree_entry); +- RB_CLEAR_NODE(&waiter.tree_entry); +static void ww_mutex_account_lock(struct rt_mutex *lock, + struct ww_acquire_ctx *ww_ctx) +{ + BUG(); +} +#endif -+ + +- /* +- * Technically we could use raw_spin_[un]lock_irq() here, but this can +- * be called in early boot if the cmpxchg() fast path is disabled +- * (debug, no architecture support). In this case we will acquire the +- * rtmutex with lock->wait_lock held. But we cannot unconditionally +- * enable interrupts in that early boot case. So we need to use the +- * irqsave/restore variants. +- */ +- raw_spin_lock_irqsave(&lock->wait_lock, flags); +int __sched rt_mutex_slowlock_locked(struct rt_mutex *lock, int state, + struct hrtimer_sleeper *timeout, + enum rtmutex_chainwalk chwalk, @@ -14296,8 +15009,13 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking raw_spin_unlock_irqrestore(&lock->wait_lock, flags); -@@ -1331,7 +1889,8 @@ - * Return whether the current task needs to undo a potential priority boosting. +@@ -1328,10 +1886,12 @@ + + /* + * Slow path to release a rt-mutex. +- * Return whether the current task needs to undo a potential priority boosting. ++ * ++ * Return whether the current task needs to call rt_mutex_postunlock(). */ static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock, - struct wake_q_head *wake_q) @@ -14306,7 +15024,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking { unsigned long flags; -@@ -1340,8 +1899,6 @@ +@@ -1340,8 +1900,6 @@ debug_rt_mutex_unlock(lock); @@ -14315,16 +15033,22 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking /* * We must be careful here if the fast path is enabled. If we * have no waiters queued we cannot set owner to NULL here -@@ -1387,7 +1944,7 @@ +@@ -1387,12 +1945,10 @@ * * Queue the next waiter for wakeup once we release the wait_lock. */ - mark_wakeup_next_waiter(wake_q, lock); +- + mark_wakeup_next_waiter(wake_q, wake_sleeper_q, lock); - raw_spin_unlock_irqrestore(&lock->wait_lock, flags); -@@ -1403,63 +1960,79 @@ +- /* check PI boosting */ +- return true; ++ return true; /* call rt_mutex_postunlock() */ + } + + /* +@@ -1403,63 +1959,85 @@ */ static inline int rt_mutex_fastlock(struct rt_mutex *lock, int state, @@ -14380,6 +15104,19 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking return slowfn(lock); } ++/* ++ * Performs the wakeup of the the top-waiter and re-enables preemption. ++ */ ++void rt_mutex_postunlock(struct wake_q_head *wake_q, ++ struct wake_q_head *wq_sleeper) ++{ ++ wake_up_q(wake_q); ++ wake_up_q_sleeper(wq_sleeper); ++ ++ /* Pairs with preempt_disable() in rt_mutex_slowunlock() */ ++ preempt_enable(); ++} ++ static inline void rt_mutex_fastunlock(struct rt_mutex *lock, bool (*slowfn)(struct rt_mutex *lock, @@ -14389,7 +15126,6 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking { WAKE_Q(wake_q); + WAKE_Q(wake_sleeper_q); -+ bool deboost; - if (likely(rt_mutex_cmpxchg_release(lock, current, NULL))) { - rt_mutex_deadlock_account_unlock(current); @@ -14398,21 +15134,11 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking - } else { - bool deboost = slowfn(lock, &wake_q); -+ deboost = slowfn(lock, &wake_q, &wake_sleeper_q); ++ if (slowfn(lock, &wake_q, &wake_sleeper_q)) ++ rt_mutex_postunlock(&wake_q, &wake_sleeper_q); ++} - wake_up_q(&wake_q); -+ wake_up_q(&wake_q); -+ wake_up_q_sleeper(&wake_sleeper_q); - -- /* Undo pi boosting if necessary: */ -- if (deboost) -- rt_mutex_adjust_prio(current); -- } -+ /* Undo pi boosting if necessary: */ -+ if (deboost) -+ rt_mutex_adjust_prio(current); -+} -+ +/** + * rt_mutex_lock_state - lock a rt_mutex with a given state + * @@ -14422,12 +15148,16 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking +int __sched rt_mutex_lock_state(struct rt_mutex *lock, int state) +{ + might_sleep(); -+ + +- /* Undo pi boosting if necessary: */ +- if (deboost) +- rt_mutex_adjust_prio(current); +- } + return rt_mutex_fastlock(lock, state, NULL, rt_mutex_slowlock); } /** -@@ -1469,15 +2042,13 @@ +@@ -1469,15 +2047,13 @@ */ void __sched rt_mutex_lock(struct rt_mutex *lock) { @@ -14445,7 +15175,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking * @lock: the rt_mutex to be locked * * Returns: -@@ -1486,23 +2057,32 @@ +@@ -1486,23 +2062,32 @@ */ int __sched rt_mutex_lock_interruptible(struct rt_mutex *lock) { @@ -14489,7 +15219,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking } /** -@@ -1525,6 +2105,7 @@ +@@ -1525,6 +2110,7 @@ return rt_mutex_timed_fastlock(lock, TASK_INTERRUPTIBLE, timeout, RT_MUTEX_MIN_CHAINWALK, @@ -14497,7 +15227,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking rt_mutex_slowlock); } EXPORT_SYMBOL_GPL(rt_mutex_timed_lock); -@@ -1542,7 +2123,11 @@ +@@ -1542,7 +2128,11 @@ */ int __sched rt_mutex_trylock(struct rt_mutex *lock) { @@ -14509,9 +15239,34 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking return 0; return rt_mutex_fasttrylock(lock, rt_mutex_slowtrylock); -@@ -1561,20 +2146,41 @@ +@@ -1560,21 +2150,53 @@ + } EXPORT_SYMBOL_GPL(rt_mutex_unlock); ++static bool __sched __rt_mutex_unlock_common(struct rt_mutex *lock, ++ struct wake_q_head *wake_q, ++ struct wake_q_head *wq_sleeper) ++{ ++ lockdep_assert_held(&lock->wait_lock); ++ ++ debug_rt_mutex_unlock(lock); ++ ++ if (!rt_mutex_has_waiters(lock)) { ++ lock->owner = NULL; ++ return false; /* done */ ++ } ++ ++ /* ++ * We've already deboosted, mark_wakeup_next_waiter() will ++ * retain preempt_disabled when we drop the wait_lock, to ++ * avoid inversion prior to the wakeup. preempt_disable() ++ * therein pairs with rt_mutex_postunlock(). ++ */ ++ mark_wakeup_next_waiter(wake_q, wq_sleeper, lock); ++ ++ return true; /* call postunlock() */ ++} ++ /** - * rt_mutex_futex_unlock - Futex variant of rt_mutex_unlock - * @lock: the rt_mutex to be unlocked @@ -14526,43 +15281,31 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking +bool __sched __rt_mutex_futex_unlock(struct rt_mutex *lock, + struct wake_q_head *wake_q, + struct wake_q_head *wq_sleeper) -+{ -+ lockdep_assert_held(&lock->wait_lock); -+ -+ debug_rt_mutex_unlock(lock); -+ -+ if (!rt_mutex_has_waiters(lock)) { -+ lock->owner = NULL; -+ return false; /* done */ -+ } -+ -+ mark_wakeup_next_waiter(wake_q, wq_sleeper, lock); -+ return true; /* deboost and wakeups */ -+} -+ -+void __sched rt_mutex_futex_unlock(struct rt_mutex *lock) { - if (likely(rt_mutex_cmpxchg_release(lock, current, NULL))) { - rt_mutex_deadlock_account_unlock(current); - return false; +- } +- return rt_mutex_slowunlock(lock, wqh); ++ return __rt_mutex_unlock_common(lock, wake_q, wq_sleeper); ++} ++ ++void __sched rt_mutex_futex_unlock(struct rt_mutex *lock) ++{ + WAKE_Q(wake_q); + WAKE_Q(wake_sleeper_q); -+ bool deboost; ++ bool postunlock; + + raw_spin_lock_irq(&lock->wait_lock); -+ deboost = __rt_mutex_futex_unlock(lock, &wake_q, &wake_sleeper_q); ++ postunlock = __rt_mutex_futex_unlock(lock, &wake_q, &wake_sleeper_q); + raw_spin_unlock_irq(&lock->wait_lock); + -+ if (deboost) { -+ wake_up_q(&wake_q); -+ wake_up_q_sleeper(&wake_sleeper_q); -+ rt_mutex_adjust_prio(current); - } -- return rt_mutex_slowunlock(lock, wqh); ++ if (postunlock) ++ rt_mutex_postunlock(&wake_q, &wake_sleeper_q); } /** -@@ -1607,13 +2213,12 @@ +@@ -1607,13 +2229,12 @@ void __rt_mutex_init(struct rt_mutex *lock, const char *name) { lock->owner = NULL; @@ -14577,7 +15320,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking /** * rt_mutex_init_proxy_locked - initialize and lock a rt_mutex on behalf of a -@@ -1628,10 +2233,9 @@ +@@ -1628,10 +2249,9 @@ void rt_mutex_init_proxy_locked(struct rt_mutex *lock, struct task_struct *proxy_owner) { @@ -14589,7 +15332,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking } /** -@@ -1647,34 +2251,45 @@ +@@ -1647,34 +2267,45 @@ { debug_rt_mutex_proxy_unlock(lock); rt_mutex_set_owner(lock, NULL); @@ -14653,7 +15396,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking /* We enforce deadlock detection for futexes */ ret = task_blocks_on_rt_mutex(lock, waiter, task, -@@ -1690,17 +2305,41 @@ +@@ -1690,17 +2321,41 @@ ret = 0; } @@ -14698,7 +15441,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking * rt_mutex_next_owner - return the next owner of the lock * * @lock: the rt lock query -@@ -1721,21 +2360,23 @@ +@@ -1721,24 +2376,27 @@ } /** @@ -14726,14 +15469,35 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking struct hrtimer_sleeper *to, struct rt_mutex_waiter *waiter) { -@@ -1746,10 +2387,47 @@ ++ struct task_struct *tsk = current; + int ret; + + raw_spin_lock_irq(&lock->wait_lock); +@@ -1746,10 +2404,65 @@ set_current_state(TASK_INTERRUPTIBLE); /* sleep on the mutex */ - ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter); + ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter, NULL); - -- if (unlikely(ret)) ++ ++ /* ++ * RT has a problem here when the wait got interrupted by a timeout ++ * or a signal. task->pi_blocked_on is still set. The task must ++ * acquire the hash bucket lock when returning from this function. ++ * ++ * If the hash bucket lock is contended then the ++ * BUG_ON(rt_mutex_real_waiter(task->pi_blocked_on)) in ++ * task_blocks_on_rt_mutex() will trigger. This can be avoided by ++ * clearing task->pi_blocked_on which removes the task from the ++ * boosting chain of the rtmutex. That's correct because the task ++ * is not longer blocked on it. ++ */ ++ if (ret) { ++ raw_spin_lock(&tsk->pi_lock); ++ tsk->pi_blocked_on = NULL; ++ raw_spin_unlock(&tsk->pi_lock); ++ } ++ + raw_spin_unlock_irq(&lock->wait_lock); + + return ret; @@ -14762,7 +15526,8 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + struct rt_mutex_waiter *waiter) +{ + bool cleanup = false; -+ + +- if (unlikely(ret)) + raw_spin_lock_irq(&lock->wait_lock); + /* + * Unless we're the owner; we're still enqueued on the wait_list. @@ -14776,7 +15541,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking /* * try_to_take_rt_mutex() sets the waiter bit unconditionally. We might -@@ -1759,5 +2437,91 @@ +@@ -1759,5 +2472,91 @@ raw_spin_unlock_irq(&lock->wait_lock); @@ -14824,8 +15589,8 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + else if (!ret && ww_ctx->acquired > 1) + return ww_mutex_deadlock_injection(lock, ww_ctx); + - return ret; - } ++ return ret; ++} +EXPORT_SYMBOL_GPL(__ww_mutex_lock_interruptible); + +int __sched @@ -14842,8 +15607,8 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking + else if (!ret && ww_ctx->acquired > 1) + return ww_mutex_deadlock_injection(lock, ww_ctx); + -+ return ret; -+} + return ret; + } +EXPORT_SYMBOL_GPL(__ww_mutex_lock); + +void __sched ww_mutex_unlock(struct ww_mutex *lock) @@ -14868,10 +15633,10 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.c linux-4.9.22/kernel/locking +} +EXPORT_SYMBOL(ww_mutex_unlock); +#endif -diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex_common.h linux-4.9.22/kernel/locking/rtmutex_common.h ---- linux-4.9.22.orig/kernel/locking/rtmutex_common.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/rtmutex_common.h 2017-04-18 17:19:16.690773540 +0200 -@@ -27,6 +27,7 @@ +diff -Nur linux-4.9.28.orig/kernel/locking/rtmutex_common.h linux-4.9.28/kernel/locking/rtmutex_common.h +--- linux-4.9.28.orig/kernel/locking/rtmutex_common.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/rtmutex_common.h 2017-05-19 03:37:25.186176955 +0200 +@@ -27,12 +27,14 @@ struct rb_node pi_tree_entry; struct task_struct *task; struct rt_mutex *lock; @@ -14879,7 +15644,14 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex_common.h linux-4.9.22/kernel/ #ifdef CONFIG_DEBUG_RT_MUTEXES unsigned long ip; struct pid *deadlock_task_pid; -@@ -98,22 +99,45 @@ + struct rt_mutex *deadlock_lock; + #endif + int prio; ++ u64 deadline; + }; + + /* +@@ -98,21 +100,45 @@ /* * PI-futex support (proxy locking functions, etc.): */ @@ -14904,6 +15676,7 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex_common.h linux-4.9.22/kernel/ -extern int rt_mutex_timed_futex_lock(struct rt_mutex *l, struct hrtimer_sleeper *to); -extern bool rt_mutex_futex_unlock(struct rt_mutex *lock, - struct wake_q_head *wqh); +-extern void rt_mutex_adjust_prio(struct task_struct *task); +extern int rt_mutex_wait_proxy_lock(struct rt_mutex *lock, + struct hrtimer_sleeper *to, + struct rt_mutex_waiter *waiter); @@ -14917,8 +15690,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex_common.h linux-4.9.22/kernel/ + struct wake_q_head *wqh, + struct wake_q_head *wq_sleeper); + - extern void rt_mutex_adjust_prio(struct task_struct *task); - ++extern void rt_mutex_postunlock(struct wake_q_head *wake_q, ++ struct wake_q_head *wq_sleeper); ++ +/* RW semaphore special interface */ +struct ww_acquire_ctx; + @@ -14927,13 +15701,12 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex_common.h linux-4.9.22/kernel/ + enum rtmutex_chainwalk chwalk, + struct ww_acquire_ctx *ww_ctx, + struct rt_mutex_waiter *waiter); -+ + #ifdef CONFIG_DEBUG_RT_MUTEXES # include "rtmutex-debug.h" - #else -diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex-debug.c linux-4.9.22/kernel/locking/rtmutex-debug.c ---- linux-4.9.22.orig/kernel/locking/rtmutex-debug.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/rtmutex-debug.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/rtmutex-debug.c linux-4.9.28/kernel/locking/rtmutex-debug.c +--- linux-4.9.28.orig/kernel/locking/rtmutex-debug.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/rtmutex-debug.c 2017-05-19 03:37:25.186176955 +0200 @@ -173,12 +173,3 @@ lock->name = name; } @@ -14947,9 +15720,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex-debug.c linux-4.9.22/kernel/l -{ -} - -diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex-debug.h linux-4.9.22/kernel/locking/rtmutex-debug.h ---- linux-4.9.22.orig/kernel/locking/rtmutex-debug.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/rtmutex-debug.h 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/rtmutex-debug.h linux-4.9.28/kernel/locking/rtmutex-debug.h +--- linux-4.9.28.orig/kernel/locking/rtmutex-debug.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/rtmutex-debug.h 2017-05-19 03:37:25.186176955 +0200 @@ -9,9 +9,6 @@ * This file contains macros used solely by rtmutex.c. Debug version. */ @@ -14960,9 +15733,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex-debug.h linux-4.9.22/kernel/l extern void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter); extern void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter); extern void debug_rt_mutex_init(struct rt_mutex *lock, const char *name); -diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.h linux-4.9.22/kernel/locking/rtmutex.h ---- linux-4.9.22.orig/kernel/locking/rtmutex.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/rtmutex.h 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/rtmutex.h linux-4.9.28/kernel/locking/rtmutex.h +--- linux-4.9.28.orig/kernel/locking/rtmutex.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/rtmutex.h 2017-05-19 03:37:25.186176955 +0200 @@ -11,8 +11,6 @@ */ @@ -14972,9 +15745,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rtmutex.h linux-4.9.22/kernel/locking #define debug_rt_mutex_init_waiter(w) do { } while (0) #define debug_rt_mutex_free_waiter(w) do { } while (0) #define debug_rt_mutex_lock(l) do { } while (0) -diff -Nur linux-4.9.22.orig/kernel/locking/rwsem-rt.c linux-4.9.22/kernel/locking/rwsem-rt.c ---- linux-4.9.22.orig/kernel/locking/rwsem-rt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/kernel/locking/rwsem-rt.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/rwsem-rt.c linux-4.9.28/kernel/locking/rwsem-rt.c +--- linux-4.9.28.orig/kernel/locking/rwsem-rt.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/kernel/locking/rwsem-rt.c 2017-05-19 03:37:25.186176955 +0200 @@ -0,0 +1,268 @@ +/* + */ @@ -15244,9 +16017,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/rwsem-rt.c linux-4.9.22/kernel/lockin + /* Release it and account current as reader */ + __up_write_unlock(sem, WRITER_BIAS - 1, flags); +} -diff -Nur linux-4.9.22.orig/kernel/locking/spinlock.c linux-4.9.22/kernel/locking/spinlock.c ---- linux-4.9.22.orig/kernel/locking/spinlock.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/spinlock.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/spinlock.c linux-4.9.28/kernel/locking/spinlock.c +--- linux-4.9.28.orig/kernel/locking/spinlock.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/spinlock.c 2017-05-19 03:37:25.186176955 +0200 @@ -124,8 +124,11 @@ * __[spin|read|write]_lock_bh() */ @@ -15277,9 +16050,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/spinlock.c linux-4.9.22/kernel/lockin #ifdef CONFIG_DEBUG_LOCK_ALLOC void __lockfunc _raw_spin_lock_nested(raw_spinlock_t *lock, int subclass) -diff -Nur linux-4.9.22.orig/kernel/locking/spinlock_debug.c linux-4.9.22/kernel/locking/spinlock_debug.c ---- linux-4.9.22.orig/kernel/locking/spinlock_debug.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/locking/spinlock_debug.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/locking/spinlock_debug.c linux-4.9.28/kernel/locking/spinlock_debug.c +--- linux-4.9.28.orig/kernel/locking/spinlock_debug.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/locking/spinlock_debug.c 2017-05-19 03:37:25.190177110 +0200 @@ -31,6 +31,7 @@ EXPORT_SYMBOL(__raw_spin_lock_init); @@ -15310,9 +16083,9 @@ diff -Nur linux-4.9.22.orig/kernel/locking/spinlock_debug.c linux-4.9.22/kernel/ } + +#endif -diff -Nur linux-4.9.22.orig/kernel/module.c linux-4.9.22/kernel/module.c ---- linux-4.9.22.orig/kernel/module.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/module.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/module.c linux-4.9.28/kernel/module.c +--- linux-4.9.28.orig/kernel/module.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/module.c 2017-05-19 03:37:25.190177110 +0200 @@ -660,16 +660,7 @@ memcpy(per_cpu_ptr(mod->percpu, cpu), from, size); } @@ -15382,9 +16155,9 @@ diff -Nur linux-4.9.22.orig/kernel/module.c linux-4.9.22/kernel/module.c #endif /* CONFIG_SMP */ -diff -Nur linux-4.9.22.orig/kernel/panic.c linux-4.9.22/kernel/panic.c ---- linux-4.9.22.orig/kernel/panic.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/panic.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/panic.c linux-4.9.28/kernel/panic.c +--- linux-4.9.28.orig/kernel/panic.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/panic.c 2017-05-19 03:37:25.190177110 +0200 @@ -482,9 +482,11 @@ static int init_oops_id(void) @@ -15397,9 +16170,9 @@ diff -Nur linux-4.9.22.orig/kernel/panic.c linux-4.9.22/kernel/panic.c oops_id++; return 0; -diff -Nur linux-4.9.22.orig/kernel/power/hibernate.c linux-4.9.22/kernel/power/hibernate.c ---- linux-4.9.22.orig/kernel/power/hibernate.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/power/hibernate.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/power/hibernate.c linux-4.9.28/kernel/power/hibernate.c +--- linux-4.9.28.orig/kernel/power/hibernate.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/power/hibernate.c 2017-05-19 03:37:25.190177110 +0200 @@ -286,6 +286,8 @@ local_irq_disable(); @@ -15477,9 +16250,9 @@ diff -Nur linux-4.9.22.orig/kernel/power/hibernate.c linux-4.9.22/kernel/power/h return error; } -diff -Nur linux-4.9.22.orig/kernel/power/suspend.c linux-4.9.22/kernel/power/suspend.c ---- linux-4.9.22.orig/kernel/power/suspend.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/power/suspend.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/power/suspend.c linux-4.9.28/kernel/power/suspend.c +--- linux-4.9.28.orig/kernel/power/suspend.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/power/suspend.c 2017-05-19 03:37:25.190177110 +0200 @@ -369,6 +369,8 @@ arch_suspend_disable_irqs(); BUG_ON(!irqs_disabled()); @@ -15524,9 +16297,9 @@ diff -Nur linux-4.9.22.orig/kernel/power/suspend.c linux-4.9.22/kernel/power/sus return error; } EXPORT_SYMBOL(pm_suspend); -diff -Nur linux-4.9.22.orig/kernel/printk/printk.c linux-4.9.22/kernel/printk/printk.c ---- linux-4.9.22.orig/kernel/printk/printk.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/printk/printk.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/printk/printk.c linux-4.9.28/kernel/printk/printk.c +--- linux-4.9.28.orig/kernel/printk/printk.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/printk/printk.c 2017-05-19 03:37:25.190177110 +0200 @@ -351,6 +351,65 @@ */ DEFINE_RAW_SPINLOCK(logbuf_lock); @@ -15789,9 +16562,9 @@ diff -Nur linux-4.9.22.orig/kernel/printk/printk.c linux-4.9.22/kernel/printk/pr /* * console_unblank can no longer be called in interrupt context unless * oops_in_progress is set to 1.. -diff -Nur linux-4.9.22.orig/kernel/ptrace.c linux-4.9.22/kernel/ptrace.c ---- linux-4.9.22.orig/kernel/ptrace.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/ptrace.c 2017-04-18 17:19:16.690773540 +0200 +diff -Nur linux-4.9.28.orig/kernel/ptrace.c linux-4.9.28/kernel/ptrace.c +--- linux-4.9.28.orig/kernel/ptrace.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/ptrace.c 2017-05-19 03:37:25.190177110 +0200 @@ -166,7 +166,14 @@ spin_lock_irq(&task->sighand->siglock); @@ -15808,9 +16581,9 @@ diff -Nur linux-4.9.22.orig/kernel/ptrace.c linux-4.9.22/kernel/ptrace.c ret = true; } spin_unlock_irq(&task->sighand->siglock); -diff -Nur linux-4.9.22.orig/kernel/rcu/rcutorture.c linux-4.9.22/kernel/rcu/rcutorture.c ---- linux-4.9.22.orig/kernel/rcu/rcutorture.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/rcu/rcutorture.c 2017-04-18 17:19:16.694773696 +0200 +diff -Nur linux-4.9.28.orig/kernel/rcu/rcutorture.c linux-4.9.28/kernel/rcu/rcutorture.c +--- linux-4.9.28.orig/kernel/rcu/rcutorture.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/rcu/rcutorture.c 2017-05-19 03:37:25.190177110 +0200 @@ -404,6 +404,7 @@ .name = "rcu" }; @@ -15832,9 +16605,9 @@ diff -Nur linux-4.9.22.orig/kernel/rcu/rcutorture.c linux-4.9.22/kernel/rcu/rcut /* * Don't even think about trying any of these in real life!!! * The names includes "busted", and they really means it! -diff -Nur linux-4.9.22.orig/kernel/rcu/tree.c linux-4.9.22/kernel/rcu/tree.c ---- linux-4.9.22.orig/kernel/rcu/tree.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/rcu/tree.c 2017-04-18 17:19:16.694773696 +0200 +diff -Nur linux-4.9.28.orig/kernel/rcu/tree.c linux-4.9.28/kernel/rcu/tree.c +--- linux-4.9.28.orig/kernel/rcu/tree.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/rcu/tree.c 2017-05-19 03:37:25.190177110 +0200 @@ -55,6 +55,11 @@ #include <linux/random.h> #include <linux/trace_events.h> @@ -16135,9 +16908,9 @@ diff -Nur linux-4.9.22.orig/kernel/rcu/tree.c linux-4.9.22/kernel/rcu/tree.c /* * We don't need protection against CPU-hotplug here because -diff -Nur linux-4.9.22.orig/kernel/rcu/tree.h linux-4.9.22/kernel/rcu/tree.h ---- linux-4.9.22.orig/kernel/rcu/tree.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/rcu/tree.h 2017-04-18 17:19:16.694773696 +0200 +diff -Nur linux-4.9.28.orig/kernel/rcu/tree.h linux-4.9.28/kernel/rcu/tree.h +--- linux-4.9.28.orig/kernel/rcu/tree.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/rcu/tree.h 2017-05-19 03:37:25.190177110 +0200 @@ -588,18 +588,18 @@ */ extern struct rcu_state rcu_sched_state; @@ -16171,9 +16944,9 @@ diff -Nur linux-4.9.22.orig/kernel/rcu/tree.h linux-4.9.22/kernel/rcu/tree.h static int rcu_spawn_one_boost_kthread(struct rcu_state *rsp, struct rcu_node *rnp); #endif /* #ifdef CONFIG_RCU_BOOST */ -diff -Nur linux-4.9.22.orig/kernel/rcu/tree_plugin.h linux-4.9.22/kernel/rcu/tree_plugin.h ---- linux-4.9.22.orig/kernel/rcu/tree_plugin.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/rcu/tree_plugin.h 2017-04-18 17:19:16.694773696 +0200 +diff -Nur linux-4.9.28.orig/kernel/rcu/tree_plugin.h linux-4.9.28/kernel/rcu/tree_plugin.h +--- linux-4.9.28.orig/kernel/rcu/tree_plugin.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/rcu/tree_plugin.h 2017-05-19 03:37:25.190177110 +0200 @@ -24,25 +24,10 @@ * Paul E. McKenney <paulmck@linux.vnet.ibm.com> */ @@ -16444,9 +17217,9 @@ diff -Nur linux-4.9.22.orig/kernel/rcu/tree_plugin.h linux-4.9.22/kernel/rcu/tre /* * Prepare a CPU for idle from an RCU perspective. The first major task -diff -Nur linux-4.9.22.orig/kernel/rcu/update.c linux-4.9.22/kernel/rcu/update.c ---- linux-4.9.22.orig/kernel/rcu/update.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/rcu/update.c 2017-04-18 17:19:16.694773696 +0200 +diff -Nur linux-4.9.28.orig/kernel/rcu/update.c linux-4.9.28/kernel/rcu/update.c +--- linux-4.9.28.orig/kernel/rcu/update.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/rcu/update.c 2017-05-19 03:37:25.190177110 +0200 @@ -62,7 +62,7 @@ #ifndef CONFIG_TINY_RCU module_param(rcu_expedited, int, 0); @@ -16492,9 +17265,9 @@ diff -Nur linux-4.9.22.orig/kernel/rcu/update.c linux-4.9.22/kernel/rcu/update.c #endif /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */ -diff -Nur linux-4.9.22.orig/kernel/sched/completion.c linux-4.9.22/kernel/sched/completion.c ---- linux-4.9.22.orig/kernel/sched/completion.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/sched/completion.c 2017-04-18 17:19:16.694773696 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/completion.c linux-4.9.28/kernel/sched/completion.c +--- linux-4.9.28.orig/kernel/sched/completion.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/sched/completion.c 2017-05-19 03:37:25.194177264 +0200 @@ -30,10 +30,10 @@ { unsigned long flags; @@ -16585,9 +17358,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/completion.c linux-4.9.22/kernel/sched/ return true; } EXPORT_SYMBOL(completion_done); -diff -Nur linux-4.9.22.orig/kernel/sched/core.c linux-4.9.22/kernel/sched/core.c ---- linux-4.9.22.orig/kernel/sched/core.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/sched/core.c 2017-04-18 17:19:16.694773696 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/core.c linux-4.9.28/kernel/sched/core.c +--- linux-4.9.28.orig/kernel/sched/core.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/sched/core.c 2017-05-19 03:37:25.194177264 +0200 @@ -129,7 +129,11 @@ * Number of tasks to iterate in a single balance run. * Limited because this is done with IRQs disabled. @@ -17205,7 +17978,130 @@ diff -Nur linux-4.9.22.orig/kernel/sched/core.c linux-4.9.22/kernel/sched/core.c exception_exit(prev_ctx); preempt_latency_stop(1); -@@ -4939,6 +5172,7 @@ +@@ -3629,10 +3862,25 @@ + + #ifdef CONFIG_RT_MUTEXES + ++static inline int __rt_effective_prio(struct task_struct *pi_task, int prio) ++{ ++ if (pi_task) ++ prio = min(prio, pi_task->prio); ++ ++ return prio; ++} ++ ++static inline int rt_effective_prio(struct task_struct *p, int prio) ++{ ++ struct task_struct *pi_task = rt_mutex_get_top_task(p); ++ ++ return __rt_effective_prio(pi_task, prio); ++} ++ + /* + * rt_mutex_setprio - set the current priority of a task +- * @p: task +- * @prio: prio value (kernel-internal form) ++ * @p: task to boost ++ * @pi_task: donor task + * + * This function changes the 'effective' priority of a task. It does + * not touch ->normal_prio like __setscheduler(). +@@ -3640,16 +3888,40 @@ + * Used by the rt_mutex code to implement priority inheritance + * logic. Call site only calls if the priority of the task changed. + */ +-void rt_mutex_setprio(struct task_struct *p, int prio) ++void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task) + { +- int oldprio, queued, running, queue_flag = DEQUEUE_SAVE | DEQUEUE_MOVE; ++ int prio, oldprio, queued, running, queue_flag = DEQUEUE_SAVE | DEQUEUE_MOVE; + const struct sched_class *prev_class; + struct rq_flags rf; + struct rq *rq; + +- BUG_ON(prio > MAX_PRIO); ++ /* XXX used to be waiter->prio, not waiter->task->prio */ ++ prio = __rt_effective_prio(pi_task, p->normal_prio); ++ ++ /* ++ * If nothing changed; bail early. ++ */ ++ if (p->pi_top_task == pi_task && prio == p->prio && !dl_prio(prio)) ++ return; + + rq = __task_rq_lock(p, &rf); ++ /* ++ * Set under pi_lock && rq->lock, such that the value can be used under ++ * either lock. ++ * ++ * Note that there is loads of tricky to make this pointer cache work ++ * right. rt_mutex_slowunlock()+rt_mutex_postunlock() work together to ++ * ensure a task is de-boosted (pi_task is set to NULL) before the ++ * task is allowed to run again (and can exit). This ensures the pointer ++ * points to a blocked task -- which guaratees the task is present. ++ */ ++ p->pi_top_task = pi_task; ++ ++ /* ++ * For FIFO/RR we only need to set prio, if that matches we're done. ++ */ ++ if (prio == p->prio && !dl_prio(prio)) ++ goto out_unlock; + + /* + * Idle task boosting is a nono in general. There is one +@@ -3669,7 +3941,7 @@ + goto out_unlock; + } + +- trace_sched_pi_setprio(p, prio); ++ trace_sched_pi_setprio(p, pi_task); + oldprio = p->prio; + + if (oldprio == prio) +@@ -3693,7 +3965,6 @@ + * running task + */ + if (dl_prio(prio)) { +- struct task_struct *pi_task = rt_mutex_get_top_task(p); + if (!dl_prio(p->normal_prio) || + (pi_task && dl_entity_preempt(&pi_task->dl, &p->dl))) { + p->dl.dl_boosted = 1; +@@ -3730,6 +4001,11 @@ + balance_callback(rq); + preempt_enable(); + } ++#else ++static inline int rt_effective_prio(struct task_struct *p, int prio) ++{ ++ return prio; ++} + #endif + + void set_user_nice(struct task_struct *p, long nice) +@@ -3974,10 +4250,9 @@ + * Keep a potential priority boosting if called from + * sched_setscheduler(). + */ ++ p->prio = normal_prio(p); + if (keep_boost) +- p->prio = rt_mutex_get_effective_prio(p, normal_prio(p)); +- else +- p->prio = normal_prio(p); ++ p->prio = rt_effective_prio(p, p->prio); + + if (dl_prio(p->prio)) + p->sched_class = &dl_sched_class; +@@ -4264,7 +4539,7 @@ + * the runqueue. This will be done when the task deboost + * itself. + */ +- new_effective_prio = rt_mutex_get_effective_prio(p, newprio); ++ new_effective_prio = rt_effective_prio(p, newprio); + if (new_effective_prio == oldprio) + queue_flags &= ~DEQUEUE_MOVE; + } +@@ -4939,6 +5214,7 @@ } EXPORT_SYMBOL(__cond_resched_lock); @@ -17213,7 +18109,7 @@ diff -Nur linux-4.9.22.orig/kernel/sched/core.c linux-4.9.22/kernel/sched/core.c int __sched __cond_resched_softirq(void) { BUG_ON(!in_softirq()); -@@ -4952,6 +5186,7 @@ +@@ -4952,6 +5228,7 @@ return 0; } EXPORT_SYMBOL(__cond_resched_softirq); @@ -17221,7 +18117,7 @@ diff -Nur linux-4.9.22.orig/kernel/sched/core.c linux-4.9.22/kernel/sched/core.c /** * yield - yield the current processor to other threads. -@@ -5315,7 +5550,9 @@ +@@ -5315,7 +5592,9 @@ /* Set the preempt count _outside_ the spinlocks! */ init_idle_preempt_count(idle, cpu); @@ -17232,7 +18128,7 @@ diff -Nur linux-4.9.22.orig/kernel/sched/core.c linux-4.9.22/kernel/sched/core.c /* * The idle tasks have their own, simple scheduling class: */ -@@ -5458,6 +5695,8 @@ +@@ -5458,6 +5737,8 @@ #endif /* CONFIG_NUMA_BALANCING */ #ifdef CONFIG_HOTPLUG_CPU @@ -17241,7 +18137,7 @@ diff -Nur linux-4.9.22.orig/kernel/sched/core.c linux-4.9.22/kernel/sched/core.c /* * Ensures that the idle task is using init_mm right before its cpu goes * offline. -@@ -5472,7 +5711,12 @@ +@@ -5472,7 +5753,12 @@ switch_mm_irqs_off(mm, &init_mm, current); finish_arch_post_lock_switch(); } @@ -17255,7 +18151,7 @@ diff -Nur linux-4.9.22.orig/kernel/sched/core.c linux-4.9.22/kernel/sched/core.c } /* -@@ -7418,6 +7662,10 @@ +@@ -7418,6 +7704,10 @@ update_max_interval(); nohz_balance_exit_idle(cpu); hrtick_clear(rq); @@ -17266,7 +18162,7 @@ diff -Nur linux-4.9.22.orig/kernel/sched/core.c linux-4.9.22/kernel/sched/core.c return 0; } #endif -@@ -7698,7 +7946,7 @@ +@@ -7698,7 +7988,7 @@ #ifdef CONFIG_DEBUG_ATOMIC_SLEEP static inline int preempt_count_equals(int preempt_offset) { @@ -17275,9 +18171,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/core.c linux-4.9.22/kernel/sched/core.c return (nested == preempt_offset); } -diff -Nur linux-4.9.22.orig/kernel/sched/deadline.c linux-4.9.22/kernel/sched/deadline.c ---- linux-4.9.22.orig/kernel/sched/deadline.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/sched/deadline.c 2017-04-18 17:19:16.694773696 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/deadline.c linux-4.9.28/kernel/sched/deadline.c +--- linux-4.9.28.orig/kernel/sched/deadline.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/sched/deadline.c 2017-05-19 03:37:25.194177264 +0200 @@ -687,6 +687,7 @@ hrtimer_init(timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); @@ -17286,9 +18182,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/deadline.c linux-4.9.22/kernel/sched/de } static -diff -Nur linux-4.9.22.orig/kernel/sched/debug.c linux-4.9.22/kernel/sched/debug.c ---- linux-4.9.22.orig/kernel/sched/debug.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/sched/debug.c 2017-04-18 17:19:16.694773696 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/debug.c linux-4.9.28/kernel/sched/debug.c +--- linux-4.9.28.orig/kernel/sched/debug.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/sched/debug.c 2017-05-19 03:37:25.194177264 +0200 @@ -558,6 +558,9 @@ P(rt_throttled); PN(rt_time); @@ -17310,9 +18206,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/debug.c linux-4.9.22/kernel/sched/debug #undef PN_SCHEDSTAT #undef PN #undef __PN -diff -Nur linux-4.9.22.orig/kernel/sched/fair.c linux-4.9.22/kernel/sched/fair.c ---- linux-4.9.22.orig/kernel/sched/fair.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/sched/fair.c 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/fair.c linux-4.9.28/kernel/sched/fair.c +--- linux-4.9.28.orig/kernel/sched/fair.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/sched/fair.c 2017-05-19 03:37:25.194177264 +0200 @@ -3518,7 +3518,7 @@ ideal_runtime = sched_slice(cfs_rq, curr); delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime; @@ -17385,9 +18281,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/fair.c linux-4.9.22/kernel/sched/fair.c } else check_preempt_curr(rq, p, 0); } -diff -Nur linux-4.9.22.orig/kernel/sched/features.h linux-4.9.22/kernel/sched/features.h ---- linux-4.9.22.orig/kernel/sched/features.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/sched/features.h 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/features.h linux-4.9.28/kernel/sched/features.h +--- linux-4.9.28.orig/kernel/sched/features.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/sched/features.h 2017-05-19 03:37:25.194177264 +0200 @@ -45,11 +45,19 @@ */ SCHED_FEAT(NONTASK_CAPACITY, true) @@ -17408,9 +18304,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/features.h linux-4.9.22/kernel/sched/fe #ifdef HAVE_RT_PUSH_IPI /* -diff -Nur linux-4.9.22.orig/kernel/sched/Makefile linux-4.9.22/kernel/sched/Makefile ---- linux-4.9.22.orig/kernel/sched/Makefile 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/sched/Makefile 2017-04-18 17:19:16.694773696 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/Makefile linux-4.9.28/kernel/sched/Makefile +--- linux-4.9.28.orig/kernel/sched/Makefile 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/sched/Makefile 2017-05-19 03:37:25.194177264 +0200 @@ -17,7 +17,7 @@ obj-y += core.o loadavg.o clock.o cputime.o @@ -17420,9 +18316,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/Makefile linux-4.9.22/kernel/sched/Make obj-$(CONFIG_SMP) += cpupri.o cpudeadline.o obj-$(CONFIG_SCHED_AUTOGROUP) += auto_group.o obj-$(CONFIG_SCHEDSTATS) += stats.o -diff -Nur linux-4.9.22.orig/kernel/sched/rt.c linux-4.9.22/kernel/sched/rt.c ---- linux-4.9.22.orig/kernel/sched/rt.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/sched/rt.c 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/rt.c linux-4.9.28/kernel/sched/rt.c +--- linux-4.9.28.orig/kernel/sched/rt.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/sched/rt.c 2017-05-19 03:37:25.194177264 +0200 @@ -47,6 +47,7 @@ hrtimer_init(&rt_b->rt_period_timer, @@ -17439,9 +18335,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/rt.c linux-4.9.22/kernel/sched/rt.c #endif #endif /* CONFIG_SMP */ /* We start is dequeued state, because no RT tasks are queued */ -diff -Nur linux-4.9.22.orig/kernel/sched/sched.h linux-4.9.22/kernel/sched/sched.h ---- linux-4.9.22.orig/kernel/sched/sched.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/sched/sched.h 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/sched.h linux-4.9.28/kernel/sched/sched.h +--- linux-4.9.28.orig/kernel/sched/sched.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/sched/sched.h 2017-05-19 03:37:25.194177264 +0200 @@ -1163,6 +1163,7 @@ #define WF_SYNC 0x01 /* waker goes to sleep after wakeup */ #define WF_FORK 0x02 /* child wakeup after fork */ @@ -17466,9 +18362,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/sched.h linux-4.9.22/kernel/sched/sched extern struct rt_bandwidth def_rt_bandwidth; extern void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime); -diff -Nur linux-4.9.22.orig/kernel/sched/swait.c linux-4.9.22/kernel/sched/swait.c ---- linux-4.9.22.orig/kernel/sched/swait.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/sched/swait.c 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/swait.c linux-4.9.28/kernel/sched/swait.c +--- linux-4.9.28.orig/kernel/sched/swait.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/sched/swait.c 2017-05-19 03:37:25.198177419 +0200 @@ -1,5 +1,6 @@ #include <linux/sched.h> #include <linux/swait.h> @@ -17510,9 +18406,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/swait.c linux-4.9.22/kernel/sched/swait raw_spin_lock_irq(&q->lock); list_splice_init(&q->task_list, &tmp); while (!list_empty(&tmp)) { -diff -Nur linux-4.9.22.orig/kernel/sched/swork.c linux-4.9.22/kernel/sched/swork.c ---- linux-4.9.22.orig/kernel/sched/swork.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/kernel/sched/swork.c 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/sched/swork.c linux-4.9.28/kernel/sched/swork.c +--- linux-4.9.28.orig/kernel/sched/swork.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/kernel/sched/swork.c 2017-05-19 03:37:25.198177419 +0200 @@ -0,0 +1,173 @@ +/* + * Copyright (C) 2014 BMW Car IT GmbH, Daniel Wagner daniel.wagner@bmw-carit.de @@ -17687,9 +18583,9 @@ diff -Nur linux-4.9.22.orig/kernel/sched/swork.c linux-4.9.22/kernel/sched/swork + mutex_unlock(&worker_mutex); +} +EXPORT_SYMBOL_GPL(swork_put); -diff -Nur linux-4.9.22.orig/kernel/signal.c linux-4.9.22/kernel/signal.c ---- linux-4.9.22.orig/kernel/signal.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/signal.c 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/signal.c linux-4.9.28/kernel/signal.c +--- linux-4.9.28.orig/kernel/signal.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/signal.c 2017-05-19 03:37:25.198177419 +0200 @@ -14,6 +14,7 @@ #include <linux/export.h> #include <linux/init.h> @@ -17919,9 +18815,9 @@ diff -Nur linux-4.9.22.orig/kernel/signal.c linux-4.9.22/kernel/signal.c freezable_schedule(); } else { /* -diff -Nur linux-4.9.22.orig/kernel/softirq.c linux-4.9.22/kernel/softirq.c ---- linux-4.9.22.orig/kernel/softirq.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/softirq.c 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/softirq.c linux-4.9.28/kernel/softirq.c +--- linux-4.9.28.orig/kernel/softirq.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/softirq.c 2017-05-19 03:37:25.198177419 +0200 @@ -21,10 +21,12 @@ #include <linux/freezer.h> #include <linux/kthread.h> @@ -18887,9 +19783,9 @@ diff -Nur linux-4.9.22.orig/kernel/softirq.c linux-4.9.22/kernel/softirq.c return 0; } early_initcall(spawn_ksoftirqd); -diff -Nur linux-4.9.22.orig/kernel/stop_machine.c linux-4.9.22/kernel/stop_machine.c ---- linux-4.9.22.orig/kernel/stop_machine.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/stop_machine.c 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/stop_machine.c linux-4.9.28/kernel/stop_machine.c +--- linux-4.9.28.orig/kernel/stop_machine.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/stop_machine.c 2017-05-19 03:37:25.198177419 +0200 @@ -36,7 +36,7 @@ struct cpu_stopper { struct task_struct *thread; @@ -18984,9 +19880,9 @@ diff -Nur linux-4.9.22.orig/kernel/stop_machine.c linux-4.9.22/kernel/stop_machi INIT_LIST_HEAD(&stopper->works); } -diff -Nur linux-4.9.22.orig/kernel/time/hrtimer.c linux-4.9.22/kernel/time/hrtimer.c ---- linux-4.9.22.orig/kernel/time/hrtimer.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/hrtimer.c 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/hrtimer.c linux-4.9.28/kernel/time/hrtimer.c +--- linux-4.9.28.orig/kernel/time/hrtimer.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/hrtimer.c 2017-05-19 03:37:25.198177419 +0200 @@ -53,6 +53,7 @@ #include <asm/uaccess.h> @@ -19414,9 +20310,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/hrtimer.c linux-4.9.22/kernel/time/hrtim } /** -diff -Nur linux-4.9.22.orig/kernel/time/itimer.c linux-4.9.22/kernel/time/itimer.c ---- linux-4.9.22.orig/kernel/time/itimer.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/itimer.c 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/itimer.c linux-4.9.28/kernel/time/itimer.c +--- linux-4.9.28.orig/kernel/time/itimer.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/itimer.c 2017-05-19 03:37:25.198177419 +0200 @@ -213,6 +213,7 @@ /* We are sharing ->siglock with it_real_fn() */ if (hrtimer_try_to_cancel(timer) < 0) { @@ -19425,9 +20321,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/itimer.c linux-4.9.22/kernel/time/itimer goto again; } expires = timeval_to_ktime(value->it_value); -diff -Nur linux-4.9.22.orig/kernel/time/jiffies.c linux-4.9.22/kernel/time/jiffies.c ---- linux-4.9.22.orig/kernel/time/jiffies.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/jiffies.c 2017-04-18 17:19:16.698773851 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/jiffies.c linux-4.9.28/kernel/time/jiffies.c +--- linux-4.9.28.orig/kernel/time/jiffies.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/jiffies.c 2017-05-19 03:37:25.198177419 +0200 @@ -74,7 +74,8 @@ .max_cycles = 10, }; @@ -19450,9 +20346,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/jiffies.c linux-4.9.22/kernel/time/jiffi return ret; } EXPORT_SYMBOL(get_jiffies_64); -diff -Nur linux-4.9.22.orig/kernel/time/ntp.c linux-4.9.22/kernel/time/ntp.c ---- linux-4.9.22.orig/kernel/time/ntp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/ntp.c 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/ntp.c linux-4.9.28/kernel/time/ntp.c +--- linux-4.9.28.orig/kernel/time/ntp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/ntp.c 2017-05-19 03:37:25.198177419 +0200 @@ -17,6 +17,7 @@ #include <linux/module.h> #include <linux/rtc.h> @@ -19497,9 +20393,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/ntp.c linux-4.9.22/kernel/time/ntp.c #else void ntp_notify_cmos_timer(void) { } -diff -Nur linux-4.9.22.orig/kernel/time/posix-cpu-timers.c linux-4.9.22/kernel/time/posix-cpu-timers.c ---- linux-4.9.22.orig/kernel/time/posix-cpu-timers.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/posix-cpu-timers.c 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/posix-cpu-timers.c linux-4.9.28/kernel/time/posix-cpu-timers.c +--- linux-4.9.28.orig/kernel/time/posix-cpu-timers.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/posix-cpu-timers.c 2017-05-19 03:37:25.198177419 +0200 @@ -3,6 +3,7 @@ */ @@ -19733,9 +20629,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/posix-cpu-timers.c linux-4.9.22/kernel/t /* * Set one of the process-wide special case CPU timers or RLIMIT_CPU. * The tsk->sighand->siglock must be held by the caller. -diff -Nur linux-4.9.22.orig/kernel/time/posix-timers.c linux-4.9.22/kernel/time/posix-timers.c ---- linux-4.9.22.orig/kernel/time/posix-timers.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/posix-timers.c 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/posix-timers.c linux-4.9.28/kernel/time/posix-timers.c +--- linux-4.9.28.orig/kernel/time/posix-timers.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/posix-timers.c 2017-05-19 03:37:25.198177419 +0200 @@ -506,6 +506,7 @@ static struct pid *good_sigevent(sigevent_t * event) { @@ -19831,9 +20727,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/posix-timers.c linux-4.9.22/kernel/time/ goto retry_delete; } list_del(&timer->list); -diff -Nur linux-4.9.22.orig/kernel/time/tick-broadcast-hrtimer.c linux-4.9.22/kernel/time/tick-broadcast-hrtimer.c ---- linux-4.9.22.orig/kernel/time/tick-broadcast-hrtimer.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/tick-broadcast-hrtimer.c 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/tick-broadcast-hrtimer.c linux-4.9.28/kernel/time/tick-broadcast-hrtimer.c +--- linux-4.9.28.orig/kernel/time/tick-broadcast-hrtimer.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/tick-broadcast-hrtimer.c 2017-05-19 03:37:25.198177419 +0200 @@ -107,5 +107,6 @@ { hrtimer_init(&bctimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); @@ -19841,9 +20737,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/tick-broadcast-hrtimer.c linux-4.9.22/ke + bctimer.irqsafe = true; clockevents_register_device(&ce_broadcast_hrtimer); } -diff -Nur linux-4.9.22.orig/kernel/time/tick-common.c linux-4.9.22/kernel/time/tick-common.c ---- linux-4.9.22.orig/kernel/time/tick-common.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/tick-common.c 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/tick-common.c linux-4.9.28/kernel/time/tick-common.c +--- linux-4.9.28.orig/kernel/time/tick-common.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/tick-common.c 2017-05-19 03:37:25.198177419 +0200 @@ -79,13 +79,15 @@ static void tick_periodic(int cpu) { @@ -19874,9 +20770,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/tick-common.c linux-4.9.22/kernel/time/t clockevents_switch_state(dev, CLOCK_EVT_STATE_ONESHOT); -diff -Nur linux-4.9.22.orig/kernel/time/tick-sched.c linux-4.9.22/kernel/time/tick-sched.c ---- linux-4.9.22.orig/kernel/time/tick-sched.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/tick-sched.c 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/tick-sched.c linux-4.9.28/kernel/time/tick-sched.c +--- linux-4.9.28.orig/kernel/time/tick-sched.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/tick-sched.c 2017-05-19 03:37:25.198177419 +0200 @@ -62,7 +62,8 @@ return; @@ -19964,9 +20860,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/tick-sched.c linux-4.9.22/kernel/time/ti ts->sched_timer.function = tick_sched_timer; /* Get the next period (per-CPU) */ -diff -Nur linux-4.9.22.orig/kernel/time/timekeeping.c linux-4.9.22/kernel/time/timekeeping.c ---- linux-4.9.22.orig/kernel/time/timekeeping.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/timekeeping.c 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/timekeeping.c linux-4.9.28/kernel/time/timekeeping.c +--- linux-4.9.28.orig/kernel/time/timekeeping.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/timekeeping.c 2017-05-19 03:37:25.198177419 +0200 @@ -2328,8 +2328,10 @@ */ void xtime_update(unsigned long ticks) @@ -19980,9 +20876,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/timekeeping.c linux-4.9.22/kernel/time/t + raw_spin_unlock(&jiffies_lock); update_wall_time(); } -diff -Nur linux-4.9.22.orig/kernel/time/timekeeping.h linux-4.9.22/kernel/time/timekeeping.h ---- linux-4.9.22.orig/kernel/time/timekeeping.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/timekeeping.h 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/timekeeping.h linux-4.9.28/kernel/time/timekeeping.h +--- linux-4.9.28.orig/kernel/time/timekeeping.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/timekeeping.h 2017-05-19 03:37:25.202177573 +0200 @@ -19,7 +19,8 @@ extern void do_timer(unsigned long ticks); extern void update_wall_time(void); @@ -19993,9 +20889,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/timekeeping.h linux-4.9.22/kernel/time/t #define CS_NAME_LEN 32 -diff -Nur linux-4.9.22.orig/kernel/time/timer.c linux-4.9.22/kernel/time/timer.c ---- linux-4.9.22.orig/kernel/time/timer.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/time/timer.c 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/time/timer.c linux-4.9.28/kernel/time/timer.c +--- linux-4.9.28.orig/kernel/time/timer.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/time/timer.c 2017-05-19 03:37:25.202177573 +0200 @@ -193,8 +193,11 @@ #endif @@ -20407,9 +21303,9 @@ diff -Nur linux-4.9.22.orig/kernel/time/timer.c linux-4.9.22/kernel/time/timer.c } } -diff -Nur linux-4.9.22.orig/kernel/trace/Kconfig linux-4.9.22/kernel/trace/Kconfig ---- linux-4.9.22.orig/kernel/trace/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/trace/Kconfig 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/trace/Kconfig linux-4.9.28/kernel/trace/Kconfig +--- linux-4.9.28.orig/kernel/trace/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/trace/Kconfig 2017-05-19 03:37:25.202177573 +0200 @@ -182,6 +182,24 @@ enabled. This option and the preempt-off timing option can be used together or separately.) @@ -20535,9 +21431,9 @@ diff -Nur linux-4.9.22.orig/kernel/trace/Kconfig linux-4.9.22/kernel/trace/Kconf config ENABLE_DEFAULT_TRACERS bool "Trace process context switches and events" depends on !GENERIC_TRACER -diff -Nur linux-4.9.22.orig/kernel/trace/latency_hist.c linux-4.9.22/kernel/trace/latency_hist.c ---- linux-4.9.22.orig/kernel/trace/latency_hist.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.9.22/kernel/trace/latency_hist.c 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/trace/latency_hist.c linux-4.9.28/kernel/trace/latency_hist.c +--- linux-4.9.28.orig/kernel/trace/latency_hist.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-4.9.28/kernel/trace/latency_hist.c 2017-05-19 03:37:25.202177573 +0200 @@ -0,0 +1,1178 @@ +/* + * kernel/trace/latency_hist.c @@ -21717,9 +22613,9 @@ diff -Nur linux-4.9.22.orig/kernel/trace/latency_hist.c linux-4.9.22/kernel/trac +} + +device_initcall(latency_hist_init); -diff -Nur linux-4.9.22.orig/kernel/trace/Makefile linux-4.9.22/kernel/trace/Makefile ---- linux-4.9.22.orig/kernel/trace/Makefile 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/trace/Makefile 2017-04-18 17:19:16.702774006 +0200 +diff -Nur linux-4.9.28.orig/kernel/trace/Makefile linux-4.9.28/kernel/trace/Makefile +--- linux-4.9.28.orig/kernel/trace/Makefile 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/trace/Makefile 2017-05-19 03:37:25.202177573 +0200 @@ -38,6 +38,10 @@ obj-$(CONFIG_PREEMPT_TRACER) += trace_irqsoff.o obj-$(CONFIG_SCHED_TRACER) += trace_sched_wakeup.o @@ -21731,9 +22627,9 @@ diff -Nur linux-4.9.22.orig/kernel/trace/Makefile linux-4.9.22/kernel/trace/Make obj-$(CONFIG_NOP_TRACER) += trace_nop.o obj-$(CONFIG_STACK_TRACER) += trace_stack.o obj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o -diff -Nur linux-4.9.22.orig/kernel/trace/trace.c linux-4.9.22/kernel/trace/trace.c ---- linux-4.9.22.orig/kernel/trace/trace.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/trace/trace.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/kernel/trace/trace.c linux-4.9.28/kernel/trace/trace.c +--- linux-4.9.28.orig/kernel/trace/trace.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/trace/trace.c 2017-05-19 03:37:25.202177573 +0200 @@ -1897,6 +1897,7 @@ struct task_struct *tsk = current; @@ -21801,9 +22697,9 @@ diff -Nur linux-4.9.22.orig/kernel/trace/trace.c linux-4.9.22/kernel/trace/trace } void -diff -Nur linux-4.9.22.orig/kernel/trace/trace_events.c linux-4.9.22/kernel/trace/trace_events.c ---- linux-4.9.22.orig/kernel/trace/trace_events.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/trace/trace_events.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/kernel/trace/trace_events.c linux-4.9.28/kernel/trace/trace_events.c +--- linux-4.9.28.orig/kernel/trace/trace_events.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/trace/trace_events.c 2017-05-19 03:37:25.202177573 +0200 @@ -187,6 +187,8 @@ __common_field(unsigned char, flags); __common_field(unsigned char, preempt_count); @@ -21813,9 +22709,9 @@ diff -Nur linux-4.9.22.orig/kernel/trace/trace_events.c linux-4.9.22/kernel/trac return ret; } -diff -Nur linux-4.9.22.orig/kernel/trace/trace.h linux-4.9.22/kernel/trace/trace.h ---- linux-4.9.22.orig/kernel/trace/trace.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/trace/trace.h 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/kernel/trace/trace.h linux-4.9.28/kernel/trace/trace.h +--- linux-4.9.28.orig/kernel/trace/trace.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/trace/trace.h 2017-05-19 03:37:25.202177573 +0200 @@ -124,6 +124,7 @@ * NEED_RESCHED - reschedule is requested * HARDIRQ - inside an interrupt handler @@ -21832,9 +22728,9 @@ diff -Nur linux-4.9.22.orig/kernel/trace/trace.h linux-4.9.22/kernel/trace/trace }; #define TRACE_BUF_SIZE 1024 -diff -Nur linux-4.9.22.orig/kernel/trace/trace_irqsoff.c linux-4.9.22/kernel/trace/trace_irqsoff.c ---- linux-4.9.22.orig/kernel/trace/trace_irqsoff.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/trace/trace_irqsoff.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/kernel/trace/trace_irqsoff.c linux-4.9.28/kernel/trace/trace_irqsoff.c +--- linux-4.9.28.orig/kernel/trace/trace_irqsoff.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/trace/trace_irqsoff.c 2017-05-19 03:37:25.202177573 +0200 @@ -13,6 +13,7 @@ #include <linux/uaccess.h> #include <linux/module.h> @@ -21918,9 +22814,9 @@ diff -Nur linux-4.9.22.orig/kernel/trace/trace_irqsoff.c linux-4.9.22/kernel/tra if (preempt_trace() && !irq_trace()) start_critical_timing(a0, a1); } -diff -Nur linux-4.9.22.orig/kernel/trace/trace_output.c linux-4.9.22/kernel/trace/trace_output.c ---- linux-4.9.22.orig/kernel/trace/trace_output.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/trace/trace_output.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/kernel/trace/trace_output.c linux-4.9.28/kernel/trace/trace_output.c +--- linux-4.9.28.orig/kernel/trace/trace_output.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/trace/trace_output.c 2017-05-19 03:37:25.202177573 +0200 @@ -386,6 +386,7 @@ { char hardsoft_irq; @@ -21967,9 +22863,9 @@ diff -Nur linux-4.9.22.orig/kernel/trace/trace_output.c linux-4.9.22/kernel/trac return !trace_seq_has_overflowed(s); } -diff -Nur linux-4.9.22.orig/kernel/user.c linux-4.9.22/kernel/user.c ---- linux-4.9.22.orig/kernel/user.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/user.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/kernel/user.c linux-4.9.28/kernel/user.c +--- linux-4.9.28.orig/kernel/user.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/user.c 2017-05-19 03:37:25.202177573 +0200 @@ -161,11 +161,11 @@ if (!up) return; @@ -21984,9 +22880,9 @@ diff -Nur linux-4.9.22.orig/kernel/user.c linux-4.9.22/kernel/user.c } struct user_struct *alloc_uid(kuid_t uid) -diff -Nur linux-4.9.22.orig/kernel/watchdog.c linux-4.9.22/kernel/watchdog.c ---- linux-4.9.22.orig/kernel/watchdog.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/watchdog.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/kernel/watchdog.c linux-4.9.28/kernel/watchdog.c +--- linux-4.9.28.orig/kernel/watchdog.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/watchdog.c 2017-05-19 03:37:25.202177573 +0200 @@ -315,6 +315,8 @@ #ifdef CONFIG_HARDLOCKUP_DETECTOR @@ -22026,9 +22922,9 @@ diff -Nur linux-4.9.22.orig/kernel/watchdog.c linux-4.9.22/kernel/watchdog.c /* Enable the perf event */ watchdog_nmi_enable(cpu); -diff -Nur linux-4.9.22.orig/kernel/workqueue.c linux-4.9.22/kernel/workqueue.c ---- linux-4.9.22.orig/kernel/workqueue.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/workqueue.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/kernel/workqueue.c linux-4.9.28/kernel/workqueue.c +--- linux-4.9.28.orig/kernel/workqueue.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/workqueue.c 2017-05-19 03:37:25.206177727 +0200 @@ -48,6 +48,8 @@ #include <linux/nodemask.h> #include <linux/moduleparam.h> @@ -22671,9 +23567,9 @@ diff -Nur linux-4.9.22.orig/kernel/workqueue.c linux-4.9.22/kernel/workqueue.c return written; } -diff -Nur linux-4.9.22.orig/kernel/workqueue_internal.h linux-4.9.22/kernel/workqueue_internal.h ---- linux-4.9.22.orig/kernel/workqueue_internal.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/kernel/workqueue_internal.h 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/kernel/workqueue_internal.h linux-4.9.28/kernel/workqueue_internal.h +--- linux-4.9.28.orig/kernel/workqueue_internal.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/kernel/workqueue_internal.h 2017-05-19 03:37:25.206177727 +0200 @@ -43,6 +43,7 @@ unsigned long last_active; /* L: last active timestamp */ unsigned int flags; /* X: flags */ @@ -22692,9 +23588,9 @@ diff -Nur linux-4.9.22.orig/kernel/workqueue_internal.h linux-4.9.22/kernel/work +void wq_worker_sleeping(struct task_struct *task); #endif /* _KERNEL_WORKQUEUE_INTERNAL_H */ -diff -Nur linux-4.9.22.orig/lib/debugobjects.c linux-4.9.22/lib/debugobjects.c ---- linux-4.9.22.orig/lib/debugobjects.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/lib/debugobjects.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/lib/debugobjects.c linux-4.9.28/lib/debugobjects.c +--- linux-4.9.28.orig/lib/debugobjects.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/lib/debugobjects.c 2017-05-19 03:37:25.206177727 +0200 @@ -308,7 +308,10 @@ struct debug_obj *obj; unsigned long flags; @@ -22707,9 +23603,9 @@ diff -Nur linux-4.9.22.orig/lib/debugobjects.c linux-4.9.22/lib/debugobjects.c db = get_bucket((unsigned long) addr); -diff -Nur linux-4.9.22.orig/lib/idr.c linux-4.9.22/lib/idr.c ---- linux-4.9.22.orig/lib/idr.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/lib/idr.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/lib/idr.c linux-4.9.28/lib/idr.c +--- linux-4.9.28.orig/lib/idr.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/lib/idr.c 2017-05-19 03:37:25.206177727 +0200 @@ -30,6 +30,7 @@ #include <linux/idr.h> #include <linux/spinlock.h> @@ -22802,9 +23698,9 @@ diff -Nur linux-4.9.22.orig/lib/idr.c linux-4.9.22/lib/idr.c if (!new) break; -diff -Nur linux-4.9.22.orig/lib/irq_poll.c linux-4.9.22/lib/irq_poll.c ---- linux-4.9.22.orig/lib/irq_poll.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/lib/irq_poll.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/lib/irq_poll.c linux-4.9.28/lib/irq_poll.c +--- linux-4.9.28.orig/lib/irq_poll.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/lib/irq_poll.c 2017-05-19 03:37:25.206177727 +0200 @@ -36,6 +36,7 @@ list_add_tail(&iop->list, this_cpu_ptr(&blk_cpu_iopoll)); __raise_softirq_irqoff(IRQ_POLL_SOFTIRQ); @@ -22845,9 +23741,9 @@ diff -Nur linux-4.9.22.orig/lib/irq_poll.c linux-4.9.22/lib/irq_poll.c return 0; } -diff -Nur linux-4.9.22.orig/lib/Kconfig linux-4.9.22/lib/Kconfig ---- linux-4.9.22.orig/lib/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/lib/Kconfig 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/lib/Kconfig linux-4.9.28/lib/Kconfig +--- linux-4.9.28.orig/lib/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/lib/Kconfig 2017-05-19 03:37:25.206177727 +0200 @@ -400,6 +400,7 @@ config CPUMASK_OFFSTACK @@ -22856,9 +23752,9 @@ diff -Nur linux-4.9.22.orig/lib/Kconfig linux-4.9.22/lib/Kconfig help Use dynamic allocation for cpumask_var_t, instead of putting them on the stack. This is a bit more expensive, but avoids -diff -Nur linux-4.9.22.orig/lib/locking-selftest.c linux-4.9.22/lib/locking-selftest.c ---- linux-4.9.22.orig/lib/locking-selftest.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/lib/locking-selftest.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/lib/locking-selftest.c linux-4.9.28/lib/locking-selftest.c +--- linux-4.9.28.orig/lib/locking-selftest.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/lib/locking-selftest.c 2017-05-19 03:37:25.206177727 +0200 @@ -590,6 +590,8 @@ #include "locking-selftest-spin-hardirq.h" GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_hard_spin) @@ -23007,9 +23903,9 @@ diff -Nur linux-4.9.22.orig/lib/locking-selftest.c linux-4.9.22/lib/locking-self ww_tests(); -diff -Nur linux-4.9.22.orig/lib/percpu_ida.c linux-4.9.22/lib/percpu_ida.c ---- linux-4.9.22.orig/lib/percpu_ida.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/lib/percpu_ida.c 2017-04-18 17:19:16.706774161 +0200 +diff -Nur linux-4.9.28.orig/lib/percpu_ida.c linux-4.9.28/lib/percpu_ida.c +--- linux-4.9.28.orig/lib/percpu_ida.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/lib/percpu_ida.c 2017-05-19 03:37:25.206177727 +0200 @@ -26,6 +26,9 @@ #include <linux/string.h> #include <linux/spinlock.h> @@ -23098,9 +23994,9 @@ diff -Nur linux-4.9.22.orig/lib/percpu_ida.c linux-4.9.22/lib/percpu_ida.c return err; } EXPORT_SYMBOL_GPL(percpu_ida_for_each_free); -diff -Nur linux-4.9.22.orig/lib/radix-tree.c linux-4.9.22/lib/radix-tree.c ---- linux-4.9.22.orig/lib/radix-tree.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/lib/radix-tree.c 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/lib/radix-tree.c linux-4.9.28/lib/radix-tree.c +--- linux-4.9.28.orig/lib/radix-tree.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/lib/radix-tree.c 2017-05-19 03:37:25.206177727 +0200 @@ -36,7 +36,7 @@ #include <linux/bitops.h> #include <linux/rcupdate.h> @@ -23183,9 +24079,9 @@ diff -Nur linux-4.9.22.orig/lib/radix-tree.c linux-4.9.22/lib/radix-tree.c /* * The maximum index which can be stored in a radix tree */ -diff -Nur linux-4.9.22.orig/lib/scatterlist.c linux-4.9.22/lib/scatterlist.c ---- linux-4.9.22.orig/lib/scatterlist.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/lib/scatterlist.c 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/lib/scatterlist.c linux-4.9.28/lib/scatterlist.c +--- linux-4.9.28.orig/lib/scatterlist.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/lib/scatterlist.c 2017-05-19 03:37:25.206177727 +0200 @@ -620,7 +620,7 @@ flush_kernel_dcache_page(miter->page); @@ -23213,9 +24109,9 @@ diff -Nur linux-4.9.22.orig/lib/scatterlist.c linux-4.9.22/lib/scatterlist.c return offset; } EXPORT_SYMBOL(sg_copy_buffer); -diff -Nur linux-4.9.22.orig/lib/smp_processor_id.c linux-4.9.22/lib/smp_processor_id.c ---- linux-4.9.22.orig/lib/smp_processor_id.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/lib/smp_processor_id.c 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/lib/smp_processor_id.c linux-4.9.28/lib/smp_processor_id.c +--- linux-4.9.28.orig/lib/smp_processor_id.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/lib/smp_processor_id.c 2017-05-19 03:37:25.206177727 +0200 @@ -39,8 +39,9 @@ if (!printk_ratelimit()) goto out_enable; @@ -23228,9 +24124,36 @@ diff -Nur linux-4.9.22.orig/lib/smp_processor_id.c linux-4.9.22/lib/smp_processo print_symbol("caller is %s\n", (long)__builtin_return_address(0)); dump_stack(); -diff -Nur linux-4.9.22.orig/mm/backing-dev.c linux-4.9.22/mm/backing-dev.c ---- linux-4.9.22.orig/mm/backing-dev.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/backing-dev.c 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/MAINTAINERS linux-4.9.28/MAINTAINERS +--- linux-4.9.28.orig/MAINTAINERS 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/MAINTAINERS 2017-05-19 03:37:25.122174217 +0200 +@@ -5196,6 +5196,23 @@ + F: include/uapi/linux/fuse.h + F: Documentation/filesystems/fuse.txt + ++FUTEX SUBSYSTEM ++M: Thomas Gleixner <tglx@linutronix.de> ++M: Ingo Molnar <mingo@redhat.com> ++R: Peter Zijlstra <peterz@infradead.org> ++R: Darren Hart <dvhart@infradead.org> ++L: linux-kernel@vger.kernel.org ++T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core ++S: Maintained ++F: kernel/futex.c ++F: kernel/futex_compat.c ++F: include/asm-generic/futex.h ++F: include/linux/futex.h ++F: include/uapi/linux/futex.h ++F: tools/testing/selftests/futex/ ++F: tools/perf/bench/futex* ++F: Documentation/*futex* ++ + FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit) + M: Rik Faith <faith@cs.unc.edu> + L: linux-scsi@vger.kernel.org +diff -Nur linux-4.9.28.orig/mm/backing-dev.c linux-4.9.28/mm/backing-dev.c +--- linux-4.9.28.orig/mm/backing-dev.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/backing-dev.c 2017-05-19 03:37:25.206177727 +0200 @@ -457,9 +457,9 @@ { unsigned long flags; @@ -23243,9 +24166,9 @@ diff -Nur linux-4.9.22.orig/mm/backing-dev.c linux-4.9.22/mm/backing-dev.c return; } -diff -Nur linux-4.9.22.orig/mm/compaction.c linux-4.9.22/mm/compaction.c ---- linux-4.9.22.orig/mm/compaction.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/compaction.c 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/mm/compaction.c linux-4.9.28/mm/compaction.c +--- linux-4.9.28.orig/mm/compaction.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/compaction.c 2017-05-19 03:37:25.206177727 +0200 @@ -1593,10 +1593,12 @@ block_start_pfn(cc->migrate_pfn, cc->order); @@ -23261,9 +24184,9 @@ diff -Nur linux-4.9.22.orig/mm/compaction.c linux-4.9.22/mm/compaction.c /* No more flushing until we migrate again */ cc->last_migrated_pfn = 0; } -diff -Nur linux-4.9.22.orig/mm/filemap.c linux-4.9.22/mm/filemap.c ---- linux-4.9.22.orig/mm/filemap.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/filemap.c 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/mm/filemap.c linux-4.9.28/mm/filemap.c +--- linux-4.9.28.orig/mm/filemap.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/filemap.c 2017-05-19 03:37:25.210177882 +0200 @@ -159,9 +159,12 @@ * node->private_list is protected by * mapping->tree_lock. @@ -23292,9 +24215,9 @@ diff -Nur linux-4.9.22.orig/mm/filemap.c linux-4.9.22/mm/filemap.c } } -diff -Nur linux-4.9.22.orig/mm/highmem.c linux-4.9.22/mm/highmem.c ---- linux-4.9.22.orig/mm/highmem.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/highmem.c 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/mm/highmem.c linux-4.9.28/mm/highmem.c +--- linux-4.9.28.orig/mm/highmem.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/highmem.c 2017-05-19 03:37:25.210177882 +0200 @@ -29,10 +29,11 @@ #include <linux/kgdb.h> #include <asm/tlbflush.h> @@ -23319,9 +24242,9 @@ diff -Nur linux-4.9.22.orig/mm/highmem.c linux-4.9.22/mm/highmem.c unsigned int nr_free_highpages (void) { -diff -Nur linux-4.9.22.orig/mm/Kconfig linux-4.9.22/mm/Kconfig ---- linux-4.9.22.orig/mm/Kconfig 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/Kconfig 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/mm/Kconfig linux-4.9.28/mm/Kconfig +--- linux-4.9.28.orig/mm/Kconfig 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/Kconfig 2017-05-19 03:37:25.206177727 +0200 @@ -410,7 +410,7 @@ config TRANSPARENT_HUGEPAGE @@ -23331,9 +24254,9 @@ diff -Nur linux-4.9.22.orig/mm/Kconfig linux-4.9.22/mm/Kconfig select COMPACTION select RADIX_TREE_MULTIORDER help -diff -Nur linux-4.9.22.orig/mm/memcontrol.c linux-4.9.22/mm/memcontrol.c ---- linux-4.9.22.orig/mm/memcontrol.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/memcontrol.c 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/mm/memcontrol.c linux-4.9.28/mm/memcontrol.c +--- linux-4.9.28.orig/mm/memcontrol.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/memcontrol.c 2017-05-19 03:37:25.210177882 +0200 @@ -67,6 +67,7 @@ #include <net/sock.h> #include <net/ip.h> @@ -23429,7 +24352,7 @@ diff -Nur linux-4.9.22.orig/mm/memcontrol.c linux-4.9.22/mm/memcontrol.c put_online_cpus(); mutex_unlock(&percpu_charge_mutex); } -@@ -4553,12 +4557,12 @@ +@@ -4555,12 +4559,12 @@ ret = 0; @@ -23444,7 +24367,7 @@ diff -Nur linux-4.9.22.orig/mm/memcontrol.c linux-4.9.22/mm/memcontrol.c out_unlock: unlock_page(page); out: -@@ -5433,10 +5437,10 @@ +@@ -5435,10 +5439,10 @@ commit_charge(page, memcg, lrucare); @@ -23457,7 +24380,7 @@ diff -Nur linux-4.9.22.orig/mm/memcontrol.c linux-4.9.22/mm/memcontrol.c if (do_memsw_account() && PageSwapCache(page)) { swp_entry_t entry = { .val = page_private(page) }; -@@ -5492,14 +5496,14 @@ +@@ -5494,14 +5498,14 @@ memcg_oom_recover(memcg); } @@ -23474,7 +24397,7 @@ diff -Nur linux-4.9.22.orig/mm/memcontrol.c linux-4.9.22/mm/memcontrol.c if (!mem_cgroup_is_root(memcg)) css_put_many(&memcg->css, nr_pages); -@@ -5654,10 +5658,10 @@ +@@ -5656,10 +5660,10 @@ commit_charge(newpage, memcg, false); @@ -23487,7 +24410,7 @@ diff -Nur linux-4.9.22.orig/mm/memcontrol.c linux-4.9.22/mm/memcontrol.c } DEFINE_STATIC_KEY_FALSE(memcg_sockets_enabled_key); -@@ -5837,6 +5841,7 @@ +@@ -5850,6 +5854,7 @@ { struct mem_cgroup *memcg, *swap_memcg; unsigned short oldid; @@ -23495,7 +24418,7 @@ diff -Nur linux-4.9.22.orig/mm/memcontrol.c linux-4.9.22/mm/memcontrol.c VM_BUG_ON_PAGE(PageLRU(page), page); VM_BUG_ON_PAGE(page_count(page), page); -@@ -5877,12 +5882,16 @@ +@@ -5890,12 +5895,16 @@ * important here to have the interrupts disabled because it is the * only synchronisation we have for udpating the per-CPU variables. */ @@ -23512,9 +24435,9 @@ diff -Nur linux-4.9.22.orig/mm/memcontrol.c linux-4.9.22/mm/memcontrol.c } /* -diff -Nur linux-4.9.22.orig/mm/mmu_context.c linux-4.9.22/mm/mmu_context.c ---- linux-4.9.22.orig/mm/mmu_context.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/mmu_context.c 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/mm/mmu_context.c linux-4.9.28/mm/mmu_context.c +--- linux-4.9.28.orig/mm/mmu_context.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/mmu_context.c 2017-05-19 03:37:25.210177882 +0200 @@ -23,6 +23,7 @@ struct task_struct *tsk = current; @@ -23531,9 +24454,9 @@ diff -Nur linux-4.9.22.orig/mm/mmu_context.c linux-4.9.22/mm/mmu_context.c task_unlock(tsk); #ifdef finish_arch_post_lock_switch finish_arch_post_lock_switch(); -diff -Nur linux-4.9.22.orig/mm/page_alloc.c linux-4.9.22/mm/page_alloc.c ---- linux-4.9.22.orig/mm/page_alloc.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/page_alloc.c 2017-04-18 17:19:16.710774317 +0200 +diff -Nur linux-4.9.28.orig/mm/page_alloc.c linux-4.9.28/mm/page_alloc.c +--- linux-4.9.28.orig/mm/page_alloc.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/page_alloc.c 2017-05-19 03:37:25.210177882 +0200 @@ -61,6 +61,7 @@ #include <linux/page_ext.h> #include <linux/hugetlb.h> @@ -23882,9 +24805,9 @@ diff -Nur linux-4.9.22.orig/mm/page_alloc.c linux-4.9.22/mm/page_alloc.c } #ifdef CONFIG_MEMORY_HOTREMOVE -diff -Nur linux-4.9.22.orig/mm/percpu.c linux-4.9.22/mm/percpu.c ---- linux-4.9.22.orig/mm/percpu.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/percpu.c 2017-04-18 17:19:16.714774471 +0200 +diff -Nur linux-4.9.28.orig/mm/percpu.c linux-4.9.28/mm/percpu.c +--- linux-4.9.28.orig/mm/percpu.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/percpu.c 2017-05-19 03:37:25.210177882 +0200 @@ -1283,18 +1283,7 @@ } EXPORT_SYMBOL_GPL(free_percpu); @@ -23947,9 +24870,9 @@ diff -Nur linux-4.9.22.orig/mm/percpu.c linux-4.9.22/mm/percpu.c * per_cpu_ptr_to_phys - convert translated percpu address to physical address * @addr: the address to be converted to physical address * -diff -Nur linux-4.9.22.orig/mm/slab.h linux-4.9.22/mm/slab.h ---- linux-4.9.22.orig/mm/slab.h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/slab.h 2017-04-18 17:19:16.714774471 +0200 +diff -Nur linux-4.9.28.orig/mm/slab.h linux-4.9.28/mm/slab.h +--- linux-4.9.28.orig/mm/slab.h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/slab.h 2017-05-19 03:37:25.210177882 +0200 @@ -426,7 +426,11 @@ * The slab lists for all objects. */ @@ -23962,9 +24885,9 @@ diff -Nur linux-4.9.22.orig/mm/slab.h linux-4.9.22/mm/slab.h #ifdef CONFIG_SLAB struct list_head slabs_partial; /* partial list first, better asm code */ -diff -Nur linux-4.9.22.orig/mm/slub.c linux-4.9.22/mm/slub.c ---- linux-4.9.22.orig/mm/slub.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/slub.c 2017-04-18 17:19:16.714774471 +0200 +diff -Nur linux-4.9.28.orig/mm/slub.c linux-4.9.28/mm/slub.c +--- linux-4.9.28.orig/mm/slub.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/slub.c 2017-05-19 03:37:25.210177882 +0200 @@ -1141,7 +1141,7 @@ unsigned long uninitialized_var(flags); int ret = 0; @@ -24403,9 +25326,9 @@ diff -Nur linux-4.9.22.orig/mm/slub.c linux-4.9.22/mm/slub.c } for (i = 0; i < t.count; i++) { -diff -Nur linux-4.9.22.orig/mm/swap.c linux-4.9.22/mm/swap.c ---- linux-4.9.22.orig/mm/swap.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/swap.c 2017-04-18 17:19:16.714774471 +0200 +diff -Nur linux-4.9.28.orig/mm/swap.c linux-4.9.28/mm/swap.c +--- linux-4.9.28.orig/mm/swap.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/swap.c 2017-05-19 03:37:25.210177882 +0200 @@ -32,6 +32,7 @@ #include <linux/memcontrol.h> #include <linux/gfp.h> @@ -24607,9 +25530,9 @@ diff -Nur linux-4.9.22.orig/mm/swap.c linux-4.9.22/mm/swap.c put_online_cpus(); mutex_unlock(&lock); -diff -Nur linux-4.9.22.orig/mm/truncate.c linux-4.9.22/mm/truncate.c ---- linux-4.9.22.orig/mm/truncate.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/truncate.c 2017-04-18 17:19:16.714774471 +0200 +diff -Nur linux-4.9.28.orig/mm/truncate.c linux-4.9.28/mm/truncate.c +--- linux-4.9.28.orig/mm/truncate.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/truncate.c 2017-05-19 03:37:25.214178037 +0200 @@ -62,9 +62,12 @@ * protected by mapping->tree_lock. */ @@ -24625,9 +25548,9 @@ diff -Nur linux-4.9.22.orig/mm/truncate.c linux-4.9.22/mm/truncate.c __radix_tree_delete_node(&mapping->page_tree, node); unlock: spin_unlock_irq(&mapping->tree_lock); -diff -Nur linux-4.9.22.orig/mm/vmalloc.c linux-4.9.22/mm/vmalloc.c ---- linux-4.9.22.orig/mm/vmalloc.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/vmalloc.c 2017-04-18 17:19:16.714774471 +0200 +diff -Nur linux-4.9.28.orig/mm/vmalloc.c linux-4.9.28/mm/vmalloc.c +--- linux-4.9.28.orig/mm/vmalloc.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/vmalloc.c 2017-05-19 03:37:25.214178037 +0200 @@ -845,7 +845,7 @@ struct vmap_block *vb; struct vmap_area *va; @@ -24679,9 +25602,9 @@ diff -Nur linux-4.9.22.orig/mm/vmalloc.c linux-4.9.22/mm/vmalloc.c rcu_read_unlock(); /* Allocate new block if nothing was found */ -diff -Nur linux-4.9.22.orig/mm/vmstat.c linux-4.9.22/mm/vmstat.c ---- linux-4.9.22.orig/mm/vmstat.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/vmstat.c 2017-04-18 17:19:16.714774471 +0200 +diff -Nur linux-4.9.28.orig/mm/vmstat.c linux-4.9.28/mm/vmstat.c +--- linux-4.9.28.orig/mm/vmstat.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/vmstat.c 2017-05-19 03:37:25.214178037 +0200 @@ -245,6 +245,7 @@ long x; long t; @@ -24778,9 +25701,9 @@ diff -Nur linux-4.9.22.orig/mm/vmstat.c linux-4.9.22/mm/vmstat.c } void __dec_zone_page_state(struct page *page, enum zone_stat_item item) -diff -Nur linux-4.9.22.orig/mm/workingset.c linux-4.9.22/mm/workingset.c ---- linux-4.9.22.orig/mm/workingset.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/workingset.c 2017-04-18 17:20:59.078743513 +0200 +diff -Nur linux-4.9.28.orig/mm/workingset.c linux-4.9.28/mm/workingset.c +--- linux-4.9.28.orig/mm/workingset.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/workingset.c 2017-05-19 03:37:25.214178037 +0200 @@ -334,7 +334,8 @@ * point where they would still be useful. */ @@ -24848,9 +25771,9 @@ diff -Nur linux-4.9.22.orig/mm/workingset.c linux-4.9.22/mm/workingset.c err: return ret; } -diff -Nur linux-4.9.22.orig/mm/zsmalloc.c linux-4.9.22/mm/zsmalloc.c ---- linux-4.9.22.orig/mm/zsmalloc.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/mm/zsmalloc.c 2017-04-18 17:19:16.714774471 +0200 +diff -Nur linux-4.9.28.orig/mm/zsmalloc.c linux-4.9.28/mm/zsmalloc.c +--- linux-4.9.28.orig/mm/zsmalloc.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/mm/zsmalloc.c 2017-05-19 03:37:25.214178037 +0200 @@ -53,6 +53,7 @@ #include <linux/mount.h> #include <linux/migrate.h> @@ -25028,9 +25951,9 @@ diff -Nur linux-4.9.22.orig/mm/zsmalloc.c linux-4.9.22/mm/zsmalloc.c migrate_read_unlock(zspage); unpin_tag(handle); -diff -Nur linux-4.9.22.orig/net/core/dev.c linux-4.9.22/net/core/dev.c ---- linux-4.9.22.orig/net/core/dev.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/core/dev.c 2017-04-18 17:19:16.718774627 +0200 +diff -Nur linux-4.9.28.orig/net/core/dev.c linux-4.9.28/net/core/dev.c +--- linux-4.9.28.orig/net/core/dev.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/core/dev.c 2017-05-19 03:37:25.214178037 +0200 @@ -190,6 +190,7 @@ static DEFINE_READ_MOSTLY_HASHTABLE(napi_hash, 8); @@ -25387,9 +26310,9 @@ diff -Nur linux-4.9.22.orig/net/core/dev.c linux-4.9.22/net/core/dev.c INIT_LIST_HEAD(&sd->poll_list); sd->output_queue_tailp = &sd->output_queue; #ifdef CONFIG_RPS -diff -Nur linux-4.9.22.orig/net/core/filter.c linux-4.9.22/net/core/filter.c ---- linux-4.9.22.orig/net/core/filter.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/core/filter.c 2017-04-18 17:19:16.718774627 +0200 +diff -Nur linux-4.9.28.orig/net/core/filter.c linux-4.9.28/net/core/filter.c +--- linux-4.9.28.orig/net/core/filter.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/core/filter.c 2017-05-19 03:37:25.214178037 +0200 @@ -1645,7 +1645,7 @@ { int ret; @@ -25411,9 +26334,9 @@ diff -Nur linux-4.9.22.orig/net/core/filter.c linux-4.9.22/net/core/filter.c return ret; } -diff -Nur linux-4.9.22.orig/net/core/gen_estimator.c linux-4.9.22/net/core/gen_estimator.c ---- linux-4.9.22.orig/net/core/gen_estimator.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/core/gen_estimator.c 2017-04-18 17:19:16.718774627 +0200 +diff -Nur linux-4.9.28.orig/net/core/gen_estimator.c linux-4.9.28/net/core/gen_estimator.c +--- linux-4.9.28.orig/net/core/gen_estimator.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/core/gen_estimator.c 2017-05-19 03:37:25.214178037 +0200 @@ -84,7 +84,7 @@ struct gnet_stats_basic_packed *bstats; struct gnet_stats_rate_est64 *rate_est; @@ -25441,9 +26364,9 @@ diff -Nur linux-4.9.22.orig/net/core/gen_estimator.c linux-4.9.22/net/core/gen_e { gen_kill_estimator(bstats, rate_est); return gen_new_estimator(bstats, cpu_bstats, rate_est, stats_lock, running, opt); -diff -Nur linux-4.9.22.orig/net/core/gen_stats.c linux-4.9.22/net/core/gen_stats.c ---- linux-4.9.22.orig/net/core/gen_stats.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/core/gen_stats.c 2017-04-18 17:19:16.718774627 +0200 +diff -Nur linux-4.9.28.orig/net/core/gen_stats.c linux-4.9.28/net/core/gen_stats.c +--- linux-4.9.28.orig/net/core/gen_stats.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/core/gen_stats.c 2017-05-19 03:37:25.214178037 +0200 @@ -130,7 +130,7 @@ } @@ -25475,9 +26398,9 @@ diff -Nur linux-4.9.22.orig/net/core/gen_stats.c linux-4.9.22/net/core/gen_stats struct gnet_dump *d, struct gnet_stats_basic_cpu __percpu *cpu, struct gnet_stats_basic_packed *b) -diff -Nur linux-4.9.22.orig/net/core/skbuff.c linux-4.9.22/net/core/skbuff.c ---- linux-4.9.22.orig/net/core/skbuff.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/core/skbuff.c 2017-04-18 17:19:16.718774627 +0200 +diff -Nur linux-4.9.28.orig/net/core/skbuff.c linux-4.9.28/net/core/skbuff.c +--- linux-4.9.28.orig/net/core/skbuff.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/core/skbuff.c 2017-05-19 03:37:25.218178191 +0200 @@ -64,6 +64,7 @@ #include <linux/errqueue.h> #include <linux/prefetch.h> @@ -25609,9 +26532,9 @@ diff -Nur linux-4.9.22.orig/net/core/skbuff.c linux-4.9.22/net/core/skbuff.c } void __kfree_skb_defer(struct sk_buff *skb) { -diff -Nur linux-4.9.22.orig/net/core/sock.c linux-4.9.22/net/core/sock.c ---- linux-4.9.22.orig/net/core/sock.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/core/sock.c 2017-04-18 17:19:16.718774627 +0200 +diff -Nur linux-4.9.28.orig/net/core/sock.c linux-4.9.28/net/core/sock.c +--- linux-4.9.28.orig/net/core/sock.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/core/sock.c 2017-05-19 03:37:25.218178191 +0200 @@ -2499,12 +2499,11 @@ if (sk->sk_lock.owned) __lock_sock(sk); @@ -25626,9 +26549,9 @@ diff -Nur linux-4.9.22.orig/net/core/sock.c linux-4.9.22/net/core/sock.c } EXPORT_SYMBOL(lock_sock_nested); -diff -Nur linux-4.9.22.orig/net/ipv4/icmp.c linux-4.9.22/net/ipv4/icmp.c ---- linux-4.9.22.orig/net/ipv4/icmp.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/ipv4/icmp.c 2017-04-18 17:19:16.718774627 +0200 +diff -Nur linux-4.9.28.orig/net/ipv4/icmp.c linux-4.9.28/net/ipv4/icmp.c +--- linux-4.9.28.orig/net/ipv4/icmp.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/ipv4/icmp.c 2017-05-19 03:37:25.218178191 +0200 @@ -69,6 +69,7 @@ #include <linux/jiffies.h> #include <linux/kernel.h> @@ -25736,9 +26659,9 @@ diff -Nur linux-4.9.22.orig/net/ipv4/icmp.c linux-4.9.22/net/ipv4/icmp.c } /* should there be an ICMP stat for ignored echos? */ return true; -diff -Nur linux-4.9.22.orig/net/ipv4/sysctl_net_ipv4.c linux-4.9.22/net/ipv4/sysctl_net_ipv4.c ---- linux-4.9.22.orig/net/ipv4/sysctl_net_ipv4.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/ipv4/sysctl_net_ipv4.c 2017-04-18 17:19:16.718774627 +0200 +diff -Nur linux-4.9.28.orig/net/ipv4/sysctl_net_ipv4.c linux-4.9.28/net/ipv4/sysctl_net_ipv4.c +--- linux-4.9.28.orig/net/ipv4/sysctl_net_ipv4.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/ipv4/sysctl_net_ipv4.c 2017-05-19 03:37:25.218178191 +0200 @@ -681,6 +681,13 @@ .proc_handler = proc_dointvec }, @@ -25753,9 +26676,9 @@ diff -Nur linux-4.9.22.orig/net/ipv4/sysctl_net_ipv4.c linux-4.9.22/net/ipv4/sys .procname = "icmp_ignore_bogus_error_responses", .data = &init_net.ipv4.sysctl_icmp_ignore_bogus_error_responses, .maxlen = sizeof(int), -diff -Nur linux-4.9.22.orig/net/ipv4/tcp_ipv4.c linux-4.9.22/net/ipv4/tcp_ipv4.c ---- linux-4.9.22.orig/net/ipv4/tcp_ipv4.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/ipv4/tcp_ipv4.c 2017-04-18 17:19:16.718774627 +0200 +diff -Nur linux-4.9.28.orig/net/ipv4/tcp_ipv4.c linux-4.9.28/net/ipv4/tcp_ipv4.c +--- linux-4.9.28.orig/net/ipv4/tcp_ipv4.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/ipv4/tcp_ipv4.c 2017-05-19 03:37:25.218178191 +0200 @@ -62,6 +62,7 @@ #include <linux/init.h> #include <linux/times.h> @@ -25805,10 +26728,10 @@ diff -Nur linux-4.9.22.orig/net/ipv4/tcp_ipv4.c linux-4.9.22/net/ipv4/tcp_ipv4.c } static void tcp_v4_timewait_ack(struct sock *sk, struct sk_buff *skb) -diff -Nur linux-4.9.22.orig/net/mac80211/rx.c linux-4.9.22/net/mac80211/rx.c ---- linux-4.9.22.orig/net/mac80211/rx.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/mac80211/rx.c 2017-04-18 17:19:16.718774627 +0200 -@@ -4180,7 +4180,7 @@ +diff -Nur linux-4.9.28.orig/net/mac80211/rx.c linux-4.9.28/net/mac80211/rx.c +--- linux-4.9.28.orig/net/mac80211/rx.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/mac80211/rx.c 2017-05-19 03:37:25.218178191 +0200 +@@ -4230,7 +4230,7 @@ struct ieee80211_supported_band *sband; struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); @@ -25817,9 +26740,9 @@ diff -Nur linux-4.9.22.orig/net/mac80211/rx.c linux-4.9.22/net/mac80211/rx.c if (WARN_ON(status->band >= NUM_NL80211_BANDS)) goto drop; -diff -Nur linux-4.9.22.orig/net/netfilter/core.c linux-4.9.22/net/netfilter/core.c ---- linux-4.9.22.orig/net/netfilter/core.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/netfilter/core.c 2017-04-18 17:19:16.722774781 +0200 +diff -Nur linux-4.9.28.orig/net/netfilter/core.c linux-4.9.28/net/netfilter/core.c +--- linux-4.9.28.orig/net/netfilter/core.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/netfilter/core.c 2017-05-19 03:37:25.218178191 +0200 @@ -22,12 +22,18 @@ #include <linux/proc_fs.h> #include <linux/mutex.h> @@ -25839,9 +26762,9 @@ diff -Nur linux-4.9.22.orig/net/netfilter/core.c linux-4.9.22/net/netfilter/core static DEFINE_MUTEX(afinfo_mutex); const struct nf_afinfo __rcu *nf_afinfo[NFPROTO_NUMPROTO] __read_mostly; -diff -Nur linux-4.9.22.orig/net/packet/af_packet.c linux-4.9.22/net/packet/af_packet.c ---- linux-4.9.22.orig/net/packet/af_packet.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/packet/af_packet.c 2017-04-18 17:19:16.722774781 +0200 +diff -Nur linux-4.9.28.orig/net/packet/af_packet.c linux-4.9.28/net/packet/af_packet.c +--- linux-4.9.28.orig/net/packet/af_packet.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/packet/af_packet.c 2017-05-19 03:37:25.218178191 +0200 @@ -63,6 +63,7 @@ #include <linux/if_packet.h> #include <linux/wireless.h> @@ -25868,9 +26791,9 @@ diff -Nur linux-4.9.22.orig/net/packet/af_packet.c linux-4.9.22/net/packet/af_pa } } prb_close_block(pkc, pbd, po, status); -diff -Nur linux-4.9.22.orig/net/rds/ib_rdma.c linux-4.9.22/net/rds/ib_rdma.c ---- linux-4.9.22.orig/net/rds/ib_rdma.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/rds/ib_rdma.c 2017-04-18 17:19:16.722774781 +0200 +diff -Nur linux-4.9.28.orig/net/rds/ib_rdma.c linux-4.9.28/net/rds/ib_rdma.c +--- linux-4.9.28.orig/net/rds/ib_rdma.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/rds/ib_rdma.c 2017-05-19 03:37:25.218178191 +0200 @@ -34,6 +34,7 @@ #include <linux/slab.h> #include <linux/rculist.h> @@ -25888,9 +26811,9 @@ diff -Nur linux-4.9.22.orig/net/rds/ib_rdma.c linux-4.9.22/net/rds/ib_rdma.c } } -diff -Nur linux-4.9.22.orig/net/rxrpc/security.c linux-4.9.22/net/rxrpc/security.c ---- linux-4.9.22.orig/net/rxrpc/security.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/rxrpc/security.c 2017-04-18 17:19:16.722774781 +0200 +diff -Nur linux-4.9.28.orig/net/rxrpc/security.c linux-4.9.28/net/rxrpc/security.c +--- linux-4.9.28.orig/net/rxrpc/security.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/rxrpc/security.c 2017-05-19 03:37:25.218178191 +0200 @@ -19,9 +19,6 @@ #include <keys/rxrpc-type.h> #include "ar-internal.h" @@ -25901,9 +26824,9 @@ diff -Nur linux-4.9.22.orig/net/rxrpc/security.c linux-4.9.22/net/rxrpc/security static const struct rxrpc_security *rxrpc_security_types[] = { [RXRPC_SECURITY_NONE] = &rxrpc_no_security, #ifdef CONFIG_RXKAD -diff -Nur linux-4.9.22.orig/net/sched/sch_api.c linux-4.9.22/net/sched/sch_api.c ---- linux-4.9.22.orig/net/sched/sch_api.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/sched/sch_api.c 2017-04-18 17:19:16.722774781 +0200 +diff -Nur linux-4.9.28.orig/net/sched/sch_api.c linux-4.9.28/net/sched/sch_api.c +--- linux-4.9.28.orig/net/sched/sch_api.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/sched/sch_api.c 2017-05-19 03:37:25.218178191 +0200 @@ -981,7 +981,7 @@ rcu_assign_pointer(sch->stab, stab); } @@ -25913,9 +26836,9 @@ diff -Nur linux-4.9.22.orig/net/sched/sch_api.c linux-4.9.22/net/sched/sch_api.c err = -EOPNOTSUPP; if (sch->flags & TCQ_F_MQROOT) -diff -Nur linux-4.9.22.orig/net/sched/sch_generic.c linux-4.9.22/net/sched/sch_generic.c ---- linux-4.9.22.orig/net/sched/sch_generic.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/sched/sch_generic.c 2017-04-18 17:19:16.722774781 +0200 +diff -Nur linux-4.9.28.orig/net/sched/sch_generic.c linux-4.9.28/net/sched/sch_generic.c +--- linux-4.9.28.orig/net/sched/sch_generic.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/sched/sch_generic.c 2017-05-19 03:37:25.218178191 +0200 @@ -425,7 +425,11 @@ .ops = &noop_qdisc_ops, .q.lock = __SPIN_LOCK_UNLOCKED(noop_qdisc.q.lock), @@ -25955,9 +26878,9 @@ diff -Nur linux-4.9.22.orig/net/sched/sch_generic.c linux-4.9.22/net/sched/sch_g } void dev_deactivate(struct net_device *dev) -diff -Nur linux-4.9.22.orig/net/sunrpc/svc_xprt.c linux-4.9.22/net/sunrpc/svc_xprt.c ---- linux-4.9.22.orig/net/sunrpc/svc_xprt.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/net/sunrpc/svc_xprt.c 2017-04-18 17:19:16.722774781 +0200 +diff -Nur linux-4.9.28.orig/net/sunrpc/svc_xprt.c linux-4.9.28/net/sunrpc/svc_xprt.c +--- linux-4.9.28.orig/net/sunrpc/svc_xprt.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/net/sunrpc/svc_xprt.c 2017-05-19 03:37:25.218178191 +0200 @@ -396,7 +396,7 @@ goto out; } @@ -25985,9 +26908,9 @@ diff -Nur linux-4.9.22.orig/net/sunrpc/svc_xprt.c linux-4.9.22/net/sunrpc/svc_xp out: trace_svc_xprt_do_enqueue(xprt, rqstp); } -diff -Nur linux-4.9.22.orig/scripts/mkcompile_h linux-4.9.22/scripts/mkcompile_h ---- linux-4.9.22.orig/scripts/mkcompile_h 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/scripts/mkcompile_h 2017-04-18 17:19:16.722774781 +0200 +diff -Nur linux-4.9.28.orig/scripts/mkcompile_h linux-4.9.28/scripts/mkcompile_h +--- linux-4.9.28.orig/scripts/mkcompile_h 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/scripts/mkcompile_h 2017-05-19 03:37:25.218178191 +0200 @@ -4,7 +4,8 @@ ARCH=$2 SMP=$3 @@ -26006,9 +26929,9 @@ diff -Nur linux-4.9.22.orig/scripts/mkcompile_h linux-4.9.22/scripts/mkcompile_h UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP" # Truncate to maximum length -diff -Nur linux-4.9.22.orig/sound/core/pcm_native.c linux-4.9.22/sound/core/pcm_native.c ---- linux-4.9.22.orig/sound/core/pcm_native.c 2017-04-12 12:41:42.000000000 +0200 -+++ linux-4.9.22/sound/core/pcm_native.c 2017-04-18 17:19:16.722774781 +0200 +diff -Nur linux-4.9.28.orig/sound/core/pcm_native.c linux-4.9.28/sound/core/pcm_native.c +--- linux-4.9.28.orig/sound/core/pcm_native.c 2017-05-14 14:00:37.000000000 +0200 ++++ linux-4.9.28/sound/core/pcm_native.c 2017-05-19 03:37:25.222178345 +0200 @@ -135,7 +135,7 @@ void snd_pcm_stream_lock_irq(struct snd_pcm_substream *substream) { diff --git a/target/linux/patches/4.9.22/sh2.patch b/target/linux/patches/4.9.28/sh2.patch index 9debe80ad..9debe80ad 100644 --- a/target/linux/patches/4.9.22/sh2.patch +++ b/target/linux/patches/4.9.28/sh2.patch diff --git a/target/linux/patches/4.9.22/startup.patch b/target/linux/patches/4.9.28/startup.patch index e54ac19a6..e54ac19a6 100644 --- a/target/linux/patches/4.9.22/startup.patch +++ b/target/linux/patches/4.9.28/startup.patch diff --git a/target/linux/patches/4.9.22/vdso2.patch b/target/linux/patches/4.9.28/vdso2.patch index 35df488a8..35df488a8 100644 --- a/target/linux/patches/4.9.22/vdso2.patch +++ b/target/linux/patches/4.9.28/vdso2.patch |