Lines 491-499
DECLHIDDEN(int) rtR0MemObjNativeFree(RTR
Link Here
|
491 |
Assert(pTask); |
491 |
Assert(pTask); |
492 |
if (pTask && pTask->mm) |
492 |
if (pTask && pTask->mm) |
493 |
{ |
493 |
{ |
494 |
down_write(&pTask->mm->mmap_sem); |
|
|
495 |
MY_DO_MUNMAP(pTask->mm, (unsigned long)pMemLnx->Core.pv, pMemLnx->Core.cb); |
494 |
MY_DO_MUNMAP(pTask->mm, (unsigned long)pMemLnx->Core.pv, pMemLnx->Core.cb); |
496 |
up_write(&pTask->mm->mmap_sem); |
|
|
497 |
} |
495 |
} |
498 |
} |
496 |
} |
499 |
else |
497 |
else |
Lines 516-524
DECLHIDDEN(int) rtR0MemObjNativeFree(RTR
Link Here
|
516 |
Assert(pTask); |
514 |
Assert(pTask); |
517 |
if (pTask && pTask->mm) |
515 |
if (pTask && pTask->mm) |
518 |
{ |
516 |
{ |
519 |
down_write(&pTask->mm->mmap_sem); |
|
|
520 |
MY_DO_MUNMAP(pTask->mm, (unsigned long)pMemLnx->Core.pv, pMemLnx->Core.cb); |
517 |
MY_DO_MUNMAP(pTask->mm, (unsigned long)pMemLnx->Core.pv, pMemLnx->Core.cb); |
521 |
up_write(&pTask->mm->mmap_sem); |
|
|
522 |
} |
518 |
} |
523 |
} |
519 |
} |
524 |
else |
520 |
else |
Lines 1147-1156
static void *rtR0MemObjLinuxDoMmap(RTR3P
Link Here
|
1147 |
} |
1143 |
} |
1148 |
|
1144 |
|
1149 |
if (R3PtrFixed != (RTR3PTR)-1) |
1145 |
if (R3PtrFixed != (RTR3PTR)-1) |
1150 |
ulAddr = do_mmap(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0); |
1146 |
ulAddr = MY_DO_MMAP(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0); |
1151 |
else |
1147 |
else |
1152 |
{ |
1148 |
{ |
1153 |
ulAddr = do_mmap(NULL, 0, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS, 0); |
1149 |
ulAddr = MY_DO_MMAP(NULL, 0, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS, 0); |
1154 |
if ( !(ulAddr & ~PAGE_MASK) |
1150 |
if ( !(ulAddr & ~PAGE_MASK) |
1155 |
&& (ulAddr & (uAlignment - 1))) |
1151 |
&& (ulAddr & (uAlignment - 1))) |
1156 |
{ |
1152 |
{ |
Lines 1192-1200
DECLHIDDEN(int) rtR0MemObjNativeReserveU
Link Here
|
1192 |
pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_RES_VIRT, pv, cb); |
1188 |
pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_RES_VIRT, pv, cb); |
1193 |
if (!pMemLnx) |
1189 |
if (!pMemLnx) |
1194 |
{ |
1190 |
{ |
1195 |
down_write(&pTask->mm->mmap_sem); |
|
|
1196 |
MY_DO_MUNMAP(pTask->mm, (unsigned long)pv, cb); |
1191 |
MY_DO_MUNMAP(pTask->mm, (unsigned long)pv, cb); |
1197 |
up_write(&pTask->mm->mmap_sem); |
|
|
1198 |
return VERR_NO_MEMORY; |
1192 |
return VERR_NO_MEMORY; |
1199 |
} |
1193 |
} |
1200 |
|
1194 |
|
Lines 1381-1387
DECLHIDDEN(int) rtR0MemObjNativeMapUser(
Link Here
|
1381 |
* Allocate user space mapping. |
1375 |
* Allocate user space mapping. |
1382 |
*/ |
1376 |
*/ |
1383 |
void *pv; |
1377 |
void *pv; |
|
|
1378 |
#ifndef LINUX_NO_DOMMAP |
1384 |
down_write(&pTask->mm->mmap_sem); |
1379 |
down_write(&pTask->mm->mmap_sem); |
|
|
1380 |
#endif |
1385 |
pv = rtR0MemObjLinuxDoMmap(R3PtrFixed, pMemLnxToMap->Core.cb, uAlignment, pTask, fProt); |
1381 |
pv = rtR0MemObjLinuxDoMmap(R3PtrFixed, pMemLnxToMap->Core.cb, uAlignment, pTask, fProt); |
1386 |
if (pv != (void *)-1) |
1382 |
if (pv != (void *)-1) |
1387 |
{ |
1383 |
{ |
Lines 1394-1399
DECLHIDDEN(int) rtR0MemObjNativeMapUser(
Link Here
|
1394 |
const size_t cPages = pMemLnxToMap->Core.cb >> PAGE_SHIFT; |
1390 |
const size_t cPages = pMemLnxToMap->Core.cb >> PAGE_SHIFT; |
1395 |
size_t iPage; |
1391 |
size_t iPage; |
1396 |
|
1392 |
|
|
|
1393 |
#ifdef LINUX_NO_DOMMAP |
1394 |
down_write(&pTask->mm->mmap_sem); |
1395 |
#endif |
1397 |
rc = 0; |
1396 |
rc = 0; |
1398 |
if (pMemLnxToMap->cPages) |
1397 |
if (pMemLnxToMap->cPages) |
1399 |
{ |
1398 |
{ |
Lines 1428-1433
DECLHIDDEN(int) rtR0MemObjNativeMapUser(
Link Here
|
1428 |
if (rc) |
1427 |
if (rc) |
1429 |
{ |
1428 |
{ |
1430 |
rc = VERR_NO_MEMORY; |
1429 |
rc = VERR_NO_MEMORY; |
|
|
1430 |
#ifdef LINUX_NO_DOMMAP |
1431 |
up_write(&pTask->mm->mmap_sem); |
1432 |
#endif |
1431 |
break; |
1433 |
break; |
1432 |
} |
1434 |
} |
1433 |
} |
1435 |
} |
Lines 1471-1476
DECLHIDDEN(int) rtR0MemObjNativeMapUser(
Link Here
|
1471 |
if (rc) |
1473 |
if (rc) |
1472 |
{ |
1474 |
{ |
1473 |
rc = VERR_NO_MEMORY; |
1475 |
rc = VERR_NO_MEMORY; |
|
|
1476 |
#ifdef LINUX_NO_DOMMAP |
1477 |
up_write(&pTask->mm->mmap_sem); |
1478 |
#endif |
1474 |
break; |
1479 |
break; |
1475 |
} |
1480 |
} |
1476 |
} |
1481 |
} |
Lines 1489-1502
DECLHIDDEN(int) rtR0MemObjNativeMapUser(
Link Here
|
1489 |
return VINF_SUCCESS; |
1494 |
return VINF_SUCCESS; |
1490 |
} |
1495 |
} |
1491 |
|
1496 |
|
|
|
1497 |
up_write(&pTask->mm->mmap_sem); |
1492 |
/* |
1498 |
/* |
1493 |
* Bail out. |
1499 |
* Bail out. |
1494 |
*/ |
1500 |
*/ |
1495 |
MY_DO_MUNMAP(pTask->mm, (unsigned long)pv, pMemLnxToMap->Core.cb); |
1501 |
MY_DO_MUNMAP(pTask->mm, (unsigned long)pv, pMemLnxToMap->Core.cb); |
|
|
1502 |
#ifndef LINUX_NO_DOMMAP |
1503 |
down_write(&pTask->mm->mmap_sem); |
1504 |
#endif |
1496 |
} |
1505 |
} |
1497 |
up_write(&pTask->mm->mmap_sem); |
|
|
1498 |
rtR0MemObjDelete(&pMemLnx->Core); |
1506 |
rtR0MemObjDelete(&pMemLnx->Core); |
1499 |
} |
1507 |
} |
|
|
1508 |
#ifndef LINUX_NO_DOMMAP |
1509 |
up_write(&pTask->mm->mmap_sem); |
1510 |
#endif |
1500 |
#ifdef VBOX_USE_PAE_HACK |
1511 |
#ifdef VBOX_USE_PAE_HACK |
1501 |
__free_page(pDummyPage); |
1512 |
__free_page(pDummyPage); |
1502 |
#endif |
1513 |
#endif |