diff --git a/tasks/libl4/include/l4lib/utcb.h b/tasks/libl4/include/l4lib/utcb.h index f6b5c6d..ece82ab 100644 --- a/tasks/libl4/include/l4lib/utcb.h +++ b/tasks/libl4/include/l4lib/utcb.h @@ -7,4 +7,6 @@ #include #include +int utcb_init(void); + #endif /* __UTCB_H__ */ diff --git a/tasks/libl4/src/init.c b/tasks/libl4/src/init.c index fac5c10..9aca7d0 100644 --- a/tasks/libl4/src/init.c +++ b/tasks/libl4/src/init.c @@ -75,7 +75,8 @@ static void *l4_utcb_page(void) /* * Initialises a non-pager task's shared memory utcb page - * using posix semantics. + * using posix semantics. Used during task initialisation + * and by child tasks after a fork. */ int utcb_init(void) { diff --git a/tasks/libposix/fork.c b/tasks/libposix/fork.c index 8fbc255..b532544 100644 --- a/tasks/libposix/fork.c +++ b/tasks/libposix/fork.c @@ -39,8 +39,11 @@ int fork(void) errno = -ret; return -1; } - /* else return value */ - return ret; + /* If we're a child, we need to initialise the utcb page */ + if (ret == 0) + utcb_init(); + + return ret; }