Sergej Schumilo 8a88edc2a1 auto-apply clang-format
- including vl.c & kvm-all.c
2022-10-16 23:51:13 +02:00

53 lines
1.7 KiB
C

#pragma once
#include "nyx/snapshot/memory/block_list.h"
#include "nyx/snapshot/memory/shadow_memory.h"
#include <stdint.h>
struct kvm_dirty_gfn {
uint32_t flags;
uint32_t slot;
uint64_t offset;
};
typedef struct slot_s {
bool enabled; /* set if slot is not marked as read-only */
uint8_t region_id; /* shadow_memory region id */
uint64_t region_offset; /* shadow_memory region offset*/
void *bitmap;
uint64_t bitmap_size; // remove me later
uint64_t *stack;
uint64_t stack_ptr;
} slot_t;
typedef struct nyx_dirty_ring_s {
slot_t *kvm_region_slots;
uint8_t kvm_region_slots_num;
} nyx_dirty_ring_t;
/* must be called before KVM_SET_USER_MEMORY_REGION & KVM_CREATE_VCPU */
void nyx_dirty_ring_early_init(int kvm_fd, int vm_fd);
/* must be called right after KVM_CREATE_VCPU */
void nyx_dirty_ring_pre_init(int kvm_fd, int vm_fd);
nyx_dirty_ring_t *nyx_dirty_ring_init(shadow_memory_t *shadow_memory);
uint32_t nyx_snapshot_nyx_dirty_ring_restore(nyx_dirty_ring_t *self,
shadow_memory_t *shadow_memory_state,
snapshot_page_blocklist_t *blocklist);
void nyx_snapshot_nyx_dirty_ring_save_root_pages(nyx_dirty_ring_t *self,
shadow_memory_t *shadow_memory_state,
snapshot_page_blocklist_t *blocklist);
void nyx_snapshot_nyx_dirty_ring_flush(void);
void nyx_snapshot_nyx_dirty_ring_flush_and_collect(nyx_dirty_ring_t *self,
shadow_memory_t *shadow_memory_state,
snapshot_page_blocklist_t *blocklist);