| 400 | } |
| 401 | |
| 402 | int |
| 403 | ppt_unassign_device(struct vm *vm, int bus, int slot, int func) |
| 404 | { |
| 405 | struct pptdev *ppt; |
| 406 | int error; |
| 407 | |
| 408 | error = ppt_find(vm, bus, slot, func, &ppt); |
| 409 | if (error) |
| 410 | return (error); |
| 411 | |
| 412 | pci_save_state(ppt->dev); |
| 413 | ppt_pci_reset(ppt->dev); |
| 414 | pci_restore_state(ppt->dev); |
| 415 | ppt_unmap_mmio(vm, ppt); |
| 416 | ppt_teardown_msi(ppt); |
| 417 | ppt_teardown_msix(ppt); |
| 418 | iommu_remove_device(vm_iommu_domain(vm), pci_get_rid(ppt->dev)); |
| 419 | ppt->vm = NULL; |
| 420 | return (0); |
| 421 | } |
| 422 | |
| 423 | int |
| 424 | ppt_unassign_all(struct vm *vm) |
no test coverage detected