| .. | .. | 
|---|
 | 1 | +/* SPDX-License-Identifier: GPL-2.0-only */  | 
|---|
| 1 | 2 |  /* | 
|---|
| 2 |  | - * tools/testing/selftests/kvm/lib/kvm_util.c  | 
|---|
 | 3 | + * tools/testing/selftests/kvm/lib/kvm_util_internal.h  | 
|---|
| 3 | 4 |   * | 
|---|
| 4 | 5 |   * Copyright (C) 2018, Google LLC. | 
|---|
| 5 |  | - *  | 
|---|
| 6 |  | - * This work is licensed under the terms of the GNU GPL, version 2.  | 
|---|
| 7 | 6 |   */ | 
|---|
| 8 | 7 |   | 
|---|
| 9 |  | -#ifndef KVM_UTIL_INTERNAL_H  | 
|---|
| 10 |  | -#define KVM_UTIL_INTERNAL_H 1  | 
|---|
 | 8 | +#ifndef SELFTEST_KVM_UTIL_INTERNAL_H  | 
|---|
 | 9 | +#define SELFTEST_KVM_UTIL_INTERNAL_H  | 
|---|
| 11 | 10 |   | 
|---|
| 12 | 11 |  #include "sparsebit.h" | 
|---|
| 13 | 12 |   | 
|---|
| 14 |  | -#ifndef BITS_PER_BYTE  | 
|---|
| 15 |  | -#define BITS_PER_BYTE           8  | 
|---|
| 16 |  | -#endif  | 
|---|
 | 13 | +#define KVM_DEV_PATH		"/dev/kvm"  | 
|---|
| 17 | 14 |   | 
|---|
| 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. */  | 
|---|
| 26 | 15 |  struct userspace_mem_region { | 
|---|
| 27 |  | -	struct userspace_mem_region *next, *prev;  | 
|---|
| 28 | 16 |  	struct kvm_userspace_memory_region region; | 
|---|
| 29 | 17 |  	struct sparsebit *unused_phy_pages; | 
|---|
| 30 | 18 |  	int fd; | 
|---|
| .. | .. | 
|---|
| 32 | 20 |  	void *host_mem; | 
|---|
| 33 | 21 |  	void *mmap_start; | 
|---|
| 34 | 22 |  	size_t mmap_size; | 
|---|
 | 23 | +	struct list_head list;  | 
|---|
| 35 | 24 |  }; | 
|---|
| 36 | 25 |   | 
|---|
| 37 | 26 |  struct vcpu { | 
|---|
| 38 |  | -	struct vcpu *next, *prev;  | 
|---|
 | 27 | +	struct list_head list;  | 
|---|
| 39 | 28 |  	uint32_t id; | 
|---|
| 40 | 29 |  	int fd; | 
|---|
| 41 | 30 |  	struct kvm_run *state; | 
|---|
| .. | .. | 
|---|
| 43 | 32 |   | 
|---|
| 44 | 33 |  struct kvm_vm { | 
|---|
| 45 | 34 |  	int mode; | 
|---|
 | 35 | +	unsigned long type;  | 
|---|
| 46 | 36 |  	int kvm_fd; | 
|---|
| 47 | 37 |  	int fd; | 
|---|
 | 38 | +	unsigned int pgtable_levels;  | 
|---|
| 48 | 39 |  	unsigned int page_size; | 
|---|
| 49 | 40 |  	unsigned int page_shift; | 
|---|
 | 41 | +	unsigned int pa_bits;  | 
|---|
 | 42 | +	unsigned int va_bits;  | 
|---|
| 50 | 43 |  	uint64_t max_gfn; | 
|---|
| 51 |  | -	struct vcpu *vcpu_head;  | 
|---|
| 52 |  | -	struct userspace_mem_region *userspace_mem_region_head;  | 
|---|
 | 44 | +	struct list_head vcpus;  | 
|---|
 | 45 | +	struct list_head userspace_mem_regions;  | 
|---|
| 53 | 46 |  	struct sparsebit *vpages_valid; | 
|---|
| 54 | 47 |  	struct sparsebit *vpages_mapped; | 
|---|
| 55 |  | -  | 
|---|
| 56 | 48 |  	bool has_irqchip; | 
|---|
| 57 | 49 |  	bool pgd_created; | 
|---|
| 58 | 50 |  	vm_paddr_t pgd; | 
|---|
| 59 | 51 |  	vm_vaddr_t gdt; | 
|---|
| 60 | 52 |  	vm_vaddr_t tss; | 
|---|
 | 53 | +	vm_vaddr_t idt;  | 
|---|
 | 54 | +	vm_vaddr_t handlers;  | 
|---|
| 61 | 55 |  }; | 
|---|
| 62 | 56 |   | 
|---|
| 63 |  | -struct vcpu *vcpu_find(struct kvm_vm *vm,  | 
|---|
| 64 |  | -	uint32_t vcpuid);  | 
|---|
| 65 |  | -void vcpu_setup(struct kvm_vm *vm, int vcpuid, int pgd_memslot, int gdt_memslot);  | 
|---|
| 66 |  | -void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent);  | 
|---|
| 67 |  | -void regs_dump(FILE *stream, struct kvm_regs *regs,  | 
|---|
| 68 |  | -	uint8_t indent);  | 
|---|
| 69 |  | -void sregs_dump(FILE *stream, struct kvm_sregs *sregs,  | 
|---|
| 70 |  | -	uint8_t indent);  | 
|---|
 | 57 | +struct vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcpuid);  | 
|---|
| 71 | 58 |   | 
|---|
| 72 |  | -#endif  | 
|---|
 | 59 | +/*  | 
|---|
 | 60 | + * Virtual Translation Tables Dump  | 
|---|
 | 61 | + *  | 
|---|
 | 62 | + * Input Args:  | 
|---|
 | 63 | + *   stream - Output FILE stream  | 
|---|
 | 64 | + *   vm     - Virtual Machine  | 
|---|
 | 65 | + *   indent - Left margin indent amount  | 
|---|
 | 66 | + *  | 
|---|
 | 67 | + * Output Args: None  | 
|---|
 | 68 | + *  | 
|---|
 | 69 | + * Return: None  | 
|---|
 | 70 | + *  | 
|---|
 | 71 | + * Dumps to the FILE stream given by @stream, the contents of all the  | 
|---|
 | 72 | + * virtual translation tables for the VM given by @vm.  | 
|---|
 | 73 | + */  | 
|---|
 | 74 | +void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent);  | 
|---|
 | 75 | +  | 
|---|
 | 76 | +/*  | 
|---|
 | 77 | + * Register Dump  | 
|---|
 | 78 | + *  | 
|---|
 | 79 | + * Input Args:  | 
|---|
 | 80 | + *   stream - Output FILE stream  | 
|---|
 | 81 | + *   regs   - Registers  | 
|---|
 | 82 | + *   indent - Left margin indent amount  | 
|---|
 | 83 | + *  | 
|---|
 | 84 | + * Output Args: None  | 
|---|
 | 85 | + *  | 
|---|
 | 86 | + * Return: None  | 
|---|
 | 87 | + *  | 
|---|
 | 88 | + * Dumps the state of the registers given by @regs, to the FILE stream  | 
|---|
 | 89 | + * given by @stream.  | 
|---|
 | 90 | + */  | 
|---|
 | 91 | +void regs_dump(FILE *stream, struct kvm_regs *regs, uint8_t indent);  | 
|---|
 | 92 | +  | 
|---|
 | 93 | +/*  | 
|---|
 | 94 | + * System Register Dump  | 
|---|
 | 95 | + *  | 
|---|
 | 96 | + * Input Args:  | 
|---|
 | 97 | + *   stream - Output FILE stream  | 
|---|
 | 98 | + *   sregs  - System registers  | 
|---|
 | 99 | + *   indent - Left margin indent amount  | 
|---|
 | 100 | + *  | 
|---|
 | 101 | + * Output Args: None  | 
|---|
 | 102 | + *  | 
|---|
 | 103 | + * Return: None  | 
|---|
 | 104 | + *  | 
|---|
 | 105 | + * Dumps the state of the system registers given by @sregs, to the FILE stream  | 
|---|
 | 106 | + * given by @stream.  | 
|---|
 | 107 | + */  | 
|---|
 | 108 | +void sregs_dump(FILE *stream, struct kvm_sregs *sregs, uint8_t indent);  | 
|---|
 | 109 | +  | 
|---|
 | 110 | +struct userspace_mem_region *  | 
|---|
 | 111 | +memslot2region(struct kvm_vm *vm, uint32_t memslot);  | 
|---|
 | 112 | +  | 
|---|
 | 113 | +#endif /* SELFTEST_KVM_UTIL_INTERNAL_H */  | 
|---|