Lines Matching refs:cache

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