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 |