Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93ad7949 authored by Russell King's avatar Russell King Committed by Russell King
Browse files

[ARM] Oprofile: Convert semaphore to mutex



op_arm_sem is being used as a mutex, so convert it to use
real mutexes.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent c3d5395f
Loading
Loading
Loading
Loading
+10 −13
Original line number Diff line number Diff line
@@ -11,14 +11,14 @@
#include <linux/oprofile.h>
#include <linux/errno.h>
#include <linux/sysdev.h>
#include <asm/semaphore.h>
#include <linux/mutex.h>

#include "op_counter.h"
#include "op_arm_model.h"

static struct op_arm_model_spec *op_arm_model;
static int op_arm_enabled;
static struct semaphore op_arm_sem;
static DEFINE_MUTEX(op_arm_mutex);

struct op_counter_config counter_config[OP_MAX_COUNTER];

@@ -57,40 +57,40 @@ static int op_arm_start(void)
{
	int ret = -EBUSY;

	down(&op_arm_sem);
	mutex_lock(&op_arm_mutex);
	if (!op_arm_enabled) {
		ret = op_arm_model->start();
		op_arm_enabled = !ret;
	}
	up(&op_arm_sem);
	mutex_unlock(&op_arm_mutex);
	return ret;
}

static void op_arm_stop(void)
{
	down(&op_arm_sem);
	mutex_lock(&op_arm_mutex);
	if (op_arm_enabled)
		op_arm_model->stop();
	op_arm_enabled = 0;
	up(&op_arm_sem);
	mutex_unlock(&op_arm_mutex);
}

#ifdef CONFIG_PM
static int op_arm_suspend(struct sys_device *dev, pm_message_t state)
{
	down(&op_arm_sem);
	mutex_lock(&op_arm_mutex);
	if (op_arm_enabled)
		op_arm_model->stop();
	up(&op_arm_sem);
	mutex_unlock(&op_arm_mutex);
	return 0;
}

static int op_arm_resume(struct sys_device *dev)
{
	down(&op_arm_sem);
	mutex_lock(&op_arm_mutex);
	if (op_arm_enabled && op_arm_model->start())
		op_arm_enabled = 0;
	up(&op_arm_sem);
	mutex_unlock(&op_arm_mutex);
	return 0;
}

@@ -135,8 +135,6 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
#endif

	if (spec) {
		init_MUTEX(&op_arm_sem);

		ret = spec->init();
		if (ret < 0)
			return ret;
@@ -163,4 +161,3 @@ void oprofile_arch_exit(void)
		op_arm_model = NULL;
	}
}