Mark Johnston 991f23ef20 uma: Avoid allocating buckets with the cross-domain lock held
Allocation of a bucket can trigger a cross-domain free in the bucket
zone, e.g., if the per-CPU alloc bucket is empty, we free it and get
migrated to a remote domain.  This can lead to deadlocks since a bucket
zone may allocate buckets from itself or a pair of bucket zones could be
allocating from each other.

Fix the problem by dropping the cross-domain lock before allocating a
new bucket and handling refill races.  Use a list of empty buckets to
ensure that we can make forward progress.

Reported by:	imp, mjg (witness(9) warnings)
Discussed with:	jeff
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D27341
2020-11-30 16:18:33 +00:00
..
2020-11-19 03:59:21 +00:00
2020-02-17 15:11:07 +00:00
2020-11-09 00:34:23 +00:00
2020-10-14 22:51:40 +00:00
2020-08-17 13:02:01 +00:00
2020-11-04 16:30:56 +00:00
2020-11-19 03:59:21 +00:00
2020-08-17 13:02:01 +00:00
2020-11-19 03:59:21 +00:00
2020-11-19 03:59:21 +00:00
2020-11-19 03:59:21 +00:00
2020-11-19 03:59:21 +00:00