From 028f725ccb514f9ba215a7c1fde20a6a59e393af Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 26 Sep 2018 15:18:45 +0200 Subject: [PATCH] 3.18-stable patches added patches: arm64-add-trace_hardirqs_off-annotation-in-ret_to_user.patch --- ...rdirqs_off-annotation-in-ret_to_user.patch | 77 +++++++++++++++++++ queue-3.18/series | 1 + 2 files changed, 78 insertions(+) create mode 100644 queue-3.18/arm64-add-trace_hardirqs_off-annotation-in-ret_to_user.patch diff --git a/queue-3.18/arm64-add-trace_hardirqs_off-annotation-in-ret_to_user.patch b/queue-3.18/arm64-add-trace_hardirqs_off-annotation-in-ret_to_user.patch new file mode 100644 index 00000000000..ce4c09a576b --- /dev/null +++ b/queue-3.18/arm64-add-trace_hardirqs_off-annotation-in-ret_to_user.patch @@ -0,0 +1,77 @@ +From db3899a6477a4dccd26cbfb7f408b6be2cc068e0 Mon Sep 17 00:00:00 2001 +From: Catalin Marinas +Date: Fri, 4 Dec 2015 12:42:29 +0000 +Subject: arm64: Add trace_hardirqs_off annotation in ret_to_user + +From: Catalin Marinas + +commit db3899a6477a4dccd26cbfb7f408b6be2cc068e0 upstream. + +When a kernel is built with CONFIG_TRACE_IRQFLAGS the following warning +is produced when entering userspace for the first time: + + WARNING: at /work/Linux/linux-2.6-aarch64/kernel/locking/lockdep.c:3519 + Modules linked in: + CPU: 1 PID: 1 Comm: systemd Not tainted 4.4.0-rc3+ #639 + Hardware name: Juno (DT) + task: ffffffc9768a0000 ti: ffffffc9768a8000 task.ti: ffffffc9768a8000 + PC is at check_flags.part.22+0x19c/0x1a8 + LR is at check_flags.part.22+0x19c/0x1a8 + pc : [] lr : [] pstate: 600001c5 + sp : ffffffc9768abe10 + x29: ffffffc9768abe10 x28: ffffffc9768a8000 + x27: 0000000000000000 x26: 0000000000000001 + x25: 00000000000000a6 x24: ffffffc00064be6c + x23: ffffffc0009f249e x22: ffffffc9768a0000 + x21: ffffffc97fea5480 x20: 00000000000001c0 + x19: ffffffc00169a000 x18: 0000005558cc7b58 + x17: 0000007fb78e3180 x16: 0000005558d2e238 + x15: ffffffffffffffff x14: 0ffffffffffffffd + x13: 0000000000000008 x12: 0101010101010101 + x11: 7f7f7f7f7f7f7f7f x10: fefefefefefeff63 + x9 : 7f7f7f7f7f7f7f7f x8 : 6e655f7371726964 + x7 : 0000000000000001 x6 : ffffffc0001079c4 + x5 : 0000000000000000 x4 : 0000000000000001 + x3 : ffffffc001698438 x2 : 0000000000000000 + x1 : ffffffc9768a0000 x0 : 000000000000002e + Call trace: + [] check_flags.part.22+0x19c/0x1a8 + [] lock_is_held+0x80/0x98 + [] __schedule+0x404/0x730 + [] schedule+0x44/0xb8 + [] ret_to_user+0x0/0x24 + possible reason: unannotated irqs-off. + irq event stamp: 502169 + hardirqs last enabled at (502169): [] el0_irq_naked+0x1c/0x24 + hardirqs last disabled at (502167): [] __do_softirq+0x17c/0x298 + softirqs last enabled at (502168): [] __do_softirq+0x1fc/0x298 + softirqs last disabled at (502143): [] irq_exit+0xa0/0xf0 + +This happens because we disable interrupts in ret_to_user before calling +schedule() in work_resched. This patch adds the necessary +trace_hardirqs_off annotation. + +Signed-off-by: Catalin Marinas +Reported-by: Mark Rutland +Cc: Will Deacon +Signed-off-by: Will Deacon +Cc: Guenter Roeck +Signed-off-by: Greg Kroah-Hartman + + +--- + arch/arm64/kernel/entry.S | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/arch/arm64/kernel/entry.S ++++ b/arch/arm64/kernel/entry.S +@@ -633,6 +633,9 @@ work_pending: + bl do_notify_resume + b ret_to_user + work_resched: ++#ifdef CONFIG_TRACE_IRQFLAGS ++ bl trace_hardirqs_off // the IRQs are off here, inform the tracing code ++#endif + bl schedule + + /* diff --git a/queue-3.18/series b/queue-3.18/series index 76416c32d5d..29bee5156ee 100644 --- a/queue-3.18/series +++ b/queue-3.18/series @@ -14,3 +14,4 @@ ext4-avoid-divide-by-zero-fault-when-deleting-corrupted-inline-directories.patch ext4-recalucate-superblock-checksum-after-updating-free-blocks-inodes.patch ext4-fix-online-resize-s-handling-of-a-too-small-final-block-group.patch ext4-don-t-mark-mmp-buffer-head-dirty.patch +arm64-add-trace_hardirqs_off-annotation-in-ret_to_user.patch -- 2.47.3