]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/3.16.7/sparc64-fix-reversed-start-end-in-flush_tlb_kernel_range.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 3.16.7 / sparc64-fix-reversed-start-end-in-flush_tlb_kernel_range.patch
CommitLineData
931f3697
GKH
1From foo@baz Tue Oct 28 11:19:22 CST 2014
2From: "David S. Miller" <davem@davemloft.net>
3Date: Sat, 4 Oct 2014 21:05:14 -0700
4Subject: sparc64: Fix reversed start/end in flush_tlb_kernel_range()
5
6From: "David S. Miller" <davem@davemloft.net>
7
8[ Upstream commit 473ad7f4fb005d1bb727e4ef27d370d28703a062 ]
9
10When we have to split up a flush request into multiple pieces
11(in order to avoid the firmware range) we don't specify the
12arguments in the right order for the second piece.
13
14Fix the order, or else we get hangs as the code tries to
15flush "a lot" of entries and we get lockups like this:
16
17[ 4422.981276] NMI watchdog: BUG: soft lockup - CPU#12 stuck for 23s! [expect:117032]
18[ 4422.996130] Modules linked in: ipv6 loop usb_storage igb ptp sg sr_mod ehci_pci ehci_hcd pps_core n2_rng rng_core
19[ 4423.016617] CPU: 12 PID: 117032 Comm: expect Not tainted 3.17.0-rc4+ #1608
20[ 4423.030331] task: fff8003cc730e220 ti: fff8003d99d54000 task.ti: fff8003d99d54000
21[ 4423.045282] TSTATE: 0000000011001602 TPC: 00000000004521e8 TNPC: 00000000004521ec Y: 00000000 Not tainted
22[ 4423.064905] TPC: <__flush_tlb_kernel_range+0x28/0x40>
23[ 4423.074964] g0: 000000000052fd10 g1: 00000001295a8000 g2: ffffff7176ffc000 g3: 0000000000002000
24[ 4423.092324] g4: fff8003cc730e220 g5: fff8003dfedcc000 g6: fff8003d99d54000 g7: 0000000000000006
25[ 4423.109687] o0: 0000000000000000 o1: 0000000000000000 o2: 0000000000000003 o3: 00000000f0000000
26[ 4423.127058] o4: 0000000000000080 o5: 00000001295a8000 sp: fff8003d99d56d01 ret_pc: 000000000052ff54
27[ 4423.145121] RPC: <__purge_vmap_area_lazy+0x314/0x3a0>
28[ 4423.155185] l0: 0000000000000000 l1: 0000000000000000 l2: 0000000000a38040 l3: 0000000000000000
29[ 4423.172559] l4: fff8003dae8965e0 l5: ffffffffffffffff l6: 0000000000000000 l7: 00000000f7e2b138
30[ 4423.189913] i0: fff8003d99d576a0 i1: fff8003d99d576a8 i2: fff8003d99d575e8 i3: 0000000000000000
31[ 4423.207284] i4: 0000000000008008 i5: fff8003d99d575c8 i6: fff8003d99d56df1 i7: 0000000000530c24
32[ 4423.224640] I7: <free_vmap_area_noflush+0x64/0x80>
33[ 4423.234193] Call Trace:
34[ 4423.239051] [0000000000530c24] free_vmap_area_noflush+0x64/0x80
35[ 4423.251029] [0000000000531a7c] remove_vm_area+0x5c/0x80
36[ 4423.261628] [0000000000531b80] __vunmap+0x20/0x120
37[ 4423.271352] [000000000071cf18] n_tty_close+0x18/0x40
38[ 4423.281423] [00000000007222b0] tty_ldisc_close+0x30/0x60
39[ 4423.292183] [00000000007225a4] tty_ldisc_reinit+0x24/0xa0
40[ 4423.303120] [0000000000722ab4] tty_ldisc_hangup+0xd4/0x1e0
41[ 4423.314232] [0000000000719aa0] __tty_hangup+0x280/0x3c0
42[ 4423.324835] [0000000000724cb4] pty_close+0x134/0x1a0
43[ 4423.334905] [000000000071aa24] tty_release+0x104/0x500
44[ 4423.345316] [00000000005511d0] __fput+0x90/0x1e0
45[ 4423.354701] [000000000047fa54] task_work_run+0x94/0xe0
46[ 4423.365126] [0000000000404b44] __handle_signal+0xc/0x2c
47
48Fixes: 4ca9a23765da ("sparc64: Guard against flushing openfirmware mappings.")
49Signed-off-by: David S. Miller <davem@davemloft.net>
50Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
51---
52 arch/sparc/mm/init_64.c | 4 ++--
53 1 file changed, 2 insertions(+), 2 deletions(-)
54
55--- a/arch/sparc/mm/init_64.c
56+++ b/arch/sparc/mm/init_64.c
57@@ -2725,8 +2725,8 @@ void flush_tlb_kernel_range(unsigned lon
58 do_flush_tlb_kernel_range(start, LOW_OBP_ADDRESS);
59 }
60 if (end > HI_OBP_ADDRESS) {
61- flush_tsb_kernel_range(end, HI_OBP_ADDRESS);
62- do_flush_tlb_kernel_range(end, HI_OBP_ADDRESS);
63+ flush_tsb_kernel_range(HI_OBP_ADDRESS, end);
64+ do_flush_tlb_kernel_range(HI_OBP_ADDRESS, end);
65 }
66 } else {
67 flush_tsb_kernel_range(start, end);