+static struct lru_zone* pcache_zone;
+
+static int
+__pcache_try_evict(struct lru_node* obj)
+{
+ struct pcache_pg* page = container_of(obj, struct pcache_pg, lru);
+ pcache_invalidate(page->holder, page);
+ return 1;
+}
+
+static void
+pcache_free_page(void* va)
+{
+ pte_t* ptep = mkptep_va(VMS_SELF, (ptr_t)va);
+ pte_t pte = pte_at(ptep);
+ leaflet_return(pte_leaflet(pte));
+}
+
+static void*
+pcache_alloc_page()
+{
+ int i = 0;
+ ptr_t va = 0;
+ struct leaflet* leaflet = alloc_leaflet(0);
+
+ if (!leaflet) {
+ return NULL;
+ }
+
+ if (!(va = (ptr_t)vmap(leaflet, KERNEL_DATA))) {
+ leaflet_return(leaflet);
+ return NULL;
+ }
+
+ return (void*)va;
+}
+