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;
static unsigned long is_setup;
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
0 - use performance monitoring hardware if available
1 - use the timer int mechanism regardless
......@@ -98,9 +91,18 @@ int oprofile_setup(void)
#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)
{
schedule_delayed_work(&switch_work, oprofile_time_slice);
if (oprofile_ops.switch_events)
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)
......@@ -109,6 +111,43 @@ static void switch_worker(struct work_struct *work)
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
/* Actually start profiling (echo 1>/dev/oprofile/enable) */
......@@ -131,10 +170,7 @@ int oprofile_start(void)
if ((err = oprofile_ops.start()))
goto out;
#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
if (oprofile_ops.switch_events)
start_switch_worker();
#endif
start_switch_worker();
oprofile_started = 1;
out:
......@@ -152,9 +188,7 @@ void oprofile_stop(void)
oprofile_ops.stop();
oprofile_started = 0;
#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
cancel_delayed_work_sync(&switch_work);
#endif
stop_switch_worker();
/* wake up the daemon to read what remains */
wake_up_buffer_waiter();
......@@ -188,42 +222,6 @@ void oprofile_shutdown(void)
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 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