diff options
Diffstat (limited to 'include/linux/kvm_host.h')
| -rw-r--r-- | include/linux/kvm_host.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 8525afc53107..3833c48fae3a 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -34,6 +34,8 @@ | |||
| 34 | #define KVM_REQ_MMU_RELOAD 3 | 34 | #define KVM_REQ_MMU_RELOAD 3 |
| 35 | #define KVM_REQ_TRIPLE_FAULT 4 | 35 | #define KVM_REQ_TRIPLE_FAULT 4 |
| 36 | #define KVM_REQ_PENDING_TIMER 5 | 36 | #define KVM_REQ_PENDING_TIMER 5 |
| 37 | #define KVM_REQ_UNHALT 6 | ||
| 38 | #define KVM_REQ_MMU_SYNC 7 | ||
| 37 | 39 | ||
| 38 | struct kvm_vcpu; | 40 | struct kvm_vcpu; |
| 39 | extern struct kmem_cache *kvm_vcpu_cache; | 41 | extern struct kmem_cache *kvm_vcpu_cache; |
| @@ -279,12 +281,68 @@ void kvm_free_physmem(struct kvm *kvm); | |||
| 279 | 281 | ||
| 280 | struct kvm *kvm_arch_create_vm(void); | 282 | struct kvm *kvm_arch_create_vm(void); |
| 281 | void kvm_arch_destroy_vm(struct kvm *kvm); | 283 | void kvm_arch_destroy_vm(struct kvm *kvm); |
| 284 | void kvm_free_all_assigned_devices(struct kvm *kvm); | ||
| 282 | 285 | ||
| 283 | int kvm_cpu_get_interrupt(struct kvm_vcpu *v); | 286 | int kvm_cpu_get_interrupt(struct kvm_vcpu *v); |
| 284 | int kvm_cpu_has_interrupt(struct kvm_vcpu *v); | 287 | int kvm_cpu_has_interrupt(struct kvm_vcpu *v); |
| 285 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); | 288 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); |
| 286 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); | 289 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); |
| 287 | 290 | ||
| 291 | int kvm_is_mmio_pfn(pfn_t pfn); | ||
| 292 | |||
| 293 | struct kvm_irq_ack_notifier { | ||
| 294 | struct hlist_node link; | ||
| 295 | unsigned gsi; | ||
| 296 | void (*irq_acked)(struct kvm_irq_ack_notifier *kian); | ||
| 297 | }; | ||
| 298 | |||
| 299 | struct kvm_assigned_dev_kernel { | ||
| 300 | struct kvm_irq_ack_notifier ack_notifier; | ||
| 301 | struct work_struct interrupt_work; | ||
| 302 | struct list_head list; | ||
| 303 | int assigned_dev_id; | ||
| 304 | int host_busnr; | ||
| 305 | int host_devfn; | ||
| 306 | int host_irq; | ||
| 307 | int guest_irq; | ||
| 308 | int irq_requested; | ||
| 309 | struct pci_dev *dev; | ||
| 310 | struct kvm *kvm; | ||
| 311 | }; | ||
| 312 | void kvm_set_irq(struct kvm *kvm, int irq, int level); | ||
| 313 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); | ||
| 314 | void kvm_register_irq_ack_notifier(struct kvm *kvm, | ||
| 315 | struct kvm_irq_ack_notifier *kian); | ||
| 316 | void kvm_unregister_irq_ack_notifier(struct kvm *kvm, | ||
| 317 | struct kvm_irq_ack_notifier *kian); | ||
| 318 | |||
| 319 | #ifdef CONFIG_DMAR | ||
| 320 | int kvm_iommu_map_pages(struct kvm *kvm, gfn_t base_gfn, | ||
| 321 | unsigned long npages); | ||
| 322 | int kvm_iommu_map_guest(struct kvm *kvm, | ||
| 323 | struct kvm_assigned_dev_kernel *assigned_dev); | ||
| 324 | int kvm_iommu_unmap_guest(struct kvm *kvm); | ||
| 325 | #else /* CONFIG_DMAR */ | ||
| 326 | static inline int kvm_iommu_map_pages(struct kvm *kvm, | ||
| 327 | gfn_t base_gfn, | ||
| 328 | unsigned long npages) | ||
| 329 | { | ||
| 330 | return 0; | ||
| 331 | } | ||
| 332 | |||
| 333 | static inline int kvm_iommu_map_guest(struct kvm *kvm, | ||
| 334 | struct kvm_assigned_dev_kernel | ||
| 335 | *assigned_dev) | ||
| 336 | { | ||
| 337 | return -ENODEV; | ||
| 338 | } | ||
| 339 | |||
| 340 | static inline int kvm_iommu_unmap_guest(struct kvm *kvm) | ||
| 341 | { | ||
| 342 | return 0; | ||
| 343 | } | ||
| 344 | #endif /* CONFIG_DMAR */ | ||
| 345 | |||
| 288 | static inline void kvm_guest_enter(void) | 346 | static inline void kvm_guest_enter(void) |
| 289 | { | 347 | { |
| 290 | account_system_vtime(current); | 348 | account_system_vtime(current); |
| @@ -307,6 +365,11 @@ static inline gpa_t gfn_to_gpa(gfn_t gfn) | |||
| 307 | return (gpa_t)gfn << PAGE_SHIFT; | 365 | return (gpa_t)gfn << PAGE_SHIFT; |
| 308 | } | 366 | } |
| 309 | 367 | ||
| 368 | static inline hpa_t pfn_to_hpa(pfn_t pfn) | ||
| 369 | { | ||
| 370 | return (hpa_t)pfn << PAGE_SHIFT; | ||
| 371 | } | ||
| 372 | |||
| 310 | static inline void kvm_migrate_timers(struct kvm_vcpu *vcpu) | 373 | static inline void kvm_migrate_timers(struct kvm_vcpu *vcpu) |
| 311 | { | 374 | { |
| 312 | set_bit(KVM_REQ_MIGRATE_TIMER, &vcpu->requests); | 375 | set_bit(KVM_REQ_MIGRATE_TIMER, &vcpu->requests); |
| @@ -326,6 +389,25 @@ struct kvm_stats_debugfs_item { | |||
| 326 | extern struct kvm_stats_debugfs_item debugfs_entries[]; | 389 | extern struct kvm_stats_debugfs_item debugfs_entries[]; |
| 327 | extern struct dentry *kvm_debugfs_dir; | 390 | extern struct dentry *kvm_debugfs_dir; |
| 328 | 391 | ||
| 392 | #define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ | ||
| 393 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 394 | vcpu, 5, d1, d2, d3, d4, d5) | ||
| 395 | #define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ | ||
| 396 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 397 | vcpu, 4, d1, d2, d3, d4, 0) | ||
| 398 | #define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ | ||
| 399 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 400 | vcpu, 3, d1, d2, d3, 0, 0) | ||
| 401 | #define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ | ||
| 402 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 403 | vcpu, 2, d1, d2, 0, 0, 0) | ||
| 404 | #define KVMTRACE_1D(evt, vcpu, d1, name) \ | ||
| 405 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 406 | vcpu, 1, d1, 0, 0, 0, 0) | ||
| 407 | #define KVMTRACE_0D(evt, vcpu, name) \ | ||
| 408 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 409 | vcpu, 0, 0, 0, 0, 0, 0) | ||
| 410 | |||
| 329 | #ifdef CONFIG_KVM_TRACE | 411 | #ifdef CONFIG_KVM_TRACE |
| 330 | int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg); | 412 | int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg); |
| 331 | void kvm_trace_cleanup(void); | 413 | void kvm_trace_cleanup(void); |
