diff options
Diffstat (limited to 'drivers/misc/sgi-gru/gruhandles.c')
-rw-r--r-- | drivers/misc/sgi-gru/gruhandles.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/misc/sgi-gru/gruhandles.c b/drivers/misc/sgi-gru/gruhandles.c index 5b82e7def16d..9dcf5d896683 100644 --- a/drivers/misc/sgi-gru/gruhandles.c +++ b/drivers/misc/sgi-gru/gruhandles.c | |||
@@ -35,6 +35,16 @@ | |||
35 | /* Extract the status field from a kernel handle */ | 35 | /* Extract the status field from a kernel handle */ |
36 | #define GET_MSEG_HANDLE_STATUS(h) (((*(unsigned long *)(h)) >> 16) & 3) | 36 | #define GET_MSEG_HANDLE_STATUS(h) (((*(unsigned long *)(h)) >> 16) & 3) |
37 | 37 | ||
38 | struct mcs_op_statistic mcs_op_statistics[mcsop_last]; | ||
39 | |||
40 | static void update_mcs_stats(enum mcs_op op, unsigned long clks) | ||
41 | { | ||
42 | atomic_long_inc(&mcs_op_statistics[op].count); | ||
43 | atomic_long_add(clks, &mcs_op_statistics[op].total); | ||
44 | if (mcs_op_statistics[op].max < clks) | ||
45 | mcs_op_statistics[op].max = clks; | ||
46 | } | ||
47 | |||
38 | static void start_instruction(void *h) | 48 | static void start_instruction(void *h) |
39 | { | 49 | { |
40 | unsigned long *w0 = h; | 50 | unsigned long *w0 = h; |
@@ -57,6 +67,8 @@ static int wait_instruction_complete(void *h, enum mcs_op opc) | |||
57 | if (GRU_OPERATION_TIMEOUT < (get_cycles() - start_time)) | 67 | if (GRU_OPERATION_TIMEOUT < (get_cycles() - start_time)) |
58 | panic("GRU %p is malfunctioning\n", h); | 68 | panic("GRU %p is malfunctioning\n", h); |
59 | } | 69 | } |
70 | if (gru_options & OPT_STATS) | ||
71 | update_mcs_stats(opc, get_cycles() - start_time); | ||
60 | return status; | 72 | return status; |
61 | } | 73 | } |
62 | 74 | ||