]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Move kmap outside of critical section in VMCIHost_GetUserMemory
authorVMware, Inc <>
Thu, 18 Nov 2010 22:16:50 +0000 (14:16 -0800)
committerMarcelo Vanzin <mvanzin@vmware.com>
Thu, 18 Nov 2010 22:16:50 +0000 (14:16 -0800)
While calling get_user_pages, we grab
current->mm->mmap_sem. However, we do not need to hold on to
it while doing kmap, and since kmap may sleep, it seems like a
genuinely bad idea.

Signed-off-by: Marcelo Vanzin <mvanzin@vmware.com>
open-vm-tools/modules/linux/vmci/vmciKernelIf.c

index 566d441b34e85ebc9c908ebc8c2de868be620d96..d753b05d9473e98867ab882bcbd62d7d013cd291 100644 (file)
@@ -1619,6 +1619,9 @@ VMCIHost_GetUserMemory(PageStoreAttachInfo *attach,      // IN/OUT
       err = VMCI_ERROR_NO_MEM;
    }
 
+out:
+   up_write(&current->mm->mmap_sem);
+
    if (err == VMCI_SUCCESS) {
       produceQ->qHeader = kmap(attach->producePages[0]);
       produceQ->kernelIf->page = &attach->producePages[1];
@@ -1626,9 +1629,6 @@ VMCIHost_GetUserMemory(PageStoreAttachInfo *attach,      // IN/OUT
       consumeQ->kernelIf->page = &attach->consumePages[1];
    }
 
-out:
-   up_write(&current->mm->mmap_sem);
-
 errorDealloc:
    if (err < VMCI_SUCCESS) {
       if (attach->producePages != NULL) {