1
0
Fork 0
mirror of https://github.com/hermitcore/libhermit.git synced 2025-03-09 00:00:03 +01:00

use different stack sizes for idle and application tasks

This commit is contained in:
Stefan Lankes 2016-01-29 15:45:35 +01:00
parent fa1ad2c0da
commit 26e2d6caa6
3 changed files with 13 additions and 8 deletions

View file

@ -112,7 +112,12 @@ static int thread_entry(void* arg, size_t ep)
size_t* get_current_stack(void)
{
task_t* curr_task = per_core(current_task);
size_t stptr = (size_t) curr_task->stack + KERNEL_STACK_SIZE - 0x10;
size_t stptr = (size_t) curr_task->stack;
if (curr_task->status == TASK_IDLE)
stptr += KERNEL_STACK_SIZE - 0x10;
else
stptr += DEFAULT_STACK_SIZE - 0x10;
set_per_core(kernel_stack, stptr);
tss_set_rsp0(stptr);
@ -138,15 +143,15 @@ int create_default_frame(task_t* task, entry_point_t ep, void* arg, uint32_t cor
if (BUILTIN_EXPECT(!task->stack, 0))
return -EINVAL;
kprintf("Task %d use use the memory region [%p - %p] as kernel stack\n", task->id, task->stack, (char*) task->stack + KERNEL_STACK_SIZE - 1);
kprintf("Task %d use use the memory region [%p - %p] as kernel stack\n", task->id, task->stack, (char*) task->stack + DEFAULT_STACK_SIZE - 1);
memset(task->stack, 0xCD, KERNEL_STACK_SIZE);
memset(task->stack, 0xCD, DEFAULT_STACK_SIZE);
/* The difference between setting up a task for SW-task-switching
* and not for HW-task-switching is setting up a stack and not a TSS.
* This is the stack which will be activated and popped off for iret later.
*/
stack = (size_t*) (((size_t) task->stack + KERNEL_STACK_SIZE - 0x10) & ~0xF); // => stack is 16byte aligned
stack = (size_t*) (((size_t) task->stack + DEFAULT_STACK_SIZE - 0x10) & ~0xF); // => stack is 16byte aligned
/* Only marker for debugging purposes, ... */
*stack-- = 0xDEADBEEF;

View file

@ -40,8 +40,8 @@ extern "C" {
#define CLOCK_TICK_RATE 1193182 /* 8254 chip's internal oscillator frequency */
#define VIDEO_MEM_ADDR 0xB8000 /* the video memory address */
#define CACHE_LINE 64
#define KERNEL_STACK_SIZE (8<<10) /* 8 KiB */
#define DEFAULT_STACK_SIZE (64*1024) /* 16 KiB */
#define KERNEL_STACK_SIZE (8*1024)
#define DEFAULT_STACK_SIZE (128*1024)
#define KMSG_SIZE (4*1024)
#define INT_SYSCALL 0x80
#define MAILBOX_SIZE 32

View file

@ -342,7 +342,7 @@ int clone_task(tid_t* id, entry_point_t ep, void* arg, uint8_t prio)
curr_task = per_core(current_task);
stack = kmalloc(KERNEL_STACK_SIZE);
stack = kmalloc(DEFAULT_STACK_SIZE);
if (BUILTIN_EXPECT(!stack, 0))
return -ENOMEM;
@ -432,7 +432,7 @@ int create_task(tid_t* id, entry_point_t ep, void* arg, uint8_t prio, uint32_t c
curr_task = per_core(current_task);
stack = kmalloc(KERNEL_STACK_SIZE);
stack = kmalloc(DEFAULT_STACK_SIZE);
if (BUILTIN_EXPECT(!stack, 0))
return -ENOMEM;