From: Tomas Hruby Date: Sun, 6 Nov 2011 21:37:34 +0000 (+0000) Subject: VM - clear vminhibit iff it was set X-Git-Tag: v3.2.0~128 X-Git-Url: http://zhaoyanbai.com/repos/dig.html?a=commitdiff_plain;h=974452d4ddc1dd46956a16529d939cf0d21a8389;p=minix.git VM - clear vminhibit iff it was set --- diff --git a/servers/vm/arch/i386/pagetable.c b/servers/vm/arch/i386/pagetable.c index 4c0ee2008..d516004a8 100644 --- a/servers/vm/arch/i386/pagetable.c +++ b/servers/vm/arch/i386/pagetable.c @@ -672,14 +672,17 @@ PUBLIC int pt_writemap(struct vmproc * vmp, int ret = OK; #ifdef CONFIG_SMP + int vminhibit_clear = 0; /* FIXME * don't do it everytime, stop the process only on the first change and * resume the execution on the last change. Do in a wrapper of this * function */ if (vmp && vmp->vm_endpoint != NONE && vmp->vm_endpoint != VM_PROC_NR && - !(vmp->vm_flags & VMF_EXITING)) + !(vmp->vm_flags & VMF_EXITING)) { sys_vmctl(vmp->vm_endpoint, VMCTL_VMINHIBIT_SET, 0); + vminhibit_clear = 1; + } #endif if(writemapflags & WMF_VERIFY) @@ -780,9 +783,11 @@ PUBLIC int pt_writemap(struct vmproc * vmp, resume_exit: #ifdef CONFIG_SMP - if (vmp && vmp->vm_endpoint != NONE && vmp->vm_endpoint != VM_PROC_NR && - !(vmp->vm_flags & VMF_EXITING)) + if (vminhibit_clear) { + assert(vmp && vmp->vm_endpoint != NONE && vmp->vm_endpoint != VM_PROC_NR && + !(vmp->vm_flags & VMF_EXITING)); sys_vmctl(vmp->vm_endpoint, VMCTL_VMINHIBIT_CLEAR, 0); + } #endif return ret;