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

@@ -28,6 +28,7 @@ static inline void mutex_init(struct mutex *mutex)
INIT_LIST_HEAD(&mutex->wq.task_list);
}
int mutex_trylock(struct mutex *mutex);
void mutex_lock(struct mutex *mutex);
void mutex_unlock(struct mutex *mutex);

View File

@@ -20,7 +20,7 @@ static inline void spin_lock_init(struct spinlock *s)
*/
static inline void spin_lock(struct spinlock *s)
{
preempt_disable();
preempt_disable(); /* This must disable local preempt */
#if defined(CONFIG_SMP)
__spin_lock(&s->lock);
#endif