X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/6d2010ae8f7a6078e10b361c6962983bab233e0f..15129b1c8dbb3650c63b70adb1cad9af601c6c17:/osfmk/kern/stack.c?ds=inline diff --git a/osfmk/kern/stack.c b/osfmk/kern/stack.c index 6b5ea8302..805830d54 100644 --- a/osfmk/kern/stack.c +++ b/osfmk/kern/stack.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -85,7 +86,8 @@ STACK_ZINFO_PALLOC(thread_t thread) task_t task; zinfo_usage_t zinfo; - thread->tkm_private.alloc += kernel_stack_size; + ledger_credit(thread->t_ledger, task_ledgers.tkm_private, kernel_stack_size); + if (stack_fake_zone_index != -1 && (task = thread->task) != NULL && (zinfo = task->tkm_zinfo) != NULL) OSAddAtomic64(kernel_stack_size, @@ -98,7 +100,8 @@ STACK_ZINFO_PFREE(thread_t thread) task_t task; zinfo_usage_t zinfo; - thread->tkm_private.free += kernel_stack_size; + ledger_debit(thread->t_ledger, task_ledgers.tkm_private, kernel_stack_size); + if (stack_fake_zone_index != -1 && (task = thread->task) != NULL && (zinfo = task->tkm_zinfo) != NULL) OSAddAtomic64(kernel_stack_size, @@ -108,8 +111,9 @@ STACK_ZINFO_PFREE(thread_t thread) static inline void STACK_ZINFO_HANDOFF(thread_t from, thread_t to) { - from->tkm_private.free += kernel_stack_size; - to->tkm_private.alloc += kernel_stack_size; + ledger_debit(from->t_ledger, task_ledgers.tkm_private, kernel_stack_size); + ledger_credit(to->t_ledger, task_ledgers.tkm_private, kernel_stack_size); + if (stack_fake_zone_index != -1) { task_t task; zinfo_usage_t zinfo; @@ -213,7 +217,7 @@ stack_alloc_internal(void) if (kernel_memory_allocate(kernel_map, &stack, kernel_stack_size + (2*PAGE_SIZE), stack_addr_mask, - KMA_KOBJECT | guard_flags) + KMA_KSTACK | KMA_KOBJECT | guard_flags) != KERN_SUCCESS) panic("stack_alloc: kernel_memory_allocate"); @@ -382,7 +386,9 @@ stack_collect(void) * back in stack_alloc(). */ - stack = (vm_offset_t)vm_map_trunc_page(stack); + stack = (vm_offset_t)vm_map_trunc_page( + stack, + VM_MAP_PAGE_MASK(kernel_map)); stack -= PAGE_SIZE; if (vm_map_remove( kernel_map, @@ -547,9 +553,9 @@ processor_set_stack_usage( /* OK, have memory and list is locked */ thread_list = (thread_t *) addr; - for (i = 0, thread = (thread_t) queue_first(&threads); + for (i = 0, thread = (thread_t)(void *) queue_first(&threads); !queue_end(&threads, (queue_entry_t) thread); - thread = (thread_t) queue_next(&thread->threads)) { + thread = (thread_t)(void *) queue_next(&thread->threads)) { thread_reference_internal(thread); thread_list[i++] = thread; }