Lines Matching refs:es

65 static int space_init(struct entry_space *es, unsigned nr_entries)
68 es->begin = es->end = NULL;
72 es->begin = vzalloc(array_size(nr_entries, sizeof(struct entry)));
73 if (!es->begin)
76 es->end = es->begin + nr_entries;
80 static void space_exit(struct entry_space *es)
82 vfree(es->begin);
85 static struct entry *__get_entry(struct entry_space *es, unsigned block)
89 e = es->begin + block;
90 BUG_ON(e >= es->end);
95 static unsigned to_index(struct entry_space *es, struct entry *e)
97 BUG_ON(e < es->begin || e >= es->end);
98 return e - es->begin;
101 static struct entry *to_entry(struct entry_space *es, unsigned block)
106 return __get_entry(es, block);
122 static struct entry *l_head(struct entry_space *es, struct ilist *l)
124 return to_entry(es, l->head);
127 static struct entry *l_tail(struct entry_space *es, struct ilist *l)
129 return to_entry(es, l->tail);
132 static struct entry *l_next(struct entry_space *es, struct entry *e)
134 return to_entry(es, e->next);
137 static struct entry *l_prev(struct entry_space *es, struct entry *e)
139 return to_entry(es, e->prev);
147 static void l_add_head(struct entry_space *es, struct ilist *l, struct entry *e)
149 struct entry *head = l_head(es, l);
155 head->prev = l->head = to_index(es, e);
157 l->head = l->tail = to_index(es, e);
163 static void l_add_tail(struct entry_space *es, struct ilist *l, struct entry *e)
165 struct entry *tail = l_tail(es, l);
171 tail->next = l->tail = to_index(es, e);
173 l->head = l->tail = to_index(es, e);
179 static void l_add_before(struct entry_space *es, struct ilist *l,
182 struct entry *prev = l_prev(es, old);
185 l_add_head(es, l, e);
189 e->next = to_index(es, old);
190 prev->next = old->prev = to_index(es, e);
197 static void l_del(struct entry_space *es, struct ilist *l, struct entry *e)
199 struct entry *prev = l_prev(es, e);
200 struct entry *next = l_next(es, e);
216 static struct entry *l_pop_head(struct entry_space *es, struct ilist *l)
220 for (e = l_head(es, l); e; e = l_next(es, e))
222 l_del(es, l, e);
229 static struct entry *l_pop_tail(struct entry_space *es, struct ilist *l)
233 for (e = l_tail(es, l); e; e = l_prev(es, e))
235 l_del(es, l, e);
253 struct entry_space *es;
269 static void q_init(struct queue *q, struct entry_space *es, unsigned nr_levels)
273 q->es = es;
302 l_add_tail(q->es, q->qs + e->level, e);
312 l_add_head(q->es, q->qs + e->level, e);
322 l_add_before(q->es, q->qs + e->level, old, e);
327 l_del(q->es, q->qs + e->level, e);
343 for (e = l_head(q->es, q->qs + level); e; e = l_next(q->es, e)) {
377 for (e = l_head(q->es, q->qs + level); e; e = l_next(q->es, e))
379 l_del(q->es, q->qs + e->level, e);
450 l_add_tail(q->es, l, e);
458 e = l_pop_tail(q->es, l);
465 l_add_tail(q->es, l_above, e);
479 for (de = l_head(q->es, q->qs + new_level); de && de->sentinel; de = l_next(q->es, de))
574 struct entry_space *es;
583 static int h_init(struct smq_hash_table *ht, struct entry_space *es, unsigned nr_entries)
587 ht->es = es;
608 return to_entry(ht->es, ht->buckets[bucket]);
613 return to_entry(ht->es, e->hash_next);
619 ht->buckets[bucket] = to_index(ht->es, e);
691 struct entry_space *es;
698 static void init_allocator(struct entry_alloc *ea, struct entry_space *es,
703 ea->es = es;
709 l_add_tail(ea->es, &ea->free, __get_entry(ea->es, i));
735 e = l_pop_head(ea->es, &ea->free);
747 struct entry *e = __get_entry(ea->es, ea->begin + i);
751 l_del(ea->es, &ea->free, e);
765 l_add_tail(ea->es, &ea->free, e);
775 return to_index(ea->es, e) - ea->begin;
780 return __get_entry(ea->es, ea->begin + index);
807 struct entry_space es;
1365 space_exit(&mq->es);
1746 if (space_init(&mq->es, total_sentinels + mq->nr_hotspot_blocks + from_cblock(cache_size))) {
1751 init_allocator(&mq->writeback_sentinel_alloc, &mq->es, 0, nr_sentinels_per_queue);
1755 init_allocator(&mq->demote_sentinel_alloc, &mq->es, nr_sentinels_per_queue, total_sentinels);
1759 init_allocator(&mq->hotspot_alloc, &mq->es, total_sentinels,
1762 init_allocator(&mq->cache_alloc, &mq->es,
1786 q_init(&mq->hotspot, &mq->es, NR_HOTSPOT_LEVELS);
1791 q_init(&mq->clean, &mq->es, NR_CACHE_LEVELS);
1792 q_init(&mq->dirty, &mq->es, NR_CACHE_LEVELS);
1797 if (h_init(&mq->table, &mq->es, from_cblock(cache_size)))
1800 if (h_init(&mq->hotspot_table, &mq->es, mq->nr_hotspot_blocks))
1827 space_exit(&mq->es);