diff options
author | Tejun Heo <tj@kernel.org> | 2010-10-15 09:51:08 -0400 |
---|---|---|
committer | Robert Richter <robert.richter@amd.com> | 2010-10-29 05:54:18 -0400 |
commit | 3d7851b3cdd43a734e5cc4c643fd886ab28ad4d5 (patch) | |
tree | c78750f357d78e226faa83d393b19e963dd85fa2 /drivers/oprofile | |
parent | 4ac3dbec800d93485a5c84e37af676278eea657c (diff) |
oprofile: Remove deprecated use of flush_scheduled_work()
flush_scheduled_work() is deprecated and scheduled to be removed.
sync_stop() currently cancels cpu_buffer works inside buffer_mutex and
flushes the system workqueue outside. Instead, split end_cpu_work()
into two parts - stopping further work enqueues and flushing works -
and do the former inside buffer_mutex and latter outside.
For stable kernels v2.6.35.y and v2.6.36.y.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: stable@kernel.org
Signed-off-by: Robert Richter <robert.richter@amd.com>
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) | |||
190 | profile_event_unregister(PROFILE_TASK_EXIT, &task_exit_nb); | 190 | profile_event_unregister(PROFILE_TASK_EXIT, &task_exit_nb); |
191 | task_handoff_unregister(&task_free_nb); | 191 | task_handoff_unregister(&task_free_nb); |
192 | mutex_unlock(&buffer_mutex); | 192 | mutex_unlock(&buffer_mutex); |
193 | flush_scheduled_work(); | 193 | flush_cpu_work(); |
194 | 194 | ||
195 | /* make sure we don't leak task structs */ | 195 | /* make sure we don't leak task structs */ |
196 | process_task_mortuary(); | 196 | 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) | |||
111 | 111 | ||
112 | void end_cpu_work(void) | 112 | void end_cpu_work(void) |
113 | { | 113 | { |
114 | int i; | ||
115 | |||
116 | work_enabled = 0; | 114 | work_enabled = 0; |
115 | } | ||
116 | |||
117 | void flush_cpu_work(void) | ||
118 | { | ||
119 | int i; | ||
117 | 120 | ||
118 | for_each_online_cpu(i) { | 121 | for_each_online_cpu(i) { |
119 | struct oprofile_cpu_buffer *b = &per_cpu(op_cpu_buffer, i); | 122 | struct oprofile_cpu_buffer *b = &per_cpu(op_cpu_buffer, i); |
120 | 123 | ||
121 | cancel_delayed_work(&b->work); | 124 | /* these works are per-cpu, no need for flush_sync */ |
125 | flush_delayed_work(&b->work); | ||
122 | } | 126 | } |
123 | } | 127 | } |
124 | 128 | ||
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); | |||
25 | 25 | ||
26 | void start_cpu_work(void); | 26 | void start_cpu_work(void); |
27 | void end_cpu_work(void); | 27 | void end_cpu_work(void); |
28 | void flush_cpu_work(void); | ||
28 | 29 | ||
29 | /* CPU buffer is composed of such entries (which are | 30 | /* CPU buffer is composed of such entries (which are |
30 | * also used for context switch notes) | 31 | * also used for context switch notes) |