Lines Matching refs:kvm
43 struct kvm *kvm; member
108 kvm_set_irq(assigned_dev->kvm, in kvm_assigned_dev_raise_guest_irq()
113 kvm_set_irq(assigned_dev->kvm, assigned_dev->irq_source_id, in kvm_assigned_dev_raise_guest_irq()
138 int ret = kvm_set_irq_inatomic(assigned_dev->kvm, in kvm_assigned_dev_msi()
165 ret = kvm_set_irq_inatomic(assigned_dev->kvm, in kvm_assigned_dev_msix()
195 kvm_set_irq(dev->kvm, dev->irq_source_id, dev->guest_irq, 0, false); in kvm_assigned_dev_ack_irq()
217 kvm_set_irq(dev->kvm, dev->irq_source_id, in kvm_assigned_dev_ack_irq()
224 static void deassign_guest_irq(struct kvm *kvm, in deassign_guest_irq() argument
228 kvm_unregister_irq_ack_notifier(kvm, in deassign_guest_irq()
231 kvm_set_irq(assigned_dev->kvm, assigned_dev->irq_source_id, in deassign_guest_irq()
235 kvm_free_irq_source_id(kvm, assigned_dev->irq_source_id); in deassign_guest_irq()
241 static void deassign_host_irq(struct kvm *kvm, in deassign_host_irq() argument
288 static int kvm_deassign_irq(struct kvm *kvm, in kvm_deassign_irq() argument
294 if (!irqchip_in_kernel(kvm)) in kvm_deassign_irq()
304 deassign_host_irq(kvm, assigned_dev); in kvm_deassign_irq()
306 deassign_guest_irq(kvm, assigned_dev); in kvm_deassign_irq()
311 static void kvm_free_assigned_irq(struct kvm *kvm, in kvm_free_assigned_irq() argument
314 kvm_deassign_irq(kvm, assigned_dev, assigned_dev->irq_requested_type); in kvm_free_assigned_irq()
317 static void kvm_free_assigned_device(struct kvm *kvm, in kvm_free_assigned_device() argument
321 kvm_free_assigned_irq(kvm, assigned_dev); in kvm_free_assigned_device()
341 void kvm_free_all_assigned_devices(struct kvm *kvm) in kvm_free_all_assigned_devices() argument
346 list_for_each_safe(ptr, ptr2, &kvm->arch.assigned_dev_head) { in kvm_free_all_assigned_devices()
351 kvm_free_assigned_device(kvm, assigned_dev); in kvm_free_all_assigned_devices()
355 static int assigned_device_enable_host_intx(struct kvm *kvm, in assigned_device_enable_host_intx() argument
390 static int assigned_device_enable_host_msi(struct kvm *kvm, in assigned_device_enable_host_msi() argument
414 static int assigned_device_enable_host_msix(struct kvm *kvm, in assigned_device_enable_host_msix() argument
448 static int assigned_device_enable_guest_intx(struct kvm *kvm, in assigned_device_enable_guest_intx() argument
458 static int assigned_device_enable_guest_msi(struct kvm *kvm, in assigned_device_enable_guest_msi() argument
469 static int assigned_device_enable_guest_msix(struct kvm *kvm, in assigned_device_enable_guest_msix() argument
479 static int assign_host_irq(struct kvm *kvm, in assign_host_irq() argument
493 r = assigned_device_enable_host_intx(kvm, dev); in assign_host_irq()
497 r = assigned_device_enable_host_msi(kvm, dev); in assign_host_irq()
502 r = assigned_device_enable_host_msix(kvm, dev); in assign_host_irq()
516 static int assign_guest_irq(struct kvm *kvm, in assign_guest_irq() argument
527 id = kvm_request_irq_source_id(kvm); in assign_guest_irq()
535 r = assigned_device_enable_guest_intx(kvm, dev, irq); in assign_guest_irq()
539 r = assigned_device_enable_guest_msi(kvm, dev, irq); in assign_guest_irq()
544 r = assigned_device_enable_guest_msix(kvm, dev, irq); in assign_guest_irq()
554 kvm_register_irq_ack_notifier(kvm, &dev->ack_notifier); in assign_guest_irq()
556 kvm_free_irq_source_id(kvm, dev->irq_source_id); in assign_guest_irq()
564 static int kvm_vm_ioctl_assign_irq(struct kvm *kvm, in kvm_vm_ioctl_assign_irq() argument
571 if (!irqchip_in_kernel(kvm)) in kvm_vm_ioctl_assign_irq()
574 mutex_lock(&kvm->lock); in kvm_vm_ioctl_assign_irq()
576 match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head, in kvm_vm_ioctl_assign_irq()
595 r = assign_host_irq(kvm, match, host_irq_type); in kvm_vm_ioctl_assign_irq()
600 r = assign_guest_irq(kvm, match, assigned_irq, guest_irq_type); in kvm_vm_ioctl_assign_irq()
602 mutex_unlock(&kvm->lock); in kvm_vm_ioctl_assign_irq()
606 static int kvm_vm_ioctl_deassign_dev_irq(struct kvm *kvm, in kvm_vm_ioctl_deassign_dev_irq() argument
614 mutex_lock(&kvm->lock); in kvm_vm_ioctl_deassign_dev_irq()
616 match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head, in kvm_vm_ioctl_deassign_dev_irq()
623 r = kvm_deassign_irq(kvm, match, irq_type); in kvm_vm_ioctl_deassign_dev_irq()
625 mutex_unlock(&kvm->lock); in kvm_vm_ioctl_deassign_dev_irq()
689 static int kvm_vm_ioctl_assign_device(struct kvm *kvm, in kvm_vm_ioctl_assign_device() argument
699 mutex_lock(&kvm->lock); in kvm_vm_ioctl_assign_device()
700 idx = srcu_read_lock(&kvm->srcu); in kvm_vm_ioctl_assign_device()
702 match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head, in kvm_vm_ioctl_assign_device()
767 match->kvm = kvm; in kvm_vm_ioctl_assign_device()
770 list_add(&match->list, &kvm->arch.assigned_dev_head); in kvm_vm_ioctl_assign_device()
772 if (!kvm->arch.iommu_domain) { in kvm_vm_ioctl_assign_device()
773 r = kvm_iommu_map_guest(kvm); in kvm_vm_ioctl_assign_device()
777 r = kvm_assign_device(kvm, match->dev); in kvm_vm_ioctl_assign_device()
782 srcu_read_unlock(&kvm->srcu, idx); in kvm_vm_ioctl_assign_device()
783 mutex_unlock(&kvm->lock); in kvm_vm_ioctl_assign_device()
797 srcu_read_unlock(&kvm->srcu, idx); in kvm_vm_ioctl_assign_device()
798 mutex_unlock(&kvm->lock); in kvm_vm_ioctl_assign_device()
802 static int kvm_vm_ioctl_deassign_device(struct kvm *kvm, in kvm_vm_ioctl_deassign_device() argument
808 mutex_lock(&kvm->lock); in kvm_vm_ioctl_deassign_device()
810 match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head, in kvm_vm_ioctl_deassign_device()
819 kvm_deassign_device(kvm, match->dev); in kvm_vm_ioctl_deassign_device()
821 kvm_free_assigned_device(kvm, match); in kvm_vm_ioctl_deassign_device()
824 mutex_unlock(&kvm->lock); in kvm_vm_ioctl_deassign_device()
830 static int kvm_vm_ioctl_set_msix_nr(struct kvm *kvm, in kvm_vm_ioctl_set_msix_nr() argument
836 mutex_lock(&kvm->lock); in kvm_vm_ioctl_set_msix_nr()
838 adev = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head, in kvm_vm_ioctl_set_msix_nr()
871 mutex_unlock(&kvm->lock); in kvm_vm_ioctl_set_msix_nr()
875 static int kvm_vm_ioctl_set_msix_entry(struct kvm *kvm, in kvm_vm_ioctl_set_msix_entry() argument
881 mutex_lock(&kvm->lock); in kvm_vm_ioctl_set_msix_entry()
883 adev = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head, in kvm_vm_ioctl_set_msix_entry()
905 mutex_unlock(&kvm->lock); in kvm_vm_ioctl_set_msix_entry()
911 static int kvm_vm_ioctl_set_pci_irq_mask(struct kvm *kvm, in kvm_vm_ioctl_set_pci_irq_mask() argument
917 mutex_lock(&kvm->lock); in kvm_vm_ioctl_set_pci_irq_mask()
919 match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head, in kvm_vm_ioctl_set_pci_irq_mask()
933 kvm_set_irq(match->kvm, match->irq_source_id, in kvm_vm_ioctl_set_pci_irq_mask()
956 mutex_unlock(&kvm->lock); in kvm_vm_ioctl_set_pci_irq_mask()
960 long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl, in kvm_vm_ioctl_assigned_device() argument
973 r = kvm_vm_ioctl_assign_device(kvm, &assigned_dev); in kvm_vm_ioctl_assigned_device()
988 r = kvm_vm_ioctl_assign_irq(kvm, &assigned_irq); in kvm_vm_ioctl_assigned_device()
999 r = kvm_vm_ioctl_deassign_dev_irq(kvm, &assigned_irq); in kvm_vm_ioctl_assigned_device()
1010 r = kvm_vm_ioctl_deassign_device(kvm, &assigned_dev); in kvm_vm_ioctl_assigned_device()
1021 r = kvm_vm_ioctl_set_msix_nr(kvm, &entry_nr); in kvm_vm_ioctl_assigned_device()
1031 r = kvm_vm_ioctl_set_msix_entry(kvm, &entry); in kvm_vm_ioctl_assigned_device()
1043 r = kvm_vm_ioctl_set_pci_irq_mask(kvm, &assigned_dev); in kvm_vm_ioctl_assigned_device()