context_switch invoked by framework
[projects/modsched/linux.git] / framework / os / linux / os.c
1 /*
2  * os.c
3  *
4  * Map framework functionality to operating system
5  * depend functions.
6  *
7  *  Created on: 11.07.2013
8  *      Author: Daniel Roehrig, Christian Rene Sechting
9  */
10 #include <fw_task.h>
11 #include <fw_types.h>
12 #include <linux/kernel.h>
13 #include <linux/slab.h>
14 #include "sched.h"
15
16 extern struct fw_task *fw_idle_task;
17
18 //TODO Do this with linker magic (optimization)
19 void os_printf(const char* formatstring, ...)
20 {
21         va_list list;
22         va_start(list, formatstring);
23         vprintk(formatstring, list);
24         va_end(list);
25 }
26
27 void *os_malloc(fw_size_t size)
28 {
29         return kmalloc(size,GFP_KERNEL);
30 }
31
32 void os_free(void *ptr)
33 {
34         return;
35 }
36
37 void os_create_task(fw_task_t *task)
38 {
39         return;
40 }
41
42 //static inline void
43 //context_switch(struct rq *rq, struct task_struct *prev,
44 //             struct task_struct *next);
45 extern void context_switch(struct rq *rq, struct task_struct *prev, struct task_struct *next);
46 void os_dispatch(fw_task_t *task)
47 {
48         struct rq *rq;
49         int cpu;
50         struct task_struct *prev, *next;
51
52         cpu = smp_processor_id();
53         rq = cpu_rq(cpu);
54         prev = rq->curr;
55         next = (struct task_struct*)task->real_task;
56
57         next->se.exec_start = rq->clock_task;
58 //      clear_tsk_need_resched(prev);
59 //      rq->skip_clock_update = 0;
60         rq->nr_switches++;
61         rq->curr = next;
62         context_switch(rq,prev,next);
63 //      arch_local_irq_enable();
64 }
65
66 void os_dispatch_mp(fw_task_t *task, int cpu)
67 {
68         return;
69 }
70
71 void os_init_os(void)
72 {
73         struct task_struct* ptr = current;
74         fw_idle_task = register_task(ptr);
75         return;
76 }