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 "linux/hashtable.h"
  12#include "linux/rbtree.h"
  13
  14#include "sparsebit.h"
  15
  16struct userspace_mem_region {
  17        struct kvm_userspace_memory_region region;
  18        struct sparsebit *unused_phy_pages;
  19        int fd;
  20        off_t offset;
  21        void *host_mem;
  22        void *host_alias;
  23        void *mmap_start;
  24        void *mmap_alias;
  25        size_t mmap_size;
  26        struct rb_node gpa_node;
  27        struct rb_node hva_node;
  28        struct hlist_node slot_node;
  29};
  30
  31struct vcpu {
  32        struct list_head list;
  33        uint32_t id;
  34        int fd;
  35        struct kvm_run *state;
  36        struct kvm_dirty_gfn *dirty_gfns;
  37        uint32_t fetch_index;
  38        uint32_t dirty_gfns_count;
  39};
  40
  41struct userspace_mem_regions {
  42        struct rb_root gpa_tree;
  43        struct rb_root hva_tree;
  44        DECLARE_HASHTABLE(slot_hash, 9);
  45};
  46
  47struct kvm_vm {
  48        int mode;
  49        unsigned long type;
  50        int kvm_fd;
  51        int fd;
  52        unsigned int pgtable_levels;
  53        unsigned int page_size;
  54        unsigned int page_shift;
  55        unsigned int pa_bits;
  56        unsigned int va_bits;
  57        uint64_t max_gfn;
  58        struct list_head vcpus;
  59        struct userspace_mem_regions regions;
  60        struct sparsebit *vpages_valid;
  61        struct sparsebit *vpages_mapped;
  62        bool has_irqchip;
  63        bool pgd_created;
  64        vm_paddr_t pgd;
  65        vm_vaddr_t gdt;
  66        vm_vaddr_t tss;
  67        vm_vaddr_t idt;
  68        vm_vaddr_t handlers;
  69        uint32_t dirty_ring_size;
  70};
  71
  72struct vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcpuid);
  73
  74/*
  75 * Virtual Translation Tables Dump
  76 *
  77 * Input Args:
  78 *   stream - Output FILE stream
  79 *   vm     - Virtual Machine
  80 *   indent - Left margin indent amount
  81 *
  82 * Output Args: None
  83 *
  84 * Return: None
  85 *
  86 * Dumps to the FILE stream given by @stream, the contents of all the
  87 * virtual translation tables for the VM given by @vm.
  88 */
  89void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent);
  90
  91/*
  92 * Register Dump
  93 *
  94 * Input Args:
  95 *   stream - Output FILE stream
  96 *   regs   - Registers
  97 *   indent - Left margin indent amount
  98 *
  99 * Output Args: None
 100 *
 101 * Return: None
 102 *
 103 * Dumps the state of the registers given by @regs, to the FILE stream
 104 * given by @stream.
 105 */
 106void regs_dump(FILE *stream, struct kvm_regs *regs, uint8_t indent);
 107
 108/*
 109 * System Register Dump
 110 *
 111 * Input Args:
 112 *   stream - Output FILE stream
 113 *   sregs  - System registers
 114 *   indent - Left margin indent amount
 115 *
 116 * Output Args: None
 117 *
 118 * Return: None
 119 *
 120 * Dumps the state of the system registers given by @sregs, to the FILE stream
 121 * given by @stream.
 122 */
 123void sregs_dump(FILE *stream, struct kvm_sregs *sregs, uint8_t indent);
 124
 125struct userspace_mem_region *
 126memslot2region(struct kvm_vm *vm, uint32_t memslot);
 127
 128#endif /* SELFTEST_KVM_UTIL_INTERNAL_H */
 129