Commit d32a8c15 authored by Kashyap, Desai's avatar Kashyap, Desai Committed by James Bottomley

[SCSI] mpt2sas: Added sysfs counter for ioc reset

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: default avatarKashyap Desai <kashyap.desai@lsi.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent b8d7d7bb
...@@ -3402,6 +3402,7 @@ _base_make_ioc_ready(struct MPT2SAS_ADAPTER *ioc, int sleep_flag, ...@@ -3402,6 +3402,7 @@ _base_make_ioc_ready(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,
enum reset_type type) enum reset_type type)
{ {
u32 ioc_state; u32 ioc_state;
int rc;
dinitprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s\n", ioc->name, dinitprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s\n", ioc->name,
__func__)); __func__));
...@@ -3430,11 +3431,15 @@ _base_make_ioc_ready(struct MPT2SAS_ADAPTER *ioc, int sleep_flag, ...@@ -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 ((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_OPERATIONAL)
if (!(_base_send_ioc_reset(ioc, 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; return 0;
}
issue_diag_reset: issue_diag_reset:
return _base_diag_reset(ioc, CAN_SLEEP); rc = _base_diag_reset(ioc, CAN_SLEEP);
ioc->ioc_reset_count++;
return rc;
} }
/** /**
......
...@@ -615,6 +615,7 @@ struct MPT2SAS_ADAPTER { ...@@ -615,6 +615,7 @@ struct MPT2SAS_ADAPTER {
u16 msix_vector_count; u16 msix_vector_count;
u32 *msix_table; u32 *msix_table;
u32 *msix_table_backup; u32 *msix_table_backup;
u32 ioc_reset_count;
/* internal commands, callback index */ /* internal commands, callback index */
u8 scsi_io_cb_idx; u8 scsi_io_cb_idx;
......
...@@ -2581,6 +2581,29 @@ _ctl_fwfault_debug_store(struct device *cdev, ...@@ -2581,6 +2581,29 @@ _ctl_fwfault_debug_store(struct device *cdev,
static DEVICE_ATTR(fwfault_debug, S_IRUGO | S_IWUSR, static DEVICE_ATTR(fwfault_debug, S_IRUGO | S_IWUSR,
_ctl_fwfault_debug_show, _ctl_fwfault_debug_store); _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[] = { struct device_attribute *mpt2sas_host_attrs[] = {
&dev_attr_version_fw, &dev_attr_version_fw,
&dev_attr_version_bios, &dev_attr_version_bios,
...@@ -2597,6 +2620,7 @@ struct device_attribute *mpt2sas_host_attrs[] = { ...@@ -2597,6 +2620,7 @@ struct device_attribute *mpt2sas_host_attrs[] = {
&dev_attr_fwfault_debug, &dev_attr_fwfault_debug,
&dev_attr_fw_queue_depth, &dev_attr_fw_queue_depth,
&dev_attr_host_sas_address, &dev_attr_host_sas_address,
&dev_attr_ioc_reset_count,
NULL, NULL,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment