X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Foprofile%2Foprof.c;fp=drivers%2Foprofile%2Foprof.c;h=b3f1cd6a24c151943691e074d0d693bc4d4c88f3;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=b82a7b5aaa740520932ade8d84110be5495c13ea;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/drivers/oprofile/oprof.c b/drivers/oprofile/oprof.c index b82a7b5aa..b3f1cd6a2 100644 --- a/drivers/oprofile/oprof.c +++ b/drivers/oprofile/oprof.c @@ -5,10 +5,6 @@ * @remark Read the file COPYING * * @author John Levon - * - * Modified by Aravind Menon for Xen - * These modifications are: - * Copyright (C) 2005 Hewlett-Packard Co. */ #include @@ -16,20 +12,20 @@ #include #include #include -#include +#include #include "oprof.h" #include "event_buffer.h" #include "cpu_buffer.h" #include "buffer_sync.h" #include "oprofile_stats.h" - + struct oprofile_operations oprofile_ops; unsigned long oprofile_started; unsigned long backtrace_depth; static unsigned long is_setup; -static DEFINE_MUTEX(start_mutex); +static DECLARE_MUTEX(start_sem); /* timer 0 - use performance monitoring hardware if available @@ -37,37 +33,11 @@ static DEFINE_MUTEX(start_mutex); */ static int timer = 0; -int oprofile_set_active(int active_domains[], unsigned int adomains) -{ - int err; - - if (!oprofile_ops.set_active) - return -EINVAL; - - mutex_lock(&start_mutex); - err = oprofile_ops.set_active(active_domains, adomains); - mutex_unlock(&start_mutex); - return err; -} - -int oprofile_set_passive(int passive_domains[], unsigned int pdomains) -{ - int err; - - if (!oprofile_ops.set_passive) - return -EINVAL; - - mutex_lock(&start_mutex); - err = oprofile_ops.set_passive(passive_domains, pdomains); - mutex_unlock(&start_mutex); - return err; -} - int oprofile_setup(void) { int err; - mutex_lock(&start_mutex); + down(&start_sem); if ((err = alloc_cpu_buffers())) goto out; @@ -87,7 +57,7 @@ int oprofile_setup(void) goto out3; is_setup = 1; - mutex_unlock(&start_mutex); + up(&start_sem); return 0; out3: @@ -98,7 +68,7 @@ out2: out1: free_cpu_buffers(); out: - mutex_unlock(&start_mutex); + up(&start_sem); return err; } @@ -108,7 +78,7 @@ int oprofile_start(void) { int err = -EINVAL; - mutex_lock(&start_mutex); + down(&start_sem); if (!is_setup) goto out; @@ -125,7 +95,7 @@ int oprofile_start(void) oprofile_started = 1; out: - mutex_unlock(&start_mutex); + up(&start_sem); return err; } @@ -133,7 +103,7 @@ out: /* echo 0>/dev/oprofile/enable */ void oprofile_stop(void) { - mutex_lock(&start_mutex); + down(&start_sem); if (!oprofile_started) goto out; oprofile_ops.stop(); @@ -141,20 +111,20 @@ void oprofile_stop(void) /* wake up the daemon to read what remains */ wake_up_buffer_waiter(); out: - mutex_unlock(&start_mutex); + up(&start_sem); } void oprofile_shutdown(void) { - mutex_lock(&start_mutex); + down(&start_sem); sync_stop(); if (oprofile_ops.shutdown) oprofile_ops.shutdown(); is_setup = 0; free_event_buffer(); free_cpu_buffers(); - mutex_unlock(&start_mutex); + up(&start_sem); } @@ -162,7 +132,7 @@ int oprofile_set_backtrace(unsigned long val) { int err = 0; - mutex_lock(&start_mutex); + down(&start_sem); if (oprofile_started) { err = -EBUSY; @@ -177,7 +147,7 @@ int oprofile_set_backtrace(unsigned long val) backtrace_depth = val; out: - mutex_unlock(&start_mutex); + up(&start_sem); return err; }