Loading drivers/oprofile/oprof.c +49 −51 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -98,17 +91,63 @@ 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) { 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) { if (!oprofile_ops.switch_events()) 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) */ Loading @@ -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 oprofile_started = 1; out: Loading @@ -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(); Loading Loading @@ -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; Loading Loading
drivers/oprofile/oprof.c +49 −51 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -98,17 +91,63 @@ 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) { 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) { if (!oprofile_ops.switch_events()) 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) */ Loading @@ -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 oprofile_started = 1; out: Loading @@ -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(); Loading Loading @@ -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; Loading