NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

PR/56952 CVS commit: src/sys/uvm



The following reply was made to PR kern/56952; it has been noted by GNATS.

From: "Chuck Silvers" <chs%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc: 
Subject: PR/56952 CVS commit: src/sys/uvm
Date: Mon, 15 May 2023 01:42:42 +0000

 Module Name:	src
 Committed By:	chs
 Date:		Mon May 15 01:42:42 UTC 2023
 
 Modified Files:
 	src/sys/uvm: uvm_map.c
 
 Log Message:
 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.405 -r1.406 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.
 


Home | Main Index | Thread Index | Old Index