Lines Matching refs:vdev
124 struct vfio_pci_device *vdev = opaque; in vfio_pci_set_vga_decode() local
125 struct pci_dev *tmp = NULL, *pdev = vdev->pdev; in vfio_pci_set_vga_decode()
158 static void vfio_pci_probe_mmaps(struct vfio_pci_device *vdev) in vfio_pci_probe_mmaps() argument
167 res = &vdev->pdev->resource[bar]; in vfio_pci_probe_mmaps()
184 vdev->bar_mmap_supported[bar] = true; in vfio_pci_probe_mmaps()
209 &vdev->dummy_resources_list); in vfio_pci_probe_mmaps()
210 vdev->bar_mmap_supported[bar] = true; in vfio_pci_probe_mmaps()
222 vdev->bar_mmap_supported[bar] = false; in vfio_pci_probe_mmaps()
226 static void vfio_pci_try_bus_reset(struct vfio_pci_device *vdev);
227 static void vfio_pci_disable(struct vfio_pci_device *vdev);
261 static void vfio_pci_probe_power_state(struct vfio_pci_device *vdev) in vfio_pci_probe_power_state() argument
263 struct pci_dev *pdev = vdev->pdev; in vfio_pci_probe_power_state()
271 vdev->needs_pm_restore = !(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET); in vfio_pci_probe_power_state()
281 int vfio_pci_set_power_state(struct vfio_pci_device *vdev, pci_power_t state) in vfio_pci_set_power_state() argument
283 struct pci_dev *pdev = vdev->pdev; in vfio_pci_set_power_state()
287 if (vdev->needs_pm_restore) { in vfio_pci_set_power_state()
302 vdev->pm_save = pci_store_saved_state(pdev); in vfio_pci_set_power_state()
304 pci_load_and_free_saved_state(pdev, &vdev->pm_save); in vfio_pci_set_power_state()
312 static int vfio_pci_enable(struct vfio_pci_device *vdev) in vfio_pci_enable() argument
314 struct pci_dev *pdev = vdev->pdev; in vfio_pci_enable()
319 vfio_pci_set_power_state(vdev, PCI_D0); in vfio_pci_enable()
335 vdev->reset_works = !ret; in vfio_pci_enable()
337 vdev->pci_saved_state = pci_store_saved_state(pdev); in vfio_pci_enable()
338 if (!vdev->pci_saved_state) in vfio_pci_enable()
344 vdev->nointx = true; in vfio_pci_enable()
347 vdev->pci_2_3 = pci_intx_mask_supported(pdev); in vfio_pci_enable()
351 if (vdev->pci_2_3 && (cmd & PCI_COMMAND_INTX_DISABLE)) { in vfio_pci_enable()
356 ret = vfio_config_init(vdev); in vfio_pci_enable()
358 kfree(vdev->pci_saved_state); in vfio_pci_enable()
359 vdev->pci_saved_state = NULL; in vfio_pci_enable()
372 vdev->msix_bar = table & PCI_MSIX_TABLE_BIR; in vfio_pci_enable()
373 vdev->msix_offset = table & PCI_MSIX_TABLE_OFFSET; in vfio_pci_enable()
374 vdev->msix_size = ((flags & PCI_MSIX_FLAGS_QSIZE) + 1) * 16; in vfio_pci_enable()
376 vdev->msix_bar = 0xFF; in vfio_pci_enable()
379 vdev->has_vga = true; in vfio_pci_enable()
385 ret = vfio_pci_igd_init(vdev); in vfio_pci_enable()
394 ret = vfio_pci_nvdia_v100_nvlink2_init(vdev); in vfio_pci_enable()
403 ret = vfio_pci_ibm_npu2_init(vdev); in vfio_pci_enable()
410 vfio_pci_probe_mmaps(vdev); in vfio_pci_enable()
415 vfio_pci_disable(vdev); in vfio_pci_enable()
419 static void vfio_pci_disable(struct vfio_pci_device *vdev) in vfio_pci_disable() argument
421 struct pci_dev *pdev = vdev->pdev; in vfio_pci_disable()
429 vfio_pci_set_irqs_ioctl(vdev, VFIO_IRQ_SET_DATA_NONE | in vfio_pci_disable()
431 vdev->irq_type, 0, 0, NULL); in vfio_pci_disable()
435 &vdev->ioeventfds_list, next) { in vfio_pci_disable()
440 vdev->ioeventfds_nr = 0; in vfio_pci_disable()
442 vdev->virq_disabled = false; in vfio_pci_disable()
444 for (i = 0; i < vdev->num_regions; i++) in vfio_pci_disable()
445 vdev->region[i].ops->release(vdev, &vdev->region[i]); in vfio_pci_disable()
447 vdev->num_regions = 0; in vfio_pci_disable()
448 kfree(vdev->region); in vfio_pci_disable()
449 vdev->region = NULL; /* don't krealloc a freed pointer */ in vfio_pci_disable()
451 vfio_config_free(vdev); in vfio_pci_disable()
455 if (!vdev->barmap[bar]) in vfio_pci_disable()
457 pci_iounmap(pdev, vdev->barmap[bar]); in vfio_pci_disable()
459 vdev->barmap[bar] = NULL; in vfio_pci_disable()
463 &vdev->dummy_resources_list, res_next) { in vfio_pci_disable()
469 vdev->needs_reset = true; in vfio_pci_disable()
477 if (pci_load_and_free_saved_state(pdev, &vdev->pci_saved_state)) { in vfio_pci_disable()
480 if (!vdev->reset_works) in vfio_pci_disable()
499 if (vdev->reset_works && pci_cfg_access_trylock(pdev)) { in vfio_pci_disable()
502 vdev->needs_reset = false; in vfio_pci_disable()
512 vfio_pci_try_bus_reset(vdev); in vfio_pci_disable()
515 vfio_pci_set_power_state(vdev, PCI_D3hot); in vfio_pci_disable()
520 static struct vfio_pci_device *get_pf_vdev(struct vfio_pci_device *vdev, in get_pf_vdev() argument
523 struct pci_dev *physfn = pci_physfn(vdev->pdev); in get_pf_vdev()
525 if (!vdev->pdev->is_virtfn) in get_pf_vdev()
540 static void vfio_pci_vf_token_user_add(struct vfio_pci_device *vdev, int val) in vfio_pci_vf_token_user_add() argument
543 struct vfio_pci_device *pf_vdev = get_pf_vdev(vdev, &pf_dev); in vfio_pci_vf_token_user_add()
558 struct vfio_pci_device *vdev = device_data; in vfio_pci_release() local
560 mutex_lock(&vdev->reflck->lock); in vfio_pci_release()
562 if (!(--vdev->refcnt)) { in vfio_pci_release()
563 vfio_pci_vf_token_user_add(vdev, -1); in vfio_pci_release()
564 vfio_spapr_pci_eeh_release(vdev->pdev); in vfio_pci_release()
565 vfio_pci_disable(vdev); in vfio_pci_release()
567 mutex_lock(&vdev->igate); in vfio_pci_release()
568 if (vdev->err_trigger) { in vfio_pci_release()
569 eventfd_ctx_put(vdev->err_trigger); in vfio_pci_release()
570 vdev->err_trigger = NULL; in vfio_pci_release()
572 if (vdev->req_trigger) { in vfio_pci_release()
573 eventfd_ctx_put(vdev->req_trigger); in vfio_pci_release()
574 vdev->req_trigger = NULL; in vfio_pci_release()
576 mutex_unlock(&vdev->igate); in vfio_pci_release()
579 mutex_unlock(&vdev->reflck->lock); in vfio_pci_release()
586 struct vfio_pci_device *vdev = device_data; in vfio_pci_open() local
592 mutex_lock(&vdev->reflck->lock); in vfio_pci_open()
594 if (!vdev->refcnt) { in vfio_pci_open()
595 ret = vfio_pci_enable(vdev); in vfio_pci_open()
599 vfio_spapr_pci_eeh_open(vdev->pdev); in vfio_pci_open()
600 vfio_pci_vf_token_user_add(vdev, 1); in vfio_pci_open()
602 vdev->refcnt++; in vfio_pci_open()
604 mutex_unlock(&vdev->reflck->lock); in vfio_pci_open()
610 static int vfio_pci_get_irq_count(struct vfio_pci_device *vdev, int irq_type) in vfio_pci_get_irq_count() argument
616 vdev->nointx || vdev->pdev->is_virtfn) in vfio_pci_get_irq_count()
619 pci_read_config_byte(vdev->pdev, PCI_INTERRUPT_PIN, &pin); in vfio_pci_get_irq_count()
626 pos = vdev->pdev->msi_cap; in vfio_pci_get_irq_count()
628 pci_read_config_word(vdev->pdev, in vfio_pci_get_irq_count()
636 pos = vdev->pdev->msix_cap; in vfio_pci_get_irq_count()
638 pci_read_config_word(vdev->pdev, in vfio_pci_get_irq_count()
644 if (pci_is_pcie(vdev->pdev)) in vfio_pci_get_irq_count()
757 static int msix_mmappable_cap(struct vfio_pci_device *vdev, in msix_mmappable_cap() argument
768 int vfio_pci_register_dev_region(struct vfio_pci_device *vdev, in vfio_pci_register_dev_region() argument
775 region = krealloc(vdev->region, in vfio_pci_register_dev_region()
776 (vdev->num_regions + 1) * sizeof(*region), in vfio_pci_register_dev_region()
781 vdev->region = region; in vfio_pci_register_dev_region()
782 vdev->region[vdev->num_regions].type = type; in vfio_pci_register_dev_region()
783 vdev->region[vdev->num_regions].subtype = subtype; in vfio_pci_register_dev_region()
784 vdev->region[vdev->num_regions].ops = ops; in vfio_pci_register_dev_region()
785 vdev->region[vdev->num_regions].size = size; in vfio_pci_register_dev_region()
786 vdev->region[vdev->num_regions].flags = flags; in vfio_pci_register_dev_region()
787 vdev->region[vdev->num_regions].data = data; in vfio_pci_register_dev_region()
789 vdev->num_regions++; in vfio_pci_register_dev_region()
803 struct vfio_pci_device *vdev = device_data; in vfio_pci_ioctl() local
829 if (vdev->reset_works) in vfio_pci_ioctl()
832 info.num_regions = VFIO_PCI_NUM_REGIONS + vdev->num_regions; in vfio_pci_ioctl()
836 int ret = vfio_pci_info_zdev_add_caps(vdev, &caps); in vfio_pci_ioctl()
839 pci_warn(vdev->pdev, "Failed to setup zPCI info capabilities\n"); in vfio_pci_ioctl()
866 struct pci_dev *pdev = vdev->pdev; in vfio_pci_ioctl()
896 if (vdev->bar_mmap_supported[info.index]) { in vfio_pci_ioctl()
898 if (info.index == vdev->msix_bar) { in vfio_pci_ioctl()
899 ret = msix_mmappable_cap(vdev, &caps); in vfio_pci_ioctl()
930 cmd = vfio_pci_memory_lock_and_enable(vdev); in vfio_pci_ioctl()
938 vfio_pci_memory_unlock_and_restore(vdev, cmd); in vfio_pci_ioctl()
943 if (!vdev->has_vga) in vfio_pci_ioctl()
959 VFIO_PCI_NUM_REGIONS + vdev->num_regions) in vfio_pci_ioctl()
963 vdev->num_regions); in vfio_pci_ioctl()
968 info.size = vdev->region[i].size; in vfio_pci_ioctl()
969 info.flags = vdev->region[i].flags; in vfio_pci_ioctl()
971 cap_type.type = vdev->region[i].type; in vfio_pci_ioctl()
972 cap_type.subtype = vdev->region[i].subtype; in vfio_pci_ioctl()
979 if (vdev->region[i].ops->add_capability) { in vfio_pci_ioctl()
980 ret = vdev->region[i].ops->add_capability(vdev, in vfio_pci_ioctl()
981 &vdev->region[i], &caps); in vfio_pci_ioctl()
1026 if (pci_is_pcie(vdev->pdev)) in vfio_pci_ioctl()
1035 info.count = vfio_pci_get_irq_count(vdev, info.index); in vfio_pci_ioctl()
1057 max = vfio_pci_get_irq_count(vdev, hdr.index); in vfio_pci_ioctl()
1071 mutex_lock(&vdev->igate); in vfio_pci_ioctl()
1073 ret = vfio_pci_set_irqs_ioctl(vdev, hdr.flags, hdr.index, in vfio_pci_ioctl()
1076 mutex_unlock(&vdev->igate); in vfio_pci_ioctl()
1084 if (!vdev->reset_works) in vfio_pci_ioctl()
1087 vfio_pci_zap_and_down_write_memory_lock(vdev); in vfio_pci_ioctl()
1088 ret = pci_try_reset_function(vdev->pdev); in vfio_pci_ioctl()
1089 up_write(&vdev->memory_lock); in vfio_pci_ioctl()
1111 if (!pci_probe_reset_slot(vdev->pdev->slot)) in vfio_pci_ioctl()
1113 else if (pci_probe_reset_bus(vdev->pdev->bus)) in vfio_pci_ioctl()
1117 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_ioctl()
1141 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_ioctl()
1184 if (!pci_probe_reset_slot(vdev->pdev->slot)) in vfio_pci_ioctl()
1186 else if (pci_probe_reset_bus(vdev->pdev->bus)) in vfio_pci_ioctl()
1195 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_ioctl()
1258 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_ioctl()
1278 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_ioctl()
1298 ret = pci_reset_bus(vdev->pdev); in vfio_pci_ioctl()
1341 return vfio_pci_ioeventfd(vdev, ioeventfd.offset, in vfio_pci_ioctl()
1370 if (!vdev->vf_token) in vfio_pci_ioctl()
1394 mutex_lock(&vdev->vf_token->lock); in vfio_pci_ioctl()
1395 uuid_copy(&vdev->vf_token->uuid, &uuid); in vfio_pci_ioctl()
1396 mutex_unlock(&vdev->vf_token->lock); in vfio_pci_ioctl()
1411 struct vfio_pci_device *vdev = device_data; in vfio_pci_rw() local
1413 if (index >= VFIO_PCI_NUM_REGIONS + vdev->num_regions) in vfio_pci_rw()
1418 return vfio_pci_config_rw(vdev, buf, count, ppos, iswrite); in vfio_pci_rw()
1423 return vfio_pci_bar_rw(vdev, buf, count, ppos, false); in vfio_pci_rw()
1426 return vfio_pci_bar_rw(vdev, buf, count, ppos, iswrite); in vfio_pci_rw()
1429 return vfio_pci_vga_rw(vdev, buf, count, ppos, iswrite); in vfio_pci_rw()
1432 return vdev->region[index].ops->rw(vdev, buf, in vfio_pci_rw()
1458 static int vfio_pci_zap_and_vma_lock(struct vfio_pci_device *vdev, bool try) in vfio_pci_zap_and_vma_lock() argument
1489 if (!mutex_trylock(&vdev->vma_lock)) in vfio_pci_zap_and_vma_lock()
1492 mutex_lock(&vdev->vma_lock); in vfio_pci_zap_and_vma_lock()
1494 while (!list_empty(&vdev->vma_list)) { in vfio_pci_zap_and_vma_lock()
1495 mmap_vma = list_first_entry(&vdev->vma_list, in vfio_pci_zap_and_vma_lock()
1508 mutex_unlock(&vdev->vma_lock); in vfio_pci_zap_and_vma_lock()
1519 if (!mutex_trylock(&vdev->vma_lock)) { in vfio_pci_zap_and_vma_lock()
1525 mutex_lock(&vdev->vma_lock); in vfio_pci_zap_and_vma_lock()
1528 &vdev->vma_list, vma_next) { in vfio_pci_zap_and_vma_lock()
1540 mutex_unlock(&vdev->vma_lock); in vfio_pci_zap_and_vma_lock()
1546 void vfio_pci_zap_and_down_write_memory_lock(struct vfio_pci_device *vdev) in vfio_pci_zap_and_down_write_memory_lock() argument
1548 vfio_pci_zap_and_vma_lock(vdev, false); in vfio_pci_zap_and_down_write_memory_lock()
1549 down_write(&vdev->memory_lock); in vfio_pci_zap_and_down_write_memory_lock()
1550 mutex_unlock(&vdev->vma_lock); in vfio_pci_zap_and_down_write_memory_lock()
1553 u16 vfio_pci_memory_lock_and_enable(struct vfio_pci_device *vdev) in vfio_pci_memory_lock_and_enable() argument
1557 down_write(&vdev->memory_lock); in vfio_pci_memory_lock_and_enable()
1558 pci_read_config_word(vdev->pdev, PCI_COMMAND, &cmd); in vfio_pci_memory_lock_and_enable()
1560 pci_write_config_word(vdev->pdev, PCI_COMMAND, in vfio_pci_memory_lock_and_enable()
1566 void vfio_pci_memory_unlock_and_restore(struct vfio_pci_device *vdev, u16 cmd) in vfio_pci_memory_unlock_and_restore() argument
1568 pci_write_config_word(vdev->pdev, PCI_COMMAND, cmd); in vfio_pci_memory_unlock_and_restore()
1569 up_write(&vdev->memory_lock); in vfio_pci_memory_unlock_and_restore()
1573 static int __vfio_pci_add_vma(struct vfio_pci_device *vdev, in __vfio_pci_add_vma() argument
1583 list_add(&mmap_vma->vma_next, &vdev->vma_list); in __vfio_pci_add_vma()
1599 struct vfio_pci_device *vdev = vma->vm_private_data; in vfio_pci_mmap_close() local
1602 mutex_lock(&vdev->vma_lock); in vfio_pci_mmap_close()
1603 list_for_each_entry(mmap_vma, &vdev->vma_list, vma_next) { in vfio_pci_mmap_close()
1610 mutex_unlock(&vdev->vma_lock); in vfio_pci_mmap_close()
1616 struct vfio_pci_device *vdev = vma->vm_private_data; in vfio_pci_mmap_fault() local
1620 mutex_lock(&vdev->vma_lock); in vfio_pci_mmap_fault()
1621 down_read(&vdev->memory_lock); in vfio_pci_mmap_fault()
1623 if (!__vfio_pci_memory_enabled(vdev)) { in vfio_pci_mmap_fault()
1634 list_for_each_entry(mmap_vma, &vdev->vma_list, vma_next) { in vfio_pci_mmap_fault()
1647 if (__vfio_pci_add_vma(vdev, vma)) { in vfio_pci_mmap_fault()
1653 up_read(&vdev->memory_lock); in vfio_pci_mmap_fault()
1654 mutex_unlock(&vdev->vma_lock); in vfio_pci_mmap_fault()
1666 struct vfio_pci_device *vdev = device_data; in vfio_pci_mmap() local
1667 struct pci_dev *pdev = vdev->pdev; in vfio_pci_mmap()
1674 if (index >= VFIO_PCI_NUM_REGIONS + vdev->num_regions) in vfio_pci_mmap()
1682 struct vfio_pci_region *region = vdev->region + regnum; in vfio_pci_mmap()
1686 return region->ops->mmap(vdev, region, vma); in vfio_pci_mmap()
1691 if (!vdev->bar_mmap_supported[index]) in vfio_pci_mmap()
1707 if (!vdev->barmap[index]) { in vfio_pci_mmap()
1713 vdev->barmap[index] = pci_iomap(pdev, index, 0); in vfio_pci_mmap()
1714 if (!vdev->barmap[index]) { in vfio_pci_mmap()
1720 vma->vm_private_data = vdev; in vfio_pci_mmap()
1736 struct vfio_pci_device *vdev = device_data; in vfio_pci_request() local
1737 struct pci_dev *pdev = vdev->pdev; in vfio_pci_request()
1739 mutex_lock(&vdev->igate); in vfio_pci_request()
1741 if (vdev->req_trigger) { in vfio_pci_request()
1746 eventfd_signal(vdev->req_trigger, 1); in vfio_pci_request()
1752 mutex_unlock(&vdev->igate); in vfio_pci_request()
1755 static int vfio_pci_validate_vf_token(struct vfio_pci_device *vdev, in vfio_pci_validate_vf_token() argument
1783 if (!vdev->pdev->is_virtfn && !vdev->vf_token && !vf_token) in vfio_pci_validate_vf_token()
1786 if (vdev->pdev->is_virtfn) { in vfio_pci_validate_vf_token()
1788 struct vfio_pci_device *pf_vdev = get_pf_vdev(vdev, &pf_dev); in vfio_pci_validate_vf_token()
1795 pci_info_ratelimited(vdev->pdev, in vfio_pci_validate_vf_token()
1802 pci_info_ratelimited(vdev->pdev, in vfio_pci_validate_vf_token()
1814 pci_info_ratelimited(vdev->pdev, in vfio_pci_validate_vf_token()
1818 } else if (vdev->vf_token) { in vfio_pci_validate_vf_token()
1819 mutex_lock(&vdev->vf_token->lock); in vfio_pci_validate_vf_token()
1820 if (vdev->vf_token->users) { in vfio_pci_validate_vf_token()
1822 mutex_unlock(&vdev->vf_token->lock); in vfio_pci_validate_vf_token()
1823 pci_info_ratelimited(vdev->pdev, in vfio_pci_validate_vf_token()
1828 if (!uuid_equal(uuid, &vdev->vf_token->uuid)) { in vfio_pci_validate_vf_token()
1829 mutex_unlock(&vdev->vf_token->lock); in vfio_pci_validate_vf_token()
1830 pci_info_ratelimited(vdev->pdev, in vfio_pci_validate_vf_token()
1835 uuid_copy(&vdev->vf_token->uuid, uuid); in vfio_pci_validate_vf_token()
1838 mutex_unlock(&vdev->vf_token->lock); in vfio_pci_validate_vf_token()
1840 pci_info_ratelimited(vdev->pdev, in vfio_pci_validate_vf_token()
1852 struct vfio_pci_device *vdev = device_data; in vfio_pci_match() local
1857 if (strncmp(pci_name(vdev->pdev), buf, strlen(pci_name(vdev->pdev)))) in vfio_pci_match()
1860 if (strlen(buf) > strlen(pci_name(vdev->pdev))) { in vfio_pci_match()
1861 buf += strlen(pci_name(vdev->pdev)); in vfio_pci_match()
1892 ret = vfio_pci_validate_vf_token(vdev, vf_token, &uuid); in vfio_pci_match()
1911 static int vfio_pci_reflck_attach(struct vfio_pci_device *vdev);
1917 struct vfio_pci_device *vdev = container_of(nb, in vfio_pci_bus_notifier() local
1924 pdev->is_virtfn && physfn == vdev->pdev) { in vfio_pci_bus_notifier()
1925 pci_info(vdev->pdev, "Captured SR-IOV VF %s driver_override\n", in vfio_pci_bus_notifier()
1930 pdev->is_virtfn && physfn == vdev->pdev) { in vfio_pci_bus_notifier()
1934 pci_warn(vdev->pdev, in vfio_pci_bus_notifier()
1942 static int vfio_pci_vf_init(struct vfio_pci_device *vdev) in vfio_pci_vf_init() argument
1944 struct pci_dev *pdev = vdev->pdev; in vfio_pci_vf_init()
1950 vdev->vf_token = kzalloc(sizeof(*vdev->vf_token), GFP_KERNEL); in vfio_pci_vf_init()
1951 if (!vdev->vf_token) in vfio_pci_vf_init()
1954 mutex_init(&vdev->vf_token->lock); in vfio_pci_vf_init()
1955 uuid_gen(&vdev->vf_token->uuid); in vfio_pci_vf_init()
1957 vdev->nb.notifier_call = vfio_pci_bus_notifier; in vfio_pci_vf_init()
1958 ret = bus_register_notifier(&pci_bus_type, &vdev->nb); in vfio_pci_vf_init()
1960 kfree(vdev->vf_token); in vfio_pci_vf_init()
1966 static void vfio_pci_vf_uninit(struct vfio_pci_device *vdev) in vfio_pci_vf_uninit() argument
1968 if (!vdev->vf_token) in vfio_pci_vf_uninit()
1971 bus_unregister_notifier(&pci_bus_type, &vdev->nb); in vfio_pci_vf_uninit()
1972 WARN_ON(vdev->vf_token->users); in vfio_pci_vf_uninit()
1973 mutex_destroy(&vdev->vf_token->lock); in vfio_pci_vf_uninit()
1974 kfree(vdev->vf_token); in vfio_pci_vf_uninit()
1977 static int vfio_pci_vga_init(struct vfio_pci_device *vdev) in vfio_pci_vga_init() argument
1979 struct pci_dev *pdev = vdev->pdev; in vfio_pci_vga_init()
1985 ret = vga_client_register(pdev, vdev, NULL, vfio_pci_set_vga_decode); in vfio_pci_vga_init()
1988 vga_set_legacy_decoding(pdev, vfio_pci_set_vga_decode(vdev, false)); in vfio_pci_vga_init()
1992 static void vfio_pci_vga_uninit(struct vfio_pci_device *vdev) in vfio_pci_vga_uninit() argument
1994 struct pci_dev *pdev = vdev->pdev; in vfio_pci_vga_uninit()
2006 struct vfio_pci_device *vdev; in vfio_pci_probe() local
2033 vdev = kzalloc(sizeof(*vdev), GFP_KERNEL); in vfio_pci_probe()
2034 if (!vdev) { in vfio_pci_probe()
2039 vdev->pdev = pdev; in vfio_pci_probe()
2040 vdev->irq_type = VFIO_PCI_NUM_IRQS; in vfio_pci_probe()
2041 mutex_init(&vdev->igate); in vfio_pci_probe()
2042 spin_lock_init(&vdev->irqlock); in vfio_pci_probe()
2043 mutex_init(&vdev->ioeventfds_lock); in vfio_pci_probe()
2044 INIT_LIST_HEAD(&vdev->dummy_resources_list); in vfio_pci_probe()
2045 INIT_LIST_HEAD(&vdev->ioeventfds_list); in vfio_pci_probe()
2046 mutex_init(&vdev->vma_lock); in vfio_pci_probe()
2047 INIT_LIST_HEAD(&vdev->vma_list); in vfio_pci_probe()
2048 init_rwsem(&vdev->memory_lock); in vfio_pci_probe()
2050 ret = vfio_pci_reflck_attach(vdev); in vfio_pci_probe()
2053 ret = vfio_pci_vf_init(vdev); in vfio_pci_probe()
2056 ret = vfio_pci_vga_init(vdev); in vfio_pci_probe()
2060 vfio_pci_probe_power_state(vdev); in vfio_pci_probe()
2072 vfio_pci_set_power_state(vdev, PCI_D0); in vfio_pci_probe()
2073 vfio_pci_set_power_state(vdev, PCI_D3hot); in vfio_pci_probe()
2076 ret = vfio_add_group_dev(&pdev->dev, &vfio_pci_ops, vdev); in vfio_pci_probe()
2083 vfio_pci_set_power_state(vdev, PCI_D0); in vfio_pci_probe()
2085 vfio_pci_vf_uninit(vdev); in vfio_pci_probe()
2087 vfio_pci_reflck_put(vdev->reflck); in vfio_pci_probe()
2089 kfree(vdev->pm_save); in vfio_pci_probe()
2090 kfree(vdev); in vfio_pci_probe()
2098 struct vfio_pci_device *vdev; in vfio_pci_remove() local
2102 vdev = vfio_del_group_dev(&pdev->dev); in vfio_pci_remove()
2103 if (!vdev) in vfio_pci_remove()
2106 vfio_pci_vf_uninit(vdev); in vfio_pci_remove()
2107 vfio_pci_reflck_put(vdev->reflck); in vfio_pci_remove()
2108 vfio_pci_vga_uninit(vdev); in vfio_pci_remove()
2113 vfio_pci_set_power_state(vdev, PCI_D0); in vfio_pci_remove()
2115 mutex_destroy(&vdev->ioeventfds_lock); in vfio_pci_remove()
2116 kfree(vdev->region); in vfio_pci_remove()
2117 kfree(vdev->pm_save); in vfio_pci_remove()
2118 kfree(vdev); in vfio_pci_remove()
2124 struct vfio_pci_device *vdev; in vfio_pci_aer_err_detected() local
2131 vdev = vfio_device_data(device); in vfio_pci_aer_err_detected()
2132 if (vdev == NULL) { in vfio_pci_aer_err_detected()
2137 mutex_lock(&vdev->igate); in vfio_pci_aer_err_detected()
2139 if (vdev->err_trigger) in vfio_pci_aer_err_detected()
2140 eventfd_signal(vdev->err_trigger, 1); in vfio_pci_aer_err_detected()
2142 mutex_unlock(&vdev->igate); in vfio_pci_aer_err_detected()
2151 struct vfio_pci_device *vdev; in vfio_pci_sriov_configure() local
2164 vdev = vfio_device_data(device); in vfio_pci_sriov_configure()
2165 if (!vdev) { in vfio_pci_sriov_configure()
2218 struct vfio_pci_device *vdev; in vfio_pci_reflck_find() local
2229 vdev = vfio_device_data(device); in vfio_pci_reflck_find()
2231 if (vdev->reflck) { in vfio_pci_reflck_find()
2232 vfio_pci_reflck_get(vdev->reflck); in vfio_pci_reflck_find()
2233 *preflck = vdev->reflck; in vfio_pci_reflck_find()
2242 static int vfio_pci_reflck_attach(struct vfio_pci_device *vdev) in vfio_pci_reflck_attach() argument
2244 bool slot = !pci_probe_reset_slot(vdev->pdev->slot); in vfio_pci_reflck_attach()
2248 if (pci_is_root_bus(vdev->pdev->bus) || in vfio_pci_reflck_attach()
2249 vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_reflck_find, in vfio_pci_reflck_attach()
2250 &vdev->reflck, slot) <= 0) in vfio_pci_reflck_attach()
2251 vdev->reflck = vfio_pci_reflck_alloc(); in vfio_pci_reflck_attach()
2255 return PTR_ERR_OR_ZERO(vdev->reflck); in vfio_pci_reflck_attach()
2277 struct vfio_pci_device *vdev; in vfio_pci_get_unused_devs() local
2291 vdev = vfio_device_data(device); in vfio_pci_get_unused_devs()
2294 if (vdev->refcnt) { in vfio_pci_get_unused_devs()
2307 struct vfio_pci_device *vdev; in vfio_pci_try_zap_and_vma_lock_cb() local
2321 vdev = vfio_device_data(device); in vfio_pci_try_zap_and_vma_lock_cb()
2327 if (!vfio_pci_zap_and_vma_lock(vdev, true)) { in vfio_pci_try_zap_and_vma_lock_cb()
2352 static void vfio_pci_try_bus_reset(struct vfio_pci_device *vdev) in vfio_pci_try_bus_reset() argument
2359 if (!pci_probe_reset_slot(vdev->pdev->slot)) in vfio_pci_try_bus_reset()
2361 else if (pci_probe_reset_bus(vdev->pdev->bus)) in vfio_pci_try_bus_reset()
2364 if (vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_count_devs, in vfio_pci_try_bus_reset()
2373 if (vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_try_bus_reset()
2382 ret = pci_reset_bus(vdev->pdev); in vfio_pci_try_bus_reset()
2401 if (tmp != vdev && !disable_idle_d3) in vfio_pci_try_bus_reset()