#include <sys/atomic.h>
#include <sys/thread.h>
+#include <sys/mutex.h>
#include <linux/slab.h>
#include "splat-internal.h"
typedef struct atomic_priv {
unsigned long ap_magic;
struct file *ap_file;
- struct mutex ap_lock;
+ kmutex_t ap_lock;
wait_queue_head_t ap_waitq;
volatile uint64_t ap_atomic;
volatile uint64_t ap_atomic_exited;
ap = (atomic_priv_t *)priv;
ASSERT(ap->ap_magic == SPLAT_ATOMIC_TEST_MAGIC);
- mutex_lock(&ap->ap_lock);
+ mutex_enter(&ap->ap_lock);
op = ap->ap_op;
wake_up(&ap->ap_waitq);
- mutex_unlock(&ap->ap_lock);
+ mutex_exit(&ap->ap_lock);
splat_vprint(ap->ap_file, SPLAT_ATOMIC_TEST1_NAME,
"Thread %d successfully started: %lu/%lu\n", op,
ap.ap_magic = SPLAT_ATOMIC_TEST_MAGIC;
ap.ap_file = file;
- mutex_init(&ap.ap_lock);
+ mutex_init(&ap.ap_lock, SPLAT_ATOMIC_TEST1_NAME, NULL, NULL);
init_waitqueue_head(&ap.ap_waitq);
ap.ap_atomic = SPLAT_ATOMIC_INIT_VALUE;
ap.ap_atomic_exited = 0;
for (i = 0; i < SPLAT_ATOMIC_COUNT_64; i++) {
- mutex_lock(&ap.ap_lock);
+ mutex_enter(&ap.ap_lock);
ap.ap_op = i;
thr = (kthread_t *)thread_create(NULL, 0, splat_atomic_work,
minclsyspri);
if (thr == NULL) {
rc = -ESRCH;
- mutex_unlock(&ap.ap_lock);
+ mutex_exit(&ap.ap_lock);
break;
}
/* Prepare to wait, the new thread will wake us once it
* has made a copy of the unique private passed data */
prepare_to_wait(&ap.ap_waitq, &wait, TASK_UNINTERRUPTIBLE);
- mutex_unlock(&ap.ap_lock);
+ mutex_exit(&ap.ap_lock);
schedule();
}
"Success initial and final values match, %lu == %lu\n",
(long unsigned)ap.ap_atomic, SPLAT_ATOMIC_INIT_VALUE);
+ mutex_destroy(&ap.ap_lock);
+
return 0;
}
#include <linux/uaccess.h>
#include <sys/types.h>
#include <sys/debug.h>
+#include <sys/mutex.h>
#include "splat-internal.h"
static spl_class *splat_class;
if (info == NULL)
return -ENOMEM;
- mutex_init(&info->info_lock);
+ mutex_init(&info->info_lock, SPLAT_NAME, MUTEX_DEFAULT, NULL);
info->info_size = SPLAT_INFO_BUFFER_SIZE;
info->info_buffer = (char *)vmalloc(SPLAT_INFO_BUFFER_SIZE);
if (info->info_buffer == NULL) {
ASSERT(info);
ASSERT(info->info_buffer);
- mutex_lock(&info->info_lock);
+ mutex_enter(&info->info_lock);
memset(info->info_buffer, 0, info->info_size);
info->info_head = info->info_buffer;
- mutex_unlock(&info->info_lock);
+ mutex_exit(&info->info_lock);
return 0;
}
ASSERT(info);
ASSERT(info->info_buffer);
- mutex_lock(&info->info_lock);
+ mutex_enter(&info->info_lock);
if (kcfg->cfg_arg1 > 0) {
size = kcfg->cfg_arg1;
if (copy_to_user((struct splat_cfg_t __user *)arg, kcfg, sizeof(*kcfg)))
rc = -EFAULT;
out:
- mutex_unlock(&info->info_lock);
+ mutex_exit(&info->info_lock);
return rc;
}
ASSERT(info);
ASSERT(info->info_buffer);
- mutex_lock(&info->info_lock);
+ mutex_enter(&info->info_lock);
/* Write beyond EOF */
if (*ppos >= info->info_size) {
*ppos += count;
rc = count;
out:
- mutex_unlock(&info->info_lock);
+ mutex_exit(&info->info_lock);
return rc;
}
ASSERT(info);
ASSERT(info->info_buffer);
- mutex_lock(&info->info_lock);
+ mutex_enter(&info->info_lock);
/* Read beyond EOF */
if (*ppos >= info->info_size)
*ppos += count;
rc = count;
out:
- mutex_unlock(&info->info_lock);
+ mutex_exit(&info->info_lock);
return rc;
}
ASSERT(info);
ASSERT(info->info_buffer);
- mutex_lock(&info->info_lock);
+ mutex_enter(&info->info_lock);
switch (origin) {
case 0: /* SEEK_SET - No-op just do it */
rc = offset;
}
- mutex_unlock(&info->info_lock);
+ mutex_exit(&info->info_lock);
return rc;
}
#include "spl-device.h"
#include "spl-debug.h"
#include "splat-ctl.h"
+#include <sys/mutex.h>
#define SPLAT_SUBSYSTEM_INIT(type) \
({ splat_subsystem_t *_sub_; \
#define SPLAT_INFO_BUFFER_REDZONE 256
typedef struct splat_info {
- struct mutex info_lock;
+ kmutex_t info_lock;
int info_size;
char *info_buffer;
char *info_head; /* Internal kernel use only */
ASSERT(_info_); \
ASSERT(_info_->info_buffer); \
\
- mutex_lock(&_info_->info_lock); \
+ mutex_enter(&_info_->info_lock); \
\
/* Don't allow the kernel to start a write in the red zone */ \
if ((int)(_info_->info_head - _info_->info_buffer) > \
_info_->info_head += _rc_; \
} \
\
- mutex_unlock(&_info_->info_lock); \
+ mutex_exit(&_info_->info_lock); \
_rc_; \
})