]> git.baikalelectronics.ru Git - kernel.git/commit
ring-buffer: Allow for rescheduling when removing pages
authorVaibhav Nagarnaik <vnagarnaik@google.com>
Fri, 7 Sep 2018 22:31:29 +0000 (15:31 -0700)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Mon, 17 Sep 2018 22:15:11 +0000 (18:15 -0400)
commiteeff9662d8a21ad8a38105e5b8835a73641c55a9
tree66a9f5651bb4d5b99a2ccb9e639b1fbd76487524
parent000c4f68e5c85848dfaa344de8c058722e62bc59
ring-buffer: Allow for rescheduling when removing pages

When reducing ring buffer size, pages are removed by scheduling a work
item on each CPU for the corresponding CPU ring buffer. After the pages
are removed from ring buffer linked list, the pages are free()d in a
tight loop. The loop does not give up CPU until all pages are removed.
In a worst case behavior, when lot of pages are to be freed, it can
cause system stall.

After the pages are removed from the list, the free() can happen while
the work is rescheduled. Call cond_resched() in the loop to prevent the
system hangup.

Link: http://lkml.kernel.org/r/20180907223129.71994-1-vnagarnaik@google.com
Cc: stable@vger.kernel.org
Fixes: 7452527f5cb83 ("ring-buffer: Make removal of ring buffer pages atomic")
Reported-by: Jason Behmer <jbehmer@google.com>
Signed-off-by: Vaibhav Nagarnaik <vnagarnaik@google.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/ring_buffer.c