Changeset eaeb056 in mainline for kernel/generic
- Timestamp:
- 2011-05-22T20:05:26Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 34efa8a
- Parents:
- 9ea8fdb4 (diff), 2bdf8313 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- kernel/generic
- Files:
-
- 6 edited
-
include/mm/page.h (modified) (2 diffs)
-
src/mm/as.c (modified) (4 diffs)
-
src/mm/backend_anon.c (modified) (1 diff)
-
src/mm/backend_elf.c (modified) (2 diffs)
-
src/mm/page.c (modified) (4 diffs)
-
src/synch/futex.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/mm/page.h
r9ea8fdb4 reaeb056 47 47 void (* mapping_insert)(as_t *, uintptr_t, uintptr_t, unsigned int); 48 48 void (* mapping_remove)(as_t *, uintptr_t); 49 pte_t *(* mapping_find)(as_t *, uintptr_t );49 pte_t *(* mapping_find)(as_t *, uintptr_t, bool); 50 50 } page_mapping_operations_t; 51 51 … … 58 58 extern void page_mapping_insert(as_t *, uintptr_t, uintptr_t, unsigned int); 59 59 extern void page_mapping_remove(as_t *, uintptr_t); 60 extern pte_t *page_mapping_find(as_t *, uintptr_t );60 extern pte_t *page_mapping_find(as_t *, uintptr_t, bool); 61 61 extern pte_t *page_table_create(unsigned int); 62 62 extern void page_table_destroy(pte_t *); -
kernel/generic/src/mm/as.c
r9ea8fdb4 reaeb056 649 649 for (; i < size; i++) { 650 650 pte_t *pte = page_mapping_find(as, 651 ptr + P2SZ(i) );651 ptr + P2SZ(i), false); 652 652 653 653 ASSERT(pte); … … 798 798 for (size = 0; size < (size_t) node->value[i]; size++) { 799 799 pte_t *pte = page_mapping_find(as, 800 ptr + P2SZ(size) );800 ptr + P2SZ(size), false); 801 801 802 802 ASSERT(pte); … … 1105 1105 for (size = 0; size < (size_t) node->value[i]; size++) { 1106 1106 pte_t *pte = page_mapping_find(as, 1107 ptr + P2SZ(size) );1107 ptr + P2SZ(size), false); 1108 1108 1109 1109 ASSERT(pte); … … 1241 1241 */ 1242 1242 pte_t *pte; 1243 if ((pte = page_mapping_find(AS, page ))) {1243 if ((pte = page_mapping_find(AS, page, false))) { 1244 1244 if (PTE_PRESENT(pte)) { 1245 1245 if (((access == PF_ACCESS_READ) && PTE_READABLE(pte)) || -
kernel/generic/src/mm/backend_anon.c
r9ea8fdb4 reaeb056 122 122 page_table_lock(area->as, false); 123 123 pte = page_mapping_find(area->as, 124 base + j * PAGE_SIZE);124 base + P2SZ(j), false); 125 125 ASSERT(pte && PTE_VALID(pte) && 126 126 PTE_PRESENT(pte)); 127 127 btree_insert(&area->sh_info->pagemap, 128 (base + j * PAGE_SIZE) - area->base,128 (base + P2SZ(j)) - area->base, 129 129 (void *) PTE_GET_FRAME(pte), NULL); 130 130 page_table_unlock(area->as, false); -
kernel/generic/src/mm/backend_elf.c
r9ea8fdb4 reaeb056 170 170 if (!(area->flags & AS_AREA_WRITE)) 171 171 if (base >= entry->p_vaddr && 172 base + count * PAGE_SIZE<= start_anon)172 base + P2SZ(count) <= start_anon) 173 173 continue; 174 174 … … 182 182 if (!(area->flags & AS_AREA_WRITE)) 183 183 if (base >= entry->p_vaddr && 184 base + (j + 1) * PAGE_SIZE <= 185 start_anon) 184 base + P2SZ(j + 1) <= start_anon) 186 185 continue; 187 186 188 187 page_table_lock(area->as, false); 189 188 pte = page_mapping_find(area->as, 190 base + j * PAGE_SIZE);189 base + P2SZ(j), false); 191 190 ASSERT(pte && PTE_VALID(pte) && 192 191 PTE_PRESENT(pte)); 193 192 btree_insert(&area->sh_info->pagemap, 194 (base + j * PAGE_SIZE) - area->base,193 (base + P2SZ(j)) - area->base, 195 194 (void *) PTE_GET_FRAME(pte), NULL); 196 195 page_table_unlock(area->as, false); -
kernel/generic/src/mm/page.c
r9ea8fdb4 reaeb056 108 108 * using flags. Allocate and setup any missing page tables. 109 109 * 110 * @param as Address space to w ich page belongs.110 * @param as Address space to which page belongs. 111 111 * @param page Virtual address of the page to be mapped. 112 112 * @param frame Physical address of memory frame to which the mapping is … … 135 135 * this call visible. 136 136 * 137 * @param as Address space to w ich page belongs.137 * @param as Address space to which page belongs. 138 138 * @param page Virtual address of the page to be demapped. 139 139 * … … 152 152 } 153 153 154 /** Find mapping for virtual page 154 /** Find mapping for virtual page. 155 155 * 156 * Find mapping for virtual page. 157 * 158 * @param as Address space to wich page belongs. 159 * @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. 160 159 * 161 160 * @return NULL if there is no such mapping; requested mapping … … 163 162 * 164 163 */ 165 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) 166 165 { 167 ASSERT( page_table_locked(as));166 ASSERT(nolock || page_table_locked(as)); 168 167 169 168 ASSERT(page_mapping_operations); 170 169 ASSERT(page_mapping_operations->mapping_find); 171 170 172 return page_mapping_operations->mapping_find(as, page );171 return page_mapping_operations->mapping_find(as, page, nolock); 173 172 } 174 173 -
kernel/generic/src/synch/futex.c
r9ea8fdb4 reaeb056 119 119 */ 120 120 page_table_lock(AS, true); 121 t = page_mapping_find(AS, ALIGN_DOWN(uaddr, PAGE_SIZE) );121 t = page_mapping_find(AS, ALIGN_DOWN(uaddr, PAGE_SIZE), false); 122 122 if (!t || !PTE_VALID(t) || !PTE_PRESENT(t)) { 123 123 page_table_unlock(AS, true); … … 155 155 */ 156 156 page_table_lock(AS, true); 157 t = page_mapping_find(AS, ALIGN_DOWN(uaddr, PAGE_SIZE) );157 t = page_mapping_find(AS, ALIGN_DOWN(uaddr, PAGE_SIZE), false); 158 158 if (!t || !PTE_VALID(t) || !PTE_PRESENT(t)) { 159 159 page_table_unlock(AS, true);
Note:
See TracChangeset
for help on using the changeset viewer.
