kvm_util_internal.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * tools/testing/selftests/kvm/lib/kvm_util_internal.h
  3. *
  4. * Copyright (C) 2018, Google LLC.
  5. *
  6. * This work is licensed under the terms of the GNU GPL, version 2.
  7. */
  8. #ifndef SELFTEST_KVM_UTIL_INTERNAL_H
  9. #define SELFTEST_KVM_UTIL_INTERNAL_H
  10. #include "sparsebit.h"
  11. #define KVM_DEV_PATH "/dev/kvm"
  12. #ifndef BITS_PER_BYTE
  13. #define BITS_PER_BYTE 8
  14. #endif
  15. #ifndef BITS_PER_LONG
  16. #define BITS_PER_LONG (BITS_PER_BYTE * sizeof(long))
  17. #endif
  18. #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
  19. #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_LONG)
  20. struct userspace_mem_region {
  21. struct userspace_mem_region *next, *prev;
  22. struct kvm_userspace_memory_region region;
  23. struct sparsebit *unused_phy_pages;
  24. int fd;
  25. off_t offset;
  26. void *host_mem;
  27. void *mmap_start;
  28. size_t mmap_size;
  29. };
  30. struct vcpu {
  31. struct vcpu *next, *prev;
  32. uint32_t id;
  33. int fd;
  34. struct kvm_run *state;
  35. };
  36. struct kvm_vm {
  37. int mode;
  38. int kvm_fd;
  39. int fd;
  40. unsigned int pgtable_levels;
  41. unsigned int page_size;
  42. unsigned int page_shift;
  43. unsigned int pa_bits;
  44. unsigned int va_bits;
  45. uint64_t max_gfn;
  46. struct vcpu *vcpu_head;
  47. struct userspace_mem_region *userspace_mem_region_head;
  48. struct sparsebit *vpages_valid;
  49. struct sparsebit *vpages_mapped;
  50. bool has_irqchip;
  51. bool pgd_created;
  52. vm_paddr_t pgd;
  53. vm_vaddr_t gdt;
  54. vm_vaddr_t tss;
  55. };
  56. struct vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcpuid);
  57. void vcpu_setup(struct kvm_vm *vm, int vcpuid, int pgd_memslot,
  58. int gdt_memslot);
  59. void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent);
  60. void regs_dump(FILE *stream, struct kvm_regs *regs, uint8_t indent);
  61. void sregs_dump(FILE *stream, struct kvm_sregs *sregs, uint8_t indent);
  62. #endif /* SELFTEST_KVM_UTIL_INTERNAL_H */