xref: /qemu/migration/page_cache.h (revision ee0b44aa9d9450e873a761ca2030b2fa3ec52eb0)
19fb26641SOrit Wasserman /*
29fb26641SOrit Wasserman  * Page cache for QEMU
39fb26641SOrit Wasserman  * The cache is base on a hash of the page address
49fb26641SOrit Wasserman  *
59fb26641SOrit Wasserman  * Copyright 2012 Red Hat, Inc. and/or its affiliates
69fb26641SOrit Wasserman  *
79fb26641SOrit Wasserman  * Authors:
89fb26641SOrit Wasserman  *  Orit Wasserman  <owasserm@redhat.com>
99fb26641SOrit Wasserman  *
109fb26641SOrit Wasserman  * This work is licensed under the terms of the GNU GPL, version 2 or later.
119fb26641SOrit Wasserman  * See the COPYING file in the top-level directory.
129fb26641SOrit Wasserman  *
139fb26641SOrit Wasserman  */
149fb26641SOrit Wasserman 
159fb26641SOrit Wasserman #ifndef PAGE_CACHE_H
169fb26641SOrit Wasserman #define PAGE_CACHE_H
179fb26641SOrit Wasserman 
189fb26641SOrit Wasserman /* Page cache for storing guest pages */
199fb26641SOrit Wasserman typedef struct PageCache PageCache;
209fb26641SOrit Wasserman 
219fb26641SOrit Wasserman /**
229fb26641SOrit Wasserman  * cache_init: Initialize the page cache
239fb26641SOrit Wasserman  *
249fb26641SOrit Wasserman  *
259fb26641SOrit Wasserman  * Returns new allocated cache or NULL on error
269fb26641SOrit Wasserman  *
279fb26641SOrit Wasserman  * @cache pointer to the PageCache struct
289fb26641SOrit Wasserman  * @num_pages: cache maximal number of cached pages
299fb26641SOrit Wasserman  * @page_size: cache page size
309fb26641SOrit Wasserman  */
319fb26641SOrit Wasserman PageCache *cache_init(int64_t num_pages, unsigned int page_size);
329fb26641SOrit Wasserman 
339fb26641SOrit Wasserman /**
349fb26641SOrit Wasserman  * cache_fini: free all cache resources
359fb26641SOrit Wasserman  * @cache pointer to the PageCache struct
369fb26641SOrit Wasserman  */
379fb26641SOrit Wasserman void cache_fini(PageCache *cache);
389fb26641SOrit Wasserman 
399fb26641SOrit Wasserman /**
409fb26641SOrit Wasserman  * cache_is_cached: Checks to see if the page is cached
419fb26641SOrit Wasserman  *
429fb26641SOrit Wasserman  * Returns %true if page is cached
439fb26641SOrit Wasserman  *
449fb26641SOrit Wasserman  * @cache pointer to the PageCache struct
459fb26641SOrit Wasserman  * @addr: page addr
469fb26641SOrit Wasserman  */
479fb26641SOrit Wasserman bool cache_is_cached(const PageCache *cache, uint64_t addr);
489fb26641SOrit Wasserman 
499fb26641SOrit Wasserman /**
509fb26641SOrit Wasserman  * get_cached_data: Get the data cached for an addr
519fb26641SOrit Wasserman  *
529fb26641SOrit Wasserman  * Returns pointer to the data cached or NULL if not cached
539fb26641SOrit Wasserman  *
549fb26641SOrit Wasserman  * @cache pointer to the PageCache struct
559fb26641SOrit Wasserman  * @addr: page addr
569fb26641SOrit Wasserman  */
579fb26641SOrit Wasserman uint8_t *get_cached_data(const PageCache *cache, uint64_t addr);
589fb26641SOrit Wasserman 
599fb26641SOrit Wasserman /**
60*ee0b44aaSPeter Lieven  * cache_insert: insert the page into the cache. the page cache
61*ee0b44aaSPeter Lieven  * will dup the data on insert. the previous value will be overwritten
629fb26641SOrit Wasserman  *
639fb26641SOrit Wasserman  * @cache pointer to the PageCache struct
649fb26641SOrit Wasserman  * @addr: page address
659fb26641SOrit Wasserman  * @pdata: pointer to the page
669fb26641SOrit Wasserman  */
679fb26641SOrit Wasserman void cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata);
689fb26641SOrit Wasserman 
699fb26641SOrit Wasserman /**
709fb26641SOrit Wasserman  * cache_resize: resize the page cache. In case of size reduction the extra
719fb26641SOrit Wasserman  * pages will be freed
729fb26641SOrit Wasserman  *
739fb26641SOrit Wasserman  * Returns -1 on error new cache size on success
749fb26641SOrit Wasserman  *
759fb26641SOrit Wasserman  * @cache pointer to the PageCache struct
769fb26641SOrit Wasserman  * @num_pages: new page cache size (in pages)
779fb26641SOrit Wasserman  */
789fb26641SOrit Wasserman int64_t cache_resize(PageCache *cache, int64_t num_pages);
799fb26641SOrit Wasserman 
809fb26641SOrit Wasserman #endif
81