]> git.proxmox.com Git - qemu.git/blame - include/hw/virtio/dataplane/hostmem.h
Merge git://github.com/hw-claudio/qemu-aarch64-queue into tcg-next
[qemu.git] / include / hw / virtio / dataplane / hostmem.h
CommitLineData
185ecf40
SH
1/*
2 * Thread-safe guest to host memory mapping
3 *
4 * Copyright 2012 Red Hat, Inc. and/or its affiliates
5 *
6 * Authors:
7 * Stefan Hajnoczi <stefanha@redhat.com>
8 *
9 * This work is licensed under the terms of the GNU GPL, version 2 or later.
10 * See the COPYING file in the top-level directory.
11 *
12 */
13
14#ifndef HOSTMEM_H
15#define HOSTMEM_H
16
17#include "exec/memory.h"
18#include "qemu/thread.h"
19
20typedef struct {
dfde4e6e 21 MemoryRegion *mr;
185ecf40
SH
22 void *host_addr;
23 hwaddr guest_addr;
24 uint64_t size;
25 bool readonly;
26} HostMemRegion;
27
28typedef struct {
29 /* The listener is invoked when regions change and a new list of regions is
30 * built up completely before they are installed.
31 */
32 MemoryListener listener;
33 HostMemRegion *new_regions;
34 size_t num_new_regions;
35
36 /* Current regions are accessed from multiple threads either to lookup
37 * addresses or to install a new list of regions. The lock protects the
38 * pointer and the regions.
39 */
40 QemuMutex current_regions_lock;
41 HostMemRegion *current_regions;
42 size_t num_current_regions;
43} HostMem;
44
45void hostmem_init(HostMem *hostmem);
46void hostmem_finalize(HostMem *hostmem);
47
48/**
49 * Map a guest physical address to a pointer
50 *
51 * Note that there is map/unmap mechanism here. The caller must ensure that
52 * mapped memory is no longer used across events like hot memory unplug. This
53 * can be done with other mechanisms like bdrv_drain_all() that quiesce
54 * in-flight I/O.
55 */
56void *hostmem_lookup(HostMem *hostmem, hwaddr phys, hwaddr len, bool is_write);
57
58#endif /* HOSTMEM_H */