kvm_util_internal.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * tools/testing/selftests/kvm/lib/kvm_util.c
  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 KVM_UTIL_INTERNAL_H
  9. #define KVM_UTIL_INTERNAL_H 1
  10. #include "sparsebit.h"
  11. #ifndef BITS_PER_BYTE
  12. #define BITS_PER_BYTE 8
  13. #endif
  14. #ifndef BITS_PER_LONG
  15. #define BITS_PER_LONG (BITS_PER_BYTE * sizeof(long))
  16. #endif
  17. #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
  18. #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_LONG)
  19. /* Concrete definition of struct kvm_vm. */
  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 page_size;
  41. unsigned int page_shift;
  42. uint64_t max_gfn;
  43. struct vcpu *vcpu_head;
  44. struct userspace_mem_region *userspace_mem_region_head;
  45. struct sparsebit *vpages_valid;
  46. struct sparsebit *vpages_mapped;
  47. bool has_irqchip;
  48. bool pgd_created;
  49. vm_paddr_t pgd;
  50. vm_vaddr_t gdt;
  51. vm_vaddr_t tss;
  52. };
  53. struct vcpu *vcpu_find(struct kvm_vm *vm,
  54. uint32_t vcpuid);
  55. void vcpu_setup(struct kvm_vm *vm, int vcpuid, int pgd_memslot, int gdt_memslot);
  56. void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent);
  57. void regs_dump(FILE *stream, struct kvm_regs *regs,
  58. uint8_t indent);
  59. void sregs_dump(FILE *stream, struct kvm_sregs *sregs,
  60. uint8_t indent);
  61. #endif