Commit a5659d17 authored by Robert Richter's avatar Robert Richter

oprofile: Grouping multiplexing code in oprof.c

This patch moves multiplexing code to a single section of code. This
reduces the use of #ifdefs especially within functions.
Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
parent 16422a6e
...@@ -29,13 +29,6 @@ unsigned long oprofile_backtrace_depth; ...@@ -29,13 +29,6 @@ unsigned long oprofile_backtrace_depth;
static unsigned long is_setup; static unsigned long is_setup;
static DEFINE_MUTEX(start_mutex); static DEFINE_MUTEX(start_mutex);
#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
static void switch_worker(struct work_struct *work);
static DECLARE_DELAYED_WORK(switch_work, switch_worker);
#endif
/* timer /* timer
0 - use performance monitoring hardware if available 0 - use performance monitoring hardware if available
1 - use the timer int mechanism regardless 1 - use the timer int mechanism regardless
...@@ -98,17 +91,63 @@ out: ...@@ -98,17 +91,63 @@ out:
#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX #ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
static void switch_worker(struct work_struct *work);
static DECLARE_DELAYED_WORK(switch_work, switch_worker);
static void start_switch_worker(void) static void start_switch_worker(void)
{ {
if (oprofile_ops.switch_events)
schedule_delayed_work(&switch_work, oprofile_time_slice); schedule_delayed_work(&switch_work, oprofile_time_slice);
} }
static void stop_switch_worker(void)
{
cancel_delayed_work_sync(&switch_work);
}
static void switch_worker(struct work_struct *work) static void switch_worker(struct work_struct *work)
{ {
if (!oprofile_ops.switch_events()) if (!oprofile_ops.switch_events())
start_switch_worker(); start_switch_worker();
} }
/* User inputs in ms, converts to jiffies */
int oprofile_set_timeout(unsigned long val_msec)
{
int err = 0;
unsigned long time_slice;
mutex_lock(&start_mutex);
if (oprofile_started) {
err = -EBUSY;
goto out;
}
if (!oprofile_ops.switch_events) {
err = -EINVAL;
goto out;
}
time_slice = msecs_to_jiffies(val_msec);
if (time_slice == MAX_JIFFY_OFFSET) {
err = -EINVAL;
goto out;
}
oprofile_time_slice = time_slice;
out:
mutex_unlock(&start_mutex);
return err;
}
#else
static inline void start_switch_worker(void) { }
static inline void stop_switch_worker(void) { }
#endif #endif
/* Actually start profiling (echo 1>/dev/oprofile/enable) */ /* Actually start profiling (echo 1>/dev/oprofile/enable) */
...@@ -131,10 +170,7 @@ int oprofile_start(void) ...@@ -131,10 +170,7 @@ int oprofile_start(void)
if ((err = oprofile_ops.start())) if ((err = oprofile_ops.start()))
goto out; goto out;
#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
if (oprofile_ops.switch_events)
start_switch_worker(); start_switch_worker();
#endif
oprofile_started = 1; oprofile_started = 1;
out: out:
...@@ -152,9 +188,7 @@ void oprofile_stop(void) ...@@ -152,9 +188,7 @@ void oprofile_stop(void)
oprofile_ops.stop(); oprofile_ops.stop();
oprofile_started = 0; oprofile_started = 0;
#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX stop_switch_worker();
cancel_delayed_work_sync(&switch_work);
#endif
/* wake up the daemon to read what remains */ /* wake up the daemon to read what remains */
wake_up_buffer_waiter(); wake_up_buffer_waiter();
...@@ -188,42 +222,6 @@ post_sync: ...@@ -188,42 +222,6 @@ post_sync:
mutex_unlock(&start_mutex); mutex_unlock(&start_mutex);
} }
#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
/* User inputs in ms, converts to jiffies */
int oprofile_set_timeout(unsigned long val_msec)
{
int err = 0;
unsigned long time_slice;
mutex_lock(&start_mutex);
if (oprofile_started) {
err = -EBUSY;
goto out;
}
if (!oprofile_ops.switch_events) {
err = -EINVAL;
goto out;
}
time_slice = msecs_to_jiffies(val_msec);
if (time_slice == MAX_JIFFY_OFFSET) {
err = -EINVAL;
goto out;
}
oprofile_time_slice = time_slice;
out:
mutex_unlock(&start_mutex);
return err;
}
#endif
int oprofile_set_backtrace(unsigned long val) int oprofile_set_backtrace(unsigned long val)
{ {
int err = 0; int err = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment