示例#1
0
文件: zfcp_dbf.c 项目: 274914765/C
static void zfcp_hba_dbf_view_response(char **p,
                       struct zfcp_hba_dbf_record_response *r)
{
    struct timespec t;

    zfcp_dbf_out(p, "fsf_command", "0x%08x", r->fsf_command);
    zfcp_dbf_out(p, "fsf_reqid", "0x%0Lx", r->fsf_reqid);
    zfcp_dbf_out(p, "fsf_seqno", "0x%08x", r->fsf_seqno);
    zfcp_dbf_timestamp(r->fsf_issued, &t);
    zfcp_dbf_out(p, "fsf_issued", "%011lu:%06lu", t.tv_sec, t.tv_nsec);
    zfcp_dbf_out(p, "fsf_prot_status", "0x%08x", r->fsf_prot_status);
    zfcp_dbf_out(p, "fsf_status", "0x%08x", r->fsf_status);
    zfcp_dbf_outd(p, "fsf_prot_status_qual", r->fsf_prot_status_qual,
              FSF_PROT_STATUS_QUAL_SIZE, 0, FSF_PROT_STATUS_QUAL_SIZE);
    zfcp_dbf_outd(p, "fsf_status_qual", r->fsf_status_qual,
              FSF_STATUS_QUALIFIER_SIZE, 0, FSF_STATUS_QUALIFIER_SIZE);
    zfcp_dbf_out(p, "fsf_req_status", "0x%08x", r->fsf_req_status);
    zfcp_dbf_out(p, "sbal_first", "0x%02x", r->sbal_first);
    zfcp_dbf_out(p, "sbal_curr", "0x%02x", r->sbal_curr);
    zfcp_dbf_out(p, "sbal_last", "0x%02x", r->sbal_last);
    zfcp_dbf_out(p, "pool", "0x%02x", r->pool);

    switch (r->fsf_command) {
    case FSF_QTCB_FCP_CMND:
        if (r->fsf_req_status & ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT)
            break;
        zfcp_dbf_out(p, "scsi_cmnd", "0x%0Lx", r->u.fcp.cmnd);
        zfcp_dbf_out(p, "scsi_serial", "0x%016Lx", r->u.fcp.serial);
        break;

    case FSF_QTCB_OPEN_PORT_WITH_DID:
    case FSF_QTCB_CLOSE_PORT:
    case FSF_QTCB_CLOSE_PHYSICAL_PORT:
        zfcp_dbf_out(p, "wwpn", "0x%016Lx", r->u.port.wwpn);
        zfcp_dbf_out(p, "d_id", "0x%06x", r->u.port.d_id);
        zfcp_dbf_out(p, "port_handle", "0x%08x", r->u.port.port_handle);
        break;

    case FSF_QTCB_OPEN_LUN:
    case FSF_QTCB_CLOSE_LUN:
        zfcp_dbf_out(p, "wwpn", "0x%016Lx", r->u.unit.wwpn);
        zfcp_dbf_out(p, "fcp_lun", "0x%016Lx", r->u.unit.fcp_lun);
        zfcp_dbf_out(p, "port_handle", "0x%08x", r->u.unit.port_handle);
        zfcp_dbf_out(p, "lun_handle", "0x%08x", r->u.unit.lun_handle);
        break;

    case FSF_QTCB_SEND_ELS:
        zfcp_dbf_out(p, "d_id", "0x%06x", r->u.els.d_id);
        zfcp_dbf_out(p, "ls_code", "0x%02x", r->u.els.ls_code);
        break;

    case FSF_QTCB_ABORT_FCP_CMND:
    case FSF_QTCB_SEND_GENERIC:
    case FSF_QTCB_EXCHANGE_CONFIG_DATA:
    case FSF_QTCB_EXCHANGE_PORT_DATA:
    case FSF_QTCB_DOWNLOAD_CONTROL_FILE:
    case FSF_QTCB_UPLOAD_CONTROL_FILE:
        break;
    }
}
示例#2
0
static int zfcp_scsi_dbf_view_format(debug_info_t *id, struct debug_view *view,
				     char *out_buf, const char *in_buf)
{
	struct zfcp_scsi_dbf_record *r = (struct zfcp_scsi_dbf_record *)in_buf;
	struct timespec t;
	char *p = out_buf;

	if (strncmp(r->tag, "dump", ZFCP_DBF_TAG_SIZE) == 0)
		return 0;

	zfcp_dbf_tag(&p, "tag", r->tag);
	zfcp_dbf_tag(&p, "tag2", r->tag2);
	zfcp_dbf_out(&p, "scsi_id", "0x%08x", r->scsi_id);
	zfcp_dbf_out(&p, "scsi_lun", "0x%08x", r->scsi_lun);
	zfcp_dbf_out(&p, "scsi_result", "0x%08x", r->scsi_result);
	zfcp_dbf_out(&p, "scsi_cmnd", "0x%0Lx", r->scsi_cmnd);
	zfcp_dbf_out(&p, "scsi_serial", "0x%016Lx", r->scsi_serial);
	zfcp_dbf_outd(&p, "scsi_opcode", r->scsi_opcode, ZFCP_DBF_SCSI_OPCODE,
		      0, ZFCP_DBF_SCSI_OPCODE);
	zfcp_dbf_out(&p, "scsi_retries", "0x%02x", r->scsi_retries);
	zfcp_dbf_out(&p, "scsi_allowed", "0x%02x", r->scsi_allowed);
	if (strncmp(r->tag, "abrt", ZFCP_DBF_TAG_SIZE) == 0)
		zfcp_dbf_out(&p, "old_fsf_reqid", "0x%0Lx", r->old_fsf_reqid);
	zfcp_dbf_out(&p, "fsf_reqid", "0x%0Lx", r->fsf_reqid);
	zfcp_dbf_out(&p, "fsf_seqno", "0x%08x", r->fsf_seqno);
	zfcp_dbf_timestamp(r->fsf_issued, &t);
	zfcp_dbf_out(&p, "fsf_issued", "%011lu:%06lu", t.tv_sec, t.tv_nsec);

	if (strncmp(r->tag, "rslt", ZFCP_DBF_TAG_SIZE) == 0) {
		zfcp_dbf_out(&p, "fcp_rsp_validity", "0x%02x", r->rsp_validity);
		zfcp_dbf_out(&p, "fcp_rsp_scsi_status", "0x%02x",
			     r->rsp_scsi_status);
		zfcp_dbf_out(&p, "fcp_rsp_resid", "0x%08x", r->rsp_resid);
		zfcp_dbf_out(&p, "fcp_rsp_code", "0x%08x", r->rsp_code);
		zfcp_dbf_out(&p, "fcp_sns_info_len", "0x%08x", r->sns_info_len);
		zfcp_dbf_outd(&p, "fcp_sns_info", r->sns_info,
			      min((int)r->sns_info_len,
			      ZFCP_DBF_SCSI_FCP_SNS_INFO), 0,
			      r->sns_info_len);
	}
	p += sprintf(p, "\n");
	return p - out_buf;
}
示例#3
0
static int zfcp_dbf_view_header(debug_info_t *id, struct debug_view *view,
				int area, debug_entry_t *entry, char *out_buf)
{
	struct zfcp_dbf_dump *dump = (struct zfcp_dbf_dump *)DEBUG_DATA(entry);
	struct timespec t;
	char *p = out_buf;

	if (strncmp(dump->tag, "dump", ZFCP_DBF_TAG_SIZE) != 0) {
		zfcp_dbf_timestamp(entry->id.stck, &t);
		zfcp_dbf_out(&p, "timestamp", "%011lu:%06lu",
			     t.tv_sec, t.tv_nsec);
		zfcp_dbf_out(&p, "cpu", "%02i", entry->id.fields.cpuid);
	} else	{
		zfcp_dbf_outd(&p, "", dump->data, dump->size, dump->offset,
			      dump->total_size);
		if ((dump->offset + dump->size) == dump->total_size)
			p += sprintf(p, "\n");
	}
	return p - out_buf;
}