cxgb4: Fix incorrect sequence numbers shown in devlog
Part of commit 49aa284fe64c4c1 ("cxgb4: Add support for devlog") change introduced a real bug where the Device Log Sequence Numbers are no longer being converted from firmware Big-Endian to local CPU-Endian format. This patch moves all of the translation into the devlog_show() routine. The only endianness code now in devlog_open() is the small loop to find the earliest (lowest Sequence Number) Device Log entry in the circular buffer. Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4c938d22c8
commit
fda8b18c51
1 changed files with 13 additions and 12 deletions
|
@ -952,16 +952,23 @@ static int devlog_show(struct seq_file *seq, void *v)
|
||||||
* eventually have to put a format interpreter in here ...
|
* eventually have to put a format interpreter in here ...
|
||||||
*/
|
*/
|
||||||
seq_printf(seq, "%10d %15llu %8s %8s ",
|
seq_printf(seq, "%10d %15llu %8s %8s ",
|
||||||
e->seqno, e->timestamp,
|
be32_to_cpu(e->seqno),
|
||||||
|
be64_to_cpu(e->timestamp),
|
||||||
(e->level < ARRAY_SIZE(devlog_level_strings)
|
(e->level < ARRAY_SIZE(devlog_level_strings)
|
||||||
? devlog_level_strings[e->level]
|
? devlog_level_strings[e->level]
|
||||||
: "UNKNOWN"),
|
: "UNKNOWN"),
|
||||||
(e->facility < ARRAY_SIZE(devlog_facility_strings)
|
(e->facility < ARRAY_SIZE(devlog_facility_strings)
|
||||||
? devlog_facility_strings[e->facility]
|
? devlog_facility_strings[e->facility]
|
||||||
: "UNKNOWN"));
|
: "UNKNOWN"));
|
||||||
seq_printf(seq, e->fmt, e->params[0], e->params[1],
|
seq_printf(seq, e->fmt,
|
||||||
e->params[2], e->params[3], e->params[4],
|
be32_to_cpu(e->params[0]),
|
||||||
e->params[5], e->params[6], e->params[7]);
|
be32_to_cpu(e->params[1]),
|
||||||
|
be32_to_cpu(e->params[2]),
|
||||||
|
be32_to_cpu(e->params[3]),
|
||||||
|
be32_to_cpu(e->params[4]),
|
||||||
|
be32_to_cpu(e->params[5]),
|
||||||
|
be32_to_cpu(e->params[6]),
|
||||||
|
be32_to_cpu(e->params[7]));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1043,23 +1050,17 @@ static int devlog_open(struct inode *inode, struct file *file)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Translate log multi-byte integral elements into host native format
|
/* Find the earliest (lowest Sequence Number) log entry in the
|
||||||
* and determine where the first entry in the log is.
|
* circular Device Log.
|
||||||
*/
|
*/
|
||||||
for (fseqno = ~((u32)0), index = 0; index < dinfo->nentries; index++) {
|
for (fseqno = ~((u32)0), index = 0; index < dinfo->nentries; index++) {
|
||||||
struct fw_devlog_e *e = &dinfo->log[index];
|
struct fw_devlog_e *e = &dinfo->log[index];
|
||||||
int i;
|
|
||||||
__u32 seqno;
|
__u32 seqno;
|
||||||
|
|
||||||
if (e->timestamp == 0)
|
if (e->timestamp == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
e->timestamp = (__force __be64)be64_to_cpu(e->timestamp);
|
|
||||||
seqno = be32_to_cpu(e->seqno);
|
seqno = be32_to_cpu(e->seqno);
|
||||||
for (i = 0; i < 8; i++)
|
|
||||||
e->params[i] =
|
|
||||||
(__force __be32)be32_to_cpu(e->params[i]);
|
|
||||||
|
|
||||||
if (seqno < fseqno) {
|
if (seqno < fseqno) {
|
||||||
fseqno = seqno;
|
fseqno = seqno;
|
||||||
dinfo->first = index;
|
dinfo->first = index;
|
||||||
|
|
Loading…
Add table
Reference in a new issue