Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 158230
b: refs/heads/master
c: a5659d1
h: refs/heads/master
v: v3
  • Loading branch information
Robert Richter committed Jul 20, 2009
1 parent 4fbd28c commit 1260c8a
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 52 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 16422a6e2d16a39861ae5b0b11d9b411a245ab83
refs/heads/master: a5659d17adb815fb35e11745e2f39c3f0bfd579f
100 changes: 49 additions & 51 deletions trunk/drivers/oprofile/oprof.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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) */
Expand All @@ -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:
Expand All @@ -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();
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 1260c8a

Please sign in to comment.