Lines Matching defs:pMemLnx

91 static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx);
297 PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJLNX, apPages[cPages]), enmType, NULL, cb);
298 if (!pMemLnx)
300 pMemLnx->cPages = cPages;
331 pMemLnx->apPages[iPage] = &paPages[iPage];
335 rtR0MemObjDelete(&pMemLnx->Core);
344 pMemLnx->apPages[iPage] = alloc_page(fFlagsLnx | __GFP_NOWARN);
345 if (RT_UNLIKELY(!pMemLnx->apPages[iPage]))
348 __free_page(pMemLnx->apPages[iPage]);
349 rtR0MemObjDelete(&pMemLnx->Core);
360 rtR0MemObjDelete(&pMemLnx->Core);
365 pMemLnx->apPages[iPage] = &paPages[iPage];
366 MY_SET_PAGES_EXEC(pMemLnx->apPages[iPage], 1);
367 if (PageHighMem(pMemLnx->apPages[iPage]))
373 pMemLnx->fContiguous = fContiguous;
379 SetPageReserved(pMemLnx->apPages[iPage]);
392 if (RT_UNLIKELY(page_to_phys(pMemLnx->apPages[0]) & (uAlignment - 1)))
398 (unsigned long)cb, (unsigned long)uAlignment, rtR0MemObjLinuxOrder(cPages), (unsigned long)page_to_phys(pMemLnx->apPages[0]));
399 rtR0MemObjLinuxFreePages(pMemLnx);
404 *ppMemLnx = pMemLnx;
414 * @param pMemLnx The object which physical pages should be freed.
416 static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx)
418 size_t iPage = pMemLnx->cPages;
426 ClearPageReserved(pMemLnx->apPages[iPage]);
429 MY_SET_PAGES_NOEXEC(pMemLnx->apPages[iPage], 1);
437 if (!pMemLnx->fContiguous)
439 iPage = pMemLnx->cPages;
441 __free_page(pMemLnx->apPages[iPage]);
445 __free_pages(pMemLnx->apPages[0], rtR0MemObjLinuxOrder(pMemLnx->cPages));
447 pMemLnx->cPages = 0;
462 * @param pMemLnx The linux memory object to map.
465 static int rtR0MemObjLinuxVMap(PRTR0MEMOBJLNX pMemLnx, bool fExecutable)
473 || !pMemLnx->fContiguous;
476 size_t iPage = pMemLnx->cPages;
478 if (PageHighMem(pMemLnx->apPages[iPage]))
485 Assert(!pMemLnx->Core.pv);
486 Assert(!pMemLnx->fMappedToRing0);
502 pMemLnx->Core.pv = vmap(&pMemLnx->apPages[0], pMemLnx->cPages, VM_MAP, fPg);
504 pMemLnx->Core.pv = vmap(&pMemLnx->apPages[0], pMemLnx->cPages, VM_ALLOC, fPg);
506 if (pMemLnx->Core.pv)
507 pMemLnx->fMappedToRing0 = true;
519 pMemLnx->Core.pv = phys_to_virt(page_to_phys(pMemLnx->apPages[0]));
520 Assert(pMemLnx->Core.pv);
530 * @param pMemLnx The linux memory object.
532 static void rtR0MemObjLinuxVUnmap(PRTR0MEMOBJLNX pMemLnx)
535 if (pMemLnx->fMappedToRing0)
537 Assert(pMemLnx->Core.pv);
538 vunmap(pMemLnx->Core.pv);
539 pMemLnx->fMappedToRing0 = false;
542 Assert(!pMemLnx->fMappedToRing0);
544 pMemLnx->Core.pv = NULL;
550 PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)pMem;
555 switch (pMemLnx->Core.enmType)
562 rtR0MemObjLinuxVUnmap(pMemLnx);
563 rtR0MemObjLinuxFreePages(pMemLnx);
567 if (pMemLnx->Core.u.Lock.R0Process != NIL_RTR0PROCESS)
569 struct task_struct *pTask = rtR0ProcessToLinuxTask(pMemLnx->Core.u.Lock.R0Process);
575 iPage = pMemLnx->cPages;
578 if (!PageReserved(pMemLnx->apPages[iPage]))
579 SetPageDirty(pMemLnx->apPages[iPage]);
580 page_cache_release(pMemLnx->apPages[iPage]);
590 Assert(pMemLnx->Core.pv);
591 if (pMemLnx->Core.u.ResVirt.R0Process != NIL_RTR0PROCESS)
593 struct task_struct *pTask = rtR0ProcessToLinuxTask(pMemLnx->Core.u.Lock.R0Process);
596 rtR0MemObjLinuxDoMunmap(pMemLnx->Core.pv, pMemLnx->Core.cb, pTask);
600 vunmap(pMemLnx->Core.pv);
602 Assert(pMemLnx->cPages == 1 && pMemLnx->apPages[0] != NULL);
603 __free_page(pMemLnx->apPages[0]);
604 pMemLnx->apPages[0] = NULL;
605 pMemLnx->cPages = 0;
607 pMemLnx->Core.pv = NULL;
611 Assert(pMemLnx->cPages == 0); Assert(pMemLnx->Core.pv);
612 if (pMemLnx->Core.u.ResVirt.R0Process != NIL_RTR0PROCESS)
614 struct task_struct *pTask = rtR0ProcessToLinuxTask(pMemLnx->Core.u.Lock.R0Process);
617 rtR0MemObjLinuxDoMunmap(pMemLnx->Core.pv, pMemLnx->Core.cb, pTask);
620 vunmap(pMemLnx->Core.pv);
621 pMemLnx->Core.pv = NULL;
625 AssertMsgFailed(("enmType=%d\n", pMemLnx->Core.enmType));
634 PRTR0MEMOBJLNX pMemLnx;
638 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_PAGE, cb, PAGE_SIZE, GFP_HIGHUSER,
641 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_PAGE, cb, PAGE_SIZE, GFP_USER,
646 rc = rtR0MemObjLinuxVMap(pMemLnx, fExecutable);
649 *ppMem = &pMemLnx->Core;
653 rtR0MemObjLinuxFreePages(pMemLnx);
654 rtR0MemObjDelete(&pMemLnx->Core);
663 PRTR0MEMOBJLNX pMemLnx;
669 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_LOW, cb, PAGE_SIZE, GFP_DMA32,
675 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_LOW, cb, PAGE_SIZE, GFP_DMA,
681 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_LOW, cb, PAGE_SIZE, GFP_USER,
686 rc = rtR0MemObjLinuxVMap(pMemLnx, fExecutable);
689 *ppMem = &pMemLnx->Core;
693 rtR0MemObjLinuxFreePages(pMemLnx);
694 rtR0MemObjDelete(&pMemLnx->Core);
703 PRTR0MEMOBJLNX pMemLnx;
708 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_DMA32,
714 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_DMA,
718 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_USER,
723 rc = rtR0MemObjLinuxVMap(pMemLnx, fExecutable);
727 size_t iPage = pMemLnx->cPages;
729 Assert(page_to_phys(pMemLnx->apPages[iPage]) < _4G);
731 pMemLnx->Core.u.Cont.Phys = page_to_phys(pMemLnx->apPages[0]);
732 *ppMem = &pMemLnx->Core;
736 rtR0MemObjLinuxFreePages(pMemLnx);
737 rtR0MemObjDelete(&pMemLnx->Core);
759 PRTR0MEMOBJLNX pMemLnx;
762 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, enmType, cb, uAlignment, fGfp,
773 size_t iPage = pMemLnx->cPages;
775 if (page_to_phys(pMemLnx->apPages[iPage]) > PhysHighest)
777 rtR0MemObjLinuxFreePages(pMemLnx);
778 rtR0MemObjDelete(&pMemLnx->Core);
788 pMemLnx->Core.u.Phys.PhysBase = page_to_phys(pMemLnx->apPages[0]);
789 pMemLnx->Core.u.Phys.fAllocated = true;
791 *ppMem = &pMemLnx->Core;
960 PRTR0MEMOBJLNX pMemLnx;
964 pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_PHYS, NULL, cb);
965 if (!pMemLnx)
968 pMemLnx->Core.u.Phys.PhysBase = PhysAddr;
969 pMemLnx->Core.u.Phys.fAllocated = false;
970 pMemLnx->Core.u.Phys.uCachePolicy = uCachePolicy;
971 Assert(!pMemLnx->cPages);
972 *ppMem = &pMemLnx->Core;
982 PRTR0MEMOBJLNX pMemLnx;
997 pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJLNX, apPages[cPages]), RTR0MEMOBJTYPE_LOCK, (void *)R3Ptr, cb);
998 if (!pMemLnx)
1015 &pMemLnx->apPages[0], /* Page array. */
1037 flush_dcache_page(pMemLnx->apPages[rc]);
1045 pMemLnx->Core.u.Lock.R0Process = R0Process;
1046 pMemLnx->cPages = cPages;
1047 Assert(!pMemLnx->fMappedToRing0);
1048 *ppMem = &pMemLnx->Core;
1058 if (!PageReserved(pMemLnx->apPages[rc]))
1059 SetPageDirty(pMemLnx->apPages[rc]);
1060 page_cache_release(pMemLnx->apPages[rc]);
1069 rtR0MemObjDelete(&pMemLnx->Core);
1078 PRTR0MEMOBJLNX pMemLnx;
1106 pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJLNX, apPages[cPages]), RTR0MEMOBJTYPE_LOCK, pv, cb);
1107 if (!pMemLnx)
1127 pMemLnx->apPages[iPage] = pPage;
1135 pMemLnx->apPages[iPage] = virt_to_page(pbPage);
1144 pMemLnx->Core.u.Lock.R0Process = NIL_RTR0PROCESS;
1145 pMemLnx->cPages = cPages;
1146 Assert(!pMemLnx->fMappedToRing0);
1147 *ppMem = &pMemLnx->Core;
1152 rtR0MemObjDelete(&pMemLnx->Core);
1191 PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_RES_VIRT, pv, cb);
1192 if (pMemLnx)
1194 pMemLnx->Core.u.ResVirt.R0Process = NIL_RTR0PROCESS;
1195 pMemLnx->cPages = 1;
1196 pMemLnx->apPages[0] = pDummyPage;
1197 *ppMem = &pMemLnx->Core;
1218 PRTR0MEMOBJLNX pMemLnx;
1237 pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_RES_VIRT, pv, cb);
1238 if (!pMemLnx)
1244 pMemLnx->Core.u.ResVirt.R0Process = R0Process;
1245 *ppMem = &pMemLnx->Core;
1256 PRTR0MEMOBJLNX pMemLnx;
1267 pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_MAPPING, NULL, pMemLnxToMap->Core.cb);
1268 if (pMemLnx)
1278 pMemLnx->Core.pv = vmap(&pMemLnxToMap->apPages[0], pMemLnxToMap->cPages, VM_MAP, fPg);
1280 pMemLnx->Core.pv = vmap(&pMemLnxToMap->apPages[0], pMemLnxToMap->cPages, VM_ALLOC, fPg);
1282 if (pMemLnx->Core.pv)
1284 pMemLnx->fMappedToRing0 = true;
1304 pMemLnx->Core.pv = pMemLnxToMap->Core.pv;
1315 pMemLnx->Core.pv = pMemLnxToMap->Core.u.Phys.uCachePolicy == RTMEM_CACHE_POLICY_MMIO
1318 if (pMemLnx->Core.pv)
1326 pMemLnx->Core.u.Mapping.R0Process = NIL_RTR0PROCESS;
1327 *ppMem = &pMemLnx->Core;
1330 rtR0MemObjDelete(&pMemLnx->Core);
1392 PRTR0MEMOBJLNX pMemLnx;
1420 pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_MAPPING, NULL, pMemLnxToMap->Core.cb);
1421 if (pMemLnx)
1563 pMemLnx->Core.pv = pv;
1564 pMemLnx->Core.u.Mapping.R0Process = R0Process;
1565 *ppMem = &pMemLnx->Core;
1574 rtR0MemObjDelete(&pMemLnx->Core);
1596 PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)pMem;
1598 if (pMemLnx->cPages)
1599 return page_to_phys(pMemLnx->apPages[iPage]);
1601 switch (pMemLnx->Core.enmType)
1604 return pMemLnx->Core.u.Cont.Phys + (iPage << PAGE_SHIFT);
1607 return pMemLnx->Core.u.Phys.PhysBase + (iPage << PAGE_SHIFT);
1611 return rtR0MemObjNativeGetPagePhysAddr(pMemLnx->Core.uRel.Child.pParent, iPage);
1619 AssertMsgFailed(("%d\n", pMemLnx->Core.enmType));