[SCSI] ipr: Format HCAM overlay ID 0x21
This patch adds formatting error overlay 0x21 to improve debug capabilities. [jejb: checkpatch fixes] Signed-off-by: Wen Xiong <wenxiong@linux.vnet.ibm.com> Acked-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
60e76b771f
commit
169b9ec83f
|
@ -2367,6 +2367,42 @@ static void ipr_log_generic_error(struct ipr_ioa_cfg *ioa_cfg,
|
|||
be32_to_cpu(hostrcb->hcam.length));
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_log_sis64_device_error - Log a cache error.
|
||||
* @ioa_cfg: ioa config struct
|
||||
* @hostrcb: hostrcb struct
|
||||
*
|
||||
* Return value:
|
||||
* none
|
||||
**/
|
||||
static void ipr_log_sis64_device_error(struct ipr_ioa_cfg *ioa_cfg,
|
||||
struct ipr_hostrcb *hostrcb)
|
||||
{
|
||||
struct ipr_hostrcb_type_21_error *error;
|
||||
char buffer[IPR_MAX_RES_PATH_LENGTH];
|
||||
|
||||
error = &hostrcb->hcam.u.error64.u.type_21_error;
|
||||
|
||||
ipr_err("-----Failing Device Information-----\n");
|
||||
ipr_err("World Wide Unique ID: %08X%08X%08X%08X\n",
|
||||
be32_to_cpu(error->wwn[0]), be32_to_cpu(error->wwn[1]),
|
||||
be32_to_cpu(error->wwn[2]), be32_to_cpu(error->wwn[3]));
|
||||
ipr_err("Device Resource Path: %s\n",
|
||||
__ipr_format_res_path(error->res_path,
|
||||
buffer, sizeof(buffer)));
|
||||
error->primary_problem_desc[sizeof(error->primary_problem_desc) - 1] = '\0';
|
||||
error->second_problem_desc[sizeof(error->second_problem_desc) - 1] = '\0';
|
||||
ipr_err("Primary Problem Description: %s\n", error->primary_problem_desc);
|
||||
ipr_err("Secondary Problem Description: %s\n", error->second_problem_desc);
|
||||
ipr_err("SCSI Sense Data:\n");
|
||||
ipr_log_hex_data(ioa_cfg, error->sense_data, sizeof(error->sense_data));
|
||||
ipr_err("SCSI Command Descriptor Block: \n");
|
||||
ipr_log_hex_data(ioa_cfg, error->cdb, sizeof(error->cdb));
|
||||
|
||||
ipr_err("Additional IOA Data:\n");
|
||||
ipr_log_hex_data(ioa_cfg, error->ioa_data, be32_to_cpu(error->length_of_error));
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_get_error - Find the specfied IOASC in the ipr_error_table.
|
||||
* @ioasc: IOASC
|
||||
|
@ -2468,6 +2504,9 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg,
|
|||
case IPR_HOST_RCB_OVERLAY_ID_20:
|
||||
ipr_log_fabric_error(ioa_cfg, hostrcb);
|
||||
break;
|
||||
case IPR_HOST_RCB_OVERLAY_ID_21:
|
||||
ipr_log_sis64_device_error(ioa_cfg, hostrcb);
|
||||
break;
|
||||
case IPR_HOST_RCB_OVERLAY_ID_23:
|
||||
ipr_log_sis64_config_error(ioa_cfg, hostrcb);
|
||||
break;
|
||||
|
|
|
@ -899,6 +899,18 @@ struct ipr_hostrcb_type_01_error {
|
|||
__be32 ioa_data[236];
|
||||
}__attribute__((packed, aligned (4)));
|
||||
|
||||
struct ipr_hostrcb_type_21_error {
|
||||
__be32 wwn[4];
|
||||
u8 res_path[8];
|
||||
u8 primary_problem_desc[32];
|
||||
u8 second_problem_desc[32];
|
||||
__be32 sense_data[8];
|
||||
__be32 cdb[4];
|
||||
__be32 residual_trans_length;
|
||||
__be32 length_of_error;
|
||||
__be32 ioa_data[236];
|
||||
}__attribute__((packed, aligned (4)));
|
||||
|
||||
struct ipr_hostrcb_type_02_error {
|
||||
struct ipr_vpd ioa_vpd;
|
||||
struct ipr_vpd cfc_vpd;
|
||||
|
@ -1128,6 +1140,7 @@ struct ipr_hostrcb64_error {
|
|||
struct ipr_hostrcb_type_ff_error type_ff_error;
|
||||
struct ipr_hostrcb_type_12_error type_12_error;
|
||||
struct ipr_hostrcb_type_17_error type_17_error;
|
||||
struct ipr_hostrcb_type_21_error type_21_error;
|
||||
struct ipr_hostrcb_type_23_error type_23_error;
|
||||
struct ipr_hostrcb_type_24_error type_24_error;
|
||||
struct ipr_hostrcb_type_30_error type_30_error;
|
||||
|
@ -1171,6 +1184,7 @@ struct ipr_hcam {
|
|||
#define IPR_HOST_RCB_OVERLAY_ID_16 0x16
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_17 0x17
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_20 0x20
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_21 0x21
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_23 0x23
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_24 0x24
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_26 0x26
|
||||
|
|
Loading…
Reference in New Issue