mirror of
https://github.com/drasko/codezero.git
synced 2026-06-29 03:54:18 +02:00
Changes since April
Clean up of build directories. Simplifications to capability model.
This commit is contained in:
60
conts/userlibs/libl4/include/l4lib/linux/api/mutex.h
Normal file
60
conts/userlibs/libl4/include/l4lib/linux/api/mutex.h
Normal file
@@ -0,0 +1,60 @@
|
||||
#ifndef __MUTEX_CONTROL_H__
|
||||
#define __MUTEX_CONTROL_H__
|
||||
|
||||
#if !defined(__LINUX_CONTAINER__)
|
||||
|
||||
/* Request ids for mutex_control syscall */
|
||||
|
||||
#if defined (__KERNEL__)
|
||||
#define MUTEX_CONTROL_LOCK L4_MUTEX_LOCK
|
||||
#define MUTEX_CONTROL_UNLOCK L4_MUTEX_UNLOCK
|
||||
|
||||
#define MUTEX_CONTROL_OPMASK L4_MUTEX_OPMASK
|
||||
|
||||
#define mutex_operation(x) ((x) & MUTEX_CONTROL_OPMASK)
|
||||
#define mutex_contenders(x) ((x) & ~MUTEX_CONTROL_OPMASK)
|
||||
|
||||
#include <l4lib/lib/wait.h>
|
||||
#include <l4lib/lib/list.h>
|
||||
#include <l4lib/lib/mutex.h>
|
||||
|
||||
/*
|
||||
* Contender threashold is the total number of contenders
|
||||
* who are expected to sleep on the mutex, and will be waited
|
||||
* for a wakeup.
|
||||
*/
|
||||
struct mutex_queue {
|
||||
int contenders;
|
||||
unsigned long physical;
|
||||
struct link list;
|
||||
struct waitqueue_head wqh_contenders;
|
||||
struct waitqueue_head wqh_holders;
|
||||
};
|
||||
|
||||
/*
|
||||
* Mutex queue head keeps the list of all userspace mutexes.
|
||||
*
|
||||
* Here, mutex_control_mutex is a single lock for:
|
||||
* (1) Mutex_queue create/deletion
|
||||
* (2) List add/removal.
|
||||
* (3) Wait synchronization:
|
||||
* - Both waitqueue spinlocks need to be acquired for
|
||||
* rendezvous inspection to occur atomically. Currently
|
||||
* it's not done since we rely on this mutex for that.
|
||||
*/
|
||||
struct mutex_queue_head {
|
||||
struct link list;
|
||||
struct mutex mutex_control_mutex;
|
||||
int count;
|
||||
};
|
||||
|
||||
void init_mutex_queue_head(struct mutex_queue_head *mqhead);
|
||||
|
||||
#endif
|
||||
|
||||
#define L4_MUTEX_OPMASK 0xF0000000
|
||||
#define L4_MUTEX_LOCK 0x10000000
|
||||
#define L4_MUTEX_UNLOCK 0x20000000
|
||||
|
||||
#endif /* __LINUX_CONTAINER__ */
|
||||
#endif /* __MUTEX_CONTROL_H__*/
|
||||
Reference in New Issue
Block a user