Lines Matching defs:kvm
17 #include <trace/events/kvm.h>
31 struct kvm *kvm, int irq_source_id, int level,
34 struct kvm_pic *pic = kvm->arch.vpic;
39 struct kvm *kvm, int irq_source_id, int level,
42 struct kvm_ioapic *ioapic = kvm->arch.vioapic;
47 int kvm_irq_delivery_to_apic(struct kvm *kvm, struct kvm_lapic *src,
55 if (kvm_irq_delivery_to_apic_fast(kvm, src, irq, &r, dest_map))
60 printk(KERN_INFO "kvm: apic: phys broadcast and lowest prio\n");
66 kvm_for_each_vcpu(i, vcpu, kvm) {
95 lowest = kvm_get_vcpu(kvm, idx);
104 void kvm_set_msi_irq(struct kvm *kvm, struct kvm_kernel_irq_routing_entry *e,
107 trace_kvm_msi_set_irq(e->msi.address_lo | (kvm->arch.x2apic_format ?
113 if (kvm->arch.x2apic_format)
128 static inline bool kvm_msi_route_invalid(struct kvm *kvm,
131 return kvm->arch.x2apic_format && (e->msi.address_hi & 0xff);
135 struct kvm *kvm, int irq_source_id, int level, bool line_status)
139 if (kvm_msi_route_invalid(kvm, e))
145 kvm_set_msi_irq(kvm, e, &irq);
147 return kvm_irq_delivery_to_apic(kvm, NULL, &irq, NULL);
152 struct kvm *kvm, int irq_source_id, int level,
158 return kvm_hv_synic_set_irq(kvm, e->hv_sint.vcpu, e->hv_sint.sint);
162 struct kvm *kvm, int irq_source_id, int level,
170 return kvm_hv_set_sint(e, kvm, irq_source_id, level,
174 if (kvm_msi_route_invalid(kvm, e))
177 kvm_set_msi_irq(kvm, e, &irq);
179 if (kvm_irq_delivery_to_apic_fast(kvm, NULL, &irq, &r, NULL))
190 int kvm_request_irq_source_id(struct kvm *kvm)
192 unsigned long *bitmap = &kvm->arch.irq_sources_bitmap;
195 mutex_lock(&kvm->irq_lock);
199 printk(KERN_WARNING "kvm: exhaust allocatable IRQ sources!\n");
208 mutex_unlock(&kvm->irq_lock);
213 void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id)
218 mutex_lock(&kvm->irq_lock);
221 printk(KERN_ERR "kvm: IRQ source ID out of range!\n");
224 clear_bit(irq_source_id, &kvm->arch.irq_sources_bitmap);
225 if (!irqchip_kernel(kvm))
228 kvm_ioapic_clear_all(kvm->arch.vioapic, irq_source_id);
229 kvm_pic_clear_all(kvm->arch.vpic, irq_source_id);
231 mutex_unlock(&kvm->irq_lock);
234 void kvm_register_irq_mask_notifier(struct kvm *kvm, int irq,
237 mutex_lock(&kvm->irq_lock);
239 hlist_add_head_rcu(&kimn->link, &kvm->arch.mask_notifier_list);
240 mutex_unlock(&kvm->irq_lock);
243 void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq,
246 mutex_lock(&kvm->irq_lock);
248 mutex_unlock(&kvm->irq_lock);
249 synchronize_srcu(&kvm->irq_srcu);
252 void kvm_fire_mask_notifiers(struct kvm *kvm, unsigned irqchip, unsigned pin,
258 idx = srcu_read_lock(&kvm->irq_srcu);
259 gsi = kvm_irq_map_chip_pin(kvm, irqchip, pin);
261 hlist_for_each_entry_rcu(kimn, &kvm->arch.mask_notifier_list, link)
264 srcu_read_unlock(&kvm->irq_srcu, idx);
267 bool kvm_arch_can_set_irq_routing(struct kvm *kvm)
269 return irqchip_in_kernel(kvm);
272 int kvm_set_routing_entry(struct kvm *kvm,
282 if (irqchip_split(kvm))
310 if (kvm_msi_route_invalid(kvm, e))
325 bool kvm_intr_is_single_vcpu(struct kvm *kvm, struct kvm_lapic_irq *irq,
331 if (kvm_intr_is_single_vcpu_fast(kvm, irq, dest_vcpu))
334 kvm_for_each_vcpu(i, vcpu, kvm) {
378 int kvm_setup_default_irq_routing(struct kvm *kvm)
380 return kvm_set_irq_routing(kvm, default_routing,
386 int kvm_setup_empty_irq_routing(struct kvm *kvm)
388 return kvm_set_irq_routing(kvm, empty_routing, 0, 0);
391 void kvm_arch_post_irq_routing_update(struct kvm *kvm)
393 if (!irqchip_split(kvm))
395 kvm_make_scan_ioapic_request(kvm);
401 struct kvm *kvm = vcpu->kvm;
407 idx = srcu_read_lock(&kvm->irq_srcu);
408 table = srcu_dereference(kvm->irq_routing, &kvm->irq_srcu);
410 kvm->arch.nr_reserved_ioapic_pins);
418 kvm_set_msi_irq(vcpu->kvm, entry, &irq);
426 srcu_read_unlock(&kvm->irq_srcu, idx);
429 void kvm_arch_irq_routing_update(struct kvm *kvm)
431 kvm_hv_irq_routing_update(kvm);