cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

kvm_util_internal.h (2722B)


      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 */