Mutex test progress

- Mutex test added. Forked tasks demonstrate produce/consumer using a
  shared mmap'ed page.
- Added l4lib assembler syscall
- Added forgotten SWI to mutex control offset in syscall page.
- Added mutex head initialization
- Contended child successfully sleeps in a waitqueue.

Issues:
- Somehow the child's produced page buffer is altered at about [4020] offset.
  Parent fails to validate buffer therefore.
- Need to add syncing to test so that parent does not unlock and lock again
  before child has a chance to lock buffer and produce.
This commit is contained in:
Bahadir Balban
2009-05-30 16:46:30 +03:00
parent b11d4c4607
commit ce79aa2b73
11 changed files with 199 additions and 10 deletions

View File

@@ -24,23 +24,29 @@ struct mutex_queue {
struct mutex_queue_head {
struct list_head list;
/*
* Lock for mutex_queue create/deletion and also list add/removal.
* Both operations are done jointly so a single lock is enough.
*/
struct mutex mutex_control_mutex;
int count;
} mutex_queue_head;
/*
* Lock for mutex_queue create/deletion and also list add/removal.
* Both operations are done jointly so a single lock is enough.
*/
struct mutex mutex_control_mutex;
void init_mutex_queue_head(void)
{
memset(&mutex_queue_head, 0, sizeof (mutex_queue_head));
INIT_LIST_HEAD(&mutex_queue_head.list);
mutex_init(&mutex_queue_head.mutex_control_mutex);
}
void mutex_queue_head_lock()
{
mutex_lock(&mutex_control_mutex);
mutex_lock(&mutex_queue_head.mutex_control_mutex);
}
void mutex_queue_head_unlock()
{
mutex_unlock(&mutex_control_mutex);
mutex_unlock(&mutex_queue_head.mutex_control_mutex);
}