aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2022-10-22 14:38:52 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2022-10-22 14:38:52 +0300
commit22eeabc6c63e220d628417ea525c8838f3fae913 (patch)
tree6dde5f5bf5e671c11ed64cbcacf9245bfe900d2f /common
parentdd7c04a39bd88da8e381bb88078c41b049a6665c (diff)
downloadkmi-22eeabc6c63e220d628417ea525c8838f3fae913.tar.gz
kmi-22eeabc6c63e220d628417ea525c8838f3fae913.zip
initial high level fork imp
Diffstat (limited to 'common')
-rw-r--r--common/proc.c2
-rw-r--r--common/uapi/dispatch.c1
-rw-r--r--common/uapi/proc.c25
3 files changed, 12 insertions, 16 deletions
diff --git a/common/proc.c b/common/proc.c
index 946078b..270ec0c 100644
--- a/common/proc.c
+++ b/common/proc.c
@@ -42,4 +42,6 @@ stat_t init_proc(void *fdt)
/* allocate stacks after ELF file to make sure nothing of importance
* clashes */
return prepare_proc(t, get_init_base(fdt), 0);
+ /** \todo start one thread per core, with special handling for init in
+ * that each thread starts at the entry point of init? */
}
diff --git a/common/uapi/dispatch.c b/common/uapi/dispatch.c
index 91fba83..27cc001 100644
--- a/common/uapi/dispatch.c
+++ b/common/uapi/dispatch.c
@@ -44,7 +44,6 @@ static const sys_t syscall_table[] = {
[SYS_EXEC] = sys_exec,
[SYS_SPAWN] = sys_spawn,
[SYS_SWAP] = sys_swap,
- [SYS_ASSIGN] = sys_assign,
/* conf */
[SYS_CONF_SET] = sys_conf_set,
diff --git a/common/uapi/proc.c b/common/uapi/proc.c
index a60aa52..ea42a3a 100644
--- a/common/uapi/proc.c
+++ b/common/uapi/proc.c
@@ -24,7 +24,8 @@
*
* @return \ref OK and 0.
*/
-SYSCALL_DEFINE2(create)(sys_arg_t func, sys_arg_t arg){
+SYSCALL_DEFINE5(create)(sys_arg_t func,
+ sys_arg_t d0, sys_arg_t d1, sys_arg_t d2, sys_arg_t d3){
return SYS_RET1(OK);
}
@@ -44,7 +45,14 @@ SYSCALL_DEFINE2(create)(sys_arg_t func, sys_arg_t arg){
* @return \ref OK and 0.
*/
SYSCALL_DEFINE0(fork)(){
- return SYS_RET1(OK);
+ struct tcb *t = create_proc(cur_proc());
+ if (!t)
+ return SYS_RET1(ERR_OOMEM);
+
+ /* prepare args for when we eventually swap to the new proc */
+ set_args(t, SYS_RET2(OK, t->pid));
+
+ return SYS_RET2(OK, 0);
}
/**
@@ -135,16 +143,3 @@ SYSCALL_DEFINE1(swap)(sys_arg_t tid){
return get_args(t);
}
-
-/**
- * Assign syscall handler.
- *
- * \todo Implement.
- * @param tid Thread to assign to \p cpu.
- * @param cpu Cpu to run \p tid on.
- * @return \ref OK.
- */
-SYSCALL_DEFINE2(assign)(sys_arg_t tid, sys_arg_t cpu)
-{
- return SYS_RET1(OK);
-}