Skip site navigation (1)Skip section navigation (2)
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>