summaryrefslogtreecommitdiff
path: root/target/linux
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2017-05-19 03:41:24 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2017-05-19 03:41:24 +0200
commite29b0f2b4531f8d84040b21fa2aade94f80b6021 (patch)
tree58d955c9e234f18dbf9b95e767cd91ebde9db2c7 /target/linux
parent5d158b6bfd62bdd9b1e8aaee771e0daaac36116e (diff)
linux: update 4.9.x kernel, disable avr32 for latest kernel versions
Diffstat (limited to 'target/linux')
-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
11 files changed, 2423 insertions, 1500 deletions
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(&current->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(&current->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(&current->pi_lock);
+- rt_mutex_dequeue(lock, waiter);
+- current->pi_blocked_on = NULL;
+- raw_spin_unlock(&current->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(&current->pi_lock);
-
-- wake_q_add(wake_q, waiter->task);
++ struct rt_mutex *lock)
++{
++ struct rt_mutex_waiter *waiter;
++
++ raw_spin_lock(&current->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(&current->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(&current->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(&current->pi_lock);
++ rt_mutex_dequeue(lock, waiter);
++ current->pi_blocked_on = NULL;
++ raw_spin_unlock(&current->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