at master 3.5 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2 3#ifndef __KVM_TYPES_H__ 4#define __KVM_TYPES_H__ 5 6#include <linux/bits.h> 7#include <linux/export.h> 8#include <linux/types.h> 9#include <asm/kvm_types.h> 10 11#ifdef KVM_SUB_MODULES 12#define EXPORT_SYMBOL_FOR_KVM_INTERNAL(symbol) \ 13 EXPORT_SYMBOL_FOR_MODULES(symbol, __stringify(KVM_SUB_MODULES)) 14#define EXPORT_SYMBOL_FOR_KVM(symbol) \ 15 EXPORT_SYMBOL_FOR_MODULES(symbol, "kvm," __stringify(KVM_SUB_MODULES)) 16#else 17#define EXPORT_SYMBOL_FOR_KVM_INTERNAL(symbol) 18/* 19 * Allow architectures to provide a custom EXPORT_SYMBOL_FOR_KVM, but only 20 * if there are no submodules, e.g. to allow suppressing exports if KVM=m, but 21 * kvm.ko won't actually be built (due to lack of at least one submodule). 22 */ 23#ifndef EXPORT_SYMBOL_FOR_KVM 24#if IS_MODULE(CONFIG_KVM) 25#define EXPORT_SYMBOL_FOR_KVM(symbol) EXPORT_SYMBOL_FOR_MODULES(symbol, "kvm") 26#else 27#define EXPORT_SYMBOL_FOR_KVM(symbol) 28#endif /* IS_MODULE(CONFIG_KVM) */ 29#endif /* EXPORT_SYMBOL_FOR_KVM */ 30#endif 31 32#ifndef __ASSEMBLER__ 33 34#include <linux/mutex.h> 35#include <linux/spinlock_types.h> 36 37struct kvm; 38struct kvm_async_pf; 39struct kvm_device_ops; 40struct kvm_gfn_range; 41struct kvm_interrupt; 42struct kvm_irq_routing_table; 43struct kvm_memory_slot; 44struct kvm_one_reg; 45struct kvm_run; 46struct kvm_userspace_memory_region; 47struct kvm_vcpu; 48struct kvm_vcpu_init; 49struct kvm_memslots; 50 51enum kvm_mr_change; 52 53/* 54 * Address types: 55 * 56 * gva - guest virtual address 57 * gpa - guest physical address 58 * gfn - guest frame number 59 * hva - host virtual address 60 * hpa - host physical address 61 * hfn - host frame number 62 */ 63 64typedef unsigned long gva_t; 65typedef u64 gpa_t; 66typedef u64 gfn_t; 67 68#define INVALID_GPA (~(gpa_t)0) 69 70typedef unsigned long hva_t; 71typedef u64 hpa_t; 72typedef u64 hfn_t; 73 74typedef hfn_t kvm_pfn_t; 75 76struct gfn_to_hva_cache { 77 u64 generation; 78 gpa_t gpa; 79 unsigned long hva; 80 unsigned long len; 81 struct kvm_memory_slot *memslot; 82}; 83 84struct gfn_to_pfn_cache { 85 u64 generation; 86 gpa_t gpa; 87 unsigned long uhva; 88 struct kvm_memory_slot *memslot; 89 struct kvm *kvm; 90 struct list_head list; 91 rwlock_t lock; 92 struct mutex refresh_lock; 93 void *khva; 94 kvm_pfn_t pfn; 95 bool active; 96 bool valid; 97}; 98 99#ifdef KVM_ARCH_NR_OBJS_PER_MEMORY_CACHE 100/* 101 * Memory caches are used to preallocate memory ahead of various MMU flows, 102 * e.g. page fault handlers. Gracefully handling allocation failures deep in 103 * MMU flows is problematic, as is triggering reclaim, I/O, etc... while 104 * holding MMU locks. Note, these caches act more like prefetch buffers than 105 * classical caches, i.e. objects are not returned to the cache on being freed. 106 * 107 * The @capacity field and @objects array are lazily initialized when the cache 108 * is topped up (__kvm_mmu_topup_memory_cache()). 109 */ 110struct kvm_mmu_memory_cache { 111 gfp_t gfp_zero; 112 gfp_t gfp_custom; 113 u64 init_value; 114 struct kmem_cache *kmem_cache; 115 int capacity; 116 int nobjs; 117 void **objects; 118}; 119#endif 120 121#define HALT_POLL_HIST_COUNT 32 122 123struct kvm_vm_stat_generic { 124 u64 remote_tlb_flush; 125 u64 remote_tlb_flush_requests; 126}; 127 128struct kvm_vcpu_stat_generic { 129 u64 halt_successful_poll; 130 u64 halt_attempted_poll; 131 u64 halt_poll_invalid; 132 u64 halt_wakeup; 133 u64 halt_poll_success_ns; 134 u64 halt_poll_fail_ns; 135 u64 halt_wait_ns; 136 u64 halt_poll_success_hist[HALT_POLL_HIST_COUNT]; 137 u64 halt_poll_fail_hist[HALT_POLL_HIST_COUNT]; 138 u64 halt_wait_hist[HALT_POLL_HIST_COUNT]; 139 u64 blocking; 140}; 141 142#define KVM_STATS_NAME_SIZE 48 143#endif /* !__ASSEMBLER__ */ 144 145#endif /* __KVM_TYPES_H__ */