Blame view
include/linux/kvm_host.h
21.6 KB
edf884172 KVM: Move arch de... |
1 2 |
#ifndef __KVM_HOST_H #define __KVM_HOST_H |
6aa8b732c [PATCH] kvm: user... |
3 4 5 6 7 8 9 |
/* * This work is licensed under the terms of the GNU GPL, version 2. See * the COPYING file in the top-level directory. */ #include <linux/types.h> |
e56a7a28e KVM: Use virtual ... |
10 |
#include <linux/hardirq.h> |
6aa8b732c [PATCH] kvm: user... |
11 12 13 |
#include <linux/list.h> #include <linux/mutex.h> #include <linux/spinlock.h> |
06ff0d372 KVM: Fix includes |
14 15 |
#include <linux/signal.h> #include <linux/sched.h> |
6aa8b732c [PATCH] kvm: user... |
16 |
#include <linux/mm.h> |
b297e672e KVM: Fix include ... |
17 |
#include <linux/mmu_notifier.h> |
15ad71460 KVM: Use the sche... |
18 |
#include <linux/preempt.h> |
0937c48d0 KVM: Add fields f... |
19 |
#include <linux/msi.h> |
d89f5eff7 KVM: Clean up vm ... |
20 |
#include <linux/slab.h> |
bd2b53b20 KVM: fast-path ms... |
21 |
#include <linux/rcupdate.h> |
bd80158af KVM: Clean up and... |
22 |
#include <linux/ratelimit.h> |
e8edc6e03 Detach sched.h fr... |
23 |
#include <asm/signal.h> |
6aa8b732c [PATCH] kvm: user... |
24 |
|
6aa8b732c [PATCH] kvm: user... |
25 |
#include <linux/kvm.h> |
102d8325a KVM: add MSR base... |
26 |
#include <linux/kvm_para.h> |
6aa8b732c [PATCH] kvm: user... |
27 |
|
edf884172 KVM: Move arch de... |
28 |
#include <linux/kvm_types.h> |
d77a39d98 KVM: Portability:... |
29 |
|
edf884172 KVM: Move arch de... |
30 |
#include <asm/kvm_host.h> |
d657a98e3 KVM: Portability:... |
31 |
|
cef4dea07 KVM: 16-byte mmio... |
32 33 34 |
#ifndef KVM_MMIO_SIZE #define KVM_MMIO_SIZE 8 #endif |
6aa8b732c [PATCH] kvm: user... |
35 |
/* |
d9e368d61 KVM: Flush remote... |
36 37 |
* vcpu->requests bit members */ |
3176bc3e5 KVM: Rename KVM_T... |
38 |
#define KVM_REQ_TLB_FLUSH 0 |
2f52d58c9 KVM: Move apic ti... |
39 |
#define KVM_REQ_MIGRATE_TIMER 1 |
b209749f5 KVM: local APIC T... |
40 |
#define KVM_REQ_REPORT_TPR_ACCESS 2 |
2e53d63ac KVM: MMU: ignore ... |
41 |
#define KVM_REQ_MMU_RELOAD 3 |
71c4dfafc KVM: detect if VC... |
42 |
#define KVM_REQ_TRIPLE_FAULT 4 |
06e056456 KVM: close timer ... |
43 |
#define KVM_REQ_PENDING_TIMER 5 |
d76901750 KVM: x86: do not ... |
44 |
#define KVM_REQ_UNHALT 6 |
4731d4c7a KVM: MMU: out of ... |
45 |
#define KVM_REQ_MMU_SYNC 7 |
34c238a1d KVM: x86: Rename ... |
46 |
#define KVM_REQ_CLOCK_UPDATE 8 |
32f884006 KVM: use smp_send... |
47 |
#define KVM_REQ_KICK 9 |
02daab21d KVM: Lazify fpu a... |
48 |
#define KVM_REQ_DEACTIVATE_FPU 10 |
3842d135f KVM: Check for pe... |
49 |
#define KVM_REQ_EVENT 11 |
af585b921 KVM: Halt vcpu if... |
50 |
#define KVM_REQ_APF_HALT 12 |
c9aaa8957 KVM: Steal time i... |
51 |
#define KVM_REQ_STEAL_UPDATE 13 |
7460fb4a3 KVM: Fix simultan... |
52 |
#define KVM_REQ_NMI 14 |
d6185f20a KVM: nVMX: Add KV... |
53 |
#define KVM_REQ_IMMEDIATE_EXIT 15 |
f5132b013 KVM: Expose a ver... |
54 55 |
#define KVM_REQ_PMU 16 #define KVM_REQ_PMI 17 |
6aa8b732c [PATCH] kvm: user... |
56 |
|
5550af4df KVM: Fix guest sh... |
57 |
#define KVM_USERSPACE_IRQ_SOURCE_ID 0 |
6c4746945 KVM: convert bus ... |
58 |
struct kvm; |
6aa8b732c [PATCH] kvm: user... |
59 |
struct kvm_vcpu; |
c16f862d0 KVM: Use kmem cac... |
60 |
extern struct kmem_cache *kvm_vcpu_cache; |
6aa8b732c [PATCH] kvm: user... |
61 |
|
743eeb0b0 KVM: Intelligent ... |
62 63 64 65 66 |
struct kvm_io_range { gpa_t addr; int len; struct kvm_io_device *dev; }; |
2eeb2e94e KVM: Adds support... |
67 68 |
struct kvm_io_bus { int dev_count; |
2b3c246a6 KVM: Make coalesc... |
69 |
#define NR_IOBUS_DEVS 300 |
743eeb0b0 KVM: Intelligent ... |
70 |
struct kvm_io_range range[NR_IOBUS_DEVS]; |
2eeb2e94e KVM: Adds support... |
71 |
}; |
e93f8a0f8 KVM: convert io_b... |
72 73 74 75 76 77 78 79 80 |
enum kvm_bus { KVM_MMIO_BUS, KVM_PIO_BUS, KVM_NR_BUSES }; int kvm_io_bus_write(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, int len, const void *val); int kvm_io_bus_read(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, int len, |
bda9020e2 KVM: remove in_ra... |
81 |
void *val); |
743eeb0b0 KVM: Intelligent ... |
82 83 |
int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, int len, struct kvm_io_device *dev); |
e93f8a0f8 KVM: convert io_b... |
84 85 |
int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx, struct kvm_io_device *dev); |
2eeb2e94e KVM: Adds support... |
86 |
|
af585b921 KVM: Halt vcpu if... |
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
#ifdef CONFIG_KVM_ASYNC_PF struct kvm_async_pf { struct work_struct work; struct list_head link; struct list_head queue; struct kvm_vcpu *vcpu; struct mm_struct *mm; gva_t gva; unsigned long addr; struct kvm_arch_async_pf arch; struct page *page; bool done; }; void kvm_clear_async_pf_completion_queue(struct kvm_vcpu *vcpu); void kvm_check_async_pf_completion(struct kvm_vcpu *vcpu); int kvm_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn, struct kvm_arch_async_pf *arch); |
344d9588a KVM: Add PV MSR t... |
105 |
int kvm_async_pf_wakeup_all(struct kvm_vcpu *vcpu); |
af585b921 KVM: Halt vcpu if... |
106 |
#endif |
6b7e2d099 KVM: Add "exiting... |
107 108 109 110 111 |
enum { OUTSIDE_GUEST_MODE, IN_GUEST_MODE, EXITING_GUEST_MODE }; |
d17fbbf73 KVM: Portability:... |
112 113 |
struct kvm_vcpu { struct kvm *kvm; |
31bb117eb KVM: Use CONFIG_P... |
114 |
#ifdef CONFIG_PREEMPT_NOTIFIERS |
d17fbbf73 KVM: Portability:... |
115 |
struct preempt_notifier preempt_notifier; |
31bb117eb KVM: Use CONFIG_P... |
116 |
#endif |
6b7e2d099 KVM: Add "exiting... |
117 |
int cpu; |
d17fbbf73 KVM: Portability:... |
118 |
int vcpu_id; |
6b7e2d099 KVM: Add "exiting... |
119 120 |
int srcu_idx; int mode; |
d17fbbf73 KVM: Portability:... |
121 |
unsigned long requests; |
d0bfb940e KVM: New guest de... |
122 |
unsigned long guest_debug; |
6b7e2d099 KVM: Add "exiting... |
123 124 125 |
struct mutex mutex; struct kvm_run *run; |
f656ce018 KVM: switch vcpu ... |
126 |
|
d17fbbf73 KVM: Portability:... |
127 |
int fpu_active; |
2acf923e3 KVM: VMX: Enable ... |
128 |
int guest_fpu_loaded, guest_xcr0_loaded; |
d17fbbf73 KVM: Portability:... |
129 |
wait_queue_head_t wq; |
34bb10b79 KVM: keep track o... |
130 |
struct pid *pid; |
d17fbbf73 KVM: Portability:... |
131 132 133 |
int sigset_active; sigset_t sigset; struct kvm_vcpu_stat stat; |
34c16eecf KVM: Portability:... |
134 |
#ifdef CONFIG_HAS_IOMEM |
d17fbbf73 KVM: Portability:... |
135 136 137 138 |
int mmio_needed; int mmio_read_completed; int mmio_is_write; int mmio_size; |
cef4dea07 KVM: 16-byte mmio... |
139 140 |
int mmio_index; unsigned char mmio_data[KVM_MMIO_SIZE]; |
6aa8b732c [PATCH] kvm: user... |
141 |
gpa_t mmio_phys_addr; |
34c16eecf KVM: Portability:... |
142 |
#endif |
1165f5fec KVM: Per-vcpu sta... |
143 |
|
af585b921 KVM: Halt vcpu if... |
144 145 146 147 148 149 150 151 |
#ifdef CONFIG_KVM_ASYNC_PF struct { u32 queued; struct list_head queue; struct list_head done; spinlock_t lock; } async_pf; #endif |
d657a98e3 KVM: Portability:... |
152 153 |
struct kvm_vcpu_arch arch; }; |
6b7e2d099 KVM: Add "exiting... |
154 155 156 157 |
static inline int kvm_vcpu_exiting_guest_mode(struct kvm_vcpu *vcpu) { return cmpxchg(&vcpu->mode, IN_GUEST_MODE, EXITING_GUEST_MODE); } |
660c22c42 KVM: limit the nu... |
158 159 160 161 162 |
/* * Some of the bitops functions do not support too long bitmaps. * This number must be determined not to exceed such limits. */ #define KVM_MEM_MAX_NR_PAGES ((1UL << 31) - 1) |
d4dbf4700 KVM: MMU: Make th... |
163 164 165 166 |
struct kvm_lpage_info { unsigned long rmap_pde; int write_count; }; |
6aa8b732c [PATCH] kvm: user... |
167 168 169 170 |
struct kvm_memory_slot { gfn_t base_gfn; unsigned long npages; unsigned long flags; |
290fc38da KVM: Remove the u... |
171 |
unsigned long *rmap; |
6aa8b732c [PATCH] kvm: user... |
172 |
unsigned long *dirty_bitmap; |
515a01279 KVM: pre-allocate... |
173 |
unsigned long *dirty_bitmap_head; |
7850ac542 KVM: Count the nu... |
174 |
unsigned long nr_dirty_pages; |
d4dbf4700 KVM: MMU: Make th... |
175 |
struct kvm_lpage_info *lpage_info[KVM_NR_PAGE_SIZES - 1]; |
8a7ae055f KVM: MMU: Partial... |
176 |
unsigned long userspace_addr; |
80b14b5b3 KVM: Unmap kernel... |
177 |
int user_alloc; |
e36d96f7c KVM: Keep slot ID... |
178 |
int id; |
6aa8b732c [PATCH] kvm: user... |
179 |
}; |
87bf6e7de KVM: fix the hand... |
180 181 182 183 |
static inline unsigned long kvm_dirty_bitmap_bytes(struct kvm_memory_slot *memslot) { return ALIGN(memslot->npages, BITS_PER_LONG) / 8; } |
399ec807d KVM: Userspace co... |
184 185 |
struct kvm_kernel_irq_routing_entry { u32 gsi; |
5116d8f6b KVM: fix ack not ... |
186 |
u32 type; |
4925663a0 KVM: Report IRQ i... |
187 |
int (*set)(struct kvm_kernel_irq_routing_entry *e, |
1a6e4a8c2 KVM: Move irq sha... |
188 |
struct kvm *kvm, int irq_source_id, int level); |
399ec807d KVM: Userspace co... |
189 190 191 192 193 |
union { struct { unsigned irqchip; unsigned pin; } irqchip; |
79950e107 KVM: Use irq rout... |
194 |
struct msi_msg msi; |
399ec807d KVM: Userspace co... |
195 |
}; |
46e624b95 KVM: Change irq r... |
196 197 |
struct hlist_node link; }; |
3e71f88bc KVM: Maintain bac... |
198 |
#ifdef __KVM_HAVE_IOAPIC |
46e624b95 KVM: Change irq r... |
199 |
struct kvm_irq_routing_table { |
3e71f88bc KVM: Maintain bac... |
200 |
int chip[KVM_NR_IRQCHIPS][KVM_IOAPIC_NUM_PINS]; |
46e624b95 KVM: Change irq r... |
201 202 203 204 205 206 207 |
struct kvm_kernel_irq_routing_entry *rt_entries; u32 nr_rt_entries; /* * Array indexed by gsi. Each entry contains list of irq chips * the gsi is connected to. */ struct hlist_head map[0]; |
399ec807d KVM: Userspace co... |
208 |
}; |
3e71f88bc KVM: Maintain bac... |
209 210 211 212 213 |
#else struct kvm_irq_routing_table {}; #endif |
93a5cef07 KVM: introduce KV... |
214 215 216 |
#ifndef KVM_MEM_SLOTS_NUM #define KVM_MEM_SLOTS_NUM (KVM_MEMORY_SLOTS + KVM_PRIVATE_MEM_SLOTS) #endif |
bf3e05bc1 KVM: sort memslot... |
217 218 219 220 221 |
/* * Note: * memslots are not sorted by id anymore, please use id_to_memslot() * to get the memslot by its id. */ |
46a26bf55 KVM: modify memsl... |
222 |
struct kvm_memslots { |
49c7754ce KVM: Add memory s... |
223 |
u64 generation; |
93a5cef07 KVM: introduce KV... |
224 |
struct kvm_memory_slot memslots[KVM_MEM_SLOTS_NUM]; |
f85e2cb5d KVM: introduce a ... |
225 226 |
/* The mapping table from slot id to the index in memslots[]. */ int id_to_index[KVM_MEM_SLOTS_NUM]; |
46a26bf55 KVM: modify memsl... |
227 |
}; |
6aa8b732c [PATCH] kvm: user... |
228 |
struct kvm { |
aaee2c94f KVM: MMU: Switch ... |
229 |
spinlock_t mmu_lock; |
79fac95ec KVM: convert slot... |
230 |
struct mutex slots_lock; |
6d4e4c4fc KVM: Disallow for... |
231 |
struct mm_struct *mm; /* userspace tied to this vm */ |
46a26bf55 KVM: modify memsl... |
232 |
struct kvm_memslots *memslots; |
bc6678a33 KVM: introduce kv... |
233 |
struct srcu_struct srcu; |
73880c80a KVM: Break depend... |
234 235 |
#ifdef CONFIG_KVM_APIC_ARCHITECTURE u32 bsp_vcpu_id; |
73880c80a KVM: Break depend... |
236 |
#endif |
fb3f0f51d KVM: Dynamically ... |
237 |
struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; |
73880c80a KVM: Break depend... |
238 |
atomic_t online_vcpus; |
217ece612 KVM: use yield_to... |
239 |
int last_boosted_vcpu; |
133de9021 [PATCH] KVM: Add ... |
240 |
struct list_head vm_list; |
60eead79a KVM: introduce ir... |
241 |
struct mutex lock; |
e93f8a0f8 KVM: convert io_b... |
242 |
struct kvm_io_bus *buses[KVM_NR_BUSES]; |
721eecbf4 KVM: irqfd |
243 244 245 246 247 |
#ifdef CONFIG_HAVE_KVM_EVENTFD struct { spinlock_t lock; struct list_head items; } irqfds; |
d34e6b175 KVM: add ioeventf... |
248 |
struct list_head ioeventfds; |
721eecbf4 KVM: irqfd |
249 |
#endif |
ba1389b7a KVM: Extend stats... |
250 |
struct kvm_vm_stat stat; |
d69fb81f0 KVM: Portability:... |
251 |
struct kvm_arch arch; |
d39f13b0d KVM: add vm refco... |
252 |
atomic_t users_count; |
5f94c1741 KVM: Add coalesce... |
253 |
#ifdef KVM_COALESCED_MMIO_PAGE_OFFSET |
5f94c1741 KVM: Add coalesce... |
254 |
struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; |
2b3c246a6 KVM: Make coalesc... |
255 256 |
spinlock_t ring_lock; struct list_head coalesced_zones; |
5f94c1741 KVM: Add coalesce... |
257 |
#endif |
e930bffe9 KVM: Synchronize ... |
258 |
|
60eead79a KVM: introduce ir... |
259 |
struct mutex irq_lock; |
75858a84a KVM: Interrupt ma... |
260 |
#ifdef CONFIG_HAVE_KVM_IRQCHIP |
bd2b53b20 KVM: fast-path ms... |
261 262 263 264 |
/* * Update side is protected by irq_lock and, * if configured, irqfds.lock. */ |
4b6a2872a kvm: add __rcu an... |
265 |
struct kvm_irq_routing_table __rcu *irq_routing; |
75858a84a KVM: Interrupt ma... |
266 |
struct hlist_head mask_notifier_list; |
136bdfeee KVM: Move irq ack... |
267 |
struct hlist_head irq_ack_notifier_list; |
75858a84a KVM: Interrupt ma... |
268 |
#endif |
e930bffe9 KVM: Synchronize ... |
269 270 271 272 273 |
#ifdef KVM_ARCH_WANT_MMU_NOTIFIER struct mmu_notifier mmu_notifier; unsigned long mmu_notifier_seq; long mmu_notifier_count; #endif |
5c663a153 KVM: Fix build er... |
274 |
long tlbs_dirty; |
6aa8b732c [PATCH] kvm: user... |
275 |
}; |
f02424785 KVM: Add and use ... |
276 277 |
/* The guest did something we don't support. */ #define pr_unimpl(vcpu, fmt, ...) \ |
bd80158af KVM: Clean up and... |
278 279 |
pr_err_ratelimited("kvm: %i: cpu%i " fmt, \ current->tgid, (vcpu)->vcpu_id , ## __VA_ARGS__) |
f02424785 KVM: Add and use ... |
280 |
|
6aa8b732c [PATCH] kvm: user... |
281 282 |
#define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) #define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) |
988a2cae6 KVM: Use macro to... |
283 284 285 286 287 288 289 |
static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i) { smp_rmb(); return kvm->vcpus[i]; } #define kvm_for_each_vcpu(idx, vcpup, kvm) \ |
b42fc3cbc KVM: Fix off by o... |
290 291 292 293 |
for (idx = 0; \ idx < atomic_read(&kvm->online_vcpus) && \ (vcpup = kvm_get_vcpu(kvm, idx)) != NULL; \ idx++) |
988a2cae6 KVM: Use macro to... |
294 |
|
be6ba0f09 KVM: introduce kv... |
295 296 |
#define kvm_for_each_memslot(memslot, slots) \ for (memslot = &slots->memslots[0]; \ |
bf3e05bc1 KVM: sort memslot... |
297 298 |
memslot < slots->memslots + KVM_MEM_SLOTS_NUM && memslot->npages;\ memslot++) |
be6ba0f09 KVM: introduce kv... |
299 |
|
fb3f0f51d KVM: Dynamically ... |
300 301 |
int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id); void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); |
313a3dc75 KVM: Portability:... |
302 303 |
void vcpu_load(struct kvm_vcpu *vcpu); void vcpu_put(struct kvm_vcpu *vcpu); |
0ee75bead KVM: Let vcpu str... |
304 |
int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, |
c16f862d0 KVM: Use kmem cac... |
305 |
struct module *module); |
cb498ea2c KVM: Portability:... |
306 |
void kvm_exit(void); |
6aa8b732c [PATCH] kvm: user... |
307 |
|
d39f13b0d KVM: add vm refco... |
308 309 |
void kvm_get_kvm(struct kvm *kvm); void kvm_put_kvm(struct kvm *kvm); |
be593d628 KVM: introduce up... |
310 |
void update_memslots(struct kvm_memslots *slots, struct kvm_memory_slot *new); |
d39f13b0d KVM: add vm refco... |
311 |
|
90d83dc3d KVM: use the corr... |
312 313 314 315 316 317 |
static inline struct kvm_memslots *kvm_memslots(struct kvm *kvm) { return rcu_dereference_check(kvm->memslots, srcu_read_lock_held(&kvm->srcu) || lockdep_is_held(&kvm->slots_lock)); } |
28a37544f KVM: introduce id... |
318 319 320 |
static inline struct kvm_memory_slot * id_to_memslot(struct kvm_memslots *slots, int id) { |
f85e2cb5d KVM: introduce a ... |
321 322 |
int index = slots->id_to_index[id]; struct kvm_memory_slot *slot; |
bf3e05bc1 KVM: sort memslot... |
323 |
|
f85e2cb5d KVM: introduce a ... |
324 |
slot = &slots->memslots[index]; |
bf3e05bc1 KVM: sort memslot... |
325 |
|
f85e2cb5d KVM: introduce a ... |
326 327 |
WARN_ON(slot->id != id); return slot; |
28a37544f KVM: introduce id... |
328 |
} |
6aa8b732c [PATCH] kvm: user... |
329 330 331 |
#define HPA_MSB ((sizeof(hpa_t) * 8) - 1) #define HPA_ERR_MASK ((hpa_t)1 << HPA_MSB) static inline int is_error_hpa(hpa_t hpa) { return hpa >> HPA_MSB; } |
6aa8b732c [PATCH] kvm: user... |
332 |
|
cea7bb212 KVM: MMU: Make gf... |
333 |
extern struct page *bad_page; |
fce92dce7 KVM: MMU: filter ... |
334 |
extern struct page *fault_page; |
35149e212 KVM: MMU: Don't a... |
335 |
extern pfn_t bad_pfn; |
fce92dce7 KVM: MMU: filter ... |
336 |
extern pfn_t fault_pfn; |
6aa8b732c [PATCH] kvm: user... |
337 |
|
cea7bb212 KVM: MMU: Make gf... |
338 |
int is_error_page(struct page *page); |
35149e212 KVM: MMU: Don't a... |
339 |
int is_error_pfn(pfn_t pfn); |
bf998156d KVM: Avoid killin... |
340 |
int is_hwpoison_pfn(pfn_t pfn); |
edba23e51 KVM: Return EFAUL... |
341 |
int is_fault_pfn(pfn_t pfn); |
fce92dce7 KVM: MMU: filter ... |
342 343 |
int is_noslot_pfn(pfn_t pfn); int is_invalid_pfn(pfn_t pfn); |
f9d46eb0e KVM: add kvm_is_e... |
344 |
int kvm_is_error_hva(unsigned long addr); |
210c7c4d7 KVM: Export memor... |
345 346 347 |
int kvm_set_memory_region(struct kvm *kvm, struct kvm_userspace_memory_region *mem, int user_alloc); |
f78e0e2ee KVM: VMX: Enable ... |
348 349 350 |
int __kvm_set_memory_region(struct kvm *kvm, struct kvm_userspace_memory_region *mem, int user_alloc); |
f7784b8ec KVM: split kvm_ar... |
351 352 353 354 355 356 |
int kvm_arch_prepare_memory_region(struct kvm *kvm, struct kvm_memory_slot *memslot, struct kvm_memory_slot old, struct kvm_userspace_memory_region *mem, int user_alloc); void kvm_arch_commit_memory_region(struct kvm *kvm, |
0de10343b KVM: Portability:... |
357 358 359 |
struct kvm_userspace_memory_region *mem, struct kvm_memory_slot old, int user_alloc); |
54dee9933 KVM: VMX: conditi... |
360 |
void kvm_disable_largepages(void); |
34d4cb8fc KVM: MMU: nuke sh... |
361 |
void kvm_arch_flush_shadow(struct kvm *kvm); |
a983fb238 KVM: x86: switch ... |
362 |
|
48987781e KVM: MMU: introdu... |
363 364 |
int gfn_to_page_many_atomic(struct kvm *kvm, gfn_t gfn, struct page **pages, int nr_pages); |
954bbbc23 KVM: Simply gfn_t... |
365 |
struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); |
05da45583 KVM: MMU: large p... |
366 |
unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn); |
b4231d618 KVM: MMU: Selecti... |
367 368 |
void kvm_release_page_clean(struct page *page); void kvm_release_page_dirty(struct page *page); |
35149e212 KVM: MMU: Don't a... |
369 370 |
void kvm_set_page_dirty(struct page *page); void kvm_set_page_accessed(struct page *page); |
887c08ac1 KVM: MMU: introdu... |
371 |
pfn_t hva_to_pfn_atomic(struct kvm *kvm, unsigned long addr); |
365fb3fdf KVM: MMU: rewrite... |
372 |
pfn_t gfn_to_pfn_atomic(struct kvm *kvm, gfn_t gfn); |
612819c3c KVM: propagate fa... |
373 374 |
pfn_t gfn_to_pfn_async(struct kvm *kvm, gfn_t gfn, bool *async, bool write_fault, bool *writable); |
35149e212 KVM: MMU: Don't a... |
375 |
pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn); |
612819c3c KVM: propagate fa... |
376 377 |
pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault, bool *writable); |
506f0d6f9 KVM: introduce gf... |
378 379 |
pfn_t gfn_to_pfn_memslot(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn); |
35149e212 KVM: MMU: Don't a... |
380 381 382 383 384 |
void kvm_release_pfn_dirty(pfn_t); void kvm_release_pfn_clean(pfn_t pfn); void kvm_set_pfn_dirty(pfn_t pfn); void kvm_set_pfn_accessed(pfn_t pfn); void kvm_get_pfn(pfn_t pfn); |
195aefde9 KVM: Add general ... |
385 386 |
int kvm_read_guest_page(struct kvm *kvm, gfn_t gfn, void *data, int offset, int len); |
7ec545882 KVM: Add kvm_read... |
387 388 |
int kvm_read_guest_atomic(struct kvm *kvm, gpa_t gpa, void *data, unsigned long len); |
195aefde9 KVM: Add general ... |
389 |
int kvm_read_guest(struct kvm *kvm, gpa_t gpa, void *data, unsigned long len); |
e03b644fe KVM: introduce kv... |
390 391 |
int kvm_read_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc, void *data, unsigned long len); |
195aefde9 KVM: Add general ... |
392 393 394 395 |
int kvm_write_guest_page(struct kvm *kvm, gfn_t gfn, const void *data, int offset, int len); int kvm_write_guest(struct kvm *kvm, gpa_t gpa, const void *data, unsigned long len); |
49c7754ce KVM: Add memory s... |
396 397 398 399 |
int kvm_write_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc, void *data, unsigned long len); int kvm_gfn_to_hva_cache_init(struct kvm *kvm, struct gfn_to_hva_cache *ghc, gpa_t gpa); |
195aefde9 KVM: Add general ... |
400 401 |
int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len); int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len); |
6aa8b732c [PATCH] kvm: user... |
402 |
struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn); |
e0d62c7f4 KVM: Add kernel-i... |
403 |
int kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn); |
8f0b1ab6f KVM: Introduce kv... |
404 |
unsigned long kvm_host_page_size(struct kvm *kvm, gfn_t gfn); |
6aa8b732c [PATCH] kvm: user... |
405 |
void mark_page_dirty(struct kvm *kvm, gfn_t gfn); |
49c7754ce KVM: Add memory s... |
406 407 |
void mark_page_dirty_in_slot(struct kvm *kvm, struct kvm_memory_slot *memslot, gfn_t gfn); |
6aa8b732c [PATCH] kvm: user... |
408 |
|
8776e5194 KVM: Portability:... |
409 |
void kvm_vcpu_block(struct kvm_vcpu *vcpu); |
d255f4f2b KVM: introduce kv... |
410 |
void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu); |
6aa8b732c [PATCH] kvm: user... |
411 |
void kvm_resched(struct kvm_vcpu *vcpu); |
7702fd1f6 KVM: Prevent gues... |
412 413 |
void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); |
a4ee1ca4a KVM: MMU: delay f... |
414 |
|
d9e368d61 KVM: Flush remote... |
415 |
void kvm_flush_remote_tlbs(struct kvm *kvm); |
2e53d63ac KVM: MMU: ignore ... |
416 |
void kvm_reload_remote_mmus(struct kvm *kvm); |
6aa8b732c [PATCH] kvm: user... |
417 |
|
043405e10 KVM: Move x86 msr... |
418 419 |
long kvm_arch_dev_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg); |
313a3dc75 KVM: Portability:... |
420 421 |
long kvm_arch_vcpu_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg); |
018d00d2f KVM: Portability:... |
422 423 |
int kvm_dev_ioctl_check_extension(long ext); |
5bb064dcd KVM: Portability:... |
424 425 426 427 |
int kvm_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log, int *is_dirty); int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log); |
1fe779f8e KVM: Portability:... |
428 429 430 431 432 433 |
int kvm_vm_ioctl_set_memory_region(struct kvm *kvm, struct kvm_userspace_memory_region *mem, int user_alloc); long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg); |
313a3dc75 KVM: Portability:... |
434 |
|
d07520607 KVM: Portability:... |
435 436 |
int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); |
8b0067913 KVM: Portability:... |
437 438 |
int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu, struct kvm_translation *tr); |
b6c7a5dcc KVM: Portability:... |
439 440 441 442 443 444 |
int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs); int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs); int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs); int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs); |
62d9f0dbc KVM: add ioctls t... |
445 446 447 448 |
int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, struct kvm_mp_state *mp_state); int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, struct kvm_mp_state *mp_state); |
d0bfb940e KVM: New guest de... |
449 450 |
int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, struct kvm_guest_debug *dbg); |
b6c7a5dcc KVM: Portability:... |
451 |
int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); |
f8c16bbaa KVM: Portability:... |
452 453 |
int kvm_arch_init(void *opaque); void kvm_arch_exit(void); |
043405e10 KVM: Move x86 msr... |
454 |
|
e9b11c175 KVM: Portability:... |
455 456 457 458 459 460 461 |
int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu); void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu); void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu); void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu); void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu); struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id); |
26e5215fd KVM: Split vcpu c... |
462 |
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu); |
d40ccc624 KVM: Correct cons... |
463 |
void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu); |
e9b11c175 KVM: Portability:... |
464 465 |
int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu); |
10474ae89 KVM: Activate Vir... |
466 |
int kvm_arch_hardware_enable(void *garbage); |
e9b11c175 KVM: Portability:... |
467 468 469 470 |
void kvm_arch_hardware_disable(void *garbage); int kvm_arch_hardware_setup(void); void kvm_arch_hardware_unsetup(void); void kvm_arch_check_processor_compat(void *rtn); |
1d737c8a6 KVM: Portability:... |
471 |
int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); |
e9b11c175 KVM: Portability:... |
472 |
|
d19a9cd27 KVM: Portability:... |
473 |
void kvm_free_physmem(struct kvm *kvm); |
d89f5eff7 KVM: Clean up vm ... |
474 475 476 477 478 479 480 481 482 483 484 485 486 |
#ifndef __KVM_HAVE_ARCH_VM_ALLOC static inline struct kvm *kvm_arch_alloc_vm(void) { return kzalloc(sizeof(struct kvm), GFP_KERNEL); } static inline void kvm_arch_free_vm(struct kvm *kvm) { kfree(kvm); } #endif int kvm_arch_init_vm(struct kvm *kvm); |
d19a9cd27 KVM: Portability:... |
487 |
void kvm_arch_destroy_vm(struct kvm *kvm); |
8a98f6648 KVM: Move device ... |
488 |
void kvm_free_all_assigned_devices(struct kvm *kvm); |
ad8ba2cd4 KVM: Add kvm_arch... |
489 |
void kvm_arch_sync_events(struct kvm *kvm); |
e9b11c175 KVM: Portability:... |
490 |
|
3d80840d9 KVM: hlt emulatio... |
491 |
int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); |
5736199af KVM: Move kvm_vcp... |
492 |
void kvm_vcpu_kick(struct kvm_vcpu *vcpu); |
682c59a3f KVM: Portability:... |
493 |
|
c77fb9dc7 KVM: Change is_mm... |
494 |
int kvm_is_mmio_pfn(pfn_t pfn); |
62c476c7c KVM: Device Assig... |
495 496 497 498 499 500 501 502 |
struct kvm_irq_ack_notifier { struct hlist_node link; unsigned gsi; void (*irq_acked)(struct kvm_irq_ack_notifier *kian); }; struct kvm_assigned_dev_kernel { struct kvm_irq_ack_notifier ack_notifier; |
62c476c7c KVM: Device Assig... |
503 504 |
struct list_head list; int assigned_dev_id; |
ab9f4ecbb KVM: enable PCI m... |
505 |
int host_segnr; |
62c476c7c KVM: Device Assig... |
506 507 |
int host_busnr; int host_devfn; |
c1e015142 KVM: Ioctls for i... |
508 |
unsigned int entries_nr; |
62c476c7c KVM: Device Assig... |
509 |
int host_irq; |
defaf1587 KVM: fix handling... |
510 |
bool host_irq_disabled; |
c1e015142 KVM: Ioctls for i... |
511 |
struct msix_entry *host_msix_entries; |
62c476c7c KVM: Device Assig... |
512 |
int guest_irq; |
0645211c4 KVM: Switch assig... |
513 |
struct msix_entry *guest_msix_entries; |
4f906c19a KVM: Replace irq_... |
514 |
unsigned long irq_requested_type; |
5550af4df KVM: Fix guest sh... |
515 |
int irq_source_id; |
b653574a7 Deassign device i... |
516 |
int flags; |
62c476c7c KVM: Device Assig... |
517 518 |
struct pci_dev *dev; struct kvm *kvm; |
0645211c4 KVM: Switch assig... |
519 |
spinlock_t intx_lock; |
1e001d49f KVM: Refactor IRQ... |
520 |
char irq_name[32]; |
f8fcfd775 KVM: Use pci_stor... |
521 |
struct pci_saved_state *pci_saved_state; |
62c476c7c KVM: Device Assig... |
522 |
}; |
75858a84a KVM: Interrupt ma... |
523 524 525 526 527 528 529 530 531 532 533 |
struct kvm_irq_mask_notifier { void (*func)(struct kvm_irq_mask_notifier *kimn, bool masked); int irq; struct hlist_node link; }; void kvm_register_irq_mask_notifier(struct kvm *kvm, int irq, struct kvm_irq_mask_notifier *kimn); void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq, struct kvm_irq_mask_notifier *kimn); |
4a994358b KVM: Convert mask... |
534 535 |
void kvm_fire_mask_notifiers(struct kvm *kvm, unsigned irqchip, unsigned pin, bool mask); |
75858a84a KVM: Interrupt ma... |
536 |
|
46e624b95 KVM: Change irq r... |
537 538 539 540 541 542 |
#ifdef __KVM_HAVE_IOAPIC void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic, union kvm_ioapic_redirect_entry *entry, unsigned long *deliver_bitmask); #endif int kvm_set_irq(struct kvm *kvm, int irq_source_id, u32 irq, int level); |
bd2b53b20 KVM: fast-path ms... |
543 544 |
int kvm_set_msi(struct kvm_kernel_irq_routing_entry *irq_entry, struct kvm *kvm, int irq_source_id, int level); |
44882eed2 KVM: make irq ack... |
545 |
void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); |
3de42dc09 KVM: Separate irq... |
546 547 |
void kvm_register_irq_ack_notifier(struct kvm *kvm, struct kvm_irq_ack_notifier *kian); |
fa40a8214 KVM: switch irq i... |
548 549 |
void kvm_unregister_irq_ack_notifier(struct kvm *kvm, struct kvm_irq_ack_notifier *kian); |
5550af4df KVM: Fix guest sh... |
550 551 |
int kvm_request_irq_source_id(struct kvm *kvm); void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id); |
62c476c7c KVM: Device Assig... |
552 |
|
522c68c44 KVM: Enable snoop... |
553 554 |
/* For vcpu->arch.iommu_flags */ #define KVM_IOMMU_CACHE_COHERENCY 0x1 |
19de40a84 KVM: change KVM t... |
555 |
#ifdef CONFIG_IOMMU_API |
3ad26d813 KVM: use gfn_to_p... |
556 |
int kvm_iommu_map_pages(struct kvm *kvm, struct kvm_memory_slot *slot); |
260782bcf KVM: use the new ... |
557 |
int kvm_iommu_map_guest(struct kvm *kvm); |
62c476c7c KVM: Device Assig... |
558 |
int kvm_iommu_unmap_guest(struct kvm *kvm); |
260782bcf KVM: use the new ... |
559 560 |
int kvm_assign_device(struct kvm *kvm, struct kvm_assigned_dev_kernel *assigned_dev); |
0a9203567 KVM: support devi... |
561 562 |
int kvm_deassign_device(struct kvm *kvm, struct kvm_assigned_dev_kernel *assigned_dev); |
19de40a84 KVM: change KVM t... |
563 |
#else /* CONFIG_IOMMU_API */ |
62c476c7c KVM: Device Assig... |
564 |
static inline int kvm_iommu_map_pages(struct kvm *kvm, |
d7a79b6c8 KVM: Fix signatur... |
565 |
struct kvm_memory_slot *slot) |
62c476c7c KVM: Device Assig... |
566 567 568 |
{ return 0; } |
260782bcf KVM: use the new ... |
569 |
static inline int kvm_iommu_map_guest(struct kvm *kvm) |
62c476c7c KVM: Device Assig... |
570 571 572 573 574 575 576 577 |
{ return -ENODEV; } static inline int kvm_iommu_unmap_guest(struct kvm *kvm) { return 0; } |
260782bcf KVM: use the new ... |
578 579 580 581 582 583 |
static inline int kvm_assign_device(struct kvm *kvm, struct kvm_assigned_dev_kernel *assigned_dev) { return 0; } |
0a9203567 KVM: support devi... |
584 585 586 587 588 589 |
static inline int kvm_deassign_device(struct kvm *kvm, struct kvm_assigned_dev_kernel *assigned_dev) { return 0; } |
19de40a84 KVM: change KVM t... |
590 |
#endif /* CONFIG_IOMMU_API */ |
62c476c7c KVM: Device Assig... |
591 |
|
d172fcd3a sched: guest CPU ... |
592 593 |
static inline void kvm_guest_enter(void) { |
8fa220682 KVM: make guest m... |
594 |
BUG_ON(preemptible()); |
e56a7a28e KVM: Use virtual ... |
595 |
account_system_vtime(current); |
d172fcd3a sched: guest CPU ... |
596 |
current->flags |= PF_VCPU; |
8fa220682 KVM: make guest m... |
597 598 599 600 601 602 603 604 |
/* KVM does not hold any references to rcu protected data when it * switches CPU into a guest mode. In fact switching to a guest mode * is very similar to exiting to userspase from rcu point of view. In * addition CPU may stay in a guest mode for quite a long time (up to * one time slice). Lets treat guest mode as quiescent state, just like * we do with user-mode execution. */ rcu_virt_note_context_switch(smp_processor_id()); |
d172fcd3a sched: guest CPU ... |
605 606 607 608 |
} static inline void kvm_guest_exit(void) { |
e56a7a28e KVM: Use virtual ... |
609 |
account_system_vtime(current); |
d172fcd3a sched: guest CPU ... |
610 611 |
current->flags &= ~PF_VCPU; } |
0ee8dcb87 KVM: cleanup mems... |
612 613 614 615 |
static inline int memslot_id(struct kvm *kvm, gfn_t gfn) { return gfn_to_memslot(kvm, gfn)->id; } |
887c08ac1 KVM: MMU: introdu... |
616 617 618 619 620 |
static inline unsigned long gfn_to_hva_memslot(struct kvm_memory_slot *slot, gfn_t gfn) { return slot->userspace_addr + (gfn - slot->base_gfn) * PAGE_SIZE; } |
1755fbcc6 KVM: MMU: Introdu... |
621 622 623 624 |
static inline gpa_t gfn_to_gpa(gfn_t gfn) { return (gpa_t)gfn << PAGE_SHIFT; } |
6aa8b732c [PATCH] kvm: user... |
625 |
|
c30a358d3 KVM: MMU: Add inf... |
626 627 628 629 |
static inline gfn_t gpa_to_gfn(gpa_t gpa) { return (gfn_t)(gpa >> PAGE_SHIFT); } |
62c476c7c KVM: Device Assig... |
630 631 632 633 |
static inline hpa_t pfn_to_hpa(pfn_t pfn) { return (hpa_t)pfn << PAGE_SHIFT; } |
2f5997140 KVM: migrate PIT ... |
634 |
static inline void kvm_migrate_timers(struct kvm_vcpu *vcpu) |
2f52d58c9 KVM: Move apic ti... |
635 636 637 |
{ set_bit(KVM_REQ_MIGRATE_TIMER, &vcpu->requests); } |
ba1389b7a KVM: Extend stats... |
638 639 640 641 |
enum kvm_stat_kind { KVM_STAT_VM, KVM_STAT_VCPU, }; |
417bc3041 KVM: Portability:... |
642 643 644 |
struct kvm_stats_debugfs_item { const char *name; int offset; |
ba1389b7a KVM: Extend stats... |
645 |
enum kvm_stat_kind kind; |
417bc3041 KVM: Portability:... |
646 647 648 |
struct dentry *dentry; }; extern struct kvm_stats_debugfs_item debugfs_entries[]; |
76f7c8790 KVM: Rename debug... |
649 |
extern struct dentry *kvm_debugfs_dir; |
d4c9ff2d1 KVM: Add kvm trac... |
650 |
|
e930bffe9 KVM: Synchronize ... |
651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 |
#ifdef KVM_ARCH_WANT_MMU_NOTIFIER static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_seq) { if (unlikely(vcpu->kvm->mmu_notifier_count)) return 1; /* * Both reads happen under the mmu_lock and both values are * modified under mmu_lock, so there's no need of smb_rmb() * here in between, otherwise mmu_notifier_count should be * read before mmu_notifier_seq, see * mmu_notifier_invalidate_range_end write side. */ if (vcpu->kvm->mmu_notifier_seq != mmu_seq) return 1; return 0; } #endif |
399ec807d KVM: Userspace co... |
668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 |
#ifdef CONFIG_HAVE_KVM_IRQCHIP #define KVM_MAX_IRQ_ROUTES 1024 int kvm_setup_default_irq_routing(struct kvm *kvm); int kvm_set_irq_routing(struct kvm *kvm, const struct kvm_irq_routing_entry *entries, unsigned nr, unsigned flags); void kvm_free_irq_routing(struct kvm *kvm); #else static inline void kvm_free_irq_routing(struct kvm *kvm) {} #endif |
721eecbf4 KVM: irqfd |
684 |
#ifdef CONFIG_HAVE_KVM_EVENTFD |
d34e6b175 KVM: add ioeventf... |
685 |
void kvm_eventfd_init(struct kvm *kvm); |
721eecbf4 KVM: irqfd |
686 687 |
int kvm_irqfd(struct kvm *kvm, int fd, int gsi, int flags); void kvm_irqfd_release(struct kvm *kvm); |
bd2b53b20 KVM: fast-path ms... |
688 |
void kvm_irq_routing_update(struct kvm *, struct kvm_irq_routing_table *); |
d34e6b175 KVM: add ioeventf... |
689 |
int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args); |
721eecbf4 KVM: irqfd |
690 691 |
#else |
d34e6b175 KVM: add ioeventf... |
692 |
static inline void kvm_eventfd_init(struct kvm *kvm) {} |
bd2b53b20 KVM: fast-path ms... |
693 |
|
721eecbf4 KVM: irqfd |
694 695 696 697 698 699 |
static inline int kvm_irqfd(struct kvm *kvm, int fd, int gsi, int flags) { return -EINVAL; } static inline void kvm_irqfd_release(struct kvm *kvm) {} |
bd2b53b20 KVM: fast-path ms... |
700 |
|
27923eb19 KVM: PPC: Fix com... |
701 |
#ifdef CONFIG_HAVE_KVM_IRQCHIP |
bd2b53b20 KVM: fast-path ms... |
702 703 704 705 706 |
static inline void kvm_irq_routing_update(struct kvm *kvm, struct kvm_irq_routing_table *irq_rt) { rcu_assign_pointer(kvm->irq_routing, irq_rt); } |
27923eb19 KVM: PPC: Fix com... |
707 |
#endif |
bd2b53b20 KVM: fast-path ms... |
708 |
|
d34e6b175 KVM: add ioeventf... |
709 710 711 712 |
static inline int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args) { return -ENOSYS; } |
721eecbf4 KVM: irqfd |
713 714 |
#endif /* CONFIG_HAVE_KVM_EVENTFD */ |
73880c80a KVM: Break depend... |
715 |
#ifdef CONFIG_KVM_APIC_ARCHITECTURE |
c5af89b68 KVM: Introduce kv... |
716 717 |
static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu) { |
d3efc8efd KVM: use vcpu_id ... |
718 |
return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id; |
c5af89b68 KVM: Introduce kv... |
719 |
} |
6aa8b732c [PATCH] kvm: user... |
720 |
#endif |
bfd99ff5d KVM: Move assigne... |
721 722 723 724 725 726 727 728 729 730 731 732 733 |
#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl, unsigned long arg); #else static inline long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl, unsigned long arg) { return -ENOTTY; } |
73880c80a KVM: Break depend... |
734 |
#endif |
bfd99ff5d KVM: Move assigne... |
735 |
|
a8eeb04a4 KVM: Add mini-API... |
736 737 738 739 |
static inline void kvm_make_request(int req, struct kvm_vcpu *vcpu) { set_bit(req, &vcpu->requests); } |
a8eeb04a4 KVM: Add mini-API... |
740 741 |
static inline bool kvm_check_request(int req, struct kvm_vcpu *vcpu) { |
0719837c0 KVM: Reduce atomi... |
742 743 744 745 746 747 |
if (test_bit(req, &vcpu->requests)) { clear_bit(req, &vcpu->requests); return true; } else { return false; } |
a8eeb04a4 KVM: Add mini-API... |
748 |
} |
bfd99ff5d KVM: Move assigne... |
749 |
#endif |