mirror of
https://github.com/drasko/codezero.git
synced 2026-02-27 01:03:14 +01:00
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:
@@ -75,6 +75,17 @@ static inline void irq_local_disable()
|
||||
/* This is filled on entry to irq handler, only if a process was interrupted.*/
|
||||
extern unsigned int preempted_psr;
|
||||
|
||||
#include <l4/generic/tcb.h>
|
||||
static inline int task_in_kernel(struct tcb *t)
|
||||
{
|
||||
return ((t->context.spsr & ARM_MODE_MASK) == ARM_MODE_SVC) ? 1 : 0;
|
||||
}
|
||||
|
||||
static inline int task_in_user(struct tcb *t)
|
||||
{
|
||||
return !task_in_kernel(t);
|
||||
}
|
||||
|
||||
static inline int in_kernel()
|
||||
{
|
||||
return (((preempted_psr & ARM_MODE_MASK) == ARM_MODE_SVC)) ? 1 : 0;
|
||||
|
||||
Reference in New Issue
Block a user