*
* - spin_lock_init(x)
* - spin_lock(x)
- * - spin_lock_nested(x, subclass)
* - spin_unlock(x)
* - spin_trylock(x)
*
void spin_lock_init(spinlock_t *lock);
void spin_lock(spinlock_t *lock);
-void spin_lock_nested(spinlock_t *lock, unsigned int subclass);
void spin_unlock(spinlock_t *lock);
int spin_trylock(spinlock_t *lock);
void spin_lock_bh_init(spinlock_t *lock);
unsigned int done;
cfs_waitq_t wait;
};
-
+typedef int (cfs_wait_handler) (int timeout);
+void set_completion_wait_handler(cfs_wait_handler *handler);
void init_completion(struct completion *c);
void complete(struct completion *c);
void wait_for_completion(struct completion *c);
struct semaphore m_sem;
};
+#define DEFINE_MUTEX(m) struct mutex m
+
static inline void mutex_init(struct mutex *mutex)
{
init_mutex(&mutex->m_sem);
/**
* Try-lock this mutex.
*
- * \retval 1 try-lock succeeded.
*
- * \retval 0 try-lock failed.
+ * \retval 0 try-lock succeeded (lock acquired).
+ * \retval errno indicates lock contention.
*/
-static inline int mutex_trylock(struct mutex *mutex)
+static inline int mutex_down_trylock(struct mutex *mutex)
{
- return 1;
+ return 0;
}
-static inline void mutex_lock_nested(struct mutex *mutex, unsigned int subclass)
+/**
+ * Try-lock this mutex.
+ *
+ * Note, return values are negation of what is expected from down_trylock() or
+ * pthread_mutex_trylock().
+ *
+ * \retval 1 try-lock succeeded (lock acquired).
+ * \retval 0 indicates lock contention.
+ */
+static inline int mutex_trylock(struct mutex *mutex)
{
- return mutex_lock(mutex);
+ return !mutex_down_trylock(mutex);
}
static inline void mutex_destroy(struct mutex *lock)
{
}
+/* This has to be a macro, so that can be undefined in kernels that do not
+ * support lockdep. */
+#define mutex_lock_nested(mutex, subclass) mutex_lock(mutex)
+#define spin_lock_nested(lock, subclass) spin_lock(lock)
+#define down_read_nested(lock, subclass) down_read(lock)
+#define down_write_nested(lock, subclass) down_write(lock)
+
/* !__KERNEL__ */
#endif