Make the previous change `atomic'.
This commit is contained in:
parent
daade671ae
commit
dbc7bbee68
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: uvm_map.c,v 1.12 1998/03/19 04:19:21 thorpej Exp $ */
|
||||
/* $NetBSD: uvm_map.c,v 1.13 1998/03/19 06:37:26 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* XXXCDC: "ROUGH DRAFT" QUALITY UVM PRE-RELEASE FILE!
|
||||
@ -2384,6 +2384,7 @@ uvmspace_unshare(p)
|
||||
struct proc *p;
|
||||
{
|
||||
struct vmspace *nvm, *ovm = p->p_vmspace;
|
||||
int s;
|
||||
|
||||
if (ovm->vm_refcnt == 1)
|
||||
/* nothing to do: vmspace isn't shared in the first place */
|
||||
@ -2392,9 +2393,12 @@ uvmspace_unshare(p)
|
||||
/* make a new vmspace, still holding old one */
|
||||
nvm = uvmspace_fork(ovm);
|
||||
|
||||
s = splhigh(); /* make this `atomic' */
|
||||
pmap_deactivate(p); /* unbind old vmspace */
|
||||
p->p_vmspace = nvm;
|
||||
pmap_activate(p); /* switch to new vmspace */
|
||||
splx(s); /* end of critical section */
|
||||
|
||||
uvmspace_free(ovm); /* drop reference to old vmspace */
|
||||
}
|
||||
|
||||
@ -2410,6 +2414,7 @@ uvmspace_exec(p)
|
||||
{
|
||||
struct vmspace *nvm, *ovm = p->p_vmspace;
|
||||
vm_map_t map = &ovm->vm_map;
|
||||
int s;
|
||||
|
||||
#ifdef sparc
|
||||
/* XXX cgd 960926: the sparc #ifdef should be a MD hook */
|
||||
@ -2473,9 +2478,12 @@ uvmspace_exec(p)
|
||||
* install new vmspace and drop our ref to the old one.
|
||||
*/
|
||||
|
||||
s = splhigh();
|
||||
pmap_deactivate(p);
|
||||
p->p_vmspace = nvm;
|
||||
pmap_activate(p);
|
||||
splx(s);
|
||||
|
||||
uvmspace_free(ovm);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: vm_map.c,v 1.35 1998/03/19 04:19:21 thorpej Exp $ */
|
||||
/* $NetBSD: vm_map.c,v 1.36 1998/03/19 06:37:26 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -235,14 +235,19 @@ vmspace_unshare(p)
|
||||
struct proc *p;
|
||||
{
|
||||
struct vmspace *nvm, *ovm = p->p_vmspace;
|
||||
int s;
|
||||
|
||||
if (ovm->vm_refcnt == 1)
|
||||
return;
|
||||
|
||||
nvm = vmspace_fork(ovm);
|
||||
|
||||
s = splhigh();
|
||||
pmap_deactivate(p);
|
||||
p->p_vmspace = nvm;
|
||||
pmap_activate(p);
|
||||
splx(s);
|
||||
|
||||
vmspace_free(ovm);
|
||||
}
|
||||
|
||||
@ -255,6 +260,7 @@ vmspace_exec(p)
|
||||
{
|
||||
struct vmspace *nvm, *ovm = p->p_vmspace;
|
||||
vm_map_t map = &ovm->vm_map;
|
||||
int s;
|
||||
|
||||
#ifdef sparc
|
||||
/* XXX cgd 960926: the sparc #ifdef should be a MD hook */
|
||||
@ -292,9 +298,12 @@ vmspace_exec(p)
|
||||
VM_INHERIT_NONE);
|
||||
}
|
||||
#endif
|
||||
s = splhigh();
|
||||
pmap_deactivate(p);
|
||||
p->p_vmspace = nvm;
|
||||
pmap_activate(p);
|
||||
splx(s);
|
||||
|
||||
vmspace_free(ovm);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user