Changeset View
Changeset View
Standalone View
Standalone View
head/sys/vm/uma_core.c
Show First 20 Lines • Show All 727 Lines • ▼ Show 20 Lines | zone_put_bucket(uma_zone_t zone, int domain, uma_bucket_t bucket, void *udata, | ||||
* Conditionally set the maximum number of items. | * Conditionally set the maximum number of items. | ||||
*/ | */ | ||||
zdom->uzd_nitems += bucket->ub_cnt; | zdom->uzd_nitems += bucket->ub_cnt; | ||||
if (__predict_true(zdom->uzd_nitems < zone->uz_bucket_max)) { | if (__predict_true(zdom->uzd_nitems < zone->uz_bucket_max)) { | ||||
if (ws) | if (ws) | ||||
zone_domain_imax_set(zdom, zdom->uzd_nitems); | zone_domain_imax_set(zdom, zdom->uzd_nitems); | ||||
if (STAILQ_EMPTY(&zdom->uzd_buckets)) | if (STAILQ_EMPTY(&zdom->uzd_buckets)) | ||||
zdom->uzd_seq = bucket->ub_seq; | zdom->uzd_seq = bucket->ub_seq; | ||||
/* | |||||
* Try to promote reuse of recently used items. For items | |||||
* protected by SMR, try to defer reuse to minimize polling. | |||||
*/ | |||||
if (bucket->ub_seq == SMR_SEQ_INVALID) | |||||
STAILQ_INSERT_HEAD(&zdom->uzd_buckets, bucket, ub_link); | |||||
else | |||||
STAILQ_INSERT_TAIL(&zdom->uzd_buckets, bucket, ub_link); | STAILQ_INSERT_TAIL(&zdom->uzd_buckets, bucket, ub_link); | ||||
ZDOM_UNLOCK(zdom); | ZDOM_UNLOCK(zdom); | ||||
return; | return; | ||||
} | } | ||||
zdom->uzd_nitems -= bucket->ub_cnt; | zdom->uzd_nitems -= bucket->ub_cnt; | ||||
ZDOM_UNLOCK(zdom); | ZDOM_UNLOCK(zdom); | ||||
out: | out: | ||||
bucket_free(zone, bucket, udata); | bucket_free(zone, bucket, udata); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 4,699 Lines • Show Last 20 Lines |