Skip to content

Commit

Permalink
[PATCH] oprofile: convert from semaphores to mutexes
Browse files Browse the repository at this point in the history
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Cc: Philippe Elie <phil.el@wanadoo.fr>
Cc: John Levon <levon@movementarian.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Markus Armbruster authored and Linus Torvalds committed Jun 25, 2006
1 parent a2926b1 commit 59cc185
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 25 deletions.
8 changes: 4 additions & 4 deletions drivers/oprofile/buffer_sync.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,10 @@ static int module_load_notify(struct notifier_block * self, unsigned long val, v
return 0;

/* FIXME: should we process all CPU buffers ? */
down(&buffer_sem);
mutex_lock(&buffer_mutex);
add_event_entry(ESCAPE_CODE);
add_event_entry(MODULE_LOADED_CODE);
up(&buffer_sem);
mutex_unlock(&buffer_mutex);
#endif
return 0;
}
Expand Down Expand Up @@ -501,7 +501,7 @@ void sync_buffer(int cpu)
sync_buffer_state state = sb_buffer_start;
unsigned long available;

down(&buffer_sem);
mutex_lock(&buffer_mutex);

add_cpu_switch(cpu);

Expand Down Expand Up @@ -550,5 +550,5 @@ void sync_buffer(int cpu)

mark_done(cpu);

up(&buffer_sem);
mutex_unlock(&buffer_mutex);
}
12 changes: 6 additions & 6 deletions drivers/oprofile/event_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@
#include "event_buffer.h"
#include "oprofile_stats.h"

DECLARE_MUTEX(buffer_sem);
DEFINE_MUTEX(buffer_mutex);

static unsigned long buffer_opened;
static DECLARE_WAIT_QUEUE_HEAD(buffer_wait);
static unsigned long * event_buffer;
static unsigned long buffer_size;
static unsigned long buffer_watershed;
static size_t buffer_pos;
/* atomic_t because wait_event checks it outside of buffer_sem */
/* atomic_t because wait_event checks it outside of buffer_mutex */
static atomic_t buffer_ready = ATOMIC_INIT(0);

/* Add an entry to the event buffer. When we
Expand Down Expand Up @@ -60,10 +60,10 @@ void add_event_entry(unsigned long value)
*/
void wake_up_buffer_waiter(void)
{
down(&buffer_sem);
mutex_lock(&buffer_mutex);
atomic_set(&buffer_ready, 1);
wake_up(&buffer_wait);
up(&buffer_sem);
mutex_unlock(&buffer_mutex);
}


Expand Down Expand Up @@ -162,7 +162,7 @@ static ssize_t event_buffer_read(struct file * file, char __user * buf,
if (!atomic_read(&buffer_ready))
return -EAGAIN;

down(&buffer_sem);
mutex_lock(&buffer_mutex);

atomic_set(&buffer_ready, 0);

Expand All @@ -177,7 +177,7 @@ static ssize_t event_buffer_read(struct file * file, char __user * buf,
buffer_pos = 0;

out:
up(&buffer_sem);
mutex_unlock(&buffer_mutex);
return retval;
}

Expand Down
4 changes: 2 additions & 2 deletions drivers/oprofile/event_buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#define EVENT_BUFFER_H

#include <linux/types.h>
#include <asm/semaphore.h>
#include <asm/mutex.h>

int alloc_event_buffer(void);

Expand Down Expand Up @@ -46,6 +46,6 @@ extern struct file_operations event_buffer_fops;
/* mutex between sync_cpu_buffers() and the
* file reading code.
*/
extern struct semaphore buffer_sem;
extern struct mutex buffer_mutex;

#endif /* EVENT_BUFFER_H */
26 changes: 13 additions & 13 deletions drivers/oprofile/oprof.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#include <linux/init.h>
#include <linux/oprofile.h>
#include <linux/moduleparam.h>
#include <asm/semaphore.h>
#include <asm/mutex.h>

#include "oprof.h"
#include "event_buffer.h"
Expand All @@ -25,7 +25,7 @@ struct oprofile_operations oprofile_ops;
unsigned long oprofile_started;
unsigned long backtrace_depth;
static unsigned long is_setup;
static DECLARE_MUTEX(start_sem);
static DEFINE_MUTEX(start_mutex);

/* timer
0 - use performance monitoring hardware if available
Expand All @@ -37,7 +37,7 @@ int oprofile_setup(void)
{
int err;

down(&start_sem);
mutex_lock(&start_mutex);

if ((err = alloc_cpu_buffers()))
goto out;
Expand All @@ -57,7 +57,7 @@ int oprofile_setup(void)
goto out3;

is_setup = 1;
up(&start_sem);
mutex_unlock(&start_mutex);
return 0;

out3:
Expand All @@ -68,7 +68,7 @@ int oprofile_setup(void)
out1:
free_cpu_buffers();
out:
up(&start_sem);
mutex_unlock(&start_mutex);
return err;
}

Expand All @@ -78,7 +78,7 @@ int oprofile_start(void)
{
int err = -EINVAL;

down(&start_sem);
mutex_lock(&start_mutex);

if (!is_setup)
goto out;
Expand All @@ -95,44 +95,44 @@ int oprofile_start(void)

oprofile_started = 1;
out:
up(&start_sem);
mutex_unlock(&start_mutex);
return err;
}


/* echo 0>/dev/oprofile/enable */
void oprofile_stop(void)
{
down(&start_sem);
mutex_lock(&start_mutex);
if (!oprofile_started)
goto out;
oprofile_ops.stop();
oprofile_started = 0;
/* wake up the daemon to read what remains */
wake_up_buffer_waiter();
out:
up(&start_sem);
mutex_unlock(&start_mutex);
}


void oprofile_shutdown(void)
{
down(&start_sem);
mutex_lock(&start_mutex);
sync_stop();
if (oprofile_ops.shutdown)
oprofile_ops.shutdown();
is_setup = 0;
free_event_buffer();
free_cpu_buffers();
up(&start_sem);
mutex_unlock(&start_mutex);
}


int oprofile_set_backtrace(unsigned long val)
{
int err = 0;

down(&start_sem);
mutex_lock(&start_mutex);

if (oprofile_started) {
err = -EBUSY;
Expand All @@ -147,7 +147,7 @@ int oprofile_set_backtrace(unsigned long val)
backtrace_depth = val;

out:
up(&start_sem);
mutex_unlock(&start_mutex);
return err;
}

Expand Down

0 comments on commit 59cc185

Please sign in to comment.