• Home
  • Raw
  • Download

Lines Matching +full:msi +full:- +full:map

18  * Place - Suite 330, Boston, MA 02111-1307 USA.
41 irq_rt = srcu_dereference_check(kvm->irq_routing, &kvm->irq_srcu, in kvm_irq_map_gsi()
42 lockdep_is_held(&kvm->irq_lock)); in kvm_irq_map_gsi()
43 if (irq_rt && gsi < irq_rt->nr_rt_entries) { in kvm_irq_map_gsi()
44 hlist_for_each_entry(e, &irq_rt->map[gsi], link) { in kvm_irq_map_gsi()
57 irq_rt = srcu_dereference(kvm->irq_routing, &kvm->irq_srcu); in kvm_irq_map_chip_pin()
58 return irq_rt->chip[irqchip][pin]; in kvm_irq_map_chip_pin()
61 int kvm_send_userspace_msi(struct kvm *kvm, struct kvm_msi *msi) in kvm_send_userspace_msi() argument
65 if (!irqchip_in_kernel(kvm) || (msi->flags & ~KVM_MSI_VALID_DEVID)) in kvm_send_userspace_msi()
66 return -EINVAL; in kvm_send_userspace_msi()
68 route.msi.address_lo = msi->address_lo; in kvm_send_userspace_msi()
69 route.msi.address_hi = msi->address_hi; in kvm_send_userspace_msi()
70 route.msi.data = msi->data; in kvm_send_userspace_msi()
71 route.msi.flags = msi->flags; in kvm_send_userspace_msi()
72 route.msi.devid = msi->devid; in kvm_send_userspace_msi()
87 int ret = -1, i, idx; in kvm_set_irq()
95 idx = srcu_read_lock(&kvm->irq_srcu); in kvm_set_irq()
97 srcu_read_unlock(&kvm->irq_srcu, idx); in kvm_set_irq()
99 while (i--) { in kvm_set_irq()
119 for (i = 0; i < rt->nr_rt_entries; ++i) { in free_irq_routing_table()
123 hlist_for_each_entry_safe(e, n, &rt->map[i], link) { in free_irq_routing_table()
124 hlist_del(&e->link); in free_irq_routing_table()
136 struct kvm_irq_routing_table *rt = rcu_access_pointer(kvm->irq_routing); in kvm_free_irq_routing()
147 u32 gsi = array_index_nospec(ue->gsi, KVM_MAX_IRQ_ROUTES); in setup_routing_entry()
151 * Allow only one to one mapping between GSI and non-irqchip routing. in setup_routing_entry()
153 hlist_for_each_entry(ei, &rt->map[gsi], link) in setup_routing_entry()
154 if (ei->type != KVM_IRQ_ROUTING_IRQCHIP || in setup_routing_entry()
155 ue->type != KVM_IRQ_ROUTING_IRQCHIP || in setup_routing_entry()
156 ue->u.irqchip.irqchip == ei->irqchip.irqchip) in setup_routing_entry()
157 return -EINVAL; in setup_routing_entry()
159 e->gsi = gsi; in setup_routing_entry()
160 e->type = ue->type; in setup_routing_entry()
164 if (e->type == KVM_IRQ_ROUTING_IRQCHIP) in setup_routing_entry()
165 rt->chip[e->irqchip.irqchip][e->irqchip.pin] = e->gsi; in setup_routing_entry()
167 hlist_add_head(&e->link, &rt->map[e->gsi]); in setup_routing_entry()
193 return -EINVAL; in kvm_set_irq_routing()
203 return -ENOMEM; in kvm_set_irq_routing()
205 new->nr_rt_entries = nr_rt_entries; in kvm_set_irq_routing()
208 new->chip[i][j] = -1; in kvm_set_irq_routing()
211 r = -ENOMEM; in kvm_set_irq_routing()
216 r = -EINVAL; in kvm_set_irq_routing()
217 switch (ue->type) { in kvm_set_irq_routing()
219 if (ue->flags & ~KVM_MSI_VALID_DEVID) in kvm_set_irq_routing()
223 if (ue->flags) in kvm_set_irq_routing()
233 mutex_lock(&kvm->irq_lock); in kvm_set_irq_routing()
234 old = rcu_dereference_protected(kvm->irq_routing, 1); in kvm_set_irq_routing()
235 rcu_assign_pointer(kvm->irq_routing, new); in kvm_set_irq_routing()
238 mutex_unlock(&kvm->irq_lock); in kvm_set_irq_routing()
242 synchronize_srcu_expedited(&kvm->irq_srcu); in kvm_set_irq_routing()