Changeset 9970a5a in mainline for kernel/generic/src/mm
- Timestamp:
- 2012-01-27T23:24:27Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7b3b571, fe56c08a
- Parents:
- d81eaf94 (diff), 221c9ec (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/src/mm
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/backend_elf.c
rd81eaf94 r9970a5a 318 318 dirty = true; 319 319 } else { 320 frame = KA2PA(base + i * FRAME_SIZE); 320 pte_t *pte = page_mapping_find(AS_KERNEL, 321 base + i * FRAME_SIZE, true); 322 323 ASSERT(pte); 324 ASSERT(PTE_PRESENT(pte)); 325 326 frame = PTE_GET_FRAME(pte); 321 327 } 322 328 } else if (upage >= start_anon) { -
kernel/generic/src/mm/frame.c
rd81eaf94 r9970a5a 924 924 for (i = 0; i < init.cnt; i++) 925 925 if (overlaps(addr, PFN2ADDR(confcount), 926 KA2PA(init.tasks[i].addr),926 init.tasks[i].paddr, 927 927 init.tasks[i].size)) { 928 928 overlap = true; … … 1251 1251 size_t i; 1252 1252 for (i = 0; i < init.cnt; i++) { 1253 pfn_t pfn = ADDR2PFN( KA2PA(init.tasks[i].addr));1253 pfn_t pfn = ADDR2PFN(init.tasks[i].paddr); 1254 1254 frame_mark_unavailable(pfn, 1255 1255 SIZE2FRAMES(init.tasks[i].size)); -
kernel/generic/src/mm/km.c
rd81eaf94 r9970a5a 46 46 #include <debug.h> 47 47 #include <arch.h> 48 #include <align.h> 49 #include <macros.h> 50 #include <bitops.h> 48 51 49 52 static ra_arena_t *km_ni_arena; … … 120 123 ra_free(km_ni_arena, page, size); 121 124 } 125 126 uintptr_t km_map(uintptr_t paddr, size_t size, unsigned int flags) 127 { 128 uintptr_t vaddr; 129 size_t asize; 130 size_t align; 131 uintptr_t offs; 132 133 asize = ALIGN_UP(size, PAGE_SIZE); 134 align = ispwr2(size) ? size : (1U << (fnzb(size) + 1)); 135 vaddr = km_page_alloc(asize, max(PAGE_SIZE, align)); 136 137 page_table_lock(AS_KERNEL, true); 138 for (offs = 0; offs < asize; offs += PAGE_SIZE) { 139 page_mapping_insert(AS_KERNEL, vaddr + offs, paddr + offs, 140 flags); 141 } 142 page_table_unlock(AS_KERNEL, true); 143 144 return vaddr; 145 } 146 122 147 123 148 /** Unmap kernen non-identity page. … … 165 190 FRAME_HIGHMEM | FRAME_ATOMIC | flags); 166 191 if (frame) { 167 page = km_page_alloc(PAGE_SIZE, PAGE_SIZE); 192 page = km_map(frame, PAGE_SIZE, 193 PAGE_READ | PAGE_WRITE | PAGE_CACHEABLE); 168 194 ASSERT(page); // FIXME 169 page_table_lock(AS_KERNEL, true);170 page_mapping_insert(AS_KERNEL, page, frame,171 PAGE_CACHEABLE | PAGE_READ | PAGE_WRITE);172 page_table_unlock(AS_KERNEL, true);173 195 } else { 174 196 frame = (uintptr_t) frame_alloc_noreserve(ONE_FRAME, -
kernel/generic/src/mm/page.c
rd81eaf94 r9970a5a 65 65 #include <arch/mm/asid.h> 66 66 #include <mm/as.h> 67 #include <mm/km.h>68 67 #include <mm/frame.h> 69 68 #include <arch/barrier.h> … … 76 75 #include <errno.h> 77 76 #include <align.h> 78 #include <macros.h>79 #include <bitops.h>80 77 81 78 /** Virtual operations for page subsystem. */ … … 193 190 } 194 191 195 uintptr_t hw_map(uintptr_t physaddr, size_t size)196 {197 uintptr_t virtaddr;198 size_t asize;199 size_t align;200 pfn_t i;201 202 asize = ALIGN_UP(size, PAGE_SIZE);203 align = ispwr2(size) ? size : (1U << (fnzb(size) + 1));204 virtaddr = km_page_alloc(asize, max(PAGE_SIZE, align));205 206 page_table_lock(AS_KERNEL, true);207 for (i = 0; i < ADDR2PFN(asize); i++) {208 uintptr_t addr = PFN2ADDR(i);209 page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr,210 PAGE_NOT_CACHEABLE | PAGE_WRITE);211 }212 page_table_unlock(AS_KERNEL, true);213 214 return virtaddr;215 }216 217 192 int page_find_mapping(uintptr_t virt, void **phys) 218 193 {
Note:
See TracChangeset
for help on using the changeset viewer.