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