Lines Matching refs:es
65 static int space_init(struct entry_space *es, unsigned nr_entries) in space_init() argument
68 es->begin = es->end = NULL; in space_init()
72 es->begin = vzalloc(array_size(nr_entries, sizeof(struct entry))); in space_init()
73 if (!es->begin) in space_init()
76 es->end = es->begin + nr_entries; in space_init()
80 static void space_exit(struct entry_space *es) in space_exit() argument
82 vfree(es->begin); in space_exit()
85 static struct entry *__get_entry(struct entry_space *es, unsigned block) in __get_entry() argument
89 e = es->begin + block; in __get_entry()
90 BUG_ON(e >= es->end); in __get_entry()
95 static unsigned to_index(struct entry_space *es, struct entry *e) in to_index() argument
97 BUG_ON(e < es->begin || e >= es->end); in to_index()
98 return e - es->begin; in to_index()
101 static struct entry *to_entry(struct entry_space *es, unsigned block) in to_entry() argument
106 return __get_entry(es, block); in to_entry()
122 static struct entry *l_head(struct entry_space *es, struct ilist *l) in l_head() argument
124 return to_entry(es, l->head); in l_head()
127 static struct entry *l_tail(struct entry_space *es, struct ilist *l) in l_tail() argument
129 return to_entry(es, l->tail); in l_tail()
132 static struct entry *l_next(struct entry_space *es, struct entry *e) in l_next() argument
134 return to_entry(es, e->next); in l_next()
137 static struct entry *l_prev(struct entry_space *es, struct entry *e) in l_prev() argument
139 return to_entry(es, e->prev); in l_prev()
147 static void l_add_head(struct entry_space *es, struct ilist *l, struct entry *e) in l_add_head() argument
149 struct entry *head = l_head(es, l); in l_add_head()
155 head->prev = l->head = to_index(es, e); in l_add_head()
157 l->head = l->tail = to_index(es, e); in l_add_head()
163 static void l_add_tail(struct entry_space *es, struct ilist *l, struct entry *e) in l_add_tail() argument
165 struct entry *tail = l_tail(es, l); in l_add_tail()
171 tail->next = l->tail = to_index(es, e); in l_add_tail()
173 l->head = l->tail = to_index(es, e); in l_add_tail()
179 static void l_add_before(struct entry_space *es, struct ilist *l, in l_add_before() argument
182 struct entry *prev = l_prev(es, old); in l_add_before()
185 l_add_head(es, l, e); in l_add_before()
189 e->next = to_index(es, old); in l_add_before()
190 prev->next = old->prev = to_index(es, e); in l_add_before()
197 static void l_del(struct entry_space *es, struct ilist *l, struct entry *e) in l_del() argument
199 struct entry *prev = l_prev(es, e); in l_del()
200 struct entry *next = l_next(es, e); in l_del()
216 static struct entry *l_pop_head(struct entry_space *es, struct ilist *l) in l_pop_head() argument
220 for (e = l_head(es, l); e; e = l_next(es, e)) in l_pop_head()
222 l_del(es, l, e); in l_pop_head()
229 static struct entry *l_pop_tail(struct entry_space *es, struct ilist *l) in l_pop_tail() argument
233 for (e = l_tail(es, l); e; e = l_prev(es, e)) in l_pop_tail()
235 l_del(es, l, e); in l_pop_tail()
253 struct entry_space *es; member
269 static void q_init(struct queue *q, struct entry_space *es, unsigned nr_levels) in q_init() argument
273 q->es = es; in q_init()
302 l_add_tail(q->es, q->qs + e->level, e); in q_push()
312 l_add_head(q->es, q->qs + e->level, e); in q_push_front()
322 l_add_before(q->es, q->qs + e->level, old, e); in q_push_before()
327 l_del(q->es, q->qs + e->level, e); in q_del()
343 for (e = l_head(q->es, q->qs + level); e; e = l_next(q->es, e)) { in q_peek()
377 for (e = l_head(q->es, q->qs + level); e; e = l_next(q->es, e)) in __redist_pop_from()
379 l_del(q->es, q->qs + e->level, e); in __redist_pop_from()
450 l_add_tail(q->es, l, e); in q_redistribute()
458 e = l_pop_tail(q->es, l); in q_redistribute()
465 l_add_tail(q->es, l_above, e); in q_redistribute()
479 for (de = l_head(q->es, q->qs + new_level); de && de->sentinel; de = l_next(q->es, de)) in q_requeue()
574 struct entry_space *es; member
583 static int h_init(struct smq_hash_table *ht, struct entry_space *es, unsigned nr_entries) in h_init() argument
587 ht->es = es; in h_init()
608 return to_entry(ht->es, ht->buckets[bucket]); in h_head()
613 return to_entry(ht->es, e->hash_next); in h_next()
619 ht->buckets[bucket] = to_index(ht->es, e); in __h_insert()
691 struct entry_space *es; member
698 static void init_allocator(struct entry_alloc *ea, struct entry_space *es, in init_allocator() argument
703 ea->es = es; in init_allocator()
709 l_add_tail(ea->es, &ea->free, __get_entry(ea->es, i)); in init_allocator()
735 e = l_pop_head(ea->es, &ea->free); in alloc_entry()
747 struct entry *e = __get_entry(ea->es, ea->begin + i); in alloc_particular_entry()
751 l_del(ea->es, &ea->free, e); in alloc_particular_entry()
765 l_add_tail(ea->es, &ea->free, e); in free_entry()
775 return to_index(ea->es, e) - ea->begin; in get_index()
780 return __get_entry(ea->es, ea->begin + index); in get_entry()
807 struct entry_space es; member
1359 space_exit(&mq->es); in smq_destroy()
1742 if (space_init(&mq->es, total_sentinels + mq->nr_hotspot_blocks + from_cblock(cache_size))) { in __smq_create()
1747 init_allocator(&mq->writeback_sentinel_alloc, &mq->es, 0, nr_sentinels_per_queue); in __smq_create()
1751 init_allocator(&mq->demote_sentinel_alloc, &mq->es, nr_sentinels_per_queue, total_sentinels); in __smq_create()
1755 init_allocator(&mq->hotspot_alloc, &mq->es, total_sentinels, in __smq_create()
1758 init_allocator(&mq->cache_alloc, &mq->es, in __smq_create()
1782 q_init(&mq->hotspot, &mq->es, NR_HOTSPOT_LEVELS); in __smq_create()
1787 q_init(&mq->clean, &mq->es, NR_CACHE_LEVELS); in __smq_create()
1788 q_init(&mq->dirty, &mq->es, NR_CACHE_LEVELS); in __smq_create()
1793 if (h_init(&mq->table, &mq->es, from_cblock(cache_size))) in __smq_create()
1796 if (h_init(&mq->hotspot_table, &mq->es, mq->nr_hotspot_blocks)) in __smq_create()
1822 space_exit(&mq->es); in __smq_create()