18571ed35SPaolo Bonzini /* 28571ed35SPaolo Bonzini * Internal definitions for a target's KVM support 38571ed35SPaolo Bonzini * 48571ed35SPaolo Bonzini * This work is licensed under the terms of the GNU GPL, version 2 or later. 58571ed35SPaolo Bonzini * See the COPYING file in the top-level directory. 68571ed35SPaolo Bonzini * 78571ed35SPaolo Bonzini */ 88571ed35SPaolo Bonzini 98571ed35SPaolo Bonzini #ifndef QEMU_KVM_INT_H 108571ed35SPaolo Bonzini #define QEMU_KVM_INT_H 118571ed35SPaolo Bonzini 12ec150c7eSMarkus Armbruster #include "exec/memory.h" 138571ed35SPaolo Bonzini #include "sysemu/accel.h" 148571ed35SPaolo Bonzini #include "sysemu/kvm.h" 158571ed35SPaolo Bonzini 168571ed35SPaolo Bonzini typedef struct KVMSlot 178571ed35SPaolo Bonzini { 188571ed35SPaolo Bonzini hwaddr start_addr; 198571ed35SPaolo Bonzini ram_addr_t memory_size; 208571ed35SPaolo Bonzini void *ram; 218571ed35SPaolo Bonzini int slot; 228571ed35SPaolo Bonzini int flags; 236c090d4aSShannon Zhao int old_flags; 249f4bf4baSPeter Xu /* Dirty bitmap cache for the slot */ 259f4bf4baSPeter Xu unsigned long *dirty_bmap; 268571ed35SPaolo Bonzini } KVMSlot; 278571ed35SPaolo Bonzini 287bbda04cSPaolo Bonzini typedef struct KVMMemoryListener { 297bbda04cSPaolo Bonzini MemoryListener listener; 3036adac49SPeter Xu /* Protects the slots and all inside them */ 3136adac49SPeter Xu QemuMutex slots_lock; 327bbda04cSPaolo Bonzini KVMSlot *slots; 3338bfe691SPaolo Bonzini int as_id; 347bbda04cSPaolo Bonzini } KVMMemoryListener; 357bbda04cSPaolo Bonzini 368571ed35SPaolo Bonzini #define TYPE_KVM_ACCEL ACCEL_CLASS_NAME("kvm") 378571ed35SPaolo Bonzini 388571ed35SPaolo Bonzini #define KVM_STATE(obj) \ 398571ed35SPaolo Bonzini OBJECT_CHECK(KVMState, (obj), TYPE_KVM_ACCEL) 408571ed35SPaolo Bonzini 4138bfe691SPaolo Bonzini void kvm_memory_listener_register(KVMState *s, KVMMemoryListener *kml, 4238bfe691SPaolo Bonzini AddressSpace *as, int as_id); 4338bfe691SPaolo Bonzini 44023ae9a8SIgor Mammedov void kvm_set_max_memslot_size(hwaddr max_slot_size); 45*6b552b9bSDongjiu Geng 46*6b552b9bSDongjiu Geng /** 47*6b552b9bSDongjiu Geng * kvm_hwpoison_page_add: 48*6b552b9bSDongjiu Geng * 49*6b552b9bSDongjiu Geng * Parameters: 50*6b552b9bSDongjiu Geng * @ram_addr: the address in the RAM for the poisoned page 51*6b552b9bSDongjiu Geng * 52*6b552b9bSDongjiu Geng * Add a poisoned page to the list 53*6b552b9bSDongjiu Geng * 54*6b552b9bSDongjiu Geng * Return: None. 55*6b552b9bSDongjiu Geng */ 56*6b552b9bSDongjiu Geng void kvm_hwpoison_page_add(ram_addr_t ram_addr); 578571ed35SPaolo Bonzini #endif 58