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