svn commit: r253182 - projects/bhyve_npt_pmap/sys/amd64/vmm

Neel Natu neel at FreeBSD.org
Thu Jul 11 03:57:54 UTC 2013


Author: neel
Date: Thu Jul 11 03:57:53 2013
New Revision: 253182
URL: http://svnweb.freebsd.org/changeset/base/253182

Log:
  Don't prevent the process address space from being swapped out while it is
  trying to resolve a page fault. This could potentially aggravate an already
  low memory condition and lead to a deadlock.
  
  A more detailed explanation is here:
  http://lists.freebsd.org/pipermail/svn-src-projects/2013-July/007215.html
  
  Pointed out by:	kib

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	Thu Jul 11 03:54:35 2013	(r253181)
+++ projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c	Thu Jul 11 03:57:53 2013	(r253182)
@@ -445,25 +445,14 @@ vm_gpa_hold(struct vm *vm, vm_paddr_t gp
 {
 	int rv, pageoff;
 	vm_page_t m;
-	struct proc *p;
 
 	pageoff = gpa & PAGE_MASK;
 	if (len > PAGE_SIZE - pageoff)
 		panic("vm_gpa_hold: invalid gpa/len: 0x%016lx/%lu", gpa, len);
 
-	p = curthread->td_proc;
-
-	PROC_LOCK(p);
-	p->p_lock++;
-	PROC_UNLOCK(p);
-
 	rv = vm_fault_hold(&vm->vmspace->vm_map, trunc_page(gpa), reqprot,
 			   VM_FAULT_NORMAL, &m);
 
-	PROC_LOCK(p);
-	p->p_lock--;
-	PROC_UNLOCK(p);
-
 	if (rv == KERN_SUCCESS) {
 		*cookie = m;
 		return ((void *)(PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)) + pageoff));
@@ -748,8 +737,6 @@ static int
 vm_handle_paging(struct vm *vm, int vcpuid, boolean_t *retu)
 {
 	int rv;
-	struct thread *td;
-	struct proc *p;
 	struct vm_map *map;
 	vm_prot_t ftype;
 	struct vcpu *vcpu;
@@ -758,21 +745,11 @@ vm_handle_paging(struct vm *vm, int vcpu
 	vcpu = &vm->vcpu[vcpuid];
 	vme = &vcpu->exitinfo;
 
-	td = curthread;
-	p = td->td_proc;
 	map = &vm->vmspace->vm_map;
 	ftype = vme->u.paging.fault_type;
 
-	PROC_LOCK(p);
-	p->p_lock++;
-	PROC_UNLOCK(p);
-
 	rv = vm_fault(map, vme->u.paging.gpa, ftype, VM_FAULT_NORMAL);
 
-	PROC_LOCK(p);
-	p->p_lock--;
-	PROC_UNLOCK(p);
-
 	if (rv != KERN_SUCCESS)
 		return (EFAULT);
 


More information about the svn-src-projects mailing list