diff options
author | Hendrik Brueckner <brueckner@linux.vnet.ibm.com> | 2013-12-12 11:38:50 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-12-16 08:37:58 -0500 |
commit | 443d4beb823d4dccaaf964b59df9dd38b4d6aae7 (patch) | |
tree | f11cddd99fb9c8dced567a2577c43a271d6a29ac /arch/s390 | |
parent | fcc77f507333776eaa336ab4ff49c23422f53703 (diff) |
s390/cpum_sf: Add helper to read TOD from trailer entries
The trailer entry contains a timestamp of the time when the sample-data-block
became full. The timestamp specifies a TOD (time-of-day) value in either the
STCK or STCKE format.
Provide a helper function to return the TOD value depending on the setting of
time format indicator.
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/include/asm/cpu_mf.h | 14 | ||||
-rw-r--r-- | arch/s390/kernel/perf_cpum_sf.c | 2 |
2 files changed, 13 insertions, 3 deletions
diff --git a/arch/s390/include/asm/cpu_mf.h b/arch/s390/include/asm/cpu_mf.h index b0b3059b8d64..09dc5facc0bc 100644 --- a/arch/s390/include/asm/cpu_mf.h +++ b/arch/s390/include/asm/cpu_mf.h | |||
@@ -125,8 +125,7 @@ struct hws_trailer_entry { | |||
125 | unsigned long long flags; /* 0 - 63: All indicators */ | 125 | unsigned long long flags; /* 0 - 63: All indicators */ |
126 | }; | 126 | }; |
127 | unsigned long long overflow; /* 64 - sample Overflow count */ | 127 | unsigned long long overflow; /* 64 - sample Overflow count */ |
128 | unsigned long long timestamp; /* 16 - time-stamp */ | 128 | unsigned char timestamp[16]; /* 16 - 31 timestamp */ |
129 | unsigned long long timestamp1; /* */ | ||
130 | unsigned long long reserved1; /* 32 -Reserved */ | 129 | unsigned long long reserved1; /* 32 -Reserved */ |
131 | unsigned long long reserved2; /* */ | 130 | unsigned long long reserved2; /* */ |
132 | unsigned long long progusage1; /* 48 - reserved for programming use */ | 131 | unsigned long long progusage1; /* 48 - reserved for programming use */ |
@@ -232,6 +231,17 @@ static inline unsigned long sample_rate_to_freq(struct hws_qsi_info_block *qsi, | |||
232 | #define SDB_TE_ALERT_REQ_MASK 0x4000000000000000UL | 231 | #define SDB_TE_ALERT_REQ_MASK 0x4000000000000000UL |
233 | #define SDB_TE_BUFFER_FULL_MASK 0x8000000000000000UL | 232 | #define SDB_TE_BUFFER_FULL_MASK 0x8000000000000000UL |
234 | 233 | ||
234 | /* Return TOD timestamp contained in an trailer entry */ | ||
235 | static inline unsigned long long trailer_timestamp(struct hws_trailer_entry *te) | ||
236 | { | ||
237 | /* TOD in STCKE format */ | ||
238 | if (te->t) | ||
239 | return *((unsigned long long *) &te->timestamp[1]); | ||
240 | |||
241 | /* TOD in STCK format */ | ||
242 | return *((unsigned long long *) &te->timestamp[0]); | ||
243 | } | ||
244 | |||
235 | /* Return pointer to trailer entry of an sample data block */ | 245 | /* Return pointer to trailer entry of an sample data block */ |
236 | static inline unsigned long *trailer_entry_ptr(unsigned long v) | 246 | static inline unsigned long *trailer_entry_ptr(unsigned long v) |
237 | { | 247 | { |
diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c index 9202f2858894..3ab7e67ee2e4 100644 --- a/arch/s390/kernel/perf_cpum_sf.c +++ b/arch/s390/kernel/perf_cpum_sf.c | |||
@@ -981,7 +981,7 @@ static void hw_perf_event_update(struct perf_event *event, int flush_all) | |||
981 | debug_sprintf_event(sfdbg, 6, "hw_perf_event_update: sdbt=%p " | 981 | debug_sprintf_event(sfdbg, 6, "hw_perf_event_update: sdbt=%p " |
982 | "overflow=%llu timestamp=0x%llx\n", | 982 | "overflow=%llu timestamp=0x%llx\n", |
983 | sdbt, te->overflow, | 983 | sdbt, te->overflow, |
984 | (te->f) ? te->timestamp : 0ULL); | 984 | (te->f) ? trailer_timestamp(te) : 0ULL); |
985 | 985 | ||
986 | /* Collect all samples from a single sample-data-block and | 986 | /* Collect all samples from a single sample-data-block and |
987 | * flag if an (perf) event overflow happened. If so, the PMU | 987 | * flag if an (perf) event overflow happened. If so, the PMU |