Rev 624 | Rev 788 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 624 | Rev 703 | ||
|---|---|---|---|
| Line 26... | Line 26... | ||
| 26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | */ |
27 | */ |
| 28 | 28 | ||
| 29 | #include <proc/thread.h> |
29 | #include <proc/thread.h> |
| 30 | #include <proc/task.h> |
30 | #include <proc/task.h> |
| 31 | #include <mm/vm.h> |
31 | #include <mm/as.h> |
| 32 | #include <mm/heap.h> |
32 | #include <mm/heap.h> |
| 33 | 33 | ||
| 34 | #include <synch/spinlock.h> |
34 | #include <synch/spinlock.h> |
| 35 | #include <arch.h> |
35 | #include <arch.h> |
| 36 | #include <panic.h> |
36 | #include <panic.h> |
| Line 52... | Line 52... | ||
| 52 | 52 | ||
| 53 | /** Create new task |
53 | /** Create new task |
| 54 | * |
54 | * |
| 55 | * Create new task with no threads. |
55 | * Create new task with no threads. |
| 56 | * |
56 | * |
| 57 | * @param m Task's virtual memory structure. |
57 | * @param as Task's address space. |
| 58 | * |
58 | * |
| 59 | * @return New task's structure on success, NULL on failure. |
59 | * @return New task's structure on success, NULL on failure. |
| 60 | * |
60 | * |
| 61 | */ |
61 | */ |
| 62 | task_t *task_create(vm_t *m) |
62 | task_t *task_create(as_t *as) |
| 63 | { |
63 | { |
| 64 | ipl_t ipl; |
64 | ipl_t ipl; |
| 65 | task_t *ta; |
65 | task_t *ta; |
| 66 | 66 | ||
| 67 | ta = (task_t *) malloc(sizeof(task_t)); |
67 | ta = (task_t *) malloc(sizeof(task_t)); |
| 68 | if (ta) { |
68 | if (ta) { |
| 69 | spinlock_initialize(&ta->lock, "task_ta_lock"); |
69 | spinlock_initialize(&ta->lock, "task_ta_lock"); |
| 70 | list_initialize(&ta->th_head); |
70 | list_initialize(&ta->th_head); |
| 71 | list_initialize(&ta->tasks_link); |
71 | list_initialize(&ta->tasks_link); |
| 72 | ta->vm = m; |
72 | ta->as = as; |
| 73 | 73 | ||
| 74 | ipl = interrupts_disable(); |
74 | ipl = interrupts_disable(); |
| 75 | spinlock_lock(&tasks_lock); |
75 | spinlock_lock(&tasks_lock); |
| 76 | list_append(&ta->tasks_link, &tasks_head); |
76 | list_append(&ta->tasks_link, &tasks_head); |
| 77 | spinlock_unlock(&tasks_lock); |
77 | spinlock_unlock(&tasks_lock); |