diff options
Diffstat (limited to 'include/linux/kvm_host.h')
-rw-r--r-- | include/linux/kvm_host.h | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index b7bbb5ddd7ae..bd5a616d9373 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -120,7 +120,7 @@ struct kvm_kernel_irq_routing_entry { | |||
120 | u32 gsi; | 120 | u32 gsi; |
121 | u32 type; | 121 | u32 type; |
122 | int (*set)(struct kvm_kernel_irq_routing_entry *e, | 122 | int (*set)(struct kvm_kernel_irq_routing_entry *e, |
123 | struct kvm *kvm, int level); | 123 | struct kvm *kvm, int irq_source_id, int level); |
124 | union { | 124 | union { |
125 | struct { | 125 | struct { |
126 | unsigned irqchip; | 126 | unsigned irqchip; |
@@ -128,9 +128,28 @@ struct kvm_kernel_irq_routing_entry { | |||
128 | } irqchip; | 128 | } irqchip; |
129 | struct msi_msg msi; | 129 | struct msi_msg msi; |
130 | }; | 130 | }; |
131 | struct list_head link; | 131 | struct hlist_node link; |
132 | }; | ||
133 | |||
134 | #ifdef __KVM_HAVE_IOAPIC | ||
135 | |||
136 | struct kvm_irq_routing_table { | ||
137 | int chip[KVM_NR_IRQCHIPS][KVM_IOAPIC_NUM_PINS]; | ||
138 | struct kvm_kernel_irq_routing_entry *rt_entries; | ||
139 | u32 nr_rt_entries; | ||
140 | /* | ||
141 | * Array indexed by gsi. Each entry contains list of irq chips | ||
142 | * the gsi is connected to. | ||
143 | */ | ||
144 | struct hlist_head map[0]; | ||
132 | }; | 145 | }; |
133 | 146 | ||
147 | #else | ||
148 | |||
149 | struct kvm_irq_routing_table {}; | ||
150 | |||
151 | #endif | ||
152 | |||
134 | struct kvm { | 153 | struct kvm { |
135 | spinlock_t mmu_lock; | 154 | spinlock_t mmu_lock; |
136 | spinlock_t requests_lock; | 155 | spinlock_t requests_lock; |
@@ -166,8 +185,9 @@ struct kvm { | |||
166 | 185 | ||
167 | struct mutex irq_lock; | 186 | struct mutex irq_lock; |
168 | #ifdef CONFIG_HAVE_KVM_IRQCHIP | 187 | #ifdef CONFIG_HAVE_KVM_IRQCHIP |
169 | struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */ | 188 | struct kvm_irq_routing_table *irq_routing; |
170 | struct hlist_head mask_notifier_list; | 189 | struct hlist_head mask_notifier_list; |
190 | struct hlist_head irq_ack_notifier_list; | ||
171 | #endif | 191 | #endif |
172 | 192 | ||
173 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER | 193 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER |
@@ -266,6 +286,7 @@ int kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn); | |||
266 | void mark_page_dirty(struct kvm *kvm, gfn_t gfn); | 286 | void mark_page_dirty(struct kvm *kvm, gfn_t gfn); |
267 | 287 | ||
268 | void kvm_vcpu_block(struct kvm_vcpu *vcpu); | 288 | void kvm_vcpu_block(struct kvm_vcpu *vcpu); |
289 | void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu); | ||
269 | void kvm_resched(struct kvm_vcpu *vcpu); | 290 | void kvm_resched(struct kvm_vcpu *vcpu); |
270 | void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); | 291 | void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); |
271 | void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); | 292 | void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); |
@@ -325,7 +346,7 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu); | |||
325 | void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu); | 346 | void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu); |
326 | 347 | ||
327 | int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu); | 348 | int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu); |
328 | void kvm_arch_hardware_enable(void *garbage); | 349 | int kvm_arch_hardware_enable(void *garbage); |
329 | void kvm_arch_hardware_disable(void *garbage); | 350 | void kvm_arch_hardware_disable(void *garbage); |
330 | int kvm_arch_hardware_setup(void); | 351 | int kvm_arch_hardware_setup(void); |
331 | void kvm_arch_hardware_unsetup(void); | 352 | void kvm_arch_hardware_unsetup(void); |
@@ -390,7 +411,12 @@ void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq, | |||
390 | struct kvm_irq_mask_notifier *kimn); | 411 | struct kvm_irq_mask_notifier *kimn); |
391 | void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask); | 412 | void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask); |
392 | 413 | ||
393 | int kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); | 414 | #ifdef __KVM_HAVE_IOAPIC |
415 | void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic, | ||
416 | union kvm_ioapic_redirect_entry *entry, | ||
417 | unsigned long *deliver_bitmask); | ||
418 | #endif | ||
419 | int kvm_set_irq(struct kvm *kvm, int irq_source_id, u32 irq, int level); | ||
394 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); | 420 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); |
395 | void kvm_register_irq_ack_notifier(struct kvm *kvm, | 421 | void kvm_register_irq_ack_notifier(struct kvm *kvm, |
396 | struct kvm_irq_ack_notifier *kian); | 422 | struct kvm_irq_ack_notifier *kian); |
@@ -552,4 +578,21 @@ static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu) | |||
552 | return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id; | 578 | return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id; |
553 | } | 579 | } |
554 | #endif | 580 | #endif |
581 | |||
582 | #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT | ||
583 | |||
584 | long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl, | ||
585 | unsigned long arg); | ||
586 | |||
587 | #else | ||
588 | |||
589 | static inline long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl, | ||
590 | unsigned long arg) | ||
591 | { | ||
592 | return -ENOTTY; | ||
593 | } | ||
594 | |||
555 | #endif | 595 | #endif |
596 | |||
597 | #endif | ||
598 | |||