Date: Wed, 18 Sep 2013 03:51:49 +0000 (UTC) From: Neel Natu <neel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r255661 - projects/bhyve_npt_pmap/sys/amd64/vmm Message-ID: <201309180351.r8I3pnCl006907@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: neel Date: Wed Sep 18 03:51:49 2013 New Revision: 255661 URL: http://svnweb.freebsd.org/changeset/base/255661 Log: Destroy the iommu domain in vm_destroy() in preference to doing it when the last passthru device is detached from the virtual machine. There are code paths in vm_assign_pptdev() where we can return after creating the iommu domain but before the first passthru device is successfully attached. In this case there aren't any passthru devices attached to the virtual machine and therefore vm_unassign_pptdev() will not be called and the iommu domain is not destroyed. This is very easy to reproduce by trying to attach a non-existent passthru device to the virtual machine and then destroying the virtual machine. Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c Wed Sep 18 00:33:24 2013 (r255660) +++ projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c Wed Sep 18 03:51:49 2013 (r255661) @@ -331,7 +331,8 @@ vm_destroy(struct vm *vm) ppt_unassign_all(vm); - KASSERT(vm->iommu == NULL, ("vm_destroy: iommu should be NULL")); + if (vm->iommu != NULL) + iommu_destroy_domain(vm->iommu); for (i = 0; i < vm->num_mem_segs; i++) vm_free_mem_seg(vm, &vm->mem_segs[i]); @@ -564,8 +565,6 @@ vm_unassign_pptdev(struct vm *vm, int bu if (ppt_num_devices(vm) == 0) { vm_iommu_unmap(vm); vm_gpa_unwire(vm); - iommu_destroy_domain(vm->iommu); - vm->iommu = NULL; } return (0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309180351.r8I3pnCl006907>