linux/tools/testing/selftests/kvm/lib/kvm_util_internal.h
<<
>>
Prefs
   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
   9#ifndef KVM_UTIL_INTERNAL_H
  10#define KVM_UTIL_INTERNAL_H 1
  11
  12#include "sparsebit.h"
  13
  14#ifndef BITS_PER_BYTE
  15#define BITS_PER_BYTE           8
  16#endif
  17
  18#ifndef BITS_PER_LONG
  19#define BITS_PER_LONG (BITS_PER_BYTE * sizeof(long))
  20#endif
  21
  22#define DIV_ROUND_UP(n, d)      (((n) + (d) - 1) / (d))
  23#define BITS_TO_LONGS(nr)       DIV_ROUND_UP(nr, BITS_PER_LONG)
  24
  25/* Concrete definition of struct kvm_vm. */
  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        int fd;
  47        unsigned int page_size;
  48        unsigned int page_shift;
  49        uint64_t max_gfn;
  50        struct vcpu *vcpu_head;
  51        struct userspace_mem_region *userspace_mem_region_head;
  52        struct sparsebit *vpages_valid;
  53        struct sparsebit *vpages_mapped;
  54        bool pgd_created;
  55        vm_paddr_t pgd;
  56};
  57
  58struct vcpu *vcpu_find(struct kvm_vm *vm,
  59        uint32_t vcpuid);
  60void vcpu_setup(struct kvm_vm *vm, int vcpuid);
  61void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent);
  62void regs_dump(FILE *stream, struct kvm_regs *regs,
  63        uint8_t indent);
  64void sregs_dump(FILE *stream, struct kvm_sregs *sregs,
  65        uint8_t indent);
  66
  67#endif
  68