Changeset dff90fa7 in mainline for kernel/generic
- Timestamp:
- 2013-06-05T19:41:12Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 74dcc07
- Parents:
- f288d85 (diff), 6db5d4b (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:
-
- 14 edited
-
include/debug.h (modified) (1 diff)
-
include/lib/memfnc.h (modified) (1 diff)
-
include/mm/tlb.h (modified) (1 diff)
-
include/printf/verify.h (modified) (1 diff)
-
src/interrupt/interrupt.c (modified) (2 diffs)
-
src/main/kinit.c (modified) (1 diff)
-
src/main/main.c (modified) (1 diff)
-
src/mm/as.c (modified) (7 diffs)
-
src/mm/backend_anon.c (modified) (3 diffs)
-
src/mm/backend_elf.c (modified) (4 diffs)
-
src/mm/backend_phys.c (modified) (3 diffs)
-
src/mm/page.c (modified) (3 diffs)
-
src/proc/task.c (modified) (1 diff)
-
src/sysinfo/sysinfo.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/debug.h
rf288d85 rdff90fa7 77 77 } while (0) 78 78 79 /** Static assert macro 80 * 81 */ 82 #define STATIC_ASSERT(expr) \ 83 _Static_assert(expr, "") 84 85 #define STATIC_ASSERT_VERBOSE(expr, msg) \ 86 _Static_assert(expr, msg) 87 88 79 89 #else /* CONFIG_DEBUG */ 80 90 81 91 #define ASSERT(expr) 82 92 #define ASSERT_VERBOSE(expr, msg) 93 #define STATIC_ASSERT(expr) 94 #define STATIC_ASSERT_VERBOSE(expr, msg) 83 95 84 96 #endif /* CONFIG_DEBUG */ -
kernel/generic/include/lib/memfnc.h
rf288d85 rdff90fa7 38 38 #include <typedefs.h> 39 39 40 extern void *memset(void *, int, size_t); 41 extern void *memcpy(void *, const void *, size_t); 40 extern void *memset(void *, int, size_t) 41 __attribute__ ((optimize("-fno-tree-loop-distribute-patterns"))); 42 extern void *memcpy(void *, const void *, size_t) 43 __attribute__ ((optimize("-fno-tree-loop-distribute-patterns"))); 42 44 43 45 #endif -
kernel/generic/include/mm/tlb.h
rf288d85 rdff90fa7 73 73 extern void tlb_shootdown_ipi_recv(void); 74 74 #else 75 #define tlb_shootdown_start(w, x, y, z) (0)76 #define tlb_shootdown_finalize(i) ( (i) =(i));75 #define tlb_shootdown_start(w, x, y, z) interrupts_disable() 76 #define tlb_shootdown_finalize(i) (interrupts_restore(i)); 77 77 #define tlb_shootdown_ipi_recv() 78 78 #endif /* CONFIG_SMP */ -
kernel/generic/include/printf/verify.h
rf288d85 rdff90fa7 38 38 #ifndef NVERIFY_PRINTF 39 39 40 #ifdef __clang__ 41 #define PRINTF_ATTRIBUTE(start, end) \ 42 __attribute__((format(__printf__, start, end))) 43 #else 40 44 #define PRINTF_ATTRIBUTE(start, end) \ 41 45 __attribute__((format(gnu_printf, start, end))) 46 #endif 47 42 48 43 49 #else /* NVERIFY_PRINTF */ -
kernel/generic/src/interrupt/interrupt.c
rf288d85 rdff90fa7 54 54 #include <proc/thread.h> 55 55 #include <arch/cycle.h> 56 #include <arch/stack.h> 56 57 #include <str.h> 57 58 #include <trace.h> … … 222 223 /* 223 224 * The istate structure should be right at the bottom of the kernel 224 * stack.225 * memory stack. 225 226 */ 226 return (istate_t *) ((uint8_t *) 227 thread->kstack + STACK_SIZE - sizeof(istate_t)); 227 return (istate_t *) &thread->kstack[MEM_STACK_SIZE - sizeof(istate_t)]; 228 228 } 229 229 -
kernel/generic/src/main/kinit.c
rf288d85 rdff90fa7 250 250 CAP_IO_MANAGER | CAP_IRQ_REG); 251 251 252 if (!ipc_phone_0) 252 if (!ipc_phone_0) { 253 253 ipc_phone_0 = &programs[i].task->answerbox; 254 /* 255 * Hold the first task so that the 256 * ipc_phone_0 remains a valid pointer 257 * even if the first task exits for 258 * whatever reason. 259 */ 260 task_hold(programs[i].task); 261 } 254 262 } 255 263 -
kernel/generic/src/main/main.c
rf288d85 rdff90fa7 89 89 #include <lib/ra.h> 90 90 91 /* Ensure [u]int*_t types are of correct size. 92 * 93 * Probably, this is not the best place for such tests 94 * but this file is compiled on all architectures. 95 */ 96 #define CHECK_INT_TYPE_(signness, size) \ 97 STATIC_ASSERT_VERBOSE(sizeof(signness##size##_t) * 8 == size, \ 98 #signness #size "_t does not have " #size " bits"); 99 100 #define CHECK_INT_TYPE(size) \ 101 CHECK_INT_TYPE_(int, size); \ 102 CHECK_INT_TYPE_(uint, size) 103 104 CHECK_INT_TYPE(8); 105 CHECK_INT_TYPE(16); 106 CHECK_INT_TYPE(32); 107 CHECK_INT_TYPE(64); 108 91 109 /** Global configuration structure. */ 92 110 config_t config = { -
kernel/generic/src/mm/as.c
rf288d85 rdff90fa7 544 544 mem_backend_data_t *backend_data, uintptr_t *base, uintptr_t bound) 545 545 { 546 if ((*base != (uintptr_t) -1) && ((*base % PAGE_SIZE) != 0))546 if ((*base != (uintptr_t) -1) && !IS_ALIGNED(*base, PAGE_SIZE)) 547 547 return NULL; 548 548 … … 688 688 int as_area_resize(as_t *as, uintptr_t address, size_t size, unsigned int flags) 689 689 { 690 if (!IS_ALIGNED(address, PAGE_SIZE)) 691 return EINVAL; 692 690 693 mutex_lock(&as->lock); 691 694 … … 1350 1353 * Interrupts are assumed disabled. 1351 1354 * 1352 * @param page Faulting page.1353 * @param access Access mode that caused the page fault (i.e.1354 * read/write/exec).1355 * @param istate Pointer to the interrupted state.1355 * @param address Faulting address. 1356 * @param access Access mode that caused the page fault (i.e. 1357 * read/write/exec). 1358 * @param istate Pointer to the interrupted state. 1356 1359 * 1357 1360 * @return AS_PF_FAULT on page fault. … … 1361 1364 * 1362 1365 */ 1363 int as_page_fault(uintptr_t page, pf_access_t access, istate_t *istate) 1364 { 1366 int as_page_fault(uintptr_t address, pf_access_t access, istate_t *istate) 1367 { 1368 uintptr_t page = ALIGN_DOWN(address, PAGE_SIZE); 1365 1369 int rc = AS_PF_FAULT; 1366 1370 … … 1452 1456 task_kill_self(true); 1453 1457 } else { 1454 fault_if_from_uspace(istate, "Page fault: %p.", (void *) page);1455 panic_memtrap(istate, access, page, NULL);1458 fault_if_from_uspace(istate, "Page fault: %p.", (void *) address); 1459 panic_memtrap(istate, access, address, NULL); 1456 1460 } 1457 1461 … … 1679 1683 { 1680 1684 ASSERT(mutex_locked(&area->lock)); 1681 ASSERT( page == ALIGN_DOWN(page, PAGE_SIZE));1685 ASSERT(IS_ALIGNED(page, PAGE_SIZE)); 1682 1686 ASSERT(count); 1683 1687 … … 1963 1967 { 1964 1968 ASSERT(mutex_locked(&area->lock)); 1965 ASSERT( page == ALIGN_DOWN(page, PAGE_SIZE));1969 ASSERT(IS_ALIGNED(page, PAGE_SIZE)); 1966 1970 ASSERT(count); 1967 1971 -
kernel/generic/src/mm/backend_anon.c
rf288d85 rdff90fa7 173 173 * 174 174 * @param area Pointer to the address space area. 175 * @param addr Faulting virtual address.175 * @param upage Faulting virtual page. 176 176 * @param access Access mode that caused the fault (i.e. read/write/exec). 177 177 * … … 179 179 * serviced). 180 180 */ 181 int anon_page_fault(as_area_t *area, uintptr_t addr, pf_access_t access) 182 { 183 uintptr_t upage = ALIGN_DOWN(addr, PAGE_SIZE); 181 int anon_page_fault(as_area_t *area, uintptr_t upage, pf_access_t access) 182 { 184 183 uintptr_t kpage; 185 184 uintptr_t frame; … … 187 186 ASSERT(page_table_locked(AS)); 188 187 ASSERT(mutex_locked(&area->lock)); 188 ASSERT(IS_ALIGNED(upage, PAGE_SIZE)); 189 189 190 190 if (!as_area_check_access(area, access)) -
kernel/generic/src/mm/backend_elf.c
rf288d85 rdff90fa7 235 235 * 236 236 * @param area Pointer to the address space area. 237 * @param addr Faulting virtual address.237 * @param upage Faulting virtual page. 238 238 * @param access Access mode that caused the fault (i.e. 239 239 * read/write/exec). … … 242 242 * on success (i.e. serviced). 243 243 */ 244 int elf_page_fault(as_area_t *area, uintptr_t addr, pf_access_t access)244 int elf_page_fault(as_area_t *area, uintptr_t upage, pf_access_t access) 245 245 { 246 246 elf_header_t *elf = area->backend_data.elf; … … 250 250 uintptr_t frame; 251 251 uintptr_t kpage; 252 uintptr_t upage;253 252 uintptr_t start_anon; 254 253 size_t i; … … 257 256 ASSERT(page_table_locked(AS)); 258 257 ASSERT(mutex_locked(&area->lock)); 258 ASSERT(IS_ALIGNED(upage, PAGE_SIZE)); 259 259 260 260 if (!as_area_check_access(area, access)) 261 261 return AS_PF_FAULT; 262 262 263 if ( addr< ALIGN_DOWN(entry->p_vaddr, PAGE_SIZE))263 if (upage < ALIGN_DOWN(entry->p_vaddr, PAGE_SIZE)) 264 264 return AS_PF_FAULT; 265 265 266 if ( addr>= entry->p_vaddr + entry->p_memsz)266 if (upage >= entry->p_vaddr + entry->p_memsz) 267 267 return AS_PF_FAULT; 268 268 269 i = ( addr- ALIGN_DOWN(entry->p_vaddr, PAGE_SIZE)) >> PAGE_WIDTH;269 i = (upage - ALIGN_DOWN(entry->p_vaddr, PAGE_SIZE)) >> PAGE_WIDTH; 270 270 base = (uintptr_t) 271 271 (((void *) elf) + ALIGN_DOWN(entry->p_offset, PAGE_SIZE)); 272 273 /* Virtual address of faulting page */274 upage = ALIGN_DOWN(addr, PAGE_SIZE);275 272 276 273 /* Virtual address of the end of initialized part of segment */ -
kernel/generic/src/mm/backend_phys.c
rf288d85 rdff90fa7 111 111 * 112 112 * @param area Pointer to the address space area. 113 * @param addr Faulting virtual address.113 * @param upage Faulting virtual page. 114 114 * @param access Access mode that caused the fault (i.e. read/write/exec). 115 115 * … … 117 117 * serviced). 118 118 */ 119 int phys_page_fault(as_area_t *area, uintptr_t addr, pf_access_t access)119 int phys_page_fault(as_area_t *area, uintptr_t upage, pf_access_t access) 120 120 { 121 121 uintptr_t base = area->backend_data.base; … … 123 123 ASSERT(page_table_locked(AS)); 124 124 ASSERT(mutex_locked(&area->lock)); 125 ASSERT(IS_ALIGNED(upage, PAGE_SIZE)); 125 126 126 127 if (!as_area_check_access(area, access)) 127 128 return AS_PF_FAULT; 128 129 129 ASSERT( addr- area->base < area->backend_data.frames * FRAME_SIZE);130 page_mapping_insert(AS, addr, base + (addr- area->base),130 ASSERT(upage - area->base < area->backend_data.frames * FRAME_SIZE); 131 page_mapping_insert(AS, upage, base + (upage - area->base), 131 132 as_area_get_flags(area)); 132 133 133 if (!used_space_insert(area, ALIGN_DOWN(addr, PAGE_SIZE), 1))134 if (!used_space_insert(area, upage, 1)) 134 135 panic("Cannot insert used space."); 135 136 -
kernel/generic/src/mm/page.c
rf288d85 rdff90fa7 104 104 ASSERT(page_mapping_operations->mapping_insert); 105 105 106 page_mapping_operations->mapping_insert(as, page, frame, flags); 106 page_mapping_operations->mapping_insert(as, ALIGN_DOWN(page, PAGE_SIZE), 107 ALIGN_DOWN(frame, FRAME_SIZE), flags); 107 108 108 109 /* Repel prefetched accesses to the old mapping. */ … … 127 128 ASSERT(page_mapping_operations->mapping_remove); 128 129 129 page_mapping_operations->mapping_remove(as, page); 130 page_mapping_operations->mapping_remove(as, 131 ALIGN_DOWN(page, PAGE_SIZE)); 130 132 131 133 /* Repel prefetched accesses to the old mapping. */ … … 150 152 ASSERT(page_mapping_operations->mapping_find); 151 153 152 return page_mapping_operations->mapping_find(as, page, nolock); 154 return page_mapping_operations->mapping_find(as, 155 ALIGN_DOWN(page, PAGE_SIZE), nolock); 153 156 } 154 157 -
kernel/generic/src/proc/task.c
rf288d85 rdff90fa7 125 125 { 126 126 size_t tasks_left; 127 128 if (ipc_phone_0) { 129 task_t *task_0 = ipc_phone_0->task; 130 ipc_phone_0 = NULL; 131 /* 132 * The first task is held by kinit(), we need to release it or 133 * it will never finish cleanup. 134 */ 135 task_release(task_0); 136 } 127 137 128 138 /* Repeat until there are any tasks except TASK */ -
kernel/generic/src/sysinfo/sysinfo.c
rf288d85 rdff90fa7 753 753 sysinfo_return_t ret; 754 754 ret.tag = SYSINFO_VAL_UNDEFINED; 755 ret.data.data = NULL; 756 ret.data.size = 0; 755 757 756 758 if (size > SYSINFO_MAX_PATH)
Note:
See TracChangeset
for help on using the changeset viewer.
