Changeset 40977 in vbox
- Timestamp:
- Apr 18, 2012 4:09:05 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r0drv/solaris/memobj-r0drv-solaris.c
r40972 r40977 97 97 98 98 /** 99 * Returns the physical address of a page from an array of pages. 100 * 101 * @param ppPages The array of pages. 102 * @param iPage Index of the page in the array to get the physical 103 * address. 104 * 105 * @returns Physical address of specific page within the list of pages specified 106 * in @a ppPages. 107 */ 108 static inline uint64_t rtR0MemObjSolPageToPhys(page_t **ppPages, size_t iPage) 109 { 110 pfn_t PageFrameNum = page_pptonum(ppPages[iPage]); 111 AssertReleaseMsg(PageFrameNum != PFN_INVALID, ("rtR0MemObjSolPageToPhys failed. ppPages=%p iPage=%u\n", ppPages, iPage)); 99 * Returns the physical address for a page. 100 * 101 * @param pPage Pointer to the page. 102 * 103 * @returns The physical address for a page. 104 */ 105 static inline uint64_t rtR0MemObjSolPagePhys(page_t *pPage) 106 { 107 AssertPtr(pPage); 108 pfn_t PageFrameNum = page_pptonum(pPage); 109 AssertReleaseMsg(PageFrameNum != PFN_INVALID, ("rtR0MemObjSolPagePhys failed pPage=%p\n")); 112 110 return (uint64_t)PageFrameNum << PAGESHIFT; 113 111 } … … 215 213 page_t *pPage = rtR0MemObjSolPageFromFreelist(virtAddr, PAGESIZE); 216 214 if (!pPage) 215 { 217 216 pPage = rtR0MemObjSolPageFromCachelist(virtAddr, PAGESIZE); 218 if (RT_UNLIKELY(!pPage)) 219 { 220 /* 221 * No more pages found, release was grabbed so far. 222 */ 223 page_create_putback(cPages - i); 224 while (--i >= 0) 225 page_free(ppPages[i], 0 /* don't need page, move to tail of pagelist */); 226 kmem_free(ppPages, cbPages); 227 page_unresv(cPages); 228 return NULL; 217 if (RT_UNLIKELY(!pPage)) 218 { 219 /* 220 * No more pages found, release was grabbed so far. 221 */ 222 page_create_putback(cPages - i); 223 while (--i >= 0) 224 page_free(ppPages[i], 0 /* don't need page, move to tail of pagelist */); 225 kmem_free(ppPages, cbPages); 226 page_unresv(cPages); 227 return NULL; 228 } 229 229 } 230 230 … … 239 239 */ 240 240 if (puPhys) 241 *puPhys = (uint64_t)page_pptonum(ppPages[0]) << PAGESHIFT;241 *puPhys = rtR0MemObjSolPagePhys(ppPages[0]); 242 242 return ppPages; 243 243 } … … 278 278 page_downgrade(ppPages[iPage]); 279 279 280 auPhys[iPage] = rtR0MemObjSolPage ToPhys(ppPages, iPage);280 auPhys[iPage] = rtR0MemObjSolPagePhys(ppPages[iPage]); 281 281 } 282 282 … … 372 372 } 373 373 374 uint64_t uPhys = (uint64_t)page_pptonum(pRootPage) << PAGESHIFT;374 uint64_t uPhys = rtR0MemObjSolPagePhys(pRootPage); 375 375 AssertMsg(!(uPhys & (cb - 1)), ("%llx %zx\n", uPhys, cb)); 376 376 if (puPhys) … … 1024 1024 return rtR0MemObjSolVirtToPhys(pb); 1025 1025 } 1026 return rtR0MemObjSolPageToPhys(pMemSolaris->pvHandle, iPage); 1026 page_t **ppPages = pMemSolaris->pvHandle; 1027 return rtR0MemObjSolPagePhys(ppPages[iPage]); 1027 1028 1028 1029 case RTR0MEMOBJTYPE_PAGE:
Note:
See TracChangeset
for help on using the changeset viewer.

