From 974452d4ddc1dd46956a16529d939cf0d21a8389 Mon Sep 17 00:00:00 2001 From: Tomas Hruby Date: Sun, 6 Nov 2011 21:37:34 +0000 Subject: [PATCH] VM - clear vminhibit iff it was set --- servers/vm/arch/i386/pagetable.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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; -- 2.44.0