Towards finishing exchange_registers()

- Added mutex_trylock()
- Implemented most of exchange_registers()
- thread_control() now needs a lock for operations that can modify thread context.
- thread_start() does not initialise scheduler flags, now done in thread_create.

TODO:
- Fork/clone'ed threads should retain their context in tcb, not syscall stack.
- exchange_registers() calls in userspace need cleaning up.
This commit is contained in:
Bahadir Balban
2008-09-13 18:07:00 +03:00
parent 0b3ab05a98
commit 4fb5277123
23 changed files with 460 additions and 98 deletions

View File

@@ -144,6 +144,9 @@
#define EOWNERDEAD 130 /* Owner died */
#define ENOTRECOVERABLE 131 /* State not recoverable */
/* Codezero specific error codes */
#define EACTIVE 132 /* Task active */
#ifdef __KERNEL__
/* Should never be seen by user programs */

22
include/l4/api/exregs.h Normal file
View File

@@ -0,0 +1,22 @@
/*
* Exchange registers system call data.
*
* Copyright (C) 2008 Bahadir Balban
*/
#ifndef __EXREGS_H__
#define __EXREGS_H__
#include <l4/macros.h>
#include INC_GLUE(syscall.h)
#include INC_GLUE(context.h)
#include <l4/types.h>
/* Structure passed by userspace pagers for exchanging registers */
struct exregs_data {
exregs_context_t context;
u32 valid_vect;
};
#endif /* __EXREGS_H__ */

View File

@@ -1,16 +1,18 @@
#ifndef __THREAD_H__
#define __THREAD_H__
#define THREAD_FLAGS_MASK 0x00F0
/* Create new thread, copy given space */
#define THREAD_CREATE_COPYSPC 0x0010
#define THREAD_CREATE_MASK 0x00F0
/* Create new thread and new space */
#define THREAD_CREATE_NEWSPC 0x0020
#define THREAD_NEW_SPACE 0x0010
/* Create new thread, copy given space */
#define THREAD_COPY_SPACE 0x0020
/* Create new thread, use given space */
#define THREAD_CREATE_SAMESPC 0x0030
#define THREAD_SAME_SPACE 0x0030
#define THREAD_ACTION_MASK 0x000F