aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/mem_regions.c7
-rw-r--r--common/proc.c6
2 files changed, 11 insertions, 2 deletions
diff --git a/common/mem_regions.c b/common/mem_regions.c
index e994b0e..bbd9a3b 100644
--- a/common/mem_regions.c
+++ b/common/mem_regions.c
@@ -291,8 +291,11 @@ static vm_t __partition_region(struct mem_region_root *r, struct mem_region *m,
* fs server */
vm_t alloc_region(struct mem_region_root *r, size_t size, size_t *actual_size)
{
- *actual_size = align_up(size, BASE_PAGE_SIZE);
- size_t pages = __page(*actual_size);
+ size_t asize = align_up(size, BASE_PAGE_SIZE);
+ if (actual_size)
+ *actual_size = asize;
+
+ size_t pages = __page(asize);
/* find best fitting, alignment etc. */
size_t align = 0;
diff --git a/common/proc.c b/common/proc.c
index e0b8c70..ea3ab5d 100644
--- a/common/proc.c
+++ b/common/proc.c
@@ -46,12 +46,18 @@ stat_t init_proc(void *fdt, struct vm_branch *b)
if (!t->proc_stack)
return ERR_ADDR;
+ t->proc_stack_top = t->proc_stack + __proc_stack_size;
+
t->call_stack = setup_call_stack(t, __call_stack_size);
if (!t->call_stack)
return ERR_ADDR;
+ t->call_stack_top = t->call_stack + __call_stack_size;
flush_tlb();
+ /* set current tcb */
+ use_tcb(t);
+
/* TODO: move fdt into process space */
return jump_to_userspace(t, 1, 0);
}