mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-10-31 18:09:19 +00:00
mm/mprotect: add a cond_resched() inside change_pmd_range()
commit 4991c09c7c812dba13ea9be79a68b4565bb1fa4e upstream. While testing on a large CPU system, detected the following RCU stall many times over the span of the workload. This problem is solved by adding a cond_resched() in the change_pmd_range() function. INFO: rcu_sched detected stalls on CPUs/tasks: 154-....: (670 ticks this GP) idle=022/140000000000000/0 softirq=2825/2825 fqs=612 (detected by 955, t=6002 jiffies, g=4486, c=4485, q=90864) Sending NMI from CPU 955 to CPUs 154: NMI backtrace for cpu 154 CPU: 154 PID: 147071 Comm: workload Not tainted 4.15.0-rc3+ #3 NIP: c0000000000b3f64 LR: c0000000000b33d4 CTR: 000000000000aa18 REGS: 00000000a4b0fb44 TRAP: 0501 Not tainted (4.15.0-rc3+) MSR: 8000000000009033 <SF,EE,ME,IR,DR,RI,LE> CR: 22422082 XER: 00000000 CFAR: 00000000006cf8f0 SOFTE: 1 GPR00: 0010000000000000 c00003ef9b1cb8c0 c0000000010cc600 0000000000000000 GPR04: 8e0000018c32b200 40017b3858fd6e00 8e0000018c32b208 40017b3858fd6e00 GPR08: 8e0000018c32b210 40017b3858fd6e00 8e0000018c32b218 40017b3858fd6e00 GPR12: ffffffffffffffff c00000000fb25100 NIP [c0000000000b3f64] plpar_hcall9+0x44/0x7c LR [c0000000000b33d4] pSeries_lpar_flush_hash_range+0x384/0x420 Call Trace: flush_hash_range+0x48/0x100 __flush_tlb_pending+0x44/0xd0 hpte_need_flush+0x408/0x470 change_protection_range+0xaac/0xf10 change_prot_numa+0x30/0xb0 task_numa_work+0x2d0/0x3e0 task_work_run+0x130/0x190 do_notify_resume+0x118/0x120 ret_from_except_lite+0x70/0x74 Instruction dump: 60000000 f8810028 7ca42b78 7cc53378 7ce63b78 7d074378 7d284b78 7d495378 e9410060 e9610068 e9810070 44000022 <7d806378> e9810028 f88c0000 f8ac0008 Change-Id: Id2a7a0b449991301de8b0871fdcdec6b16c5ec0c Link: http://lkml.kernel.org/r/20171214140551.5794-1-khandual@linux.vnet.ibm.com Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com> Suggested-by: Nicholas Piggin <npiggin@gmail.com> Acked-by: Michal Hocko <mhocko@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> [bwh: Backported to 3.2: adjust context] Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
This commit is contained in:
parent
575eeb878e
commit
73b87bd20a
1 changed files with 4 additions and 2 deletions
|
@ -148,12 +148,12 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
|
||||||
prot_numa)) {
|
prot_numa)) {
|
||||||
pages += HPAGE_PMD_NR;
|
pages += HPAGE_PMD_NR;
|
||||||
nr_huge_updates++;
|
nr_huge_updates++;
|
||||||
continue;
|
goto next;
|
||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
}
|
}
|
||||||
if (pmd_none_or_clear_bad(pmd))
|
if (pmd_none_or_clear_bad(pmd))
|
||||||
continue;
|
goto next;
|
||||||
pages += change_pte_range(vma, pmd, addr, next, newprot,
|
pages += change_pte_range(vma, pmd, addr, next, newprot,
|
||||||
dirty_accountable, prot_numa, &all_same_node);
|
dirty_accountable, prot_numa, &all_same_node);
|
||||||
|
|
||||||
|
@ -165,6 +165,8 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
|
||||||
*/
|
*/
|
||||||
if (prot_numa && all_same_node)
|
if (prot_numa && all_same_node)
|
||||||
change_pmd_protnuma(vma->vm_mm, addr, pmd);
|
change_pmd_protnuma(vma->vm_mm, addr, pmd);
|
||||||
|
next:
|
||||||
|
cond_resched();
|
||||||
} while (pmd++, addr = next, addr != end);
|
} while (pmd++, addr = next, addr != end);
|
||||||
|
|
||||||
if (nr_huge_updates)
|
if (nr_huge_updates)
|
||||||
|
|
Loading…
Reference in a new issue