diff options
author | jimharris <jimharris@FreeBSD.org> | 2013-10-09 19:37:41 +0000 |
---|---|---|
committer | jimharris <jimharris@FreeBSD.org> | 2013-10-09 19:37:41 +0000 |
commit | 40003e03dd1bc3afb919f8348506188ae16f597a (patch) | |
tree | a63b4b35ba1eb4121c089efd71146e8e7e9df847 /sys/dev/isci | |
parent | cc9e8d9ddd9061ffba3384b67d6796a3c96fb2ef (diff) | |
download | FreeBSD-src-40003e03dd1bc3afb919f8348506188ae16f597a.zip FreeBSD-src-40003e03dd1bc3afb919f8348506188ae16f597a.tar.gz |
Improve logging around some of the isci(4) reset and recovery paths.
Sponsored by: Intel
Discussed with: scottl
Approved by: re (marius)
MFC after: 1 week
Diffstat (limited to 'sys/dev/isci')
-rw-r--r-- | sys/dev/isci/isci_io_request.c | 9 | ||||
-rw-r--r-- | sys/dev/isci/isci_sysctl.c | 34 | ||||
-rw-r--r-- | sys/dev/isci/isci_task_request.c | 13 |
3 files changed, 52 insertions, 4 deletions
diff --git a/sys/dev/isci/isci_io_request.c b/sys/dev/isci/isci_io_request.c index 4486f31..d1f5afe 100644 --- a/sys/dev/isci/isci_io_request.c +++ b/sys/dev/isci/isci_io_request.c @@ -153,11 +153,16 @@ isci_io_request_complete(SCI_CONTROLLER_HANDLE_T scif_controller, case SCI_IO_FAILURE_REMOTE_DEVICE_RESET_REQUIRED: isci_remote_device_reset(isci_remote_device, NULL); + ccb->ccb_h.status |= CAM_REQ_TERMIO; + isci_log_message(0, "ISCI", + "isci: bus=%x target=%x lun=%x cdb[0]=%x remote device reset required\n", + ccb->ccb_h.path_id, ccb->ccb_h.target_id, + ccb->ccb_h.target_lun, ccb->csio.cdb_io.cdb_bytes[0]); + break; - /* drop through */ case SCI_IO_FAILURE_TERMINATED: ccb->ccb_h.status |= CAM_REQ_TERMIO; - isci_log_message(1, "ISCI", + isci_log_message(0, "ISCI", "isci: bus=%x target=%x lun=%x cdb[0]=%x terminated\n", ccb->ccb_h.path_id, ccb->ccb_h.target_id, ccb->ccb_h.target_lun, ccb->csio.cdb_io.cdb_bytes[0]); diff --git a/sys/dev/isci/isci_sysctl.c b/sys/dev/isci/isci_sysctl.c index 6a22e38..4623a8a 100644 --- a/sys/dev/isci/isci_sysctl.c +++ b/sys/dev/isci/isci_sysctl.c @@ -193,6 +193,35 @@ isci_sysctl_start_phy(SYSCTL_HANDLER_ARGS) return 0; } +static int +isci_sysctl_log_frozen_lun_masks(SYSCTL_HANDLER_ARGS) +{ + struct isci_softc *isci = (struct isci_softc *)arg1; + struct ISCI_REMOTE_DEVICE *device; + int32_t log_frozen_devices = 0; + int error, i, j; + + error = sysctl_handle_int(oidp, &log_frozen_devices, 0, req); + + if (error || log_frozen_devices == 0) + return (error); + + for (i = 0; i < isci->controller_count; i++) { + for (j = 0; j < SCI_MAX_REMOTE_DEVICES; j++) { + device = isci->controllers[i].remote_device[j]; + + if (device == NULL) + continue; + + device_printf(isci->device, + "controller %d device %3d frozen_lun_mask 0x%02x\n", + i, j, device->frozen_lun_mask); + } + } + + return (0); +} + void isci_sysctl_initialize(struct isci_softc *isci) { struct sysctl_ctx_list *sysctl_ctx = device_get_sysctl_ctx(isci->device); @@ -225,5 +254,10 @@ void isci_sysctl_initialize(struct isci_softc *isci) SYSCTL_ADD_PROC(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO, "start_phy", CTLTYPE_UINT| CTLFLAG_RW, isci, 0, isci_sysctl_start_phy, "IU", "Start PHY on a controller"); + + SYSCTL_ADD_PROC(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO, + "log_frozen_lun_masks", CTLTYPE_UINT| CTLFLAG_RW, isci, 0, + isci_sysctl_log_frozen_lun_masks, "IU", + "Log frozen lun masks to kernel log"); } diff --git a/sys/dev/isci/isci_task_request.c b/sys/dev/isci/isci_task_request.c index 4ad0731..5d7f63d 100644 --- a/sys/dev/isci/isci_task_request.c +++ b/sys/dev/isci/isci_task_request.c @@ -194,11 +194,20 @@ isci_task_request_complete(SCI_CONTROLLER_HANDLE_T scif_controller, break; case SCI_TASK_FAILURE_INVALID_STATE: + retry_task = TRUE; + isci_log_message(0, "ISCI", + "task failure (invalid state) - retrying\n"); + break; + case SCI_TASK_FAILURE_INSUFFICIENT_RESOURCES: - case SCI_FAILURE_TIMEOUT: retry_task = TRUE; isci_log_message(0, "ISCI", - "unhandled task completion code 0x%x\n", completion_status); + "task failure (insufficient resources) - retrying\n"); + break; + + case SCI_FAILURE_TIMEOUT: + retry_task = TRUE; + isci_log_message(0, "ISCI", "task timeout - retrying\n"); break; case SCI_TASK_FAILURE: |