summaryrefslogtreecommitdiff
path: root/mm/page_reporting.c
diff options
context:
space:
mode:
authorNicolas Saenz Julienne <nsaenzju@redhat.com>2021-06-28 19:35:13 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2021-06-29 10:53:47 -0700
commit832b50725373e8c46781b7d4db104ec9cf564a6b (patch)
treefef34e8a45b2d2716095842e5b785f2c1241c18c /mm/page_reporting.c
parent65ac1a60a57e2c55f2ac37f27095f6b012295e81 (diff)
downloadlwn-832b50725373e8c46781b7d4db104ec9cf564a6b.tar.gz
lwn-832b50725373e8c46781b7d4db104ec9cf564a6b.zip
mm: mmap_lock: use local locks instead of disabling preemption
mmap_lock will explicitly disable/enable preemption upon manipulating its local CPU variables. This is to be expected, but in this case, it doesn't play well with PREEMPT_RT. The preemption disabled code section also takes a spin-lock. Spin-locks in RT systems will try to schedule, which is exactly what we're trying to avoid. To mitigate this, convert the explicit preemption handling to local_locks. Which are RT aware, and will disable migration instead of preemption when PREEMPT_RT=y. The faulty call trace looks like the following: __mmap_lock_do_trace_*() preempt_disable() get_mm_memcg_path() cgroup_path() kernfs_path_from_node() spin_lock_irqsave() /* Scheduling while atomic! */ Link: https://lkml.kernel.org/r/20210604163506.2103900-1-nsaenzju@redhat.com Fixes: 2b5067a8143e3 ("mm: mmap_lock: add tracepoints around lock acquisition ") Signed-off-by: Nicolas Saenz Julienne <nsaenzju@redhat.com> Tested-by: Axel Rasmussen <axelrasmussen@google.com> Reviewed-by: Axel Rasmussen <axelrasmussen@google.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/page_reporting.c')
0 files changed, 0 insertions, 0 deletions