11f070489SIgor Mammedov /* 21f070489SIgor Mammedov * QEMU Host Memory Backend 31f070489SIgor Mammedov * 41f070489SIgor Mammedov * Copyright (C) 2013-2014 Red Hat Inc 51f070489SIgor Mammedov * 61f070489SIgor Mammedov * Authors: 71f070489SIgor Mammedov * Igor Mammedov <imammedo@redhat.com> 81f070489SIgor Mammedov * 91f070489SIgor Mammedov * This work is licensed under the terms of the GNU GPL, version 2 or later. 101f070489SIgor Mammedov * See the COPYING file in the top-level directory. 111f070489SIgor Mammedov */ 12121d0712SMarkus Armbruster 13121d0712SMarkus Armbruster #ifndef SYSEMU_HOSTMEM_H 14121d0712SMarkus Armbruster #define SYSEMU_HOSTMEM_H 151f070489SIgor Mammedov 16b58c5c2dSMarkus Armbruster #include "sysemu/numa.h" 178ac25c84SMarkus Armbruster #include "qapi/qapi-types-machine.h" 181f070489SIgor Mammedov #include "qom/object.h" 191f070489SIgor Mammedov #include "exec/memory.h" 204cf1b76bSHu Tao #include "qemu/bitmap.h" 21e6816458SDavid Hildenbrand #include "qemu/thread-context.h" 221f070489SIgor Mammedov 231f070489SIgor Mammedov #define TYPE_MEMORY_BACKEND "memory-backend" 24c821774aSEduardo Habkost OBJECT_DECLARE_TYPE(HostMemoryBackend, HostMemoryBackendClass, 2530b5707cSEduardo Habkost MEMORY_BACKEND) 261f070489SIgor Mammedov 27900c0ba3SIgor Mammedov /* hostmem-ram.c */ 28900c0ba3SIgor Mammedov /** 29900c0ba3SIgor Mammedov * @TYPE_MEMORY_BACKEND_RAM: 30900c0ba3SIgor Mammedov * name of backend that uses mmap on the anonymous RAM 31900c0ba3SIgor Mammedov */ 32900c0ba3SIgor Mammedov 33900c0ba3SIgor Mammedov #define TYPE_MEMORY_BACKEND_RAM "memory-backend-ram" 34900c0ba3SIgor Mammedov 35900c0ba3SIgor Mammedov /* hostmem-file.c */ 36900c0ba3SIgor Mammedov /** 37900c0ba3SIgor Mammedov * @TYPE_MEMORY_BACKEND_FILE: 38900c0ba3SIgor Mammedov * name of backend that uses mmap on a file descriptor 39900c0ba3SIgor Mammedov */ 40900c0ba3SIgor Mammedov #define TYPE_MEMORY_BACKEND_FILE "memory-backend-file" 41900c0ba3SIgor Mammedov 42*1a986749SDorjoy Chowdhury #define TYPE_MEMORY_BACKEND_MEMFD "memory-backend-memfd" 43*1a986749SDorjoy Chowdhury 441f070489SIgor Mammedov 451f070489SIgor Mammedov /** 461f070489SIgor Mammedov * HostMemoryBackendClass: 471f070489SIgor Mammedov * @parent_class: opaque parent class container 481f070489SIgor Mammedov */ 491f070489SIgor Mammedov struct HostMemoryBackendClass { 501f070489SIgor Mammedov ObjectClass parent_class; 51bd9262d9SHu Tao 52fdb63cf3SPhilippe Mathieu-Daudé /** 53fdb63cf3SPhilippe Mathieu-Daudé * alloc: Allocate memory from backend. 54fdb63cf3SPhilippe Mathieu-Daudé * 55fdb63cf3SPhilippe Mathieu-Daudé * @backend: the #HostMemoryBackend. 56fdb63cf3SPhilippe Mathieu-Daudé * @errp: pointer to Error*, to store an error if it happens. 57fdb63cf3SPhilippe Mathieu-Daudé * 58fdb63cf3SPhilippe Mathieu-Daudé * Return: true on success, else false setting @errp with error. 59fdb63cf3SPhilippe Mathieu-Daudé */ 60fdb63cf3SPhilippe Mathieu-Daudé bool (*alloc)(HostMemoryBackend *backend, Error **errp); 611f070489SIgor Mammedov }; 621f070489SIgor Mammedov 631f070489SIgor Mammedov /** 641f070489SIgor Mammedov * @HostMemoryBackend 651f070489SIgor Mammedov * 661f070489SIgor Mammedov * @parent: opaque parent object container 671f070489SIgor Mammedov * @size: amount of memory backend provides 681f070489SIgor Mammedov * @mr: MemoryRegion representing host memory belonging to backend 69ffac16faSIgor Mammedov * @prealloc_threads: number of threads to be used for preallocatining RAM 701f070489SIgor Mammedov */ 711f070489SIgor Mammedov struct HostMemoryBackend { 721f070489SIgor Mammedov /* private */ 731f070489SIgor Mammedov Object parent; 741f070489SIgor Mammedov 751f070489SIgor Mammedov /* protected */ 761f070489SIgor Mammedov uint64_t size; 77fa0cb34dSMarc-André Lureau bool merge, dump, use_canonical_path; 789181fb70SDavid Hildenbrand bool prealloc, is_mapped, share, reserve; 795d9a9a61SMichal Privoznik bool guest_memfd, aligned; 80ffac16faSIgor Mammedov uint32_t prealloc_threads; 81e6816458SDavid Hildenbrand ThreadContext *prealloc_context; 824cf1b76bSHu Tao DECLARE_BITMAP(host_nodes, MAX_NODES + 1); 834cf1b76bSHu Tao HostMemPolicy policy; 841f070489SIgor Mammedov 851f070489SIgor Mammedov MemoryRegion mr; 861f070489SIgor Mammedov }; 871f070489SIgor Mammedov 884728b574SPeter Xu bool host_memory_backend_mr_inited(HostMemoryBackend *backend); 897943e97bSDavid Hildenbrand MemoryRegion *host_memory_backend_get_memory(HostMemoryBackend *backend); 901f070489SIgor Mammedov 912aece63cSXiao Guangrong void host_memory_backend_set_mapped(HostMemoryBackend *backend, bool mapped); 922aece63cSXiao Guangrong bool host_memory_backend_is_mapped(HostMemoryBackend *backend); 932b108085SDavid Gibson size_t host_memory_backend_pagesize(HostMemoryBackend *memdev); 94fa0cb34dSMarc-André Lureau char *host_memory_backend_get_name(HostMemoryBackend *backend); 952b108085SDavid Gibson 961f070489SIgor Mammedov #endif 97