[SCSI] mpt2sas: Added sysfs counter for ioc reset
authorKashyap, Desai <kashyap.desai@lsi.com>
Thu, 17 Jun 2010 08:06:53 +0000 (13:36 +0530)
committerJames Bottomley <James.Bottomley@suse.de>
Tue, 27 Jul 2010 17:02:11 +0000 (12:02 -0500)
Added a new sysfs shost attribute called ioc_reset_count. This will
keep count of host resets (both diagnostic and message unit).

Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/mpt2sas/mpt2sas_base.c
drivers/scsi/mpt2sas/mpt2sas_base.h
drivers/scsi/mpt2sas/mpt2sas_ctl.c

index 68cb000..88befc7 100644 (file)
@@ -3402,6 +3402,7 @@ _base_make_ioc_ready(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,
     enum reset_type type)
 {
        u32 ioc_state;
+       int rc;
 
        dinitprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s\n", ioc->name,
            __func__));
@@ -3430,11 +3431,15 @@ _base_make_ioc_ready(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,
 
        if ((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_OPERATIONAL)
                if (!(_base_send_ioc_reset(ioc,
-                   MPI2_FUNCTION_IOC_MESSAGE_UNIT_RESET, 15, CAN_SLEEP)))
+                   MPI2_FUNCTION_IOC_MESSAGE_UNIT_RESET, 15, CAN_SLEEP))) {
+                       ioc->ioc_reset_count++;
                        return 0;
+       }
 
  issue_diag_reset:
-       return _base_diag_reset(ioc, CAN_SLEEP);
+       rc = _base_diag_reset(ioc, CAN_SLEEP);
+       ioc->ioc_reset_count++;
+       return rc;
 }
 
 /**
index 6032cbf..a4a7315 100644 (file)
@@ -615,6 +615,7 @@ struct MPT2SAS_ADAPTER {
        u16             msix_vector_count;
        u32             *msix_table;
        u32             *msix_table_backup;
+       u32             ioc_reset_count;
 
        /* internal commands, callback index */
        u8              scsi_io_cb_idx;
index d88e975..25c866e 100644 (file)
@@ -2581,6 +2581,29 @@ _ctl_fwfault_debug_store(struct device *cdev,
 static DEVICE_ATTR(fwfault_debug, S_IRUGO | S_IWUSR,
     _ctl_fwfault_debug_show, _ctl_fwfault_debug_store);
 
+
+/**
+ * _ctl_ioc_reset_count_show - ioc reset count
+ * @cdev - pointer to embedded class device
+ * @buf - the buffer returned
+ *
+ * This is firmware queue depth limit
+ *
+ * A sysfs 'read-only' shost attribute.
+ */
+static ssize_t
+_ctl_ioc_reset_count_show(struct device *cdev, struct device_attribute *attr,
+    char *buf)
+{
+       struct Scsi_Host *shost = class_to_shost(cdev);
+       struct MPT2SAS_ADAPTER *ioc = shost_priv(shost);
+
+       return snprintf(buf, PAGE_SIZE, "%08d\n", ioc->ioc_reset_count);
+}
+static DEVICE_ATTR(ioc_reset_count, S_IRUGO,
+    _ctl_ioc_reset_count_show, NULL);
+
+
 struct device_attribute *mpt2sas_host_attrs[] = {
        &dev_attr_version_fw,
        &dev_attr_version_bios,
@@ -2597,6 +2620,7 @@ struct device_attribute *mpt2sas_host_attrs[] = {
        &dev_attr_fwfault_debug,
        &dev_attr_fw_queue_depth,
        &dev_attr_host_sas_address,
+       &dev_attr_ioc_reset_count,
        NULL,
 };