Lines Matching defs:cache
908 static inline void cache_init(struct gnttab_page_cache *cache)
910 cache->pages = NULL;
913 static inline bool cache_empty(struct gnttab_page_cache *cache)
915 return !cache->pages;
918 static inline struct page *cache_deq(struct gnttab_page_cache *cache)
922 page = cache->pages;
923 cache->pages = page->zone_device_data;
928 static inline void cache_enq(struct gnttab_page_cache *cache, struct page *page)
930 page->zone_device_data = cache->pages;
931 cache->pages = page;
934 static inline void cache_init(struct gnttab_page_cache *cache)
936 INIT_LIST_HEAD(&cache->pages);
939 static inline bool cache_empty(struct gnttab_page_cache *cache)
941 return list_empty(&cache->pages);
944 static inline struct page *cache_deq(struct gnttab_page_cache *cache)
948 page = list_first_entry(&cache->pages, struct page, lru);
954 static inline void cache_enq(struct gnttab_page_cache *cache, struct page *page)
956 list_add(&page->lru, &cache->pages);
960 void gnttab_page_cache_init(struct gnttab_page_cache *cache)
962 spin_lock_init(&cache->lock);
963 cache_init(cache);
964 cache->num_pages = 0;
968 int gnttab_page_cache_get(struct gnttab_page_cache *cache, struct page **page)
972 spin_lock_irqsave(&cache->lock, flags);
974 if (cache_empty(cache)) {
975 spin_unlock_irqrestore(&cache->lock, flags);
979 page[0] = cache_deq(cache);
980 cache->num_pages--;
982 spin_unlock_irqrestore(&cache->lock, flags);
988 void gnttab_page_cache_put(struct gnttab_page_cache *cache, struct page **page,
994 spin_lock_irqsave(&cache->lock, flags);
997 cache_enq(cache, page[i]);
998 cache->num_pages += num;
1000 spin_unlock_irqrestore(&cache->lock, flags);
1004 void gnttab_page_cache_shrink(struct gnttab_page_cache *cache, unsigned int num)
1010 spin_lock_irqsave(&cache->lock, flags);
1012 while (cache->num_pages > num) {
1013 page[i] = cache_deq(cache);
1014 cache->num_pages--;
1016 spin_unlock_irqrestore(&cache->lock, flags);
1019 spin_lock_irqsave(&cache->lock, flags);
1023 spin_unlock_irqrestore(&cache->lock, flags);