1 | /* |
2 | * Page cache for QEMU |
3 | * The cache is base on a hash of the page address |
4 | * |
5 | * Copyright 2012 Red Hat, Inc. and/or its affiliates |
6 | * |
7 | * Authors: |
8 | * Orit Wasserman <owasserm@redhat.com> |
9 | * |
10 | * This work is licensed under the terms of the GNU GPL, version 2 or later. |
11 | * See the COPYING file in the top-level directory. |
12 | * |
13 | */ |
14 | |
15 | #ifndef PAGE_CACHE_H |
16 | #define PAGE_CACHE_H |
17 | |
18 | /* Page cache for storing guest pages */ |
19 | typedef struct PageCache PageCache; |
20 | |
21 | /** |
22 | * cache_init: Initialize the page cache |
23 | * |
24 | * |
25 | * Returns new allocated cache or NULL on error |
26 | * |
27 | * @cache_size: cache size in bytes |
28 | * @page_size: cache page size |
29 | * @errp: set *errp if the check failed, with reason |
30 | */ |
31 | PageCache *cache_init(int64_t cache_size, size_t page_size, Error **errp); |
32 | /** |
33 | * cache_fini: free all cache resources |
34 | * @cache pointer to the PageCache struct |
35 | */ |
36 | void cache_fini(PageCache *cache); |
37 | |
38 | /** |
39 | * cache_is_cached: Checks to see if the page is cached |
40 | * |
41 | * Returns %true if page is cached |
42 | * |
43 | * @cache pointer to the PageCache struct |
44 | * @addr: page addr |
45 | * @current_age: current bitmap generation |
46 | */ |
47 | bool cache_is_cached(const PageCache *cache, uint64_t addr, |
48 | uint64_t current_age); |
49 | |
50 | /** |
51 | * get_cached_data: Get the data cached for an addr |
52 | * |
53 | * Returns pointer to the data cached or NULL if not cached |
54 | * |
55 | * @cache pointer to the PageCache struct |
56 | * @addr: page addr |
57 | */ |
58 | uint8_t *get_cached_data(const PageCache *cache, uint64_t addr); |
59 | |
60 | /** |
61 | * cache_insert: insert the page into the cache. the page cache |
62 | * will dup the data on insert. the previous value will be overwritten |
63 | * |
64 | * Returns -1 when the page isn't inserted into cache |
65 | * |
66 | * @cache pointer to the PageCache struct |
67 | * @addr: page address |
68 | * @pdata: pointer to the page |
69 | * @current_age: current bitmap generation |
70 | */ |
71 | int cache_insert(PageCache *cache, uint64_t addr, const uint8_t *pdata, |
72 | uint64_t current_age); |
73 | |
74 | #endif |
75 | |