123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /*
- * tools/testing/selftests/kvm/lib/kvm_util.c
- *
- * Copyright (C) 2018, Google LLC.
- *
- * This work is licensed under the terms of the GNU GPL, version 2.
- */
- #ifndef KVM_UTIL_INTERNAL_H
- #define KVM_UTIL_INTERNAL_H 1
- #include "sparsebit.h"
- #ifndef BITS_PER_BYTE
- #define BITS_PER_BYTE 8
- #endif
- #ifndef BITS_PER_LONG
- #define BITS_PER_LONG (BITS_PER_BYTE * sizeof(long))
- #endif
- #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
- #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_LONG)
- /* Concrete definition of struct kvm_vm. */
- struct userspace_mem_region {
- struct userspace_mem_region *next, *prev;
- struct kvm_userspace_memory_region region;
- struct sparsebit *unused_phy_pages;
- int fd;
- off_t offset;
- void *host_mem;
- void *mmap_start;
- size_t mmap_size;
- };
- struct vcpu {
- struct vcpu *next, *prev;
- uint32_t id;
- int fd;
- struct kvm_run *state;
- };
- struct kvm_vm {
- int mode;
- int kvm_fd;
- int fd;
- unsigned int page_size;
- unsigned int page_shift;
- uint64_t max_gfn;
- struct vcpu *vcpu_head;
- struct userspace_mem_region *userspace_mem_region_head;
- struct sparsebit *vpages_valid;
- struct sparsebit *vpages_mapped;
- bool has_irqchip;
- bool pgd_created;
- vm_paddr_t pgd;
- vm_vaddr_t gdt;
- vm_vaddr_t tss;
- };
- struct vcpu *vcpu_find(struct kvm_vm *vm,
- uint32_t vcpuid);
- void vcpu_setup(struct kvm_vm *vm, int vcpuid, int pgd_memslot, int gdt_memslot);
- void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent);
- void regs_dump(FILE *stream, struct kvm_regs *regs,
- uint8_t indent);
- void sregs_dump(FILE *stream, struct kvm_sregs *sregs,
- uint8_t indent);
- #endif
|