Author: jimharris
Date: Wed Oct  9 19:37:41 2013
New Revision: 256231
URL: http://svnweb.freebsd.org/changeset/base/256231

Log:
  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

Modified:
  head/sys/dev/isci/isci_io_request.c
  head/sys/dev/isci/isci_sysctl.c
  head/sys/dev/isci/isci_task_request.c

Modified: head/sys/dev/isci/isci_io_request.c
==============================================================================
--- head/sys/dev/isci/isci_io_request.c Wed Oct  9 19:34:11 2013        
(r256230)
+++ head/sys/dev/isci/isci_io_request.c Wed Oct  9 19:37:41 2013        
(r256231)
@@ -153,11 +153,16 @@ isci_io_request_complete(SCI_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]);

Modified: head/sys/dev/isci/isci_sysctl.c
==============================================================================
--- head/sys/dev/isci/isci_sysctl.c     Wed Oct  9 19:34:11 2013        
(r256230)
+++ head/sys/dev/isci/isci_sysctl.c     Wed Oct  9 19:37:41 2013        
(r256231)
@@ -193,6 +193,35 @@ isci_sysctl_start_phy(SYSCTL_HANDLER_ARG
        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_
        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");
 }
 

Modified: head/sys/dev/isci/isci_task_request.c
==============================================================================
--- head/sys/dev/isci/isci_task_request.c       Wed Oct  9 19:34:11 2013        
(r256230)
+++ head/sys/dev/isci/isci_task_request.c       Wed Oct  9 19:37:41 2013        
(r256231)
@@ -194,11 +194,20 @@ isci_task_request_complete(SCI_CONTROLLE
                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:
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to