diff options
author | Wendy Xiong <wenxiong@linux.vnet.ibm.com> | 2014-03-12 17:08:51 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2014-03-19 18:04:42 -0400 |
commit | 169b9ec83f0f1cf1e0c7876b41d04d66c28f16a0 (patch) | |
tree | ca37090920c5973983645a81b10d12bb3c04a429 /drivers/scsi/ipr.c | |
parent | 60e76b771f349bb1b50e0b382ad8bf0296a53819 (diff) |
[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>
Diffstat (limited to 'drivers/scsi/ipr.c')
-rw-r--r-- | drivers/scsi/ipr.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index 3d7b6af98e5e..1c6a18a39e85 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c | |||
@@ -2368,6 +2368,42 @@ static void ipr_log_generic_error(struct ipr_ioa_cfg *ioa_cfg, | |||
2368 | } | 2368 | } |
2369 | 2369 | ||
2370 | /** | 2370 | /** |
2371 | * ipr_log_sis64_device_error - Log a cache error. | ||
2372 | * @ioa_cfg: ioa config struct | ||
2373 | * @hostrcb: hostrcb struct | ||
2374 | * | ||
2375 | * Return value: | ||
2376 | * none | ||
2377 | **/ | ||
2378 | static void ipr_log_sis64_device_error(struct ipr_ioa_cfg *ioa_cfg, | ||
2379 | struct ipr_hostrcb *hostrcb) | ||
2380 | { | ||
2381 | struct ipr_hostrcb_type_21_error *error; | ||
2382 | char buffer[IPR_MAX_RES_PATH_LENGTH]; | ||
2383 | |||
2384 | error = &hostrcb->hcam.u.error64.u.type_21_error; | ||
2385 | |||
2386 | ipr_err("-----Failing Device Information-----\n"); | ||
2387 | ipr_err("World Wide Unique ID: %08X%08X%08X%08X\n", | ||
2388 | be32_to_cpu(error->wwn[0]), be32_to_cpu(error->wwn[1]), | ||
2389 | be32_to_cpu(error->wwn[2]), be32_to_cpu(error->wwn[3])); | ||
2390 | ipr_err("Device Resource Path: %s\n", | ||
2391 | __ipr_format_res_path(error->res_path, | ||
2392 | buffer, sizeof(buffer))); | ||
2393 | error->primary_problem_desc[sizeof(error->primary_problem_desc) - 1] = '\0'; | ||
2394 | error->second_problem_desc[sizeof(error->second_problem_desc) - 1] = '\0'; | ||
2395 | ipr_err("Primary Problem Description: %s\n", error->primary_problem_desc); | ||
2396 | ipr_err("Secondary Problem Description: %s\n", error->second_problem_desc); | ||
2397 | ipr_err("SCSI Sense Data:\n"); | ||
2398 | ipr_log_hex_data(ioa_cfg, error->sense_data, sizeof(error->sense_data)); | ||
2399 | ipr_err("SCSI Command Descriptor Block: \n"); | ||
2400 | ipr_log_hex_data(ioa_cfg, error->cdb, sizeof(error->cdb)); | ||
2401 | |||
2402 | ipr_err("Additional IOA Data:\n"); | ||
2403 | ipr_log_hex_data(ioa_cfg, error->ioa_data, be32_to_cpu(error->length_of_error)); | ||
2404 | } | ||
2405 | |||
2406 | /** | ||
2371 | * ipr_get_error - Find the specfied IOASC in the ipr_error_table. | 2407 | * ipr_get_error - Find the specfied IOASC in the ipr_error_table. |
2372 | * @ioasc: IOASC | 2408 | * @ioasc: IOASC |
2373 | * | 2409 | * |
@@ -2468,6 +2504,9 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg, | |||
2468 | case IPR_HOST_RCB_OVERLAY_ID_20: | 2504 | case IPR_HOST_RCB_OVERLAY_ID_20: |
2469 | ipr_log_fabric_error(ioa_cfg, hostrcb); | 2505 | ipr_log_fabric_error(ioa_cfg, hostrcb); |
2470 | break; | 2506 | break; |
2507 | case IPR_HOST_RCB_OVERLAY_ID_21: | ||
2508 | ipr_log_sis64_device_error(ioa_cfg, hostrcb); | ||
2509 | break; | ||
2471 | case IPR_HOST_RCB_OVERLAY_ID_23: | 2510 | case IPR_HOST_RCB_OVERLAY_ID_23: |
2472 | ipr_log_sis64_config_error(ioa_cfg, hostrcb); | 2511 | ipr_log_sis64_config_error(ioa_cfg, hostrcb); |
2473 | break; | 2512 | break; |