VirtualBox

Changeset 22680 in vbox for trunk/src/VBox/Runtime/r0drv


Ignore:
Timestamp:
Sep 1, 2009 3:27:50 PM (15 years ago)
Author:
vboxsync
Message:

memobj-r0drv-linux.c: the goto police.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c

    r22679 r22680  
    12071207    int                 rc           = VERR_NO_MEMORY;
    12081208    PRTR0MEMOBJLNX      pMemLnx;
     1209#ifdef VBOX_USE_PAE_HACK
     1210    struct page        *pDummyPage;
     1211    RTHCPHYS            DummyPhys;
     1212#endif
    12091213
    12101214    /*
     
    12151219    if (uAlignment > PAGE_SIZE)
    12161220        return VERR_NOT_SUPPORTED;
     1221
     1222#ifdef VBOX_USE_PAE_HACK
     1223    /*
     1224     * Allocate a dummy page for use when mapping the memory.
     1225     */
     1226    pDummyPage = alloc_page(GFP_USER);
     1227    if (!pDummyPage)
     1228        return VERR_NO_MEMORY;
     1229    SetPageReserved(pDummyPage);
     1230    DummyPhys = page_to_phys(pDummyPage);
     1231#endif
    12171232
    12181233    /*
     
    12381253            const size_t    cPages = pMemLnxToMap->Core.cb >> PAGE_SHIFT;
    12391254            size_t          iPage;
    1240 #ifdef VBOX_USE_PAE_HACK
    1241             struct page    *pDummyPage = alloc_page(GFP_USER);
    1242             RTHCPHYS        DummyPhys;
    1243 
    1244             if (!pDummyPage)
    1245                 goto l_error;
    1246             SetPageReserved(pDummyPage);
    1247             DummyPhys = page_to_phys(pDummyPage);
    1248 #endif
    12491255
    12501256            rc = 0;
     
    13301336                }
    13311337            }
     1338            if (!rc)
     1339            {
     1340                up_write(&pTask->mm->mmap_sem);
    13321341#ifdef VBOX_USE_PAE_HACK
    1333             __free_page(pDummyPage);
    1334 #endif
    1335             if (!rc)
    1336             {
    1337                 up_write(&pTask->mm->mmap_sem);
     1342                __free_page(pDummyPage);
     1343#endif
    13381344
    13391345                pMemLnx->Core.pv = pv;
     
    13481354            MY_DO_MUNMAP(pTask->mm, (unsigned long)pv, pMemLnxToMap->Core.cb);
    13491355        }
    1350 
     1356        up_write(&pTask->mm->mmap_sem);
     1357        rtR0MemObjDelete(&pMemLnx->Core);
     1358    }
    13511359#ifdef VBOX_USE_PAE_HACK
    1352 l_error:
    1353 #endif
    1354         up_write(&pTask->mm->mmap_sem);
    1355 
    1356         rtR0MemObjDelete(&pMemLnx->Core);
    1357     }
     1360    __free_page(pDummyPage);
     1361#endif
    13581362
    13591363    return rc;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette