1 #include <lunaix/ds/lru.h>
2 #include <lunaix/mm/valloc.h>
4 struct llist_header zone_lead = { .next = &zone_lead, .prev = &zone_lead };
9 struct lru_zone* zone = valloc(sizeof(struct lru_zone));
14 llist_init_head(&zone->lead_node);
15 llist_append(&zone_lead, &zone->zones);
21 lru_use_one(struct lru_zone* zone, struct lru_node* node)
23 if (node->lru_nodes.next && node->lru_nodes.prev) {
24 llist_delete(&node->lru_nodes);
27 llist_prepend(&zone->lead_node, &node->lru_nodes);
31 lru_evict_one(struct lru_zone* zone)
33 struct llist_header* tail = zone->lead_node.prev;
34 if (tail == &zone->lead_node) {
40 return container_of(tail, struct lru_node, lru_nodes);
44 lru_remove(struct lru_node* node)
46 if (node->lru_nodes.next && node->lru_nodes.prev) {
47 llist_delete(&node->lru_nodes);