Merge pull request #925 from mmichal10/env-refactor

Env refactor
This commit is contained in:
Robert Baldyga 2021-08-20 10:20:17 +02:00 committed by GitHub
commit a413e676e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -135,14 +135,14 @@ static inline void env_mutex_destroy(env_mutex *mutex)
typedef struct { typedef struct {
struct mutex mutex; struct mutex mutex;
atomic_t count; uint32_t count;
struct task_struct *holder; struct task_struct *holder;
} env_rmutex; } env_rmutex;
static inline int env_rmutex_init(env_rmutex *rmutex) static inline int env_rmutex_init(env_rmutex *rmutex)
{ {
mutex_init(&rmutex->mutex); mutex_init(&rmutex->mutex);
atomic_set(&rmutex->count, 0); rmutex->count = 0;
rmutex->holder = NULL; rmutex->holder = NULL;
return 0; return 0;
} }
@ -150,20 +150,20 @@ static inline int env_rmutex_init(env_rmutex *rmutex)
static inline void env_rmutex_lock(env_rmutex *rmutex) static inline void env_rmutex_lock(env_rmutex *rmutex)
{ {
if (current == rmutex->holder) { if (current == rmutex->holder) {
atomic_inc(&rmutex->count); rmutex->count++;
return; return;
} }
mutex_lock(&rmutex->mutex); mutex_lock(&rmutex->mutex);
rmutex->holder = current; rmutex->holder = current;
atomic_inc(&rmutex->count); rmutex->count++;
} }
static inline int env_rmutex_lock_interruptible(env_rmutex *rmutex) static inline int env_rmutex_lock_interruptible(env_rmutex *rmutex)
{ {
int result = 0; int result = 0;
if (current == rmutex->holder) { if (current == rmutex->holder) {
atomic_inc(&rmutex->count); rmutex->count++;
return 0; return 0;
} }
@ -174,7 +174,7 @@ static inline int env_rmutex_lock_interruptible(env_rmutex *rmutex)
} }
rmutex->holder = current; rmutex->holder = current;
atomic_inc(&rmutex->count); rmutex->count++;
return 0; return 0;
} }
@ -182,7 +182,7 @@ static inline int env_rmutex_lock_interruptible(env_rmutex *rmutex)
static inline int env_rmutex_trylock(env_rmutex *rmutex) static inline int env_rmutex_trylock(env_rmutex *rmutex)
{ {
if (current == rmutex->holder) { if (current == rmutex->holder) {
atomic_inc(&rmutex->count); rmutex->count++;
return 0; return 0;
} }
@ -192,7 +192,7 @@ static inline int env_rmutex_trylock(env_rmutex *rmutex)
} }
rmutex->holder = current; rmutex->holder = current;
atomic_inc(&rmutex->count); rmutex->count++;
return 0; return 0;
} }
@ -201,7 +201,7 @@ static inline void env_rmutex_unlock(env_rmutex *rmutex)
{ {
BUG_ON(current != rmutex->holder); BUG_ON(current != rmutex->holder);
if (atomic_dec_return(&rmutex->count)) { if (--rmutex->count) {
return; return;
} }
@ -220,66 +220,47 @@ static inline void env_rmutex_destroy(env_rmutex *rmutex)
/* *** RW SEMAPHORE *** */ /* *** RW SEMAPHORE *** */
typedef struct typedef struct rw_semaphore env_rwsem;
{
struct rw_semaphore sem;
wait_queue_head_t wq;
} env_rwsem;
static inline int env_rwsem_init(env_rwsem *s) static inline int env_rwsem_init(env_rwsem *s)
{ {
init_rwsem(&s->sem); init_rwsem(s);
init_waitqueue_head(&s->wq);
return 0; return 0;
} }
static inline void env_rwsem_up_read(env_rwsem *s) static inline void env_rwsem_up_read(env_rwsem *s)
{ {
up_read(&s->sem); up_read(s);
wake_up_all(&s->wq);
} }
static inline void env_rwsem_down_read(env_rwsem *s) static inline void env_rwsem_down_read(env_rwsem *s)
{ {
down_read(&s->sem); down_read(s);
}
static inline int env_rwsem_down_read_interruptible(env_rwsem *s)
{
return wait_event_interruptible(s->wq,
down_read_trylock(&s->sem)) ? -OCF_ERR_INTR : 0;
} }
static inline int env_rwsem_down_read_trylock(env_rwsem *s) static inline int env_rwsem_down_read_trylock(env_rwsem *s)
{ {
return down_read_trylock(&s->sem) ? 0 : -OCF_ERR_NO_LOCK; return down_read_trylock(s) ? 0 : -OCF_ERR_NO_LOCK;
} }
static inline void env_rwsem_up_write(env_rwsem *s) static inline void env_rwsem_up_write(env_rwsem *s)
{ {
up_write(&s->sem); up_write(s);
wake_up_all(&s->wq);
} }
static inline void env_rwsem_down_write(env_rwsem *s) static inline void env_rwsem_down_write(env_rwsem *s)
{ {
down_write(&s->sem); down_write(s);
}
static inline int env_rwsem_down_write_interruptible(env_rwsem *s)
{
return wait_event_interruptible(s->wq,
down_write_trylock(&s->sem)) ? -OCF_ERR_INTR : 0;
} }
static inline int env_rwsem_down_write_trylock(env_rwsem *s) static inline int env_rwsem_down_write_trylock(env_rwsem *s)
{ {
return down_write_trylock(&s->sem) ? 0 : -OCF_ERR_NO_LOCK; return down_write_trylock(s) ? 0 : -OCF_ERR_NO_LOCK;
} }
static inline int env_rwsem_is_locked(env_rwsem *s) static inline int env_rwsem_is_locked(env_rwsem *s)
{ {
return rwsem_is_locked(&s->sem); return rwsem_is_locked(s);
} }
static inline int env_rwsem_destroy(env_rwsem *s) static inline int env_rwsem_destroy(env_rwsem *s)