Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 419361 | Differences between
and this patch

Collapse All | Expand All

(-)vboxdrv.old/r0drv/linux/memobj-r0drv-linux.c (-9 / +20 lines)
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
(-)vboxdrv.old/r0drv/linux/the-linux-kernel.h (+18 lines)
Lines 269-274 DECLINLINE(unsigned long) msecs_to_jiffi Link Here
269
# endif  /* !RT_ARCH_AMD64 */
269
# endif  /* !RT_ARCH_AMD64 */
270
#endif /* !NO_REDHAT_HACKS */
270
#endif /* !NO_REDHAT_HACKS */
271
271
272
/* 3.5rc0 gets rid of do_mmap() and do_munmap().
273
 * need to change vm locking a bit since the vm_*() calls take mmap_sem internally
274
 */
275
#ifndef do_mmap
276
# define LINUX_NO_DOMMAP
277
# define MY_DO_MMAP(a,b,c,d,e,f) vm_mmap(a, b, c, d, e, (f) >> PAGE_SHIFT)
278
# define MY_DO_MUNMAP(a,b,c) vm_munmap(b, c)
279
#else
280
# undef LINUX_NO_DOMMAP
281
# define MY_DO_MMAP(a,b,c,d,e,f) do_mmap(a, b, c, d, e, f)
282
# define MY_DO_MUNMAP(a,b,c)					\
283
	{							\
284
		down_write(&(a)->mmap_sem);			\
285
		do_munmap(a, b, c);				\
286
		up_write(&(a)->mmap_sem);			\
287
	}
288
#endif
289
272
#ifndef MY_DO_MUNMAP
290
#ifndef MY_DO_MUNMAP
273
# define MY_DO_MUNMAP(a,b,c) do_munmap(a, b, c)
291
# define MY_DO_MUNMAP(a,b,c) do_munmap(a, b, c)
274
#endif
292
#endif

Return to bug 419361