diff options
Diffstat (limited to 'drivers/oprofile')
| -rw-r--r-- | drivers/oprofile/buffer_sync.c | 2 | ||||
| -rw-r--r-- | drivers/oprofile/cpu_buffer.c | 10 | ||||
| -rw-r--r-- | drivers/oprofile/cpu_buffer.h | 1 | 
3 files changed, 9 insertions, 4 deletions
| diff --git a/drivers/oprofile/buffer_sync.c b/drivers/oprofile/buffer_sync.c index b7e755f4178a..a3984f4ef192 100644 --- a/drivers/oprofile/buffer_sync.c +++ b/drivers/oprofile/buffer_sync.c @@ -190,7 +190,7 @@ void sync_stop(void)  	profile_event_unregister(PROFILE_TASK_EXIT, &task_exit_nb);  	task_handoff_unregister(&task_free_nb);  	mutex_unlock(&buffer_mutex); -	flush_scheduled_work(); +	flush_cpu_work();  	/* make sure we don't leak task structs */  	process_task_mortuary(); diff --git a/drivers/oprofile/cpu_buffer.c b/drivers/oprofile/cpu_buffer.c index f179ac2ea801..59f55441e075 100644 --- a/drivers/oprofile/cpu_buffer.c +++ b/drivers/oprofile/cpu_buffer.c @@ -111,14 +111,18 @@ void start_cpu_work(void)  void end_cpu_work(void)  { -	int i; -  	work_enabled = 0; +} + +void flush_cpu_work(void) +{ +	int i;  	for_each_online_cpu(i) {  		struct oprofile_cpu_buffer *b = &per_cpu(op_cpu_buffer, i); -		cancel_delayed_work(&b->work); +		/* these works are per-cpu, no need for flush_sync */ +		flush_delayed_work(&b->work);  	}  } diff --git a/drivers/oprofile/cpu_buffer.h b/drivers/oprofile/cpu_buffer.h index 68ea16ab645f..e1d097e250ae 100644 --- a/drivers/oprofile/cpu_buffer.h +++ b/drivers/oprofile/cpu_buffer.h @@ -25,6 +25,7 @@ void free_cpu_buffers(void);  void start_cpu_work(void);  void end_cpu_work(void); +void flush_cpu_work(void);  /* CPU buffer is composed of such entries (which are   * also used for context switch notes) |