#define OFFSET_TASK_PRIVL 12
#define OFFSET_TASK_STATE 16
#define OFFSET_TASK_EBP0 20
+#define OFFSET_TASK_LOCK 24
#define CPU_SIZE (TSS_OFFSET + TSS_SIZE + 4)
#define OFFSET_CPU_CTASK (TSS_OFFSET + TSS_SIZE)
.global task_get_current
.global task_set_current
.global task_move_stack
+.global task_lock
+.global task_unlock
task_prepare:
/*
/* Stacks have been copied and stack pointers updated. We're done. */
4: ret
+
+task_lock:
+ addl $OFFSET_TASK_LOCK, 4(%esp)
+ call spinlock_lock
+ subl $OFFSET_TASK_LOCK, 4(%esp)
+ ret
+
+task_unlock:
+ addl $OFFSET_TASK_LOCK, 4(%esp)
+ call spinlock_unlock
+ subl $OFFSET_TASK_LOCK, 4(%esp)
+ ret
#ifndef __ASSEMBLY_SOURCE
#include <corax/types.h>
+#include <spinlock.h>
typedef struct stack_frame stack_frame_t;
u32_t t_privl;
u32_t t_state;
u32_t t_bp;
+ spinlock_t t_lock;
u32_t t_tslice;
u32_t t_rslice;
void task_set_current(task_t*);
void task_move_stack(void*, void*, u32_t);
+void task_lock(task_t*);
+int task_unlock(task_t*);
+
/*
* Definitions, types, and prototypes related to paging
*/