aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/oprofile/oprof.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-20 16:45:53 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-20 16:45:53 -0400
commitede13d81b4dda409a6d271b34b8e2ec9383e255d (patch)
tree2e32142d5a8e076c64f1871f5ad162fffff5f357 /drivers/oprofile/oprof.c
parent2008220879af095d00ca27eb168a55c8595fbc0b (diff)
parent486acd4850dde6d2f8c7f431432f3914c4bfb5f5 (diff)
Merge branch 'for-2.6.23' of master.kernel.org:/pub/scm/linux/kernel/git/arnd/cell-2.6
* 'for-2.6.23' of master.kernel.org:/pub/scm/linux/kernel/git/arnd/cell-2.6: (37 commits) [CELL] spufs: rework list management and associated locking [CELL] oprofile: add support to OProfile for profiling CELL BE SPUs [CELL] oprofile: enable SPU switch notification to detect currently active SPU tasks [CELL] spu_base: locking cleanup [CELL] cell: indexing of SPUs based on firmware vicinity properties [CELL] spufs: integration of SPE affinity with the scheduller [CELL] cell: add placement computation for scheduling of affinity contexts [CELL] spufs: extension of spu_create to support affinity definition [CELL] cell: add hardcoded spu vicinity information for QS20 [CELL] cell: add vicinity information on spus [CELL] cell: add per BE structure with info about its SPUs [CELL] spufs: use find_first_bit() instead of sched_find_first_bit() [CELL] spufs: remove unused file argument from spufs_run_spu() [CELL] spufs: change decrementer restore timing [CELL] spufs: dont halt decrementer at restore step 47 [CELL] spufs: limit saving MFC_CNTL bits [CELL] spufs: fix read and write for decr_status file [CELL] spufs: fix decr_status meanings [CELL] spufs: remove needless context save/restore code [CELL] spufs: fix array size of channel index ...
Diffstat (limited to 'drivers/oprofile/oprof.c')
-rw-r--r--drivers/oprofile/oprof.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/oprofile/oprof.c b/drivers/oprofile/oprof.c
index e5162a64018b..2c645170f06e 100644
--- a/drivers/oprofile/oprof.c
+++ b/drivers/oprofile/oprof.c
@@ -53,9 +53,24 @@ int oprofile_setup(void)
53 * us missing task deaths and eventually oopsing 53 * us missing task deaths and eventually oopsing
54 * when trying to process the event buffer. 54 * when trying to process the event buffer.
55 */ 55 */
56 if (oprofile_ops.sync_start) {
57 int sync_ret = oprofile_ops.sync_start();
58 switch (sync_ret) {
59 case 0:
60 goto post_sync;
61 case 1:
62 goto do_generic;
63 case -1:
64 goto out3;
65 default:
66 goto out3;
67 }
68 }
69do_generic:
56 if ((err = sync_start())) 70 if ((err = sync_start()))
57 goto out3; 71 goto out3;
58 72
73post_sync:
59 is_setup = 1; 74 is_setup = 1;
60 mutex_unlock(&start_mutex); 75 mutex_unlock(&start_mutex);
61 return 0; 76 return 0;
@@ -118,7 +133,20 @@ out:
118void oprofile_shutdown(void) 133void oprofile_shutdown(void)
119{ 134{
120 mutex_lock(&start_mutex); 135 mutex_lock(&start_mutex);
136 if (oprofile_ops.sync_stop) {
137 int sync_ret = oprofile_ops.sync_stop();
138 switch (sync_ret) {
139 case 0:
140 goto post_sync;
141 case 1:
142 goto do_generic;
143 default:
144 goto post_sync;
145 }
146 }
147do_generic:
121 sync_stop(); 148 sync_stop();
149post_sync:
122 if (oprofile_ops.shutdown) 150 if (oprofile_ops.shutdown)
123 oprofile_ops.shutdown(); 151 oprofile_ops.shutdown();
124 is_setup = 0; 152 is_setup = 0;