Module Name: src Committed By: martin Date: Mon May 15 10:32:53 UTC 2023
Modified Files: src/sys/uvm [netbsd-10]: uvm_map.c Log Message: Pull up following revision(s) (requested by chs in ticket #167): sys/uvm/uvm_map.c: revision 1.406 uvm: avoid a deadlock in uvm_map_clean() The locking order between map locks and page "busy" locks is that the page "busy" lock comes first, but uvm_map_clean() breaks this rule by holding a map locked (as reader) while waiting for page "busy" locks. If another thread is in the page-fault path holding a page "busy" lock while waiting for the map lock (as a reader) and at the same time a third thread is blocked waiting for the map lock as a writer (which blocks the page-fault thread), then these three threads will all deadlock with each other. Fix this by marking the map "busy" (to block any modifications) and unlocking the map lock before possibly waiting for any page "busy" locks. Martin Pieuchot reported that the same problem existed in OpenBSD he applied this fix there after several people tested it. fixes PR 56952 To generate a diff of this commit: cvs rdiff -u -r1.403 -r1.403.2.1 src/sys/uvm/uvm_map.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.