aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/kvm_host.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/kvm_host.h')
-rw-r--r--include/linux/kvm_host.h131
1 files changed, 98 insertions, 33 deletions
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index b7bbb5ddd7ae..169d07758ee5 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -38,6 +38,7 @@
38#define KVM_REQ_MMU_SYNC 7 38#define KVM_REQ_MMU_SYNC 7
39#define KVM_REQ_KVMCLOCK_UPDATE 8 39#define KVM_REQ_KVMCLOCK_UPDATE 8
40#define KVM_REQ_KICK 9 40#define KVM_REQ_KICK 9
41#define KVM_REQ_DEACTIVATE_FPU 10
41 42
42#define KVM_USERSPACE_IRQ_SOURCE_ID 0 43#define KVM_USERSPACE_IRQ_SOURCE_ID 0
43 44
@@ -53,24 +54,24 @@ extern struct kmem_cache *kvm_vcpu_cache;
53 */ 54 */
54struct kvm_io_bus { 55struct kvm_io_bus {
55 int dev_count; 56 int dev_count;
56#define NR_IOBUS_DEVS 6 57#define NR_IOBUS_DEVS 200
57 struct kvm_io_device *devs[NR_IOBUS_DEVS]; 58 struct kvm_io_device *devs[NR_IOBUS_DEVS];
58}; 59};
59 60
60void kvm_io_bus_init(struct kvm_io_bus *bus); 61enum kvm_bus {
61void kvm_io_bus_destroy(struct kvm_io_bus *bus); 62 KVM_MMIO_BUS,
62int kvm_io_bus_write(struct kvm_io_bus *bus, gpa_t addr, int len, 63 KVM_PIO_BUS,
63 const void *val); 64 KVM_NR_BUSES
64int kvm_io_bus_read(struct kvm_io_bus *bus, gpa_t addr, int len, 65};
66
67int kvm_io_bus_write(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
68 int len, const void *val);
69int kvm_io_bus_read(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, int len,
65 void *val); 70 void *val);
66int __kvm_io_bus_register_dev(struct kvm_io_bus *bus, 71int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx,
67 struct kvm_io_device *dev);
68int kvm_io_bus_register_dev(struct kvm *kvm, struct kvm_io_bus *bus,
69 struct kvm_io_device *dev); 72 struct kvm_io_device *dev);
70void __kvm_io_bus_unregister_dev(struct kvm_io_bus *bus, 73int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx,
71 struct kvm_io_device *dev); 74 struct kvm_io_device *dev);
72void kvm_io_bus_unregister_dev(struct kvm *kvm, struct kvm_io_bus *bus,
73 struct kvm_io_device *dev);
74 75
75struct kvm_vcpu { 76struct kvm_vcpu {
76 struct kvm *kvm; 77 struct kvm *kvm;
@@ -83,6 +84,8 @@ struct kvm_vcpu {
83 struct kvm_run *run; 84 struct kvm_run *run;
84 unsigned long requests; 85 unsigned long requests;
85 unsigned long guest_debug; 86 unsigned long guest_debug;
87 int srcu_idx;
88
86 int fpu_active; 89 int fpu_active;
87 int guest_fpu_loaded; 90 int guest_fpu_loaded;
88 wait_queue_head_t wq; 91 wait_queue_head_t wq;
@@ -116,11 +119,16 @@ struct kvm_memory_slot {
116 int user_alloc; 119 int user_alloc;
117}; 120};
118 121
122static inline unsigned long kvm_dirty_bitmap_bytes(struct kvm_memory_slot *memslot)
123{
124 return ALIGN(memslot->npages, BITS_PER_LONG) / 8;
125}
126
119struct kvm_kernel_irq_routing_entry { 127struct kvm_kernel_irq_routing_entry {
120 u32 gsi; 128 u32 gsi;
121 u32 type; 129 u32 type;
122 int (*set)(struct kvm_kernel_irq_routing_entry *e, 130 int (*set)(struct kvm_kernel_irq_routing_entry *e,
123 struct kvm *kvm, int level); 131 struct kvm *kvm, int irq_source_id, int level);
124 union { 132 union {
125 struct { 133 struct {
126 unsigned irqchip; 134 unsigned irqchip;
@@ -128,17 +136,41 @@ struct kvm_kernel_irq_routing_entry {
128 } irqchip; 136 } irqchip;
129 struct msi_msg msi; 137 struct msi_msg msi;
130 }; 138 };
131 struct list_head link; 139 struct hlist_node link;
132}; 140};
133 141
134struct kvm { 142#ifdef __KVM_HAVE_IOAPIC
135 spinlock_t mmu_lock; 143
136 spinlock_t requests_lock; 144struct kvm_irq_routing_table {
137 struct rw_semaphore slots_lock; 145 int chip[KVM_NR_IRQCHIPS][KVM_IOAPIC_NUM_PINS];
138 struct mm_struct *mm; /* userspace tied to this vm */ 146 struct kvm_kernel_irq_routing_entry *rt_entries;
147 u32 nr_rt_entries;
148 /*
149 * Array indexed by gsi. Each entry contains list of irq chips
150 * the gsi is connected to.
151 */
152 struct hlist_head map[0];
153};
154
155#else
156
157struct kvm_irq_routing_table {};
158
159#endif
160
161struct kvm_memslots {
139 int nmemslots; 162 int nmemslots;
140 struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS + 163 struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS +
141 KVM_PRIVATE_MEM_SLOTS]; 164 KVM_PRIVATE_MEM_SLOTS];
165};
166
167struct kvm {
168 spinlock_t mmu_lock;
169 raw_spinlock_t requests_lock;
170 struct mutex slots_lock;
171 struct mm_struct *mm; /* userspace tied to this vm */
172 struct kvm_memslots *memslots;
173 struct srcu_struct srcu;
142#ifdef CONFIG_KVM_APIC_ARCHITECTURE 174#ifdef CONFIG_KVM_APIC_ARCHITECTURE
143 u32 bsp_vcpu_id; 175 u32 bsp_vcpu_id;
144 struct kvm_vcpu *bsp_vcpu; 176 struct kvm_vcpu *bsp_vcpu;
@@ -147,8 +179,7 @@ struct kvm {
147 atomic_t online_vcpus; 179 atomic_t online_vcpus;
148 struct list_head vm_list; 180 struct list_head vm_list;
149 struct mutex lock; 181 struct mutex lock;
150 struct kvm_io_bus mmio_bus; 182 struct kvm_io_bus *buses[KVM_NR_BUSES];
151 struct kvm_io_bus pio_bus;
152#ifdef CONFIG_HAVE_KVM_EVENTFD 183#ifdef CONFIG_HAVE_KVM_EVENTFD
153 struct { 184 struct {
154 spinlock_t lock; 185 spinlock_t lock;
@@ -166,8 +197,9 @@ struct kvm {
166 197
167 struct mutex irq_lock; 198 struct mutex irq_lock;
168#ifdef CONFIG_HAVE_KVM_IRQCHIP 199#ifdef CONFIG_HAVE_KVM_IRQCHIP
169 struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */ 200 struct kvm_irq_routing_table *irq_routing;
170 struct hlist_head mask_notifier_list; 201 struct hlist_head mask_notifier_list;
202 struct hlist_head irq_ack_notifier_list;
171#endif 203#endif
172 204
173#ifdef KVM_ARCH_WANT_MMU_NOTIFIER 205#ifdef KVM_ARCH_WANT_MMU_NOTIFIER
@@ -229,13 +261,20 @@ int kvm_set_memory_region(struct kvm *kvm,
229int __kvm_set_memory_region(struct kvm *kvm, 261int __kvm_set_memory_region(struct kvm *kvm,
230 struct kvm_userspace_memory_region *mem, 262 struct kvm_userspace_memory_region *mem,
231 int user_alloc); 263 int user_alloc);
232int kvm_arch_set_memory_region(struct kvm *kvm, 264int kvm_arch_prepare_memory_region(struct kvm *kvm,
265 struct kvm_memory_slot *memslot,
266 struct kvm_memory_slot old,
267 struct kvm_userspace_memory_region *mem,
268 int user_alloc);
269void kvm_arch_commit_memory_region(struct kvm *kvm,
233 struct kvm_userspace_memory_region *mem, 270 struct kvm_userspace_memory_region *mem,
234 struct kvm_memory_slot old, 271 struct kvm_memory_slot old,
235 int user_alloc); 272 int user_alloc);
236void kvm_disable_largepages(void); 273void kvm_disable_largepages(void);
237void kvm_arch_flush_shadow(struct kvm *kvm); 274void kvm_arch_flush_shadow(struct kvm *kvm);
238gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn); 275gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn);
276gfn_t unalias_gfn_instantiation(struct kvm *kvm, gfn_t gfn);
277
239struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); 278struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn);
240unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn); 279unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn);
241void kvm_release_page_clean(struct page *page); 280void kvm_release_page_clean(struct page *page);
@@ -244,6 +283,9 @@ void kvm_set_page_dirty(struct page *page);
244void kvm_set_page_accessed(struct page *page); 283void kvm_set_page_accessed(struct page *page);
245 284
246pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn); 285pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn);
286pfn_t gfn_to_pfn_memslot(struct kvm *kvm,
287 struct kvm_memory_slot *slot, gfn_t gfn);
288int memslot_id(struct kvm *kvm, gfn_t gfn);
247void kvm_release_pfn_dirty(pfn_t); 289void kvm_release_pfn_dirty(pfn_t);
248void kvm_release_pfn_clean(pfn_t pfn); 290void kvm_release_pfn_clean(pfn_t pfn);
249void kvm_set_pfn_dirty(pfn_t pfn); 291void kvm_set_pfn_dirty(pfn_t pfn);
@@ -263,9 +305,11 @@ int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len);
263int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len); 305int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len);
264struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn); 306struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn);
265int kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn); 307int kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn);
308unsigned long kvm_host_page_size(struct kvm *kvm, gfn_t gfn);
266void mark_page_dirty(struct kvm *kvm, gfn_t gfn); 309void mark_page_dirty(struct kvm *kvm, gfn_t gfn);
267 310
268void kvm_vcpu_block(struct kvm_vcpu *vcpu); 311void kvm_vcpu_block(struct kvm_vcpu *vcpu);
312void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu);
269void kvm_resched(struct kvm_vcpu *vcpu); 313void kvm_resched(struct kvm_vcpu *vcpu);
270void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); 314void kvm_load_guest_fpu(struct kvm_vcpu *vcpu);
271void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); 315void kvm_put_guest_fpu(struct kvm_vcpu *vcpu);
@@ -325,7 +369,7 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu);
325void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu); 369void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu);
326 370
327int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu); 371int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu);
328void kvm_arch_hardware_enable(void *garbage); 372int kvm_arch_hardware_enable(void *garbage);
329void kvm_arch_hardware_disable(void *garbage); 373void kvm_arch_hardware_disable(void *garbage);
330int kvm_arch_hardware_setup(void); 374int kvm_arch_hardware_setup(void);
331void kvm_arch_hardware_unsetup(void); 375void kvm_arch_hardware_unsetup(void);
@@ -362,6 +406,7 @@ struct kvm_assigned_dev_kernel {
362 struct work_struct interrupt_work; 406 struct work_struct interrupt_work;
363 struct list_head list; 407 struct list_head list;
364 int assigned_dev_id; 408 int assigned_dev_id;
409 int host_segnr;
365 int host_busnr; 410 int host_busnr;
366 int host_devfn; 411 int host_devfn;
367 unsigned int entries_nr; 412 unsigned int entries_nr;
@@ -390,7 +435,12 @@ void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq,
390 struct kvm_irq_mask_notifier *kimn); 435 struct kvm_irq_mask_notifier *kimn);
391void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask); 436void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask);
392 437
393int kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); 438#ifdef __KVM_HAVE_IOAPIC
439void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic,
440 union kvm_ioapic_redirect_entry *entry,
441 unsigned long *deliver_bitmask);
442#endif
443int kvm_set_irq(struct kvm *kvm, int irq_source_id, u32 irq, int level);
394void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); 444void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin);
395void kvm_register_irq_ack_notifier(struct kvm *kvm, 445void kvm_register_irq_ack_notifier(struct kvm *kvm,
396 struct kvm_irq_ack_notifier *kian); 446 struct kvm_irq_ack_notifier *kian);
@@ -403,8 +453,7 @@ void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id);
403#define KVM_IOMMU_CACHE_COHERENCY 0x1 453#define KVM_IOMMU_CACHE_COHERENCY 0x1
404 454
405#ifdef CONFIG_IOMMU_API 455#ifdef CONFIG_IOMMU_API
406int kvm_iommu_map_pages(struct kvm *kvm, gfn_t base_gfn, 456int kvm_iommu_map_pages(struct kvm *kvm, struct kvm_memory_slot *slot);
407 unsigned long npages);
408int kvm_iommu_map_guest(struct kvm *kvm); 457int kvm_iommu_map_guest(struct kvm *kvm);
409int kvm_iommu_unmap_guest(struct kvm *kvm); 458int kvm_iommu_unmap_guest(struct kvm *kvm);
410int kvm_assign_device(struct kvm *kvm, 459int kvm_assign_device(struct kvm *kvm,
@@ -454,11 +503,6 @@ static inline void kvm_guest_exit(void)
454 current->flags &= ~PF_VCPU; 503 current->flags &= ~PF_VCPU;
455} 504}
456 505
457static inline int memslot_id(struct kvm *kvm, struct kvm_memory_slot *slot)
458{
459 return slot - kvm->memslots;
460}
461
462static inline gpa_t gfn_to_gpa(gfn_t gfn) 506static inline gpa_t gfn_to_gpa(gfn_t gfn)
463{ 507{
464 return (gpa_t)gfn << PAGE_SHIFT; 508 return (gpa_t)gfn << PAGE_SHIFT;
@@ -506,6 +550,10 @@ static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_se
506} 550}
507#endif 551#endif
508 552
553#ifndef KVM_ARCH_HAS_UNALIAS_INSTANTIATION
554#define unalias_gfn_instantiation unalias_gfn
555#endif
556
509#ifdef CONFIG_HAVE_KVM_IRQCHIP 557#ifdef CONFIG_HAVE_KVM_IRQCHIP
510 558
511#define KVM_MAX_IRQ_ROUTES 1024 559#define KVM_MAX_IRQ_ROUTES 1024
@@ -552,4 +600,21 @@ static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu)
552 return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id; 600 return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id;
553} 601}
554#endif 602#endif
603
604#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
605
606long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl,
607 unsigned long arg);
608
609#else
610
611static inline long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl,
612 unsigned long arg)
613{
614 return -ENOTTY;
615}
616
555#endif 617#endif
618
619#endif
620