HomeFreeBSD

uma: Avoid allocating buckets with the cross-domain lock held

Description

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

Details

Provenance
markjAuthored on
Differential Revision
D27341: uma: Avoid allocating buckets with the cross-domain lock held
Parents
rS368188: Fix compilation on head and while here:
Branches
Unknown
Tags
Unknown