Lines Matching refs:bucket

38    struct mm_bucket bucket[MM_NUM_BUCKETS];
99 return &cache->bucket[MAX2(order, MM_MIN_ORDER) - MM_MIN_ORDER];
123 mm_slab_new(struct nouveau_mman *cache, struct mm_bucket *bucket, int chunk_order)
129 simple_mtx_assert_locked(&bucket->lock);
155 assert(bucket == mm_bucket_by_order(cache, chunk_order));
156 list_add(&slab->head, &bucket->free);
172 struct mm_bucket *bucket;
177 bucket = mm_bucket_by_size(cache, size);
178 if (!bucket) {
193 simple_mtx_lock(&bucket->lock);
194 if (!list_is_empty(&bucket->used)) {
195 slab = list_entry(bucket->used.next, struct mm_slab, head);
197 if (list_is_empty(&bucket->free)) {
198 mm_slab_new(cache, bucket, MAX2(mm_get_order(size), MM_MIN_ORDER));
200 slab = list_entry(bucket->free.next, struct mm_slab, head);
203 list_add(&slab->head, &bucket->used);
212 list_add(&slab->head, &bucket->full);
214 simple_mtx_unlock(&bucket->lock);
226 struct mm_bucket *bucket = mm_bucket_by_order(slab->cache, slab->order);
228 simple_mtx_lock(&bucket->lock);
233 list_addtail(&slab->head, &bucket->free);
237 list_addtail(&slab->head, &bucket->used);
239 simple_mtx_unlock(&bucket->lock);
266 list_inithead(&cache->bucket[i].free);
267 list_inithead(&cache->bucket[i].used);
268 list_inithead(&cache->bucket[i].full);
269 simple_mtx_init(&cache->bucket[i].lock, mtx_plain);
296 if (!list_is_empty(&cache->bucket[i].used) ||
297 !list_is_empty(&cache->bucket[i].full))
301 nouveau_mm_free_slabs(&cache->bucket[i].free);
302 nouveau_mm_free_slabs(&cache->bucket[i].used);
303 nouveau_mm_free_slabs(&cache->bucket[i].full);
304 simple_mtx_destroy(&cache->bucket[i].lock);