Lines Matching refs:es

66 static int space_init(struct entry_space *es, unsigned int nr_entries)
69 es->begin = es->end = NULL;
73 es->begin = vzalloc(array_size(nr_entries, sizeof(struct entry)));
74 if (!es->begin)
77 es->end = es->begin + nr_entries;
81 static void space_exit(struct entry_space *es)
83 vfree(es->begin);
86 static struct entry *__get_entry(struct entry_space *es, unsigned int block)
90 e = es->begin + block;
91 BUG_ON(e >= es->end);
96 static unsigned int to_index(struct entry_space *es, struct entry *e)
98 BUG_ON(e < es->begin || e >= es->end);
99 return e - es->begin;
102 static struct entry *to_entry(struct entry_space *es, unsigned int block)
107 return __get_entry(es, block);
123 static struct entry *l_head(struct entry_space *es, struct ilist *l)
125 return to_entry(es, l->head);
128 static struct entry *l_tail(struct entry_space *es, struct ilist *l)
130 return to_entry(es, l->tail);
133 static struct entry *l_next(struct entry_space *es, struct entry *e)
135 return to_entry(es, e->next);
138 static struct entry *l_prev(struct entry_space *es, struct entry *e)
140 return to_entry(es, e->prev);
148 static void l_add_head(struct entry_space *es, struct ilist *l, struct entry *e)
150 struct entry *head = l_head(es, l);
156 head->prev = l->head = to_index(es, e);
158 l->head = l->tail = to_index(es, e);
164 static void l_add_tail(struct entry_space *es, struct ilist *l, struct entry *e)
166 struct entry *tail = l_tail(es, l);
172 tail->next = l->tail = to_index(es, e);
174 l->head = l->tail = to_index(es, e);
180 static void l_add_before(struct entry_space *es, struct ilist *l,
183 struct entry *prev = l_prev(es, old);
186 l_add_head(es, l, e);
190 e->next = to_index(es, old);
191 prev->next = old->prev = to_index(es, e);
198 static void l_del(struct entry_space *es, struct ilist *l, struct entry *e)
200 struct entry *prev = l_prev(es, e);
201 struct entry *next = l_next(es, e);
217 static struct entry *l_pop_head(struct entry_space *es, struct ilist *l)
221 for (e = l_head(es, l); e; e = l_next(es, e))
223 l_del(es, l, e);
230 static struct entry *l_pop_tail(struct entry_space *es, struct ilist *l)
234 for (e = l_tail(es, l); e; e = l_prev(es, e))
236 l_del(es, l, e);
254 struct entry_space *es;
270 static void q_init(struct queue *q, struct entry_space *es, unsigned int nr_levels)
274 q->es = es;
303 l_add_tail(q->es, q->qs + e->level, e);
313 l_add_head(q->es, q->qs + e->level, e);
323 l_add_before(q->es, q->qs + e->level, old, e);
328 l_del(q->es, q->qs + e->level, e);
344 for (e = l_head(q->es, q->qs + level); e; e = l_next(q->es, e)) {
378 for (e = l_head(q->es, q->qs + level); e; e = l_next(q->es, e))
380 l_del(q->es, q->qs + e->level, e);
452 l_add_tail(q->es, l, e);
460 e = l_pop_tail(q->es, l);
467 l_add_tail(q->es, l_above, e);
481 for (de = l_head(q->es, q->qs + new_level); de && de->sentinel; de = l_next(q->es, de))
576 struct entry_space *es;
585 static int h_init(struct smq_hash_table *ht, struct entry_space *es, unsigned int nr_entries)
589 ht->es = es;
610 return to_entry(ht->es, ht->buckets[bucket]);
615 return to_entry(ht->es, e->hash_next);
621 ht->buckets[bucket] = to_index(ht->es, e);
694 struct entry_space *es;
701 static void init_allocator(struct entry_alloc *ea, struct entry_space *es,
706 ea->es = es;
712 l_add_tail(ea->es, &ea->free, __get_entry(ea->es, i));
738 e = l_pop_head(ea->es, &ea->free);
750 struct entry *e = __get_entry(ea->es, ea->begin + i);
754 l_del(ea->es, &ea->free, e);
768 l_add_tail(ea->es, &ea->free, e);
778 return to_index(ea->es, e) - ea->begin;
783 return __get_entry(ea->es, ea->begin + index);
810 struct entry_space es;
1370 space_exit(&mq->es);
1752 if (space_init(&mq->es, total_sentinels + mq->nr_hotspot_blocks + from_cblock(cache_size))) {
1757 init_allocator(&mq->writeback_sentinel_alloc, &mq->es, 0, nr_sentinels_per_queue);
1761 init_allocator(&mq->demote_sentinel_alloc, &mq->es, nr_sentinels_per_queue, total_sentinels);
1765 init_allocator(&mq->hotspot_alloc, &mq->es, total_sentinels,
1768 init_allocator(&mq->cache_alloc, &mq->es,
1792 q_init(&mq->hotspot, &mq->es, NR_HOTSPOT_LEVELS);
1797 q_init(&mq->clean, &mq->es, NR_CACHE_LEVELS);
1798 q_init(&mq->dirty, &mq->es, NR_CACHE_LEVELS);
1803 if (h_init(&mq->table, &mq->es, from_cblock(cache_size)))
1806 if (h_init(&mq->hotspot_table, &mq->es, mq->nr_hotspot_blocks))
1833 space_exit(&mq->es);