Statistics
| Branch: | Revision:

root / include / migration / page_cache.h @ feature-archipelago

History | View | Annotate | Download (2 kB)

1 9fb26641 Orit Wasserman
/*
2 9fb26641 Orit Wasserman
 * Page cache for QEMU
3 9fb26641 Orit Wasserman
 * The cache is base on a hash of the page address
4 9fb26641 Orit Wasserman
 *
5 9fb26641 Orit Wasserman
 * Copyright 2012 Red Hat, Inc. and/or its affiliates
6 9fb26641 Orit Wasserman
 *
7 9fb26641 Orit Wasserman
 * Authors:
8 9fb26641 Orit Wasserman
 *  Orit Wasserman  <owasserm@redhat.com>
9 9fb26641 Orit Wasserman
 *
10 9fb26641 Orit Wasserman
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
11 9fb26641 Orit Wasserman
 * See the COPYING file in the top-level directory.
12 9fb26641 Orit Wasserman
 *
13 9fb26641 Orit Wasserman
 */
14 9fb26641 Orit Wasserman
15 9fb26641 Orit Wasserman
#ifndef PAGE_CACHE_H
16 9fb26641 Orit Wasserman
#define PAGE_CACHE_H
17 9fb26641 Orit Wasserman
18 9fb26641 Orit Wasserman
/* Page cache for storing guest pages */
19 9fb26641 Orit Wasserman
typedef struct PageCache PageCache;
20 9fb26641 Orit Wasserman
21 9fb26641 Orit Wasserman
/**
22 9fb26641 Orit Wasserman
 * cache_init: Initialize the page cache
23 9fb26641 Orit Wasserman
 *
24 9fb26641 Orit Wasserman
 *
25 9fb26641 Orit Wasserman
 * Returns new allocated cache or NULL on error
26 9fb26641 Orit Wasserman
 *
27 9fb26641 Orit Wasserman
 * @cache pointer to the PageCache struct
28 9fb26641 Orit Wasserman
 * @num_pages: cache maximal number of cached pages
29 9fb26641 Orit Wasserman
 * @page_size: cache page size
30 9fb26641 Orit Wasserman
 */
31 9fb26641 Orit Wasserman
PageCache *cache_init(int64_t num_pages, unsigned int page_size);
32 9fb26641 Orit Wasserman
33 9fb26641 Orit Wasserman
/**
34 9fb26641 Orit Wasserman
 * cache_fini: free all cache resources
35 9fb26641 Orit Wasserman
 * @cache pointer to the PageCache struct
36 9fb26641 Orit Wasserman
 */
37 9fb26641 Orit Wasserman
void cache_fini(PageCache *cache);
38 9fb26641 Orit Wasserman
39 9fb26641 Orit Wasserman
/**
40 9fb26641 Orit Wasserman
 * cache_is_cached: Checks to see if the page is cached
41 9fb26641 Orit Wasserman
 *
42 9fb26641 Orit Wasserman
 * Returns %true if page is cached
43 9fb26641 Orit Wasserman
 *
44 9fb26641 Orit Wasserman
 * @cache pointer to the PageCache struct
45 9fb26641 Orit Wasserman
 * @addr: page addr
46 9fb26641 Orit Wasserman
 */
47 9fb26641 Orit Wasserman
bool cache_is_cached(const PageCache *cache, uint64_t addr);
48 9fb26641 Orit Wasserman
49 9fb26641 Orit Wasserman
/**
50 9fb26641 Orit Wasserman
 * get_cached_data: Get the data cached for an addr
51 9fb26641 Orit Wasserman
 *
52 9fb26641 Orit Wasserman
 * Returns pointer to the data cached or NULL if not cached
53 9fb26641 Orit Wasserman
 *
54 9fb26641 Orit Wasserman
 * @cache pointer to the PageCache struct
55 9fb26641 Orit Wasserman
 * @addr: page addr
56 9fb26641 Orit Wasserman
 */
57 9fb26641 Orit Wasserman
uint8_t *get_cached_data(const PageCache *cache, uint64_t addr);
58 9fb26641 Orit Wasserman
59 9fb26641 Orit Wasserman
/**
60 ee0b44aa Peter Lieven
 * cache_insert: insert the page into the cache. the page cache
61 ee0b44aa Peter Lieven
 * will dup the data on insert. the previous value will be overwritten
62 9fb26641 Orit Wasserman
 *
63 89db9987 Orit Wasserman
 * Returns -1 on error
64 89db9987 Orit Wasserman
 *
65 9fb26641 Orit Wasserman
 * @cache pointer to the PageCache struct
66 9fb26641 Orit Wasserman
 * @addr: page address
67 9fb26641 Orit Wasserman
 * @pdata: pointer to the page
68 9fb26641 Orit Wasserman
 */
69 6d3cb1f9 Dr. David Alan Gilbert
int cache_insert(PageCache *cache, uint64_t addr, const uint8_t *pdata);
70 9fb26641 Orit Wasserman
71 9fb26641 Orit Wasserman
/**
72 9fb26641 Orit Wasserman
 * cache_resize: resize the page cache. In case of size reduction the extra
73 9fb26641 Orit Wasserman
 * pages will be freed
74 9fb26641 Orit Wasserman
 *
75 9fb26641 Orit Wasserman
 * Returns -1 on error new cache size on success
76 9fb26641 Orit Wasserman
 *
77 9fb26641 Orit Wasserman
 * @cache pointer to the PageCache struct
78 9fb26641 Orit Wasserman
 * @num_pages: new page cache size (in pages)
79 9fb26641 Orit Wasserman
 */
80 9fb26641 Orit Wasserman
int64_t cache_resize(PageCache *cache, int64_t num_pages);
81 9fb26641 Orit Wasserman
82 9fb26641 Orit Wasserman
#endif