2 * Internal definitions for a target's KVM support
4 * This work is licensed under the terms of the GNU GPL, version 2 or later.
5 * See the COPYING file in the top-level directory.
10 #define QEMU_KVM_INT_H
12 #include "exec/memory.h"
13 #include "qapi/qapi-types-common.h"
14 #include "qemu/accel.h"
15 #include "qemu/queue.h"
16 #include "sysemu/kvm.h"
18 typedef struct KVMSlot
21 ram_addr_t memory_size
;
26 /* Dirty bitmap cache for the slot */
27 unsigned long *dirty_bmap
;
28 unsigned long dirty_bmap_size
;
29 /* Cache of the address space ID */
31 /* Cache of the offset in ram address space */
32 ram_addr_t ram_start_offset
;
35 typedef struct KVMMemoryUpdate
{
36 QSIMPLEQ_ENTRY(KVMMemoryUpdate
) next
;
37 MemoryRegionSection section
;
40 typedef struct KVMMemoryListener
{
41 MemoryListener listener
;
43 unsigned int nr_used_slots
;
45 QSIMPLEQ_HEAD(, KVMMemoryUpdate
) transaction_add
;
46 QSIMPLEQ_HEAD(, KVMMemoryUpdate
) transaction_del
;
49 #define KVM_MSI_HASHTAB_SIZE 256
51 enum KVMDirtyRingReaperState
{
52 KVM_DIRTY_RING_REAPER_NONE
= 0,
53 /* The reaper is sleeping */
54 KVM_DIRTY_RING_REAPER_WAIT
,
55 /* The reaper is reaping for dirty pages */
56 KVM_DIRTY_RING_REAPER_REAPING
,
60 * KVM reaper instance, responsible for collecting the KVM dirty bits
63 struct KVMDirtyRingReaper
{
64 /* The reaper thread */
65 QemuThread reaper_thr
;
66 volatile uint64_t reaper_iteration
; /* iteration number of reaper thr */
67 volatile enum KVMDirtyRingReaperState reaper_state
; /* reap thr state */
71 AccelState parent_obj
;
78 struct kvm_coalesced_mmio_ring
*coalesced_mmio_ring
;
79 bool coalesced_flush_in_progress
;
81 int robust_singlestep
;
83 #ifdef KVM_CAP_SET_GUEST_DEBUG
84 QTAILQ_HEAD(, kvm_sw_breakpoint
) kvm_sw_breakpoints
;
86 int max_nested_state_len
;
90 bool kernel_irqchip_allowed
;
91 bool kernel_irqchip_required
;
92 OnOffAuto kernel_irqchip_split
;
94 uint64_t manual_dirty_log_protect
;
95 /* The man page (and posix) say ioctl numbers are signed int, but
96 * they're not. Linux, glibc and *BSD all treat ioctl numbers as
97 * unsigned, and treating them as signed here can break things */
98 unsigned irq_set_ioctl
;
99 unsigned int sigmask_len
;
101 #ifdef KVM_CAP_IRQ_ROUTING
102 struct kvm_irq_routing
*irq_routes
;
103 int nr_allocated_irq_routes
;
104 unsigned long *used_gsi_bitmap
;
105 unsigned int gsi_count
;
106 QTAILQ_HEAD(, KVMMSIRoute
) msi_hashtab
[KVM_MSI_HASHTAB_SIZE
];
108 KVMMemoryListener memory_listener
;
109 QLIST_HEAD(, KVMParkedVcpu
) kvm_parked_vcpus
;
111 /* For "info mtree -f" to tell if an MR is registered in KVM */
114 KVMMemoryListener
*ml
;
117 uint64_t kvm_dirty_ring_bytes
; /* Size of the per-vcpu dirty ring */
118 uint32_t kvm_dirty_ring_size
; /* Number of dirty GFNs per ring */
119 bool kvm_dirty_ring_with_bitmap
;
120 uint64_t kvm_eager_split_size
; /* Eager Page Splitting chunk size */
121 struct KVMDirtyRingReaper reaper
;
122 NotifyVmexitOption notify_vmexit
;
123 uint32_t notify_window
;
124 uint32_t xen_version
;
126 uint16_t xen_gnttab_max_frames
;
127 uint16_t xen_evtchn_max_pirq
;
130 void kvm_memory_listener_register(KVMState
*s
, KVMMemoryListener
*kml
,
131 AddressSpace
*as
, int as_id
, const char *name
);
133 void kvm_set_max_memslot_size(hwaddr max_slot_size
);
136 * kvm_hwpoison_page_add:
139 * @ram_addr: the address in the RAM for the poisoned page
141 * Add a poisoned page to the list
145 void kvm_hwpoison_page_add(ram_addr_t ram_addr
);