summaryrefslogtreecommitdiff
path: root/kernel/task.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-12-04 23:30:15 +0100
committerMichal Idziorek <m.i@gmx.at>2014-12-04 23:30:15 +0100
commit41c3e0bc640f570831bd6c18fbfb8c7cec23a43d (patch)
tree487ff1379ad74fa5f610c5b18bcb573faa3f44ba /kernel/task.c
parent53a61ec0f257930c2c5eb2ba20cac53d7862c92b (diff)
struggling with gcc -O , and other stuff
Diffstat (limited to 'kernel/task.c')
-rw-r--r--kernel/task.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/kernel/task.c b/kernel/task.c
index 2d52017..b01975d 100644
--- a/kernel/task.c
+++ b/kernel/task.c
@@ -18,21 +18,21 @@
#define MAX_TASKS 10
-static volatile int current_task=-1;
+static volatile int volatile current_task=-1;
static volatile struct task_list_struct
{
- int parent;
- bool active;
- uint32_t esp; // stack pointer of the task;
- pdirectory *vmem; // number of virtual memory table to switch to
- bool waiting;
- bool skipwait;
- uint32_t brk;
+ volatile int parent;
+ volatile bool active;
+ volatile uint32_t esp; // stack pointer of the task;
+ volatile pdirectory *vmem; // number of virtual memory table to switch to
+ volatile bool waiting;
+ volatile bool skipwait;
+ volatile uint32_t brk;
}volatile task_list[MAX_TASKS];
-int add_task(uint32_t esp, uint32_t vmem)
+volatile int add_task(uint32_t esp, uint32_t vmem)
{
for(int i=0;i<MAX_TASKS;i++)
@@ -55,7 +55,7 @@ int add_task(uint32_t esp, uint32_t vmem)
panic(FOOLOS_MODULE_NAME,"out of task slots!");
}
-uint32_t my_scheduler(uint32_t oldesp)
+volatile uint32_t my_scheduler(uint32_t oldesp)
{
task_list[current_task].esp=oldesp;
@@ -65,8 +65,8 @@ uint32_t my_scheduler(uint32_t oldesp)
if(task_list[pid].active && !task_list[pid].waiting)
{
- // if(current_task!=pid)
- // log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"switch from %d to %d", current_task, pid);
+// if(current_task!=pid)
+// log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"switch from %d to %d", current_task, pid);
current_task=pid;
@@ -80,7 +80,7 @@ uint32_t my_scheduler(uint32_t oldesp)
}
// this gets called by our clock interrupt regularly!
-uint32_t task_switch_next(uint32_t oldesp)
+volatile uint32_t task_switch_next(uint32_t oldesp)
{
timer_tick();
@@ -94,7 +94,7 @@ uint32_t task_switch_next(uint32_t oldesp)
//TODO: free vmem too!
//TODO: notify waiting parent when child finished;
-uint32_t task_exit(uint32_t oldesp)
+volatile uint32_t task_exit(uint32_t oldesp)
{
task_list[current_task].active=false;
int parent_pid=task_list[current_task].parent;
@@ -123,7 +123,7 @@ uint32_t task_exit(uint32_t oldesp)
}
-uint32_t task_wait(uint32_t oldesp)
+volatile uint32_t task_wait(uint32_t oldesp)
{
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[%d] wait", current_task);
if(task_list[current_task].skipwait)
@@ -137,7 +137,7 @@ uint32_t task_wait(uint32_t oldesp)
return my_scheduler(oldesp);
}
-uint32_t task_fork(uint32_t oldesp)
+volatile uint32_t task_fork(uint32_t oldesp)
{
int pid=add_task(oldesp,vmem_new_space_dir(task_list[current_task].vmem));
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[%d] forked -> [%d] (free blocks remaining: %d )", current_task, pid,mem_get_free_blocks_count());
@@ -145,7 +145,7 @@ uint32_t task_fork(uint32_t oldesp)
}
// init task (root of all other tasks / processes) //
-void task_init(pdirectory *dir)
+volatile void task_init(pdirectory *dir)
{
// this is our main task on slot 0
task_list[0].parent=0;
@@ -158,16 +158,16 @@ void task_init(pdirectory *dir)
}
-int task_get_current_pid()
+volatile int task_get_current_pid()
{
return current_task;
}
-uint32_t task_get_brk()
+volatile uint32_t task_get_brk()
{
return task_list[current_task].brk;
}
-void task_set_brk(uint32_t brk)
+volatile void task_set_brk(uint32_t brk)
{
task_list[current_task].brk=brk;
}