diff options
-rw-r--r-- | drivers/s390/scsi/zfcp_dbf.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c index aecdc7f2dbc6..edd93533db40 100644 --- a/drivers/s390/scsi/zfcp_dbf.c +++ b/drivers/s390/scsi/zfcp_dbf.c | |||
@@ -49,23 +49,17 @@ static void zfcp_dbf_hexdump(debug_info_t *dbf, void *to, int to_len, | |||
49 | } | 49 | } |
50 | } | 50 | } |
51 | 51 | ||
52 | static int | 52 | /* FIXME: this duplicate this code in s390 debug feature */ |
53 | zfcp_dbf_stck(char *out_buf, const char *label, unsigned long long stck) | 53 | static void zfcp_dbf_timestamp(unsigned long long stck, struct timespec *time) |
54 | { | 54 | { |
55 | unsigned long long sec; | 55 | unsigned long long sec; |
56 | struct timespec dbftime; | ||
57 | int len = 0; | ||
58 | 56 | ||
59 | stck -= 0x8126d60e46000000LL - (0x3c26700LL * 1000000 * 4096); | 57 | stck -= 0x8126d60e46000000LL - (0x3c26700LL * 1000000 * 4096); |
60 | sec = stck >> 12; | 58 | sec = stck >> 12; |
61 | do_div(sec, 1000000); | 59 | do_div(sec, 1000000); |
62 | dbftime.tv_sec = sec; | 60 | time->tv_sec = sec; |
63 | stck -= (sec * 1000000) << 12; | 61 | stck -= (sec * 1000000) << 12; |
64 | dbftime.tv_nsec = ((stck * 1000) >> 12); | 62 | time->tv_nsec = ((stck * 1000) >> 12); |
65 | len += sprintf(out_buf + len, "%-24s%011lu:%06lu\n", | ||
66 | label, dbftime.tv_sec, dbftime.tv_nsec); | ||
67 | |||
68 | return len; | ||
69 | } | 63 | } |
70 | 64 | ||
71 | static int zfcp_dbf_tag(char *out_buf, const char *label, const char *tag) | 65 | static int zfcp_dbf_tag(char *out_buf, const char *label, const char *tag) |
@@ -146,10 +140,12 @@ zfcp_dbf_view_header(debug_info_t * id, struct debug_view *view, int area, | |||
146 | { | 140 | { |
147 | struct zfcp_dbf_dump *dump = (struct zfcp_dbf_dump *)DEBUG_DATA(entry); | 141 | struct zfcp_dbf_dump *dump = (struct zfcp_dbf_dump *)DEBUG_DATA(entry); |
148 | int len = 0; | 142 | int len = 0; |
143 | struct timespec t; | ||
149 | 144 | ||
150 | if (strncmp(dump->tag, "dump", ZFCP_DBF_TAG_SIZE) != 0) { | 145 | if (strncmp(dump->tag, "dump", ZFCP_DBF_TAG_SIZE) != 0) { |
151 | len += zfcp_dbf_stck(out_buf + len, "timestamp", | 146 | zfcp_dbf_timestamp(entry->id.stck, &t); |
152 | entry->id.stck); | 147 | len += zfcp_dbf_view(out_buf + len, "timestamp", "%011lu:%06lu", |
148 | t.tv_sec, t.tv_nsec); | ||
153 | len += zfcp_dbf_view(out_buf + len, "cpu", "%02i", | 149 | len += zfcp_dbf_view(out_buf + len, "cpu", "%02i", |
154 | entry->id.fields.cpuid); | 150 | entry->id.fields.cpuid); |
155 | } else { | 151 | } else { |
@@ -363,6 +359,7 @@ zfcp_hba_dbf_view_response(char *out_buf, | |||
363 | struct zfcp_hba_dbf_record_response *rec) | 359 | struct zfcp_hba_dbf_record_response *rec) |
364 | { | 360 | { |
365 | int len = 0; | 361 | int len = 0; |
362 | struct timespec t; | ||
366 | 363 | ||
367 | len += zfcp_dbf_view(out_buf + len, "fsf_command", "0x%08x", | 364 | len += zfcp_dbf_view(out_buf + len, "fsf_command", "0x%08x", |
368 | rec->fsf_command); | 365 | rec->fsf_command); |
@@ -370,7 +367,9 @@ zfcp_hba_dbf_view_response(char *out_buf, | |||
370 | rec->fsf_reqid); | 367 | rec->fsf_reqid); |
371 | len += zfcp_dbf_view(out_buf + len, "fsf_seqno", "0x%08x", | 368 | len += zfcp_dbf_view(out_buf + len, "fsf_seqno", "0x%08x", |
372 | rec->fsf_seqno); | 369 | rec->fsf_seqno); |
373 | len += zfcp_dbf_stck(out_buf + len, "fsf_issued", rec->fsf_issued); | 370 | zfcp_dbf_timestamp(rec->fsf_issued, &t); |
371 | len += zfcp_dbf_view(out_buf + len, "fsf_issued", "%011lu:%06lu", | ||
372 | t.tv_sec, t.tv_nsec); | ||
374 | len += zfcp_dbf_view(out_buf + len, "fsf_prot_status", "0x%08x", | 373 | len += zfcp_dbf_view(out_buf + len, "fsf_prot_status", "0x%08x", |
375 | rec->fsf_prot_status); | 374 | rec->fsf_prot_status); |
376 | len += zfcp_dbf_view(out_buf + len, "fsf_status", "0x%08x", | 375 | len += zfcp_dbf_view(out_buf + len, "fsf_status", "0x%08x", |
@@ -1222,6 +1221,7 @@ zfcp_scsi_dbf_view_format(debug_info_t * id, struct debug_view *view, | |||
1222 | struct zfcp_scsi_dbf_record *rec = | 1221 | struct zfcp_scsi_dbf_record *rec = |
1223 | (struct zfcp_scsi_dbf_record *)in_buf; | 1222 | (struct zfcp_scsi_dbf_record *)in_buf; |
1224 | int len = 0; | 1223 | int len = 0; |
1224 | struct timespec t; | ||
1225 | 1225 | ||
1226 | if (strncmp(rec->tag, "dump", ZFCP_DBF_TAG_SIZE) == 0) | 1226 | if (strncmp(rec->tag, "dump", ZFCP_DBF_TAG_SIZE) == 0) |
1227 | return 0; | 1227 | return 0; |
@@ -1253,7 +1253,9 @@ zfcp_scsi_dbf_view_format(debug_info_t * id, struct debug_view *view, | |||
1253 | rec->fsf_reqid); | 1253 | rec->fsf_reqid); |
1254 | len += zfcp_dbf_view(out_buf + len, "fsf_seqno", "0x%08x", | 1254 | len += zfcp_dbf_view(out_buf + len, "fsf_seqno", "0x%08x", |
1255 | rec->fsf_seqno); | 1255 | rec->fsf_seqno); |
1256 | len += zfcp_dbf_stck(out_buf + len, "fsf_issued", rec->fsf_issued); | 1256 | zfcp_dbf_timestamp(rec->fsf_issued, &t); |
1257 | len += zfcp_dbf_view(out_buf + len, "fsf_issued", "%011lu:%06lu", | ||
1258 | t.tv_sec, t.tv_nsec); | ||
1257 | if (strncmp(rec->tag, "rslt", ZFCP_DBF_TAG_SIZE) == 0) { | 1259 | if (strncmp(rec->tag, "rslt", ZFCP_DBF_TAG_SIZE) == 0) { |
1258 | len += | 1260 | len += |
1259 | zfcp_dbf_view(out_buf + len, "fcp_rsp_validity", "0x%02x", | 1261 | zfcp_dbf_view(out_buf + len, "fcp_rsp_validity", "0x%02x", |