Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line Diff line number Diff line
@@ -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,


	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;
}
}


/**
/**
+1 −0
Original line number Original line Diff line number Diff line
@@ -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;
+24 −0
Original line number Original line Diff line number Diff line
@@ -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[] = {
	&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,
};
};