Hi Heitor. A few comments below on the formatting.
Thanks,
Brian
On 11/13/2015 01:33 PM, Heitor Ricardo Alves de Siqueira wrote:
> +
> +#define JIFF_TO_USEC(x) x * 1000 * 1000 / sysconf(_SC_CLK_TCK)
> +/**
> + * print_trace -
> + * @hdr: ipr entry header pointer
> + *
> + * Returns:
> + * nothing
> + **/
> +static void print_trace(struct ipr_dump_entry_header *hdr)
> +{
> + u32 i, min_pos, min_time, num_entries, offset;
> + struct ipr_trace_entry *raw_trace;
> + struct ipr_trace_entry t;
> + const char *cmnd;
> +
> + num_entries = hdr->len / sizeof(*raw_trace);
> + raw_trace = dump_map + hdr->offset;
> + min_pos = 0;
> + min_time = TARGET_TO_HOST32(raw_trace->time, hdr->eye_catcher);
> +
> + fprintf(out_fp, "\t entries found: %d\n\n", num_entries);
> + for (i = 1; i < num_entries; ++i) {
> + raw_trace = dump_map + hdr->offset + i*sizeof(*raw_trace);
> + if (TARGET_TO_HOST32(raw_trace->time, hdr->eye_catcher) <
> + min_time) {
> + min_time = TARGET_TO_HOST32(raw_trace->time,
> + hdr->eye_catcher);
> + min_pos = i;
> + }
> + }
> + for (i = 0; i < num_entries; ++i) {
> + offset = hdr->offset +
> + ((min_pos+i)%num_entries) * sizeof(*raw_trace);
> + t = read_trace_data(offset, hdr->eye_catcher);
> + fprintf(out_fp, "\t %08X %02X%02X%02X%02X %08X %08X",
> + t.time, t.op_code, t.ata_op_code, t.type, t.cmd_index,
> + t.res_handle, t.u.add_data);
> + if (verbose_trace) {
> + fprintf(out_fp, "\t | \t%lld\xC2\xB5s\t",
> + (long long unsigned)JIFF_TO_USEC(t.time));
For the time stamp here, I think it might be more useful if we used the
timestamp
of the oldest trace entry as time 0, and have all subsequent times be a delta of
that time.
> + switch(t.type) {
> + case IPR_TRACE_START:
> + fprintf(out_fp, "IPR_TRACE_START\t\t");
> + break;
> + case IPR_TRACE_FINISH:
> + fprintf(out_fp, "IPR_TRACE_FINISH\t");
Suggest we shorten these strings to just be START / FINISH
> + break;
> + default:
> + fprintf(out_fp, "\t\t\t");
> + }
> + cmnd = get_scsi_command_literal(t.op_code);
> + if (cmnd)
> + fprintf(out_fp, "%s", cmnd);
> +
> + }
> + fprintf(out_fp, "\n");
> + }
> +}
> +
> +/**
> + * print_sdt -
> + * @data_offset: offset to sdt data
> + *
> + * Returns:
> + * nothing
> + **/
> +static void print_sdt(u32 data_offset)
> +{
> + u32 i;
> + struct ipr_sdt_header *raw_hdr;
> + struct ipr_sdt_entry *raw_entry;
> +
> + raw_hdr = dump_map + data_offset;
> +
> + fprintf(out_fp, "\t state: 0x%X", htobe32(raw_hdr->state));
> + if (htobe32(raw_hdr->state) == IPR_FMT2_SDT_READY_TO_USE ||
> + htobe32(raw_hdr->state) == IPR_FMT3_SDT_READY_TO_USE)
> + fprintf(out_fp, " (READY_TO_USE)\n");
> + else
> + fprintf(out_fp, "\n");
> + fprintf(out_fp, "\t entries found: %d\n\n",
> + htobe32(raw_hdr->entries_used));
> +
> + for (i = 0; i < htobe32(raw_hdr->entries_used); ++i) {
> + raw_entry = dump_map + data_offset + sizeof(*raw_hdr)
> + + i * sizeof(*raw_entry);
> + fprintf(out_fp, "\t %08X %08X %02X%02X%02X%02X %04X\n",
> + htobe32(raw_entry->bar_str_offset),
> + htobe32(raw_entry->end_offset),
> + raw_entry->entry_byte, raw_entry->endian,
> + raw_entry->valid_entry, raw_entry->resv,
> + htobe16(raw_entry->priority));
> + }
> +}
> +
> +/**
> + * dump_entry_data -
> + * @hdr: ipr dump entry header pointer
> + *
> + * Returns:
> + * nothing
> + **/
> +static void dump_entry_data(struct ipr_dump_entry_header *hdr)
> +{
> + u32 i;
> + char *s;
> +
> + switch (hdr->id) {
> + case ID_IOA_DUMP:
> + fprintf(out_fp, "Smart Dump Table Data:\n");
> + print_sdt(hdr->offset);
We can probably skip printing this to the output. Its not really useful for
driver debug.
> + break;
> + case ID_IOA_LOC:
> + fprintf(out_fp, "IOA Location:\n");
> + s = dump_map+hdr->offset;
> + fprintf(out_fp, "\t %.*s\n\n", hdr->len, s);
> + break;
> + case ID_DRV_VER:
> + fprintf(out_fp, "Driver Version:\n");
> + s = dump_map+hdr->offset;
> + fprintf(out_fp, "\t %.*s\n\n", hdr->len, s);
> + break;
> + case ID_DRV_TRACE:
> + fprintf(out_fp, "Driver Trace Entries:\n");
> + print_trace(hdr);
> + fprintf(out_fp, "\n");
> + break;
> + case ID_DRV_TYPE:
> + fprintf(out_fp, "Driver Type:\n");
> + i = TARGET_TO_HOST32(*(int*)(dump_map+hdr->offset),
> + hdr->eye_catcher);
> + fprintf(out_fp, "\t CCIN: 0x%04X\n", i);
> + i = TARGET_TO_HOST32(*(int*)(dump_map+hdr->offset+sizeof(i)),
> + hdr->eye_catcher);
> + fprintf(out_fp,"\t Adapter firmware Version: "
> + " %02X:%02X:%02X:%02X\n\n",
Can you remove the ":" separator here? I think it will only cause confusion for
anyone
expecting a 4 byte hex value here.
> + i >> 24, /* major release */
> + (i & 0x00FF0000) >> 16, /* card type */
> + (i & 0x0000FF00) >> 8, /* minor release 0 */
> + i & 0x000000FF); /* minor release 1 */
> + break;
> + case ID_DRV_CTRL_BLK:
> + case ID_DRV_PEND_OPS:
> + /* not implemented yet */
> + fprintf(stderr,
> + "Warning: found IPR Control Block or IPR Pending Ops!\n"
> + "These are not implemented yet. Skipping...\n");
> + break;
> + default:
> + fprintf(stderr,
> + "Warning: did not recognize data identification "
> + "(id 0x%08X). Skipping...\n\n", hdr->id);
> + }
> +}
> +
--
Brian King
Power Linux I/O
IBM Linux Technology Center
------------------------------------------------------------------------------
_______________________________________________
Iprdd-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iprdd-devel