Changes in kernel/generic/src/mm/page.c [b93d637:235e6c7] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/page.c
rb93d637 r235e6c7 60 60 61 61 #include <mm/page.h> 62 #include <genarch/mm/page_ht.h>63 #include <genarch/mm/page_pt.h>64 62 #include <arch/mm/page.h> 65 63 #include <arch/mm/asid.h> … … 72 70 #include <debug.h> 73 71 #include <arch.h> 74 #include <syscall/copy.h>75 #include <errno.h>76 72 77 73 /** Virtual operations for page subsystem. */ … … 112 108 * using flags. Allocate and setup any missing page tables. 113 109 * 114 * @param as Address space to w ich page belongs.110 * @param as Address space to which page belongs. 115 111 * @param page Virtual address of the page to be mapped. 116 112 * @param frame Physical address of memory frame to which the mapping is … … 139 135 * this call visible. 140 136 * 141 * @param as Address space to w ich page belongs.137 * @param as Address space to which page belongs. 142 138 * @param page Virtual address of the page to be demapped. 143 139 * … … 156 152 } 157 153 158 /** Find mapping for virtual page 154 /** Find mapping for virtual page. 159 155 * 160 * Find mapping for virtual page. 161 * 162 * @param as Address space to wich page belongs. 163 * @param page Virtual page. 156 * @param as Address space to which page belongs. 157 * @param page Virtual page. 158 * @param nolock True if the page tables need not be locked. 164 159 * 165 160 * @return NULL if there is no such mapping; requested mapping … … 167 162 * 168 163 */ 169 NO_TRACE pte_t *page_mapping_find(as_t *as, uintptr_t page )164 NO_TRACE pte_t *page_mapping_find(as_t *as, uintptr_t page, bool nolock) 170 165 { 171 ASSERT( page_table_locked(as));166 ASSERT(nolock || page_table_locked(as)); 172 167 173 168 ASSERT(page_mapping_operations); 174 169 ASSERT(page_mapping_operations->mapping_find); 175 170 176 return page_mapping_operations->mapping_find(as, page); 177 } 178 179 /** Syscall wrapper for getting mapping of a virtual page. 180 * 181 * @retval EOK Everything went find, @p uspace_frame and @p uspace_node 182 * contains correct values. 183 * @retval ENOENT Virtual address has no mapping. 184 */ 185 sysarg_t sys_page_find_mapping(uintptr_t virt_address, 186 uintptr_t *uspace_frame) 187 { 188 mutex_lock(&AS->lock); 189 190 pte_t *pte = page_mapping_find(AS, virt_address); 191 if (!PTE_VALID(pte) || !PTE_PRESENT(pte)) { 192 mutex_unlock(&AS->lock); 193 194 return (sysarg_t) ENOENT; 195 } 196 197 uintptr_t phys_address = PTE_GET_FRAME(pte); 198 199 mutex_unlock(&AS->lock); 200 201 int rc = copy_to_uspace(uspace_frame, 202 &phys_address, sizeof(phys_address)); 203 if (rc != EOK) { 204 return (sysarg_t) rc; 205 } 206 207 return EOK; 171 return page_mapping_operations->mapping_find(as, page, nolock); 208 172 } 209 173
Note:
See TracChangeset
for help on using the changeset viewer.