Changeset 38dc82d in mainline for kernel/generic/src/mm/page.c
- Timestamp:
- 2016-08-31T14:16:45Z (9 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 346b12a2
- Parents:
- dc05a9a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/page.c
rdc05a9a r38dc82d 137 137 /** Find mapping for virtual page. 138 138 * 139 * @param as Address space to which page belongs.140 * @param page Virtual page.141 * @param nolock True if the page tables need not be locked.142 * 143 * @return NULL if there is no such mapping; requested mapping144 * 145 * 146 */ 147 NO_TRACE pte_t *page_mapping_find(as_t *as, uintptr_t page, bool nolock)139 * @param as Address space to which page belongs. 140 * @param page Virtual page. 141 * @param nolock True if the page tables need not be locked. 142 * @param[out] pte Structure that will receive a copy of the found PTE. 143 * 144 * @return True if the mapping was found, false otherwise. 145 */ 146 NO_TRACE bool page_mapping_find(as_t *as, uintptr_t page, bool nolock, 147 pte_t *pte) 148 148 { 149 149 ASSERT(nolock || page_table_locked(as)); … … 153 153 154 154 return page_mapping_operations->mapping_find(as, 155 ALIGN_DOWN(page, PAGE_SIZE), nolock );155 ALIGN_DOWN(page, PAGE_SIZE), nolock, pte); 156 156 } 157 157 … … 173 173 page_table_lock(AS, true); 174 174 175 pte_t *pte = page_mapping_find(AS, virt, false); 176 if ((!PTE_VALID(pte)) || (!PTE_PRESENT(pte))) { 175 pte_t pte; 176 bool found = page_mapping_find(AS, virt, false, &pte); 177 if (!found || !PTE_VALID(&pte) || !PTE_PRESENT(&pte)) { 177 178 page_table_unlock(AS, true); 178 179 return ENOENT; 179 180 } 180 181 181 *phys = PTE_GET_FRAME( pte) +182 *phys = PTE_GET_FRAME(&pte) + 182 183 (virt - ALIGN_DOWN(virt, PAGE_SIZE)); 183 184
Note:
See TracChangeset
for help on using the changeset viewer.