| 
									
										
										
										
											2014-06-06 17:54:29 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * QEMU Host Memory Backend | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2013-2014 Red Hat Inc | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Authors: | 
					
						
							|  |  |  |  *   Igor Mammedov <imammedo@redhat.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This work is licensed under the terms of the GNU GPL, version 2 or later. | 
					
						
							|  |  |  |  * See the COPYING file in the top-level directory. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2016-06-29 10:12:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef SYSEMU_HOSTMEM_H
 | 
					
						
							|  |  |  | #define SYSEMU_HOSTMEM_H
 | 
					
						
							| 
									
										
										
										
											2014-06-06 17:54:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-12 07:23:55 +02:00
										 |  |  | #include "sysemu/numa.h"
 | 
					
						
							| 
									
										
										
										
											2019-06-19 22:10:41 +02:00
										 |  |  | #include "qapi/qapi-types-machine.h"
 | 
					
						
							| 
									
										
										
										
											2014-06-06 17:54:29 +02:00
										 |  |  | #include "qom/object.h"
 | 
					
						
							|  |  |  | #include "exec/memory.h"
 | 
					
						
							| 
									
										
										
										
											2014-06-10 19:15:25 +08:00
										 |  |  | #include "qemu/bitmap.h"
 | 
					
						
							| 
									
										
										
										
											2014-06-06 17:54:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define TYPE_MEMORY_BACKEND "memory-backend"
 | 
					
						
							|  |  |  | #define MEMORY_BACKEND(obj) \
 | 
					
						
							|  |  |  |     OBJECT_CHECK(HostMemoryBackend, (obj), TYPE_MEMORY_BACKEND) | 
					
						
							|  |  |  | #define MEMORY_BACKEND_GET_CLASS(obj) \
 | 
					
						
							|  |  |  |     OBJECT_GET_CLASS(HostMemoryBackendClass, (obj), TYPE_MEMORY_BACKEND) | 
					
						
							|  |  |  | #define MEMORY_BACKEND_CLASS(klass) \
 | 
					
						
							|  |  |  |     OBJECT_CLASS_CHECK(HostMemoryBackendClass, (klass), TYPE_MEMORY_BACKEND) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-19 11:08:37 -05:00
										 |  |  | /* hostmem-ram.c */ | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * @TYPE_MEMORY_BACKEND_RAM: | 
					
						
							|  |  |  |  * name of backend that uses mmap on the anonymous RAM | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define TYPE_MEMORY_BACKEND_RAM "memory-backend-ram"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* hostmem-file.c */ | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * @TYPE_MEMORY_BACKEND_FILE: | 
					
						
							|  |  |  |  * name of backend that uses mmap on a file descriptor | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define TYPE_MEMORY_BACKEND_FILE "memory-backend-file"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct HostMemoryBackend HostMemoryBackend; | 
					
						
							| 
									
										
										
										
											2014-06-06 17:54:29 +02:00
										 |  |  | typedef struct HostMemoryBackendClass HostMemoryBackendClass; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * HostMemoryBackendClass: | 
					
						
							|  |  |  |  * @parent_class: opaque parent class container | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct HostMemoryBackendClass { | 
					
						
							|  |  |  |     ObjectClass parent_class; | 
					
						
							| 
									
										
										
										
											2014-06-10 19:15:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     void (*alloc)(HostMemoryBackend *backend, Error **errp); | 
					
						
							| 
									
										
										
										
											2014-06-06 17:54:29 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * @HostMemoryBackend | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @parent: opaque parent object container | 
					
						
							|  |  |  |  * @size: amount of memory backend provides | 
					
						
							|  |  |  |  * @mr: MemoryRegion representing host memory belonging to backend | 
					
						
							| 
									
										
										
										
											2020-02-19 11:09:50 -05:00
										 |  |  |  * @prealloc_threads: number of threads to be used for preallocatining RAM | 
					
						
							| 
									
										
										
										
											2014-06-06 17:54:29 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | struct HostMemoryBackend { | 
					
						
							|  |  |  |     /* private */ | 
					
						
							|  |  |  |     Object parent; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* protected */ | 
					
						
							|  |  |  |     uint64_t size; | 
					
						
							| 
									
										
											  
											
												hostmem: use object id for memory region name with >= 4.0
hostmem-file and hostmem-memfd use the whole object path for the
memory region name, and hostname-ram uses only the path component (the
object id, or canonical path basename):
qemu -m 1024 -object memory-backend-file,id=mem,size=1G,mem-path=/tmp/foo -numa node,memdev=mem -monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used              Total
            /objects/mem    4 KiB  0x0000000000000000 0x0000000040000000 0x0000000040000000
qemu -m 1024 -object memory-backend-memfd,id=mem,size=1G -numa node,memdev=mem -monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used              Total
            /objects/mem    4 KiB  0x0000000000000000 0x0000000040000000 0x0000000040000000
qemu -m 1024 -object memory-backend-ram,id=mem,size=1G -numa node,memdev=mem -monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used              Total
                     mem    4 KiB  0x0000000000000000 0x0000000040000000 0x0000000040000000
For consistency, change to use object id for -file and -memfd as well
with >= 4.0.
Having a consistent naming allows to migrate to different hostmem
backends.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Acked-by: Eduardo Habkost <ehabkost@redhat.com>
											
										 
											2018-09-12 16:18:00 +04:00
										 |  |  |     bool merge, dump, use_canonical_path; | 
					
						
							| 
									
										
										
										
											2020-02-19 11:09:51 -05:00
										 |  |  |     bool prealloc, is_mapped, share; | 
					
						
							| 
									
										
										
										
											2020-02-19 11:09:50 -05:00
										 |  |  |     uint32_t prealloc_threads; | 
					
						
							| 
									
										
										
										
											2014-06-10 19:15:25 +08:00
										 |  |  |     DECLARE_BITMAP(host_nodes, MAX_NODES + 1); | 
					
						
							|  |  |  |     HostMemPolicy policy; | 
					
						
							| 
									
										
										
										
											2014-06-06 17:54:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     MemoryRegion mr; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-10 21:09:29 +08:00
										 |  |  | bool host_memory_backend_mr_inited(HostMemoryBackend *backend); | 
					
						
							| 
									
										
										
										
											2018-06-19 15:41:36 +02:00
										 |  |  | MemoryRegion *host_memory_backend_get_memory(HostMemoryBackend *backend); | 
					
						
							| 
									
										
										
										
											2014-06-06 17:54:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-13 12:18:06 +08:00
										 |  |  | void host_memory_backend_set_mapped(HostMemoryBackend *backend, bool mapped); | 
					
						
							|  |  |  | bool host_memory_backend_is_mapped(HostMemoryBackend *backend); | 
					
						
							| 
									
										
										
										
											2018-04-03 15:05:45 +10:00
										 |  |  | size_t host_memory_backend_pagesize(HostMemoryBackend *memdev); | 
					
						
							| 
									
										
											  
											
												hostmem: use object id for memory region name with >= 4.0
hostmem-file and hostmem-memfd use the whole object path for the
memory region name, and hostname-ram uses only the path component (the
object id, or canonical path basename):
qemu -m 1024 -object memory-backend-file,id=mem,size=1G,mem-path=/tmp/foo -numa node,memdev=mem -monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used              Total
            /objects/mem    4 KiB  0x0000000000000000 0x0000000040000000 0x0000000040000000
qemu -m 1024 -object memory-backend-memfd,id=mem,size=1G -numa node,memdev=mem -monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used              Total
            /objects/mem    4 KiB  0x0000000000000000 0x0000000040000000 0x0000000040000000
qemu -m 1024 -object memory-backend-ram,id=mem,size=1G -numa node,memdev=mem -monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used              Total
                     mem    4 KiB  0x0000000000000000 0x0000000040000000 0x0000000040000000
For consistency, change to use object id for -file and -memfd as well
with >= 4.0.
Having a consistent naming allows to migrate to different hostmem
backends.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Acked-by: Eduardo Habkost <ehabkost@redhat.com>
											
										 
											2018-09-12 16:18:00 +04:00
										 |  |  | char *host_memory_backend_get_name(HostMemoryBackend *backend); | 
					
						
							| 
									
										
										
										
											2018-04-03 15:05:45 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-06 17:54:29 +02:00
										 |  |  | #endif
 |