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" 21*e6816458SDavid 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 421f070489SIgor Mammedov 431f070489SIgor Mammedov /** 441f070489SIgor Mammedov * HostMemoryBackendClass: 451f070489SIgor Mammedov * @parent_class: opaque parent class container 461f070489SIgor Mammedov */ 471f070489SIgor Mammedov struct HostMemoryBackendClass { 481f070489SIgor Mammedov ObjectClass parent_class; 49bd9262d9SHu Tao 50bd9262d9SHu Tao void (*alloc)(HostMemoryBackend *backend, Error **errp); 511f070489SIgor Mammedov }; 521f070489SIgor Mammedov 531f070489SIgor Mammedov /** 541f070489SIgor Mammedov * @HostMemoryBackend 551f070489SIgor Mammedov * 561f070489SIgor Mammedov * @parent: opaque parent object container 571f070489SIgor Mammedov * @size: amount of memory backend provides 581f070489SIgor Mammedov * @mr: MemoryRegion representing host memory belonging to backend 59ffac16faSIgor Mammedov * @prealloc_threads: number of threads to be used for preallocatining RAM 601f070489SIgor Mammedov */ 611f070489SIgor Mammedov struct HostMemoryBackend { 621f070489SIgor Mammedov /* private */ 631f070489SIgor Mammedov Object parent; 641f070489SIgor Mammedov 651f070489SIgor Mammedov /* protected */ 661f070489SIgor Mammedov uint64_t size; 67fa0cb34dSMarc-André Lureau bool merge, dump, use_canonical_path; 689181fb70SDavid Hildenbrand bool prealloc, is_mapped, share, reserve; 69ffac16faSIgor Mammedov uint32_t prealloc_threads; 70*e6816458SDavid Hildenbrand ThreadContext *prealloc_context; 714cf1b76bSHu Tao DECLARE_BITMAP(host_nodes, MAX_NODES + 1); 724cf1b76bSHu Tao HostMemPolicy policy; 731f070489SIgor Mammedov 741f070489SIgor Mammedov MemoryRegion mr; 751f070489SIgor Mammedov }; 761f070489SIgor Mammedov 774728b574SPeter Xu bool host_memory_backend_mr_inited(HostMemoryBackend *backend); 787943e97bSDavid Hildenbrand MemoryRegion *host_memory_backend_get_memory(HostMemoryBackend *backend); 791f070489SIgor Mammedov 802aece63cSXiao Guangrong void host_memory_backend_set_mapped(HostMemoryBackend *backend, bool mapped); 812aece63cSXiao Guangrong bool host_memory_backend_is_mapped(HostMemoryBackend *backend); 822b108085SDavid Gibson size_t host_memory_backend_pagesize(HostMemoryBackend *memdev); 83fa0cb34dSMarc-André Lureau char *host_memory_backend_get_name(HostMemoryBackend *backend); 842b108085SDavid Gibson 851f070489SIgor Mammedov #endif 86