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 13:15:25 +02:00
|
|
|
#include "qemu/bitmap.h"
|
2022-10-14 15:47:19 +02:00
|
|
|
#include "qemu/thread-context.h"
|
2014-06-06 17:54:29 +02:00
|
|
|
|
|
|
|
#define TYPE_MEMORY_BACKEND "memory-backend"
|
2020-08-31 23:07:37 +02:00
|
|
|
OBJECT_DECLARE_TYPE(HostMemoryBackend, HostMemoryBackendClass,
|
qom: Remove module_obj_name parameter from OBJECT_DECLARE* macros
One of the goals of having less boilerplate on QOM declarations
is to avoid human error. Requiring an extra argument that is
never used is an opportunity for mistakes.
Remove the unused argument from OBJECT_DECLARE_TYPE and
OBJECT_DECLARE_SIMPLE_TYPE.
Coccinelle patch used to convert all users of the macros:
@@
declarer name OBJECT_DECLARE_TYPE;
identifier InstanceType, ClassType, lowercase, UPPERCASE;
@@
OBJECT_DECLARE_TYPE(InstanceType, ClassType,
- lowercase,
UPPERCASE);
@@
declarer name OBJECT_DECLARE_SIMPLE_TYPE;
identifier InstanceType, lowercase, UPPERCASE;
@@
OBJECT_DECLARE_SIMPLE_TYPE(InstanceType,
- lowercase,
UPPERCASE);
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Acked-by: Igor Mammedov <imammedo@redhat.com>
Acked-by: Paul Durrant <paul@xen.org>
Acked-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20200916182519.415636-4-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
2020-09-16 20:25:17 +02:00
|
|
|
MEMORY_BACKEND)
|
2014-06-06 17:54:29 +02:00
|
|
|
|
2020-02-19 17:08:37 +01: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"
|
|
|
|
|
2014-06-06 17:54:29 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* HostMemoryBackendClass:
|
|
|
|
* @parent_class: opaque parent class container
|
|
|
|
*/
|
|
|
|
struct HostMemoryBackendClass {
|
|
|
|
ObjectClass parent_class;
|
2014-06-10 13:15:19 +02:00
|
|
|
|
2023-11-20 13:50:52 +01:00
|
|
|
/**
|
|
|
|
* alloc: Allocate memory from backend.
|
|
|
|
*
|
|
|
|
* @backend: the #HostMemoryBackend.
|
|
|
|
* @errp: pointer to Error*, to store an error if it happens.
|
|
|
|
*
|
|
|
|
* Return: true on success, else false setting @errp with error.
|
|
|
|
*/
|
|
|
|
bool (*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 17:09:50 +01: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 14:18:00 +02:00
|
|
|
bool merge, dump, use_canonical_path;
|
2021-05-10 13:43:23 +02:00
|
|
|
bool prealloc, is_mapped, share, reserve;
|
2020-02-19 17:09:50 +01:00
|
|
|
uint32_t prealloc_threads;
|
2022-10-14 15:47:19 +02:00
|
|
|
ThreadContext *prealloc_context;
|
2014-06-10 13:15:25 +02:00
|
|
|
DECLARE_BITMAP(host_nodes, MAX_NODES + 1);
|
|
|
|
HostMemPolicy policy;
|
2014-06-06 17:54:29 +02:00
|
|
|
|
|
|
|
MemoryRegion mr;
|
|
|
|
};
|
|
|
|
|
2017-03-10 14:09:29 +01: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 06:18:06 +02:00
|
|
|
void host_memory_backend_set_mapped(HostMemoryBackend *backend, bool mapped);
|
|
|
|
bool host_memory_backend_is_mapped(HostMemoryBackend *backend);
|
2018-04-03 07:05:45 +02: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 14:18:00 +02:00
|
|
|
char *host_memory_backend_get_name(HostMemoryBackend *backend);
|
2018-04-03 07:05:45 +02:00
|
|
|
|
2014-06-06 17:54:29 +02:00
|
|
|
#endif
|