diff options
author | Jason Baron <[email protected]> | 2020-04-06 20:11:23 -0700 |
---|---|---|
committer | Linus Torvalds <[email protected]> | 2020-04-07 10:43:44 -0700 |
commit | efcdd350d1f8a98fa9fb5280e5af0a22e2059a26 (patch) | |
tree | 679dda708eeafad77d182b70e38f18e5152e513e /tools/perf/scripts/python/exported-sql-viewer.py | |
parent | 282144e04b9a88b53dc16dc46e47f7d810e0b63b (diff) |
fs/epoll: make nesting accounting safe for -rt kernel
Davidlohr Bueso pointed out that when CONFIG_DEBUG_LOCK_ALLOC is set
ep_poll_safewake() can take several non-raw spinlocks after disabling
interrupts. Since a spinlock can block in the -rt kernel, we can't take a
spinlock after disabling interrupts. So let's re-work how we determine
the nesting level such that it plays nicely with the -rt kernel.
Let's introduce a 'nests' field in struct eventpoll that records the
current nesting level during ep_poll_callback(). Then, if we nest again
we can find the previous struct eventpoll that we were called from and
increase our count by 1. The 'nests' field is protected by
ep->poll_wait.lock.
I've also moved the visited field to reduce the size of struct eventpoll
from 184 bytes to 176 bytes on x86_64 for !CONFIG_DEBUG_LOCK_ALLOC, which
is typical for a production config.
Reported-by: Davidlohr Bueso <[email protected]>
Signed-off-by: Jason Baron <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Reviewed-by: Davidlohr Bueso <[email protected]>
Cc: Roman Penyaev <[email protected]>
Cc: Eric Wong <[email protected]>
Cc: Al Viro <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'tools/perf/scripts/python/exported-sql-viewer.py')
0 files changed, 0 insertions, 0 deletions