Lines Matching defs:kvm
8 * This file is derived from virt/kvm/irq_comm.c.
19 #include <trace/events/kvm.h>
21 int kvm_irq_map_gsi(struct kvm *kvm,
28 irq_rt = srcu_dereference_check(kvm->irq_routing, &kvm->irq_srcu,
29 lockdep_is_held(&kvm->irq_lock));
40 int kvm_irq_map_chip_pin(struct kvm *kvm, unsigned irqchip, unsigned pin)
44 irq_rt = srcu_dereference(kvm->irq_routing, &kvm->irq_srcu);
48 int kvm_send_userspace_msi(struct kvm *kvm, struct kvm_msi *msi)
52 if (!kvm_arch_irqchip_in_kernel(kvm) || (msi->flags & ~KVM_MSI_VALID_DEVID))
61 return kvm_set_msi(&route, kvm, KVM_USERSPACE_IRQ_SOURCE_ID, 1, false);
70 int kvm_set_irq(struct kvm *kvm, int irq_source_id, u32 irq, int level,
82 idx = srcu_read_lock(&kvm->irq_srcu);
83 i = kvm_irq_map_gsi(kvm, irq_set, irq);
84 srcu_read_unlock(&kvm->irq_srcu, idx);
88 r = irq_set[i].set(&irq_set[i], kvm, irq_source_id, level,
119 void kvm_free_irq_routing(struct kvm *kvm)
123 struct kvm_irq_routing_table *rt = rcu_access_pointer(kvm->irq_routing);
127 static int setup_routing_entry(struct kvm *kvm,
148 r = kvm_set_routing_entry(kvm, e, ue);
159 void __attribute__((weak)) kvm_arch_irq_routing_update(struct kvm *kvm)
163 bool __weak kvm_arch_can_set_irq_routing(struct kvm *kvm)
168 int kvm_set_irq_routing(struct kvm *kvm,
212 r = setup_routing_entry(kvm, new, e, ue);
218 mutex_lock(&kvm->irq_lock);
219 old = rcu_dereference_protected(kvm->irq_routing, 1);
220 rcu_assign_pointer(kvm->irq_routing, new);
221 kvm_irq_routing_update(kvm);
222 kvm_arch_irq_routing_update(kvm);
223 mutex_unlock(&kvm->irq_lock);
225 kvm_arch_post_irq_routing_update(kvm);
227 synchronize_srcu_expedited(&kvm->irq_srcu);