This patch set contains all the features and defect fixes from Phase4 to Phase8.
Please review this patch set and consider these patches for next kernel release.
Sreekanth Reddy (20):
[SCSI] mpt3sas: Added Combined Reply Queue feature to extend up-to 96
MSIX vector support
[SCSI] mpt3sas: Get IOC_FACTS information using handshake protocol
only after HBA card gets into READY or Operational state.
[SCSI] mpt3sas: Don't block the drive when drive addition under the
control of SML
[SCSI] mpt3sas: Remove redundancy code while freeing the controller
resources.
[SCSI] mpt3sas: MPI 2.5 Rev I (2.5.4) specifications.
[SCSI] mpt3sas: Provides the physical location of sas drives
[SCSI] mpt3sas: Bump mpt3sas Driver version to v5.100.00.00
[SCSI] mpt3sas: Update MPI2 strings to MPI2.5
[SCSI] mpt3sas: MPI 2.5 Rev J (2.5.5) specification and 2.00.34 header
files
[SCSI] mpt3sas: Add branding string support for OEM's HBA
[SCSI] mpt3sas: Add branding string support for OEM custom HBA
[SCSI] mpt3sas: Bump mpt3sas driver version to v6.100.00.00
[SCSI] mpt3sas: MPI 2.5 Rev K (2.5.6) specifications
[SCSI] mpt3sas: Complete the SCSI command with DID_RESET status for
log_info value 0x0x32010081
[SCSI] mpt3sas: Return host busy error status to SML when DMA mapping
of scatter gather list fails for a SCSI command
[SCSI] mpt3sas: Added support for customer specific branding
[SCSI] mpt3sas: Use alloc_ordered_workqueue() API instead of
create_singlethread_workqueue() API
[SCSI] mpt3sas: Call dma_mapping_error() API after mapping an address
with dma_map_single() API
[SCSI] mpt3sas: When device is blocked followed by unblock fails,
unfreeze the I/Os
[SCSI] mpt3sas : Bump mpt3sas driver version to 9.100.00.00
drivers/scsi/mpt3sas/mpi/mpi2.h | 8 +-
drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 52 ++++-
drivers/scsi/mpt3sas/mpi/mpi2_ioc.h | 4 +-
drivers/scsi/mpt3sas/mpi/mpi2_tool.h | 4 +-
drivers/scsi/mpt3sas/mpt3sas_base.c | 284 ++++++++++++++++++++++---
drivers/scsi/mpt3sas/mpt3sas_base.h | 48 ++++-
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 344 ++++++++++++++++++++++++++-----
drivers/scsi/mpt3sas/mpt3sas_transport.c | 22 +-
8 files changed, 662 insertions(+), 104 deletions(-)
--
2.0.2
In this patch, increased the number of MSIX vector support for SAS3 C0 HBAs to up-to 96.
Following are changes that are done in this patch
1. Support this feature only for SAS3 C0 cards and also only when reply post free queue count is greater than 8.
2. Instead of using single ReplyPostHostIndex system interface, here 12 ReplyPostHostIndex system interfaces are used. reply post free queues numbered from 0 to 7 use the first ReplyPostHostIndex system interface to update its corresponding ReplyPostHostIndex values, reply post free queues numbered from 8 to 15 will use the second ReplyPostHostIndex system interface and so on. These 12 ReplyPostHostIndex system interfaces address are saved in the array replyPostRegisterIndex[].
3. Update the ReplyPostHostIndex value of corresponding reply post free queue in the (its msix_index/8)th entry of replyPostRegisterIndex[] array after processing the reply post descriptor.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.c | 70 +++++++++++++++++++++++++++++++++----
drivers/scsi/mpt3sas/mpt3sas_base.h | 7 +++-
2 files changed, 69 insertions(+), 8 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 14a781b..c13a365 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -83,7 +83,7 @@ static int msix_disable = -1;
module_param(msix_disable, int, 0);
MODULE_PARM_DESC(msix_disable, " disable msix routed interrupts (default=0)");
-static int max_msix_vectors = 8;
+static int max_msix_vectors = -1;
module_param(max_msix_vectors, int, 0);
MODULE_PARM_DESC(max_msix_vectors,
" max msix vectors - (default=8)");
@@ -1009,8 +1009,15 @@ _base_interrupt(int irq, void *bus_id)
}
wmb();
- writel(reply_q->reply_post_host_index | (msix_index <<
- MPI2_RPHI_MSIX_INDEX_SHIFT), &ioc->chip->ReplyPostHostIndex);
+ if (ioc->msix96_vector) {
+ writel(reply_q->reply_post_host_index | ((msix_index & 7) <<
+ MPI2_RPHI_MSIX_INDEX_SHIFT),
+ ioc->replyPostRegisterIndex[msix_index/8]);
+ } else {
+ writel(reply_q->reply_post_host_index | (msix_index <<
+ MPI2_RPHI_MSIX_INDEX_SHIFT),
+ &ioc->chip->ReplyPostHostIndex);
+ }
atomic_dec(&reply_q->busy);
return IRQ_HANDLED;
}
@@ -1560,8 +1567,6 @@ _base_check_enable_msix(struct MPT3SAS_ADAPTER *ioc)
pci_read_config_word(ioc->pdev, base + 2, &message_control);
ioc->msix_vector_count = (message_control & 0x3FF) + 1;
- if (ioc->msix_vector_count > 8)
- ioc->msix_vector_count = 8;
dinitprintk(ioc, pr_info(MPT3SAS_FMT
"msix is supported, vector_count(%d)\n",
ioc->name, ioc->msix_vector_count));
@@ -1880,6 +1885,31 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
if (r)
goto out_fail;
+ /* Use the Combined reply queue feature only for SAS3 C0 HBAs and
+ * also only when reply queue count is greater than 8
+ */
+ if (ioc->msix96_vector && ioc->reply_queue_count > 8) {
+ /* If this is an 96 vector supported device,
+ set up ReplyPostIndex addresses */
+ ioc->replyPostRegisterIndex = kcalloc(12,
+ sizeof(resource_size_t *), GFP_KERNEL);
+ if (!ioc->replyPostRegisterIndex) {
+ dfailprintk(ioc, printk(MPT3SAS_FMT
+ "allocation for reply Post Register Index failed!!!\n",
+ ioc->name));
+ r = -ENOMEM;
+ goto out_fail;
+ }
+
+ for (i = 0; i < 12; i++) {
+ ioc->replyPostRegisterIndex[i] = (resource_size_t *)
+ ((u8 *)&ioc->chip->Doorbell +
+ MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET +
+ (i * 0x10));
+ }
+ } else
+ ioc->msix96_vector = 0;
+
list_for_each_entry(reply_q, &ioc->reply_queue_list, list)
pr_info(MPT3SAS_FMT "%s: IRQ %d\n",
reply_q->name, ((ioc->msix_enable) ? "PCI-MSI-X enabled" :
@@ -1901,6 +1931,8 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
pci_release_selected_regions(ioc->pdev, ioc->bars);
pci_disable_pcie_error_reporting(pdev);
pci_disable_device(pdev);
+ if (ioc->msix96_vector)
+ kfree(ioc->replyPostRegisterIndex);
return r;
}
@@ -4522,8 +4554,16 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
/* initialize reply post host index */
list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
- writel(reply_q->msix_index << MPI2_RPHI_MSIX_INDEX_SHIFT,
- &ioc->chip->ReplyPostHostIndex);
+ if (ioc->msix96_vector) {
+ writel((reply_q->msix_index & 7)<<
+ MPI2_RPHI_MSIX_INDEX_SHIFT,
+ ioc->replyPostRegisterIndex[reply_q->msix_index/8]);
+ } else {
+ writel(reply_q->msix_index <<
+ MPI2_RPHI_MSIX_INDEX_SHIFT,
+ &ioc->chip->ReplyPostHostIndex);
+ }
+
if (!_base_is_controller_msix_enabled(ioc))
goto skip_init_reply_post_host_index;
}
@@ -4577,6 +4617,9 @@ mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
_base_free_irq(ioc);
_base_disable_msix(ioc);
+ if (ioc->msix96_vector)
+ kfree(ioc->replyPostRegisterIndex);
+
if (ioc->chip_phys && ioc->chip)
iounmap(ioc->chip);
ioc->chip_phys = 0;
@@ -4600,6 +4643,7 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
{
int r, i;
int cpu_id, last_cpu_id = 0;
+ u8 revision;
dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
__func__));
@@ -4618,6 +4662,18 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
r = -ENOMEM;
goto out_free_resources;
}
+ /* Check whether the controller revision is C0 or above.
+ C0 and above revision controllers support 96 vectors */
+ revision = ioc->pdev->revision;
+
+ if ((ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3004 ||
+ ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3008 ||
+ ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_1 ||
+ ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_2 ||
+ ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_5 ||
+ ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_6) &&
+ (revision >= 0x02))
+ ioc->msix96_vector = 1;
ioc->rdpq_array_enable_assigned = 0;
ioc->dma_mask = 0;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index afa8816..6b8d8f1 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -728,7 +728,8 @@ typedef void (*MPT3SAS_FLUSH_RUNNING_CMDS)(struct MPT3SAS_ADAPTER *ioc);
* is assigned only ones
* @reply_queue_count: number of reply queue's
* @reply_queue_list: link list contaning the reply queue info
- * @reply_post_host_index: head index in the pool where FW completes IO
+ * @msix96_vector: 96 MSI-X vector support
+ * @replyPostRegisterIndex: index of next position in Reply Desc Post Queue
* @delayed_tr_list: target reset link list
* @delayed_tr_volume_list: volume target reset link list
* @@temp_sensors_count: flag to carry the number of temperature sensors
@@ -937,6 +938,10 @@ struct MPT3SAS_ADAPTER {
u8 reply_queue_count;
struct list_head reply_queue_list;
+ u8 msix96_vector;
+ /* reply post register index */
+ resource_size_t **replyPostRegisterIndex;
+
struct list_head delayed_tr_list;
struct list_head delayed_tr_volume_list;
u8 temp_sensors_count;
--
2.0.2
Driver initialization fails if driver tries to send IOC facts request message when the IOC is in reset or in a fault state.
This patch will make sure that
1.Driver to send IOC facts request message only if HBA is in operational or ready state.
2.If IOC is in fault state, a diagnostic reset would be issued.
3.If IOC is in reset state then driver will wait for 10 seconds to exit out of reset state.
If the HBA continues to be in reset state, then the HBA wouldn't be claimed by the driver.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.c | 65 +++++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index c13a365..ce57320 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -3169,6 +3169,9 @@ _base_wait_on_iocstate(struct MPT3SAS_ADAPTER *ioc, u32 ioc_state, int timeout,
* Notes: MPI2_HIS_IOC2SYS_DB_STATUS - set to one when IOC writes to doorbell.
*/
static int
+_base_diag_reset(struct MPT3SAS_ADAPTER *ioc, int sleep_flag);
+
+static int
_base_wait_for_doorbell_int(struct MPT3SAS_ADAPTER *ioc, int timeout,
int sleep_flag)
{
@@ -3711,6 +3714,61 @@ _base_get_port_facts(struct MPT3SAS_ADAPTER *ioc, int port, int sleep_flag)
}
/**
+ * _base_wait_for_iocstate - Wait until the card is in READY or OPERATIONAL
+ * @ioc: per adapter object
+ * @timeout:
+ * @sleep_flag: CAN_SLEEP or NO_SLEEP
+ *
+ * Returns 0 for success, non-zero for failure.
+ */
+static int
+_base_wait_for_iocstate(struct MPT3SAS_ADAPTER *ioc, int timeout,
+ int sleep_flag)
+{
+ u32 ioc_state;
+ int rc;
+
+ dinitprintk(ioc, printk(MPT3SAS_FMT "%s\n", ioc->name,
+ __func__));
+
+ if (ioc->pci_error_recovery)
+ return 0;
+
+ ioc_state = mpt3sas_base_get_iocstate(ioc, 0);
+ dhsprintk(ioc, printk(MPT3SAS_FMT "%s: ioc_state(0x%08x)\n",
+ ioc->name, __func__, ioc_state));
+
+ if (((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_READY) ||
+ (ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_OPERATIONAL)
+ return 0;
+
+ if (ioc_state & MPI2_DOORBELL_USED) {
+ dhsprintk(ioc, printk(MPT3SAS_FMT
+ "unexpected doorbell active!\n", ioc->name));
+ goto issue_diag_reset;
+ }
+
+ if ((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_FAULT) {
+ mpt3sas_base_fault_info(ioc, ioc_state &
+ MPI2_DOORBELL_DATA_MASK);
+ goto issue_diag_reset;
+ }
+
+ ioc_state = _base_wait_on_iocstate(ioc, MPI2_IOC_STATE_READY,
+ timeout, sleep_flag);
+ if (ioc_state) {
+ dfailprintk(ioc, printk(MPT3SAS_FMT
+ "%s: failed going to ready state (ioc_state=0x%x)\n",
+ ioc->name, __func__, ioc_state));
+ return -EFAULT;
+ }
+
+ issue_diag_reset:
+ rc = _base_diag_reset(ioc, sleep_flag);
+ return rc;
+}
+
+/**
* _base_get_ioc_facts - obtain ioc facts reply and save in ioc
* @ioc: per adapter object
* @sleep_flag: CAN_SLEEP or NO_SLEEP
@@ -3728,6 +3786,13 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
__func__));
+ r = _base_wait_for_iocstate(ioc, 10, sleep_flag);
+ if (r) {
+ dfailprintk(ioc, printk(MPT3SAS_FMT
+ "%s: failed getting to correct state\n",
+ ioc->name, __func__));
+ return r;
+ }
mpi_reply_sz = sizeof(Mpi2IOCFactsReply_t);
mpi_request_sz = sizeof(Mpi2IOCFactsRequest_t);
memset(&mpi_request, 0, mpi_request_sz);
--
2.0.2
During hot-plugging of a disk(having a flaky link), the disk addition
stops and any further disk addition or removal doesn't happen on that
controller.
This is because, when driver receives DELAY_NOT_RESPONDING event for a disk
while it is undergoing addition at the SCSI Transport layer, the driver
would block the I/O to that disk resulting in a deadlock. i.e the disk
addition work couldn't be completed at the SCSI Transport Layer as it
can't send any I/Os (such as Inquiry, Report LUNs etc) to the disk as
I/Os are blocked to this drive. Also any subsequent device removal
(TARGET_NOT_RESPONDING) or link update(RC_PHY_CHANGED) event couldn't be
processed as they are in the queue to get processed after disk addition
event.
Description of Change:
Don't block the drive when drive addition is under the control of SML.
So that SML won't be blocked of issuing the device dicovery commands
(such as Inquiry, Report LUNs etc).
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.h | 4 +++-
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 7 +++++++
drivers/scsi/mpt3sas/mpt3sas_transport.c | 18 ++++++++++++++++++
3 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 6b8d8f1..b79ad4f 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -294,7 +294,8 @@ struct _internal_cmd {
* @responding: used in _scsih_sas_device_mark_responding
* @fast_path: fast path feature enable bit
* @pfa_led_on: flag for PFA LED status
- *
+ * @pend_sas_rphy_add: flag to check if device is in sas_rphy_add()
+ * addition routine.
*/
struct _sas_device {
struct list_head list;
@@ -315,6 +316,7 @@ struct _sas_device {
u8 responding;
u8 fast_path;
u8 pfa_led_on;
+ u8 pend_sas_rphy_add;
};
/**
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 5a97e32..d457dba 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -2644,6 +2644,11 @@ _scsih_block_io_device(struct MPT3SAS_ADAPTER *ioc, u16 handle)
{
struct MPT3SAS_DEVICE *sas_device_priv_data;
struct scsi_device *sdev;
+ struct _sas_device *sas_device;
+
+ sas_device = _scsih_sas_device_find_by_handle(ioc, handle);
+ if (!sas_device)
+ return;
shost_for_each_device(sdev, ioc->shost) {
sas_device_priv_data = sdev->hostdata;
@@ -2653,6 +2658,8 @@ _scsih_block_io_device(struct MPT3SAS_ADAPTER *ioc, u16 handle)
continue;
if (sas_device_priv_data->block)
continue;
+ if (sas_device->pend_sas_rphy_add)
+ continue;
sas_device_priv_data->block = 1;
scsi_internal_device_block(sdev);
sdev_printk(KERN_INFO, sdev,
diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
index efb98af..7a7aa68 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
@@ -649,6 +649,7 @@ mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc, u16 handle,
unsigned long flags;
struct _sas_node *sas_node;
struct sas_rphy *rphy;
+ struct _sas_device *sas_device = NULL;
int i;
struct sas_port *port;
@@ -731,10 +732,27 @@ mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc, u16 handle,
mpt3sas_port->remote_identify.device_type);
rphy->identify = mpt3sas_port->remote_identify;
+
+ if (mpt3sas_port->remote_identify.device_type == SAS_END_DEVICE) {
+ sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc,
+ mpt3sas_port->remote_identify.sas_address);
+ if (!sas_device) {
+ dfailprintk(ioc, printk(MPT3SAS_FMT
+ "failure at %s:%d/%s()!\n",
+ ioc->name, __FILE__, __LINE__, __func__));
+ goto out_fail;
+ }
+ sas_device->pend_sas_rphy_add = 1;
+ }
+
if ((sas_rphy_add(rphy))) {
pr_err(MPT3SAS_FMT "failure at %s:%d/%s()!\n",
ioc->name, __FILE__, __LINE__, __func__);
}
+
+ if (mpt3sas_port->remote_identify.device_type == SAS_END_DEVICE)
+ sas_device->pend_sas_rphy_add = 0;
+
if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
dev_printk(KERN_INFO, &rphy->dev,
"add: handle(0x%04x), sas_addr(0x%016llx)\n",
--
2.0.2
Removed the redundancy code while freeing the controller resources.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.c | 57 +++++++++++++++++++++----------------
1 file changed, 32 insertions(+), 25 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index ce57320..32b86bf 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -1798,6 +1798,36 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc)
}
/**
+ * mpt3sas_base_unmap_resources - free controller resources
+ * @ioc: per adapter object
+ */
+void
+mpt3sas_base_unmap_resources(struct MPT3SAS_ADAPTER *ioc)
+{
+ struct pci_dev *pdev = ioc->pdev;
+
+ dexitprintk(ioc, printk(MPT3SAS_FMT "%s\n",
+ ioc->name, __func__));
+
+ _base_free_irq(ioc);
+ _base_disable_msix(ioc);
+
+ if (ioc->msix96_vector)
+ kfree(ioc->replyPostRegisterIndex);
+
+ if (ioc->chip_phys) {
+ iounmap(ioc->chip);
+ ioc->chip_phys = 0;
+ }
+
+ if (pci_is_enabled(pdev)) {
+ pci_release_selected_regions(ioc->pdev, ioc->bars);
+ pci_disable_pcie_error_reporting(pdev);
+ pci_disable_device(pdev);
+ }
+}
+
+/**
* mpt3sas_base_map_resources - map in controller resources (io/irq/memap)
* @ioc: per adapter object
*
@@ -1925,14 +1955,7 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
return 0;
out_fail:
- if (ioc->chip_phys)
- iounmap(ioc->chip);
- ioc->chip_phys = 0;
- pci_release_selected_regions(ioc->pdev, ioc->bars);
- pci_disable_pcie_error_reporting(pdev);
- pci_disable_device(pdev);
- if (ioc->msix96_vector)
- kfree(ioc->replyPostRegisterIndex);
+ mpt3sas_base_unmap_resources(ioc);
return r;
}
@@ -4667,8 +4690,6 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
void
mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
{
- struct pci_dev *pdev = ioc->pdev;
-
dexitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
__func__));
@@ -4679,21 +4700,7 @@ mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
ioc->shost_recovery = 0;
}
- _base_free_irq(ioc);
- _base_disable_msix(ioc);
-
- if (ioc->msix96_vector)
- kfree(ioc->replyPostRegisterIndex);
-
- if (ioc->chip_phys && ioc->chip)
- iounmap(ioc->chip);
- ioc->chip_phys = 0;
-
- if (pci_is_enabled(pdev)) {
- pci_release_selected_regions(ioc->pdev, ioc->bars);
- pci_disable_pcie_error_reporting(pdev);
- pci_disable_device(pdev);
- }
+ mpt3sas_base_unmap_resources(ioc);
return;
}
--
2.0.2
Update MPI 2.5 Release: MPI 2.5 Rev I (2.5.4) specification and 2.00.33 header files
Below is the change set from the MPI specification for I Rev
1) Added Base Enclosure Level bit to the Flags field of Manufacturing Page 7.
2) Updated description of the MaxTargetPortConnectTime field of SAS IO Unit Page 1.
3) Added EnclosureLevel and ConnectorName fields to SAS Device Page 0. Also, added EnclosureLevel and ConnectorName Valid bit to the Flags field.
4) Added EnclosureLevel field to SAS Enclosure Page 0. Also, added EnclosureLevel Valid bit to the Flags field.
5) Added value for BIOS image to HashImageType.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpi/mpi2.h | 6 ++++--
drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 27 +++++++++++++++++++++------
drivers/scsi/mpt3sas/mpi/mpi2_ioc.h | 4 +++-
3 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2.h b/drivers/scsi/mpt3sas/mpi/mpi2.h
index c34c115..d730c5c 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2.h
@@ -8,7 +8,7 @@
* scatter/gather formats.
* Creation Date: June 21, 2006
*
- * mpi2.h Version: 02.00.31
+ * mpi2.h Version: 02.00.33
*
* NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
* prefix are for use only on MPI v2.5 products, and must not be used
@@ -88,6 +88,8 @@
* Added MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET.
* 04-09-13 02.00.30 Bumped MPI2_HEADER_VERSION_UNIT.
* 04-17-13 02.00.31 Bumped MPI2_HEADER_VERSION_UNIT.
+ * 08-19-13 02.00.32 Bumped MPI2_HEADER_VERSION_UNIT.
+ * 12-05-13 02.00.33 Bumped MPI2_HEADER_VERSION_UNIT.
* --------------------------------------------------------------------------
*/
@@ -121,7 +123,7 @@
#define MPI2_VERSION_02_05 (0x0205)
/*Unit and Dev versioning for this MPI header set */
-#define MPI2_HEADER_VERSION_UNIT (0x1F)
+#define MPI2_HEADER_VERSION_UNIT (0x21)
#define MPI2_HEADER_VERSION_DEV (0x00)
#define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00)
#define MPI2_HEADER_VERSION_UNIT_SHIFT (8)
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
index e261a31..62dfbf6 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
@@ -6,7 +6,7 @@
* Title: MPI Configuration messages and pages
* Creation Date: November 10, 2006
*
- * mpi2_cnfg.h Version: 02.00.26
+ * mpi2_cnfg.h Version: 02.00.27
*
* NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
* prefix are for use only on MPI v2.5 products, and must not be used
@@ -165,6 +165,16 @@
* match the specification.
* 08-19-13 02.00.26 Added reserved words to MPI2_CONFIG_PAGE_IO_UNIT_7 for
* future use.
+ * 12-05-13 02.00.27 Added MPI2_MANPAGE7_FLAG_BASE_ENCLOSURE_LEVEL for
+ * MPI2_CONFIG_PAGE_MAN_7.
+ * Added EnclosureLevel and ConnectorName fields to
+ * MPI2_CONFIG_PAGE_SAS_DEV_0.
+ * Added MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID for
+ * MPI2_CONFIG_PAGE_SAS_DEV_0.
+ * Added EnclosureLevel field to
+ * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0.
+ * Added MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID for
+ * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0.
* --------------------------------------------------------------------------
*/
@@ -724,6 +734,7 @@ typedef struct _MPI2_CONFIG_PAGE_MAN_7 {
#define MPI2_MANUFACTURING7_PAGEVERSION (0x01)
/*defines for the Flags field */
+#define MPI2_MANPAGE7_FLAG_BASE_ENCLOSURE_LEVEL (0x00000008)
#define MPI2_MANPAGE7_FLAG_EVENTREPLAY_SLOT_ORDER (0x00000002)
#define MPI2_MANPAGE7_FLAG_USE_SLOT_INFO (0x00000001)
@@ -2633,9 +2644,9 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_0 {
U8
ControlGroup; /*0x2E */
U8
- Reserved1; /*0x2F */
+ EnclosureLevel; /*0x2F */
U32
- Reserved2; /*0x30 */
+ ConnectorName[4]; /*0x30 */
U32
Reserved3; /*0x34 */
} MPI2_CONFIG_PAGE_SAS_DEV_0,
@@ -2643,7 +2654,7 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_0 {
Mpi2SasDevicePage0_t,
*pMpi2SasDevicePage0_t;
-#define MPI2_SASDEVICE0_PAGEVERSION (0x08)
+#define MPI2_SASDEVICE0_PAGEVERSION (0x09)
/*values for SAS Device Page 0 AccessStatus field */
#define MPI2_SAS_DEVICE0_ASTATUS_NO_ERRORS (0x00)
@@ -2683,6 +2694,7 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_0 {
#define MPI2_SAS_DEVICE0_FLAGS_SATA_NCQ_SUPPORTED (0x0020)
#define MPI2_SAS_DEVICE0_FLAGS_SATA_FUA_SUPPORTED (0x0010)
#define MPI2_SAS_DEVICE0_FLAGS_PORT_SELECTOR_ATTACH (0x0008)
+#define MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID (0x0002)
#define MPI2_SAS_DEVICE0_FLAGS_DEVICE_PRESENT (0x0001)
@@ -3019,8 +3031,10 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 {
NumSlots; /*0x18 */
U16
StartSlot; /*0x1A */
- U16
+ U8
Reserved2; /*0x1C */
+ U8
+ EnclosureLevel; /*0x1D */
U16
SEPDevHandle; /*0x1E */
U32
@@ -3031,9 +3045,10 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 {
*PTR_MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0,
Mpi2SasEnclosurePage0_t, *pMpi2SasEnclosurePage0_t;
-#define MPI2_SASENCLOSURE0_PAGEVERSION (0x03)
+#define MPI2_SASENCLOSURE0_PAGEVERSION (0x04)
/*values for SAS Enclosure Page 0 Flags field */
+#define MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID (0x0010)
#define MPI2_SAS_ENCLS0_FLAGS_MNG_MASK (0x000F)
#define MPI2_SAS_ENCLS0_FLAGS_MNG_UNKNOWN (0x0000)
#define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_SES (0x0001)
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h b/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
index 4908309..d7598cc 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
@@ -6,7 +6,7 @@
* Title: MPI IOC, Port, Event, FW Download, and FW Upload messages
* Creation Date: October 11, 2006
*
- * mpi2_ioc.h Version: 02.00.23
+ * mpi2_ioc.h Version: 02.00.24
*
* NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
* prefix are for use only on MPI v2.5 products, and must not be used
@@ -132,6 +132,7 @@
* Added MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE.
* Added MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY.
* Added Encrypted Hash Extended Image.
+ * 12-05-13 02.00.24 Added MPI25_HASH_IMAGE_TYPE_BIOS.
* --------------------------------------------------------------------------
*/
@@ -1598,6 +1599,7 @@ Mpi25EncryptedHashEntry_t, *pMpi25EncryptedHashEntry_t;
/* values for HashImageType */
#define MPI25_HASH_IMAGE_TYPE_UNUSED (0x00)
#define MPI25_HASH_IMAGE_TYPE_FIRMWARE (0x01)
+#define MPI25_HASH_IMAGE_TYPE_BIOS (0x02)
/* values for HashAlgorithm */
#define MPI25_HASH_ALGORITHM_UNUSED (0x00)
--
2.0.2
This Patch will provide more details of the devices such as slot number, enclosure logical id, enclosure level & connector name in the following scenarios,
- When end device is added in the topology,
- When the end device is removed from the setup,
- When the SCSI mid layer issues TASK ABORT/ DEVICE RESET/ TARGET RESET during error handling,
- When any command to the device fails with Sense key Hardware error or Medium error or Unit Attention,
- When firmware returns device error or device not ready status for the end device,
- When a Predicted fault is detected on an end device.
This information can be used by the user to identify the location of the desired drive in the topology.
Driver will get these information by reading the sas device page0.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.h | 2 +
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 238 +++++++++++++++++++++++++++++------
2 files changed, 201 insertions(+), 39 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index b79ad4f..293ad23 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -317,6 +317,8 @@ struct _sas_device {
u8 fast_path;
u8 pfa_led_on;
u8 pend_sas_rphy_add;
+ u8 enclosure_level;
+ u8 connector_name[4];
};
/**
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index d457dba..64dd90b 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -585,6 +585,22 @@ _scsih_sas_device_remove(struct MPT3SAS_ADAPTER *ioc,
if (!sas_device)
return;
+ pr_info(MPT3SAS_FMT
+ "removing handle(0x%04x), sas_addr(0x%016llx)\n",
+ ioc->name, sas_device->handle,
+ (unsigned long long) sas_device->sas_address);
+
+ if (sas_device->enclosure_handle != 0)
+ pr_info(MPT3SAS_FMT
+ "removing enclosure logical id(0x%016llx), slot(%d)\n",
+ ioc->name, (unsigned long long)
+ sas_device->enclosure_logical_id, sas_device->slot);
+
+ if (sas_device->connector_name[0] != '\0')
+ pr_info(MPT3SAS_FMT
+ "removing enclosure level(0x%04x), connector name( %s)\n",
+ ioc->name, sas_device->enclosure_level,
+ sas_device->connector_name);
spin_lock_irqsave(&ioc->sas_device_lock, flags);
list_del(&sas_device->list);
@@ -663,6 +679,18 @@ _scsih_sas_device_add(struct MPT3SAS_ADAPTER *ioc,
ioc->name, __func__, sas_device->handle,
(unsigned long long)sas_device->sas_address));
+ if (sas_device->enclosure_handle != 0)
+ dewtprintk(ioc, pr_info(MPT3SAS_FMT
+ "%s: enclosure logical id(0x%016llx), slot( %d)\n",
+ ioc->name, __func__, (unsigned long long)
+ sas_device->enclosure_logical_id, sas_device->slot));
+
+ if (sas_device->connector_name[0] != '\0')
+ dewtprintk(ioc, pr_info(MPT3SAS_FMT
+ "%s: enclosure level(0x%04x), connector name( %s)\n",
+ ioc->name, __func__,
+ sas_device->enclosure_level, sas_device->connector_name));
+
spin_lock_irqsave(&ioc->sas_device_lock, flags);
list_add_tail(&sas_device->list, &ioc->sas_device_list);
spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
@@ -704,6 +732,18 @@ _scsih_sas_device_init_add(struct MPT3SAS_ADAPTER *ioc,
__func__, sas_device->handle,
(unsigned long long)sas_device->sas_address));
+ if (sas_device->enclosure_handle != 0)
+ dewtprintk(ioc, pr_info(MPT3SAS_FMT
+ "%s: enclosure logical id(0x%016llx), slot( %d)\n",
+ ioc->name, __func__, (unsigned long long)
+ sas_device->enclosure_logical_id, sas_device->slot));
+
+ if (sas_device->connector_name[0] != '\0')
+ dewtprintk(ioc, pr_info(MPT3SAS_FMT
+ "%s: enclosure level(0x%04x), connector name( %s)\n",
+ ioc->name, __func__, sas_device->enclosure_level,
+ sas_device->connector_name));
+
spin_lock_irqsave(&ioc->sas_device_lock, flags);
list_add_tail(&sas_device->list, &ioc->sas_device_init_list);
_scsih_determine_boot_device(ioc, sas_device, 0);
@@ -1772,10 +1812,16 @@ _scsih_slave_configure(struct scsi_device *sdev)
"sas_addr(0x%016llx), phy(%d), device_name(0x%016llx)\n",
ds, handle, (unsigned long long)sas_device->sas_address,
sas_device->phy, (unsigned long long)sas_device->device_name);
- sdev_printk(KERN_INFO, sdev,
- "%s: enclosure_logical_id(0x%016llx), slot(%d)\n",
- ds, (unsigned long long)
- sas_device->enclosure_logical_id, sas_device->slot);
+ if (sas_device->enclosure_handle != 0)
+ sdev_printk(KERN_INFO, sdev,
+ "%s: enclosure_logical_id(0x%016llx), slot(%d)\n",
+ ds, (unsigned long long)
+ sas_device->enclosure_logical_id, sas_device->slot);
+ if (sas_device->connector_name[0] != '\0')
+ sdev_printk(KERN_INFO, sdev,
+ "%s: enclosure level(0x%04x), connector name( %s)\n",
+ ds, sas_device->enclosure_level,
+ sas_device->connector_name);
spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
@@ -2189,10 +2235,17 @@ _scsih_tm_display_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd)
sas_device->handle,
(unsigned long long)sas_device->sas_address,
sas_device->phy);
- starget_printk(KERN_INFO, starget,
- "enclosure_logical_id(0x%016llx), slot(%d)\n",
- (unsigned long long)sas_device->enclosure_logical_id,
- sas_device->slot);
+ if (sas_device->enclosure_handle != 0)
+ starget_printk(KERN_INFO, starget,
+ "enclosure_logical_id(0x%016llx), slot(%d)\n",
+ (unsigned long long)
+ sas_device->enclosure_logical_id,
+ sas_device->slot);
+ if (sas_device->connector_name)
+ starget_printk(KERN_INFO, starget,
+ "enclosure level(0x%04x),connector name(%s)\n",
+ sas_device->enclosure_level,
+ sas_device->connector_name);
}
spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
}
@@ -2813,6 +2866,18 @@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle)
"setting delete flag: handle(0x%04x), sas_addr(0x%016llx)\n",
ioc->name, handle,
(unsigned long long)sas_address));
+ if (sas_device->enclosure_handle != 0)
+ dewtprintk(ioc, pr_info(MPT3SAS_FMT
+ "setting delete flag:enclosure logical id(0x%016llx),"
+ " slot(%d)\n", ioc->name, (unsigned long long)
+ sas_device->enclosure_logical_id,
+ sas_device->slot));
+ if (sas_device->connector_name)
+ dewtprintk(ioc, pr_info(MPT3SAS_FMT
+ "setting delete flag: enclosure level(0x%04x),"
+ " connector name( %s)\n", ioc->name,
+ sas_device->enclosure_level,
+ sas_device->connector_name));
_scsih_ublock_io_device(ioc, sas_address);
sas_target_priv_data->handle = MPT3SAS_INVALID_DEVICE_HANDLE;
}
@@ -3828,10 +3893,19 @@ _scsih_scsi_ioc_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
"\tsas_address(0x%016llx), phy(%d)\n",
ioc->name, (unsigned long long)
sas_device->sas_address, sas_device->phy);
- pr_warn(MPT3SAS_FMT
- "\tenclosure_logical_id(0x%016llx), slot(%d)\n",
- ioc->name, (unsigned long long)
- sas_device->enclosure_logical_id, sas_device->slot);
+ if (sas_device->enclosure_handle != 0)
+ pr_warn(MPT3SAS_FMT
+ "\tenclosure_logical_id(0x%016llx),"
+ "slot(%d)\n", ioc->name,
+ (unsigned long long)
+ sas_device->enclosure_logical_id,
+ sas_device->slot);
+ if (sas_device->connector_name[0])
+ pr_warn(MPT3SAS_FMT
+ "\tenclosure level(0x%04x),"
+ " connector name( %s)\n", ioc->name,
+ sas_device->enclosure_level,
+ sas_device->connector_name);
}
spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
}
@@ -4006,7 +4080,16 @@ _scsih_smart_predicted_fault(struct MPT3SAS_ADAPTER *ioc, u16 handle)
spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
return;
}
- starget_printk(KERN_WARNING, starget, "predicted fault\n");
+ if (sas_device->enclosure_handle != 0)
+ starget_printk(KERN_INFO, starget, "predicted fault, "
+ "enclosure logical id(0x%016llx), slot(%d)\n",
+ (unsigned long long)sas_device->enclosure_logical_id,
+ sas_device->slot);
+ if (sas_device->connector_name[0] != '\0')
+ starget_printk(KERN_WARNING, starget, "predicted fault, "
+ "enclosure level(0x%04x), connector name( %s)\n",
+ sas_device->enclosure_level,
+ sas_device->connector_name);
spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
if (ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM)
@@ -4126,8 +4209,13 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
_scsih_smart_predicted_fault(ioc,
le16_to_cpu(mpi_reply->DevHandle));
mpt3sas_trigger_scsi(ioc, data.skey, data.asc, data.ascq);
- }
+ if (!(ioc->logging_level & MPT_DEBUG_REPLY) &&
+ ((scmd->sense_buffer[2] == UNIT_ATTENTION) ||
+ (scmd->sense_buffer[2] == MEDIUM_ERROR) ||
+ (scmd->sense_buffer[2] == HARDWARE_ERROR)))
+ _scsih_scsi_ioc_info(ioc, scmd, mpi_reply, smid);
+ }
switch (ioc_status) {
case MPI2_IOCSTATUS_BUSY:
case MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES:
@@ -4795,6 +4883,16 @@ _scsih_check_device(struct MPT3SAS_ADAPTER *ioc,
sas_device->handle, handle);
sas_target_priv_data->handle = handle;
sas_device->handle = handle;
+ if (sas_device_pg0.Flags &
+ MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) {
+ sas_device->enclosure_level =
+ le16_to_cpu(sas_device_pg0.EnclosureLevel);
+ memcpy(&sas_device->connector_name[0],
+ &sas_device_pg0.ConnectorName[0], 4);
+ } else {
+ sas_device->enclosure_level = 0;
+ sas_device->connector_name[0] = '\0';
+ }
}
/* check if device is present */
@@ -4901,14 +4999,24 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num,
ioc->name, __FILE__, __LINE__, __func__);
sas_device->enclosure_handle =
le16_to_cpu(sas_device_pg0.EnclosureHandle);
- sas_device->slot =
- le16_to_cpu(sas_device_pg0.Slot);
+ if (sas_device->enclosure_handle != 0)
+ sas_device->slot =
+ le16_to_cpu(sas_device_pg0.Slot);
sas_device->device_info = device_info;
sas_device->sas_address = sas_address;
sas_device->phy = sas_device_pg0.PhyNum;
sas_device->fast_path = (le16_to_cpu(sas_device_pg0.Flags) &
MPI25_SAS_DEVICE0_FLAGS_FAST_PATH_CAPABLE) ? 1 : 0;
+ if (sas_device_pg0.Flags & MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) {
+ sas_device->enclosure_level =
+ le16_to_cpu(sas_device_pg0.EnclosureLevel);
+ memcpy(&sas_device->connector_name[0],
+ &sas_device_pg0.ConnectorName[0], 4);
+ } else {
+ sas_device->enclosure_level = 0;
+ sas_device->connector_name[0] = '\0';
+ }
/* get enclosure_logical_id */
if (sas_device->enclosure_handle && !(mpt3sas_config_get_enclosure_pg0(
ioc, &mpi_reply, &enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE,
@@ -4950,6 +5058,18 @@ _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc,
ioc->name, __func__,
sas_device->handle, (unsigned long long)
sas_device->sas_address));
+ if (sas_device->enclosure_handle != 0)
+ dewtprintk(ioc, pr_info(MPT3SAS_FMT
+ "%s: enter: enclosure logical id(0x%016llx), slot(%d)\n",
+ ioc->name, __func__,
+ (unsigned long long)sas_device->enclosure_logical_id,
+ sas_device->slot));
+ if (sas_device->connector_name[0] != '\0')
+ dewtprintk(ioc, pr_info(MPT3SAS_FMT
+ "%s: enter: enclosure level(0x%04x), connector name( %s)\n",
+ ioc->name, __func__,
+ sas_device->enclosure_level,
+ sas_device->connector_name));
if (sas_device->starget && sas_device->starget->hostdata) {
sas_target_priv_data = sas_device->starget->hostdata;
@@ -4966,12 +5086,34 @@ _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc,
"removing handle(0x%04x), sas_addr(0x%016llx)\n",
ioc->name, sas_device->handle,
(unsigned long long) sas_device->sas_address);
+ if (sas_device->enclosure_handle != 0)
+ pr_info(MPT3SAS_FMT
+ "removing : enclosure logical id(0x%016llx), slot(%d)\n",
+ ioc->name,
+ (unsigned long long)sas_device->enclosure_logical_id,
+ sas_device->slot);
+ if (sas_device->connector_name[0] != '\0')
+ pr_info(MPT3SAS_FMT
+ "removing enclosure level(0x%04x), connector name( %s)\n",
+ ioc->name, sas_device->enclosure_level,
+ sas_device->connector_name);
dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: exit: handle(0x%04x), sas_addr(0x%016llx)\n",
ioc->name, __func__,
- sas_device->handle, (unsigned long long)
- sas_device->sas_address));
+ sas_device->handle, (unsigned long long)
+ sas_device->sas_address));
+ if (sas_device->enclosure_handle != 0)
+ dewtprintk(ioc, pr_info(MPT3SAS_FMT
+ "%s: exit: enclosure logical id(0x%016llx), slot(%d)\n",
+ ioc->name, __func__,
+ (unsigned long long)sas_device->enclosure_logical_id,
+ sas_device->slot));
+ if (sas_device->connector_name[0] != '\0')
+ dewtprintk(ioc, pr_info(MPT3SAS_FMT
+ "%s: exit: enclosure level(0x%04x), connector name(%s)\n",
+ ioc->name, __func__, sas_device->enclosure_level,
+ sas_device->connector_name));
kfree(sas_device);
}
@@ -6364,9 +6506,7 @@ _scsih_prep_device_scan(struct MPT3SAS_ADAPTER *ioc)
/**
* _scsih_mark_responding_sas_device - mark a sas_devices as responding
* @ioc: per adapter object
- * @sas_address: sas address
- * @slot: enclosure slot id
- * @handle: device handle
+ * @sas_device_pg0: SAS Device page 0
*
* After host reset, find out whether devices are still responding.
* Used in _scsih_remove_unresponsive_sas_devices.
@@ -6374,8 +6514,8 @@ _scsih_prep_device_scan(struct MPT3SAS_ADAPTER *ioc)
* Return nothing.
*/
static void
-_scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
- u16 slot, u16 handle)
+_scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc,
+Mpi2SasDevicePage0_t *sas_device_pg0)
{
struct MPT3SAS_TARGET *sas_target_priv_data = NULL;
struct scsi_target *starget;
@@ -6384,8 +6524,8 @@ _scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
spin_lock_irqsave(&ioc->sas_device_lock, flags);
list_for_each_entry(sas_device, &ioc->sas_device_list, list) {
- if (sas_device->sas_address == sas_address &&
- sas_device->slot == slot) {
+ if ((sas_device->sas_address == sas_device_pg0->SASAddress) &&
+ (sas_device->slot == sas_device_pg0->Slot)) {
sas_device->responding = 1;
starget = sas_device->starget;
if (starget && starget->hostdata) {
@@ -6394,22 +6534,40 @@ _scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
sas_target_priv_data->deleted = 0;
} else
sas_target_priv_data = NULL;
- if (starget)
+ if (starget) {
starget_printk(KERN_INFO, starget,
- "handle(0x%04x), sas_addr(0x%016llx), "
- "enclosure logical id(0x%016llx), "
- "slot(%d)\n", handle,
- (unsigned long long)sas_device->sas_address,
+ "handle(0x%04x), sas_addr(0x%016llx)\n",
+ sas_device_pg0->DevHandle,
(unsigned long long)
- sas_device->enclosure_logical_id,
- sas_device->slot);
- if (sas_device->handle == handle)
+ sas_device->sas_address);
+
+ if (sas_device->enclosure_handle != 0)
+ starget_printk(KERN_INFO, starget,
+ "enclosure logical id(0x%016llx),"
+ " slot(%d)\n",
+ (unsigned long long)
+ sas_device->enclosure_logical_id,
+ sas_device->slot);
+ }
+ if (sas_device_pg0->Flags &
+ MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) {
+ sas_device->enclosure_level =
+ le16_to_cpu(sas_device_pg0->EnclosureLevel);
+ memcpy(&sas_device->connector_name[0],
+ &sas_device_pg0->ConnectorName[0], 4);
+ } else {
+ sas_device->enclosure_level = 0;
+ sas_device->connector_name[0] = '\0';
+ }
+
+ if (sas_device->handle == sas_device_pg0->DevHandle)
goto out;
pr_info("\thandle changed from(0x%04x)!!!\n",
sas_device->handle);
- sas_device->handle = handle;
+ sas_device->handle = sas_device_pg0->DevHandle;
if (sas_target_priv_data)
- sas_target_priv_data->handle = handle;
+ sas_target_priv_data->handle =
+ sas_device_pg0->DevHandle;
goto out;
}
}
@@ -6448,13 +6606,15 @@ _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc)
MPI2_IOCSTATUS_MASK;
if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
break;
- handle = le16_to_cpu(sas_device_pg0.DevHandle);
+ handle = sas_device_pg0.DevHandle =
+ le16_to_cpu(sas_device_pg0.DevHandle);
device_info = le32_to_cpu(sas_device_pg0.DeviceInfo);
if (!(_scsih_is_end_device(device_info)))
continue;
- _scsih_mark_responding_sas_device(ioc,
- le64_to_cpu(sas_device_pg0.SASAddress),
- le16_to_cpu(sas_device_pg0.Slot), handle);
+ sas_device_pg0.SASAddress =
+ le64_to_cpu(sas_device_pg0.SASAddress);
+ sas_device_pg0.Slot = le16_to_cpu(sas_device_pg0.Slot);
+ _scsih_mark_responding_sas_device(ioc, &sas_device_pg0);
}
out:
--
2.0.2
Bump mpt3sas Driver version to v5.100.00.00
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 293ad23..9396a76 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -71,8 +71,8 @@
#define MPT3SAS_DRIVER_NAME "mpt3sas"
#define MPT3SAS_AUTHOR "Avago Technologies <[email protected]>"
#define MPT3SAS_DESCRIPTION "LSI MPT Fusion SAS 3.0 Device Driver"
-#define MPT3SAS_DRIVER_VERSION "04.100.00.00"
-#define MPT3SAS_MAJOR_VERSION 4
+#define MPT3SAS_DRIVER_VERSION "05.100.00.00"
+#define MPT3SAS_MAJOR_VERSION 5
#define MPT3SAS_MINOR_VERSION 100
#define MPT3SAS_BUILD_VERSION 0
#define MPT3SAS_RELEASE_VERSION 00
--
2.0.2
Update MPI2 strings to MPI2.5.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.c | 3 +--
drivers/scsi/mpt3sas/mpt3sas_base.h | 1 -
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 32b86bf..6739c0a 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -3901,7 +3901,7 @@ _base_send_ioc_init(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
mpi_request.WhoInit = MPI2_WHOINIT_HOST_DRIVER;
mpi_request.VF_ID = 0; /* TODO */
mpi_request.VP_ID = 0;
- mpi_request.MsgVersion = cpu_to_le16(MPI2_VERSION);
+ mpi_request.MsgVersion = cpu_to_le16(MPI25_VERSION);
mpi_request.HeaderVersion = cpu_to_le16(MPI2_HEADER_VERSION);
if (_base_is_controller_msix_enabled(ioc))
@@ -4769,7 +4769,6 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
ioc->build_sg_scmd = &_base_build_sg_scmd_ieee;
ioc->build_sg = &_base_build_sg_ieee;
ioc->build_zero_len_sge = &_base_build_zero_len_sge_ieee;
- ioc->mpi25 = 1;
ioc->sge_size_ieee = sizeof(Mpi2IeeeSgeSimple64_t);
/*
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 9396a76..2318ef8 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -819,7 +819,6 @@ struct MPT3SAS_ADAPTER {
MPT_BUILD_SG_SCMD build_sg_scmd;
MPT_BUILD_SG build_sg;
MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge;
- u8 mpi25;
u16 sge_size_ieee;
/* function ptr for MPI sg elements only */
--
2.0.2
Following is the change set,
1. Added more defines for the BiosOptions field of MPI2_CONFIG_PAGE_BIOS_1.
2. Added MPI2_TOOLBOX_CLEAN_BIT26_PRODUCT_SPECIFIC definition.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpi/mpi2.h | 5 +++--
drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 14 ++++++++++++--
drivers/scsi/mpt3sas/mpi/mpi2_tool.h | 4 +++-
3 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2.h b/drivers/scsi/mpt3sas/mpi/mpi2.h
index d730c5c..c2d127c 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2.h
@@ -8,7 +8,7 @@
* scatter/gather formats.
* Creation Date: June 21, 2006
*
- * mpi2.h Version: 02.00.33
+ * mpi2.h Version: 02.00.34
*
* NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
* prefix are for use only on MPI v2.5 products, and must not be used
@@ -90,6 +90,7 @@
* 04-17-13 02.00.31 Bumped MPI2_HEADER_VERSION_UNIT.
* 08-19-13 02.00.32 Bumped MPI2_HEADER_VERSION_UNIT.
* 12-05-13 02.00.33 Bumped MPI2_HEADER_VERSION_UNIT.
+ * 01-08-14 02.00.34 Bumped MPI2_HEADER_VERSION_UNIT
* --------------------------------------------------------------------------
*/
@@ -123,7 +124,7 @@
#define MPI2_VERSION_02_05 (0x0205)
/*Unit and Dev versioning for this MPI header set */
-#define MPI2_HEADER_VERSION_UNIT (0x21)
+#define MPI2_HEADER_VERSION_UNIT (0x22)
#define MPI2_HEADER_VERSION_DEV (0x00)
#define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00)
#define MPI2_HEADER_VERSION_UNIT_SHIFT (8)
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
index 62dfbf6..66f2cc1 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
@@ -6,7 +6,7 @@
* Title: MPI Configuration messages and pages
* Creation Date: November 10, 2006
*
- * mpi2_cnfg.h Version: 02.00.27
+ * mpi2_cnfg.h Version: 02.00.28
*
* NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
* prefix are for use only on MPI v2.5 products, and must not be used
@@ -175,6 +175,8 @@
* MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0.
* Added MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID for
* MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0.
+ * 01-08-14 02.00.28 Added more defines for the BiosOptions field of
+ * MPI2_CONFIG_PAGE_BIOS_1.
* --------------------------------------------------------------------------
*/
@@ -1334,9 +1336,17 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_1 {
*PTR_MPI2_CONFIG_PAGE_BIOS_1,
Mpi2BiosPage1_t, *pMpi2BiosPage1_t;
-#define MPI2_BIOSPAGE1_PAGEVERSION (0x05)
+#define MPI2_BIOSPAGE1_PAGEVERSION (0x06)
/*values for BIOS Page 1 BiosOptions field */
+#define MPI2_BIOSPAGE1_OPTIONS_X86_DISABLE_BIOS (0x00000400)
+
+#define MPI2_BIOSPAGE1_OPTIONS_MASK_REGISTRATION_UEFI_BSD (0x00000300)
+#define MPI2_BIOSPAGE1_OPTIONS_USE_BIT0_REGISTRATION_UEFI_BSD (0x00000000)
+#define MPI2_BIOSPAGE1_OPTIONS_FULL_REGISTRATION_UEFI_BSD (0x00000100)
+#define MPI2_BIOSPAGE1_OPTIONS_ADAPTER_REGISTRATION_UEFI_BSD (0x00000200)
+#define MPI2_BIOSPAGE1_OPTIONS_DISABLE_REGISTRATION_UEFI_BSD (0x00000300)
+
#define MPI2_BIOSPAGE1_OPTIONS_MASK_OEM_ID (0x000000F0)
#define MPI2_BIOSPAGE1_OPTIONS_LSI_OEM_ID (0x00000000)
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_tool.h b/drivers/scsi/mpt3sas/mpi/mpi2_tool.h
index 904910d..1629e5b 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_tool.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_tool.h
@@ -6,7 +6,7 @@
* Title: MPI diagnostic tool structures and definitions
* Creation Date: March 26, 2007
*
- * mpi2_tool.h Version: 02.00.11
+ * mpi2_tool.h Version: 02.00.12
*
* Version History
* ---------------
@@ -33,6 +33,7 @@
* 07-26-12 02.00.10 Modified MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST so that
* it uses MPI Chain SGE as well as MPI Simple SGE.
* 08-19-13 02.00.11 Added MPI2_TOOLBOX_TEXT_DISPLAY_TOOL and related info.
+ * 01-08-14 02.00.12 Added MPI2_TOOLBOX_CLEAN_BIT26_PRODUCT_SPECIFIC.
* --------------------------------------------------------------------------
*/
@@ -100,6 +101,7 @@ typedef struct _MPI2_TOOLBOX_CLEAN_REQUEST {
#define MPI2_TOOLBOX_CLEAN_OTHER_PERSIST_PAGES (0x20000000)
#define MPI2_TOOLBOX_CLEAN_FW_CURRENT (0x10000000)
#define MPI2_TOOLBOX_CLEAN_FW_BACKUP (0x08000000)
+#define MPI2_TOOLBOX_CLEAN_BIT26_PRODUCT_SPECIFIC (0x04000000)
#define MPI2_TOOLBOX_CLEAN_MEGARAID (0x02000000)
#define MPI2_TOOLBOX_CLEAN_INITIALIZATION (0x01000000)
#define MPI2_TOOLBOX_CLEAN_FLASH (0x00000004)
--
2.0.2
Added the following Dell branding to the mpt3sas driver.
"VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Dell Branding String
0x1000 0x0097 0x1028 0x1F46 DELL 12Gbps HBA
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.c | 36 ++++++++++++++++++++++++++++++++++++
drivers/scsi/mpt3sas/mpt3sas_base.h | 11 +++++++++++
2 files changed, 47 insertions(+)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 6739c0a..db362cb 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -2345,6 +2345,41 @@ _base_display_intel_branding(struct MPT3SAS_ADAPTER *ioc)
/**
+ * _base_display_dell_branding - Display branding string
+ * @ioc: per adapter object
+ *
+ * Return nothing.
+ */
+static void
+_base_display_dell_branding(struct MPT3SAS_ADAPTER *ioc)
+{
+ if (ioc->pdev->subsystem_vendor != PCI_VENDOR_ID_DELL)
+ return;
+
+ switch (ioc->pdev->device) {
+ case MPI25_MFGPAGE_DEVID_SAS3008:
+ switch (ioc->pdev->subsystem_device) {
+ case MPT3SAS_DELL_12G_HBA_SSDID:
+ pr_info(MPT3SAS_FMT "%s\n", ioc->name,
+ MPT3SAS_DELL_12G_HBA_BRANDING);
+ break;
+ default:
+ pr_info(MPT3SAS_FMT
+ "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
+ ioc->pdev->subsystem_device);
+ break;
+ }
+ break;
+ default:
+ pr_info(MPT3SAS_FMT
+ "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
+ ioc->pdev->subsystem_device);
+ break;
+ }
+}
+
+
+/**
* _base_display_ioc_capabilities - Disply IOC's capabilities.
* @ioc: per adapter object
*
@@ -2374,6 +2409,7 @@ _base_display_ioc_capabilities(struct MPT3SAS_ADAPTER *ioc)
bios_version & 0x000000FF);
_base_display_intel_branding(ioc);
+ _base_display_dell_branding(ioc);
pr_info(MPT3SAS_FMT "Protocol=(", ioc->name);
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 2318ef8..c4780c7 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -152,6 +152,17 @@
#define MPT3SAS_INTEL_RS3UC080_SSDID 0x3524
/*
+ * Dell HBA branding
+ */
+#define MPT3SAS_DELL_12G_HBA_BRANDING \
+ "Dell 12Gbps HBA"
+
+/*
+ * Dell HBA SSDIDs
+ */
+#define MPT3SAS_DELL_12G_HBA_SSDID 0x1F46
+
+/*
* status bits for ioc->diag_buffer_status
*/
#define MPT3_DIAG_BUFFER_IS_REGISTERED (0x01)
--
2.0.2
Add the following OEM's branding to the mpt3sas driver.
"VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Cisco Branding String
0x1000 0x97 SVID = 0x1137 0x014C Cisco 9300-8E 12G SAS HBA
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.c | 34 ++++++++++++++++++++++++++++++++++
drivers/scsi/mpt3sas/mpt3sas_base.h | 11 +++++++++++
2 files changed, 45 insertions(+)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index db362cb..267e489 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -2378,6 +2378,39 @@ _base_display_dell_branding(struct MPT3SAS_ADAPTER *ioc)
}
}
+/**
+ * _base_display_cisco_branding - Display branding string
+ * @ioc: per adapter object
+ *
+ * Return nothing.
+ */
+static void
+_base_display_cisco_branding(struct MPT3SAS_ADAPTER *ioc)
+{
+ if (ioc->pdev->subsystem_vendor != PCI_VENDOR_ID_CISCO)
+ return;
+
+ switch (ioc->pdev->device) {
+ case MPI25_MFGPAGE_DEVID_SAS3008:
+ switch (ioc->pdev->subsystem_device) {
+ case MPT3SAS_CISCO_12G_HBA_SSDID:
+ pr_info(MPT3SAS_FMT "%s\n", ioc->name,
+ MPT3SAS_CISCO_12G_HBA_BRANDING);
+ break;
+ default:
+ pr_info(MPT3SAS_FMT
+ "Cisco 12Gbps SAS HBA: Subsystem ID: 0x%X\n",
+ ioc->name, ioc->pdev->subsystem_device);
+ break;
+ }
+ break;
+ default:
+ pr_info(MPT3SAS_FMT
+ "Cisco 12Gbps SAS HBA: Subsystem ID: 0x%X\n",
+ ioc->name, ioc->pdev->subsystem_device);
+ break;
+ }
+}
/**
* _base_display_ioc_capabilities - Disply IOC's capabilities.
@@ -2410,6 +2443,7 @@ _base_display_ioc_capabilities(struct MPT3SAS_ADAPTER *ioc)
_base_display_intel_branding(ioc);
_base_display_dell_branding(ioc);
+ _base_display_cisco_branding(ioc);
pr_info(MPT3SAS_FMT "Protocol=(", ioc->name);
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index c4780c7..7cdbc65 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -163,6 +163,17 @@
#define MPT3SAS_DELL_12G_HBA_SSDID 0x1F46
/*
+ * Cisco HBA branding
+ */
+#define MPT3SAS_CISCO_12G_HBA_BRANDING \
+ "Cisco 9300-8E 12G SAS HBA"
+
+/*
+ * Cisco HBA SSSDIDs
+ */
+ #define MPT3SAS_CISCO_12G_HBA_SSDID 0x14C
+
+/*
* status bits for ioc->diag_buffer_status
*/
#define MPT3_DIAG_BUFFER_IS_REGISTERED (0x01)
--
2.0.2
Bump mpt3sas driver version to v6.100.00.00.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 7cdbc65..a89c752 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -71,8 +71,8 @@
#define MPT3SAS_DRIVER_NAME "mpt3sas"
#define MPT3SAS_AUTHOR "Avago Technologies <[email protected]>"
#define MPT3SAS_DESCRIPTION "LSI MPT Fusion SAS 3.0 Device Driver"
-#define MPT3SAS_DRIVER_VERSION "05.100.00.00"
-#define MPT3SAS_MAJOR_VERSION 5
+#define MPT3SAS_DRIVER_VERSION "06.100.00.00"
+#define MPT3SAS_MAJOR_VERSION 6
#define MPT3SAS_MINOR_VERSION 100
#define MPT3SAS_BUILD_VERSION 0
#define MPT3SAS_RELEASE_VERSION 00
--
2.0.2
Below are the new changes to MPI 2.5 Rev K(2.5.6) specification and 2.00.35 header files
1) Added a minimum size requirement for target mode command buffers.
2) Added MinMSIxIndex and MaxMSIxIndex fields to CommandBufferPostBase Request.
3) For BIOS Page 1, added SSUTimeout field, and added Product Name String Format bits to the BiosOptions field
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpi/mpi2.h | 5 +++--
drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 17 ++++++++++++++---
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2.h b/drivers/scsi/mpt3sas/mpi/mpi2.h
index c2d127c..ec27ad2 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2.h
@@ -8,7 +8,7 @@
* scatter/gather formats.
* Creation Date: June 21, 2006
*
- * mpi2.h Version: 02.00.34
+ * mpi2.h Version: 02.00.35
*
* NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
* prefix are for use only on MPI v2.5 products, and must not be used
@@ -91,6 +91,7 @@
* 08-19-13 02.00.32 Bumped MPI2_HEADER_VERSION_UNIT.
* 12-05-13 02.00.33 Bumped MPI2_HEADER_VERSION_UNIT.
* 01-08-14 02.00.34 Bumped MPI2_HEADER_VERSION_UNIT
+ * 06-13-14 02.00.35 Bumped MPI2_HEADER_VERSION_UNIT.
* --------------------------------------------------------------------------
*/
@@ -124,7 +125,7 @@
#define MPI2_VERSION_02_05 (0x0205)
/*Unit and Dev versioning for this MPI header set */
-#define MPI2_HEADER_VERSION_UNIT (0x22)
+#define MPI2_HEADER_VERSION_UNIT (0x23)
#define MPI2_HEADER_VERSION_DEV (0x00)
#define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00)
#define MPI2_HEADER_VERSION_UNIT_SHIFT (8)
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
index 66f2cc1..c337a85 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
@@ -6,7 +6,7 @@
* Title: MPI Configuration messages and pages
* Creation Date: November 10, 2006
*
- * mpi2_cnfg.h Version: 02.00.28
+ * mpi2_cnfg.h Version: 02.00.29
*
* NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
* prefix are for use only on MPI v2.5 products, and must not be used
@@ -177,6 +177,8 @@
* MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0.
* 01-08-14 02.00.28 Added more defines for the BiosOptions field of
* MPI2_CONFIG_PAGE_BIOS_1.
+ * 06-13-14 02.00.29 Added SSUTimeout field to MPI2_CONFIG_PAGE_BIOS_1, and
+ * more defines for the BiosOptions field..
* --------------------------------------------------------------------------
*/
@@ -1324,7 +1326,9 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_1 {
MPI2_CONFIG_PAGE_HEADER Header; /*0x00 */
U32 BiosOptions; /*0x04 */
U32 IOCSettings; /*0x08 */
- U32 Reserved1; /*0x0C */
+ U8 SSUTimeout; /*0x0C */
+ U8 Reserved1; /*0x0D */
+ U16 Reserved2; /*0x0E */
U32 DeviceSettings; /*0x10 */
U16 NumberOfDevices; /*0x14 */
U16 UEFIVersion; /*0x16 */
@@ -1336,9 +1340,16 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_1 {
*PTR_MPI2_CONFIG_PAGE_BIOS_1,
Mpi2BiosPage1_t, *pMpi2BiosPage1_t;
-#define MPI2_BIOSPAGE1_PAGEVERSION (0x06)
+#define MPI2_BIOSPAGE1_PAGEVERSION (0x07)
/*values for BIOS Page 1 BiosOptions field */
+#define MPI2_BIOSPAGE1_OPTIONS_PNS_MASK (0x00003800)
+#define MPI2_BIOSPAGE1_OPTIONS_PNS_PBDHL (0x00000000)
+#define MPI2_BIOSPAGE1_OPTIONS_PNS_ENCSLOSURE (0x00000800)
+#define MPI2_BIOSPAGE1_OPTIONS_PNS_LWWID (0x00001000)
+#define MPI2_BIOSPAGE1_OPTIONS_PNS_PSENS (0x00001800)
+#define MPI2_BIOSPAGE1_OPTIONS_PNS_ESPHY (0x00002000)
+
#define MPI2_BIOSPAGE1_OPTIONS_X86_DISABLE_BIOS (0x00000400)
#define MPI2_BIOSPAGE1_OPTIONS_MASK_REGISTRATION_UEFI_BSD (0x00000300)
--
2.0.2
For any SCSI command, if the driver receives
IOC status = SCSI_IOC_TERMINATED and log info = 0x32010081 then
that command will be completed with DID_RESET host status.
The definition of this log info value is
"Virtual IO has failed and has to be retried".
Firmware will provide this log info value with IOC Status
"SCSI_IOC_TERMINATED", whenever a drive (with is a part of a volume)
is pulled and pushed back within some minimal delay.
With this log info value, firmware informs the driver to retry the
failed IO command infinite times, so to provide some time for the
firmware to discover the reinserted drive successfully instated of
just retrying failed command for five times(doesn't giving enough
time for firmware to complete the drive discovery) and failing the
IO permanently even though drive came back successfully.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 64dd90b..837c22a 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -4241,6 +4241,9 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
scmd->device->expecting_cc_ua = 1;
}
break;
+ } else if (log_info == 0x32010081) {
+ scmd->result = DID_RESET << 16;
+ break;
}
scmd->result = DID_SOFT_ERROR << 16;
break;
--
2.0.2
scsi_dma_map API will return a negative value (i.e. -ENOMEM)
if DMA mapping of sg lists fails and zero if the sg list in the
SCSI cmd is NULL. But drivers doesn't handled sg list DMA mapping
failure case properly.
So, Updated the code to return host busy error status to SCSI MID Layer(SML),
when DMA mapping of scatter gather list fails for a SCSI command.
So that SML will retry this SCSI cmd after some time.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 267e489..0b26c8d 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -1345,7 +1345,7 @@ _base_build_sg_scmd_ieee(struct MPT3SAS_ADAPTER *ioc,
sg_scmd = scsi_sglist(scmd);
sges_left = scsi_dma_map(scmd);
- if (!sges_left) {
+ if (!sges_left < 0) {
sdev_printk(KERN_ERR, scmd->device,
"pci_map_sg failed: request for %d bytes!\n",
scsi_bufflen(scmd));
@@ -1414,7 +1414,7 @@ _base_build_sg_scmd_ieee(struct MPT3SAS_ADAPTER *ioc,
fill_in_last_segment:
/* fill the last segment */
- while (sges_left) {
+ while (sges_left > 0) {
if (sges_left == 1)
_base_add_sg_single_ieee(sg_local,
simple_sgl_flags_last, 0, sg_dma_len(sg_scmd),
--
2.0.2
Added support for below customer specific brandings
"VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Cisco Branding String
0x1000 0x97 0x1137 0x154 Cisco 9300-8i 12Gbps SAS HBA
0x1000 0x97 0x1137 0x155 Cisco 12G Modular SAS Pass through Controller
0x1000 0x97 0x1137 0x156 UCS C3X60 12G SAS Pass through Controller
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.c | 29 +++++++++++++++++++++++++++--
drivers/scsi/mpt3sas/mpt3sas_base.h | 16 ++++++++++++----
2 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 0b26c8d..2f2c331 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -2393,9 +2393,17 @@ _base_display_cisco_branding(struct MPT3SAS_ADAPTER *ioc)
switch (ioc->pdev->device) {
case MPI25_MFGPAGE_DEVID_SAS3008:
switch (ioc->pdev->subsystem_device) {
- case MPT3SAS_CISCO_12G_HBA_SSDID:
+ case MPT3SAS_CISCO_12G_8E_HBA_SSDID:
pr_info(MPT3SAS_FMT "%s\n", ioc->name,
- MPT3SAS_CISCO_12G_HBA_BRANDING);
+ MPT3SAS_CISCO_12G_8E_HBA_BRANDING);
+ break;
+ case MPT3SAS_CISCO_12G_8I_HBA_SSDID:
+ pr_info(MPT3SAS_FMT "%s\n", ioc->name,
+ MPT3SAS_CISCO_12G_8I_HBA_BRANDING);
+ break;
+ case MPT3SAS_CISCO_12G_AVILA_HBA_SSDID:
+ pr_info(MPT3SAS_FMT "%s\n", ioc->name,
+ MPT3SAS_CISCO_12G_AVILA_HBA_BRANDING);
break;
default:
pr_info(MPT3SAS_FMT
@@ -2404,6 +2412,23 @@ _base_display_cisco_branding(struct MPT3SAS_ADAPTER *ioc)
break;
}
break;
+ case MPI25_MFGPAGE_DEVID_SAS3108_1:
+ switch (ioc->pdev->subsystem_device) {
+ case MPT3SAS_CISCO_12G_AVILA_HBA_SSDID:
+ pr_info(MPT3SAS_FMT "%s\n", ioc->name,
+ MPT3SAS_CISCO_12G_AVILA_HBA_BRANDING);
+ break;
+ case MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_SSDID:
+ pr_info(MPT3SAS_FMT "%s\n", ioc->name,
+ MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_BRANDING);
+ break;
+ default:
+ pr_info(MPT3SAS_FMT
+ "Cisco 12Gbps SAS HBA: Subsystem ID: 0x%X\n",
+ ioc->name, ioc->pdev->subsystem_device);
+ break;
+ }
+ break;
default:
pr_info(MPT3SAS_FMT
"Cisco 12Gbps SAS HBA: Subsystem ID: 0x%X\n",
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index a89c752..b97039b 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -165,13 +165,21 @@
/*
* Cisco HBA branding
*/
-#define MPT3SAS_CISCO_12G_HBA_BRANDING \
- "Cisco 9300-8E 12G SAS HBA"
-
+#define MPT3SAS_CISCO_12G_8E_HBA_BRANDING \
+ "Cisco 9300-8E 12G SAS HBA"
+#define MPT3SAS_CISCO_12G_8I_HBA_BRANDING \
+ "Cisco 9300-8i 12G SAS HBA"
+#define MPT3SAS_CISCO_12G_AVILA_HBA_BRANDING \
+ "Cisco 12G Modular SAS Pass through Controller"
+#define MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_BRANDING \
+ "UCS C3X60 12G SAS Pass through Controller"
/*
* Cisco HBA SSSDIDs
*/
- #define MPT3SAS_CISCO_12G_HBA_SSDID 0x14C
+#define MPT3SAS_CISCO_12G_8E_HBA_SSDID 0x14C
+#define MPT3SAS_CISCO_12G_8I_HBA_SSDID 0x154
+#define MPT3SAS_CISCO_12G_AVILA_HBA_SSDID 0x155
+#define MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_SSDID 0x156
/*
* status bits for ioc->diag_buffer_status
--
2.0.2
Created a thread using alloc_ordered_workqueue() API in order to process
the works from firmware Work-queue sequentially instead of
create_singlethread_workqueue() API.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 837c22a..42bb731 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -8024,8 +8024,13 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
/* event thread */
snprintf(ioc->firmware_event_name, sizeof(ioc->firmware_event_name),
"fw_event%d", ioc->id);
- ioc->firmware_event_thread = create_singlethread_workqueue(
+#if defined(alloc_ordered_workqueue)
+ ioc->firmware_event_thread = alloc_ordered_workqueue(
+ ioc->firmware_event_name, WQ_MEM_RECLAIM);
+#else
+ ioc->firmware_event_thread = create_singlethread_workqueue(
ioc->firmware_event_name);
+#endif
if (!ioc->firmware_event_thread) {
pr_err(MPT3SAS_FMT "failure at %s:%d/%s()!\n",
ioc->name, __FILE__, __LINE__, __func__);
--
2.0.2
Added dma_mapping_error() API after mapping an address with dma_map_single() API.
Otherwise when CONFIG_DMA_API_DEBUG is enabled in the kernel, then it complains
about mpt3sas driver not calling dma_mapping_error after mapping an address with
dma_map_single
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_transport.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
index 7a7aa68..70fd019 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
@@ -1964,7 +1964,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
} else {
dma_addr_out = pci_map_single(ioc->pdev, bio_data(req->bio),
blk_rq_bytes(req), PCI_DMA_BIDIRECTIONAL);
- if (!dma_addr_out) {
+ if (pci_dma_mapping_error(ioc->pdev, dma_addr_out)) {
pr_info(MPT3SAS_FMT "%s(): DMA Addr out = NULL\n",
ioc->name, __func__);
rc = -ENOMEM;
@@ -1986,7 +1986,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
} else {
dma_addr_in = pci_map_single(ioc->pdev, bio_data(rsp->bio),
blk_rq_bytes(rsp), PCI_DMA_BIDIRECTIONAL);
- if (!dma_addr_in) {
+ if (pci_dma_mapping_error(ioc->pdev, dma_addr_in)) {
pr_info(MPT3SAS_FMT "%s(): DMA Addr in = NULL\n",
ioc->name, __func__);
rc = -ENOMEM;
--
2.0.2
Issue: When the disks are getting discovered and assigned device
handles by the kernel, a device block followed by an unblock
(due to broadcast primitives) issued by the driver is
interspersed by the kernel changing the state of the device.
Therefore the unblock by the driver results in a no operation
within the kernel API.
To fix this one, the below patch checks the return of the unblock API
and performs a block followed by an unblock to unfreeze the block
layer's I/O queue. Sufficient checks and prints are also added in the
driver to identify this condition caused by the kernel.
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 89 ++++++++++++++++++++++++++++++------
1 file changed, 75 insertions(+), 14 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 42bb731..5405a2f 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -2605,6 +2605,75 @@ _scsih_fw_event_cleanup_queue(struct MPT3SAS_ADAPTER *ioc)
}
/**
+ * _scsih_internal_device_block - block the sdev device
+ * @sdev: per device object
+ * @sas_device_priv_data : per device driver private data
+ *
+ * make sure device is blocked without error, if not
+ * print an error
+ */
+static void
+_scsih_internal_device_block(struct scsi_device *sdev,
+ struct MPT3SAS_DEVICE *sas_device_priv_data)
+{
+ int r = 0;
+
+ sdev_printk(KERN_INFO, sdev, "device_block, handle(0x%04x)\n",
+ sas_device_priv_data->sas_target->handle);
+ sas_device_priv_data->block = 1;
+
+ r = scsi_internal_device_block(sdev);
+ if (r == -EINVAL)
+ sdev_printk(KERN_WARNING, sdev,
+ "device_block failed with return(%d) for handle(0x%04x)\n",
+ sas_device_priv_data->sas_target->handle, r);
+}
+
+/**
+ * _scsih_internal_device_unblock - unblock the sdev device
+ * @sdev: per device object
+ * @sas_device_priv_data : per device driver private data
+ * make sure device is unblocked without error, if not retry
+ * by blocking and then unblocking
+ */
+
+static void
+_scsih_internal_device_unblock(struct scsi_device *sdev,
+ struct MPT3SAS_DEVICE *sas_device_priv_data)
+{
+ int r = 0;
+
+ sdev_printk(KERN_WARNING, sdev, "device_unblock and setting to running, "
+ "handle(0x%04x)\n", sas_device_priv_data->sas_target->handle);
+ sas_device_priv_data->block = 0;
+ r = scsi_internal_device_unblock(sdev, SDEV_RUNNING);
+ if (r == -EINVAL) {
+ /* The device has been set to SDEV_RUNNING by SD layer during
+ * device addition but the request queue is still stopped by
+ * our earlier block call. We need to perform a block again
+ * to get the device to SDEV_BLOCK and then to SDEV_RUNNING */
+
+ sdev_printk(KERN_WARNING, sdev,
+ "device_unblock failed with return(%d) for handle(0x%04x) "
+ "performing a block followed by an unblock\n",
+ sas_device_priv_data->sas_target->handle, r);
+ sas_device_priv_data->block = 1;
+ r = scsi_internal_device_block(sdev);
+ if (r)
+ sdev_printk(KERN_WARNING, sdev, "retried device_block "
+ "failed with return(%d) for handle(0x%04x)\n",
+ sas_device_priv_data->sas_target->handle, r);
+
+ sas_device_priv_data->block = 0;
+ r = scsi_internal_device_unblock(sdev, SDEV_RUNNING);
+ if (r)
+ sdev_printk(KERN_WARNING, sdev, "retried device_unblock"
+ " failed with return(%d) for handle(0x%04x)\n",
+ sas_device_priv_data->sas_target->handle, r);
+ }
+}
+
+/**
* _scsih_ublock_io_all_device - unblock every device
* @ioc: per adapter object
*
@@ -2623,11 +2692,10 @@ _scsih_ublock_io_all_device(struct MPT3SAS_ADAPTER *ioc)
if (!sas_device_priv_data->block)
continue;
- sas_device_priv_data->block = 0;
dewtprintk(ioc, sdev_printk(KERN_INFO, sdev,
"device_running, handle(0x%04x)\n",
sas_device_priv_data->sas_target->handle));
- scsi_internal_device_unblock(sdev, SDEV_RUNNING);
+ _scsih_internal_device_unblock(sdev, sas_device_priv_data);
}
}
@@ -2652,10 +2720,9 @@ _scsih_ublock_io_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address)
if (sas_device_priv_data->sas_target->sas_address
!= sas_address)
continue;
- if (sas_device_priv_data->block) {
- sas_device_priv_data->block = 0;
- scsi_internal_device_unblock(sdev, SDEV_RUNNING);
- }
+ if (sas_device_priv_data->block)
+ _scsih_internal_device_unblock(sdev,
+ sas_device_priv_data);
}
}
@@ -2678,10 +2745,7 @@ _scsih_block_io_all_device(struct MPT3SAS_ADAPTER *ioc)
continue;
if (sas_device_priv_data->block)
continue;
- sas_device_priv_data->block = 1;
- scsi_internal_device_block(sdev);
- sdev_printk(KERN_INFO, sdev, "device_blocked, handle(0x%04x)\n",
- sas_device_priv_data->sas_target->handle);
+ _scsih_internal_device_block(sdev, sas_device_priv_data);
}
}
@@ -2713,10 +2777,7 @@ _scsih_block_io_device(struct MPT3SAS_ADAPTER *ioc, u16 handle)
continue;
if (sas_device->pend_sas_rphy_add)
continue;
- sas_device_priv_data->block = 1;
- scsi_internal_device_block(sdev);
- sdev_printk(KERN_INFO, sdev,
- "device_blocked, handle(0x%04x)\n", handle);
+ _scsih_internal_device_block(sdev, sas_device_priv_data);
}
}
--
2.0.2
Bump mpt3sas driver version to 9.100.00.00
Signed-off-by: Sreekanth Reddy <[email protected]>
---
drivers/scsi/mpt3sas/mpt3sas_base.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index b97039b..0ffe763 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -71,8 +71,8 @@
#define MPT3SAS_DRIVER_NAME "mpt3sas"
#define MPT3SAS_AUTHOR "Avago Technologies <[email protected]>"
#define MPT3SAS_DESCRIPTION "LSI MPT Fusion SAS 3.0 Device Driver"
-#define MPT3SAS_DRIVER_VERSION "06.100.00.00"
-#define MPT3SAS_MAJOR_VERSION 6
+#define MPT3SAS_DRIVER_VERSION "09.100.00.00"
+#define MPT3SAS_MAJOR_VERSION 9
#define MPT3SAS_MINOR_VERSION 100
#define MPT3SAS_BUILD_VERSION 0
#define MPT3SAS_RELEASE_VERSION 00
--
2.0.2
On Fri, Jun 12, 2015 at 03:12:13PM +0530, Sreekanth Reddy wrote:
> In this patch, increased the number of MSIX vector support for SAS3 C0 HBAs to up-to 96.
>
> Following are changes that are done in this patch
> 1. Support this feature only for SAS3 C0 cards and also only when reply post free queue count is greater than 8.
> 2. Instead of using single ReplyPostHostIndex system interface, here 12 ReplyPostHostIndex system interfaces are used. reply post free queues numbered from 0 to 7 use the first ReplyPostHostIndex system interface to update its corresponding ReplyPostHostIndex values, reply post free queues numbered from 8 to 15 will use the second ReplyPostHostIndex system interface and so on. These 12 ReplyPostHostIndex system interfaces address are saved in the array replyPostRegisterIndex[].
> 3. Update the ReplyPostHostIndex value of corresponding reply post free queue in the (its msix_index/8)th entry of replyPostRegisterIndex[] array after processing the reply post descriptor.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 70 +++++++++++++++++++++++++++++++++----
> drivers/scsi/mpt3sas/mpt3sas_base.h | 7 +++-
> 2 files changed, 69 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index 14a781b..c13a365 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -83,7 +83,7 @@ static int msix_disable = -1;
> module_param(msix_disable, int, 0);
> MODULE_PARM_DESC(msix_disable, " disable msix routed interrupts (default=0)");
>
> -static int max_msix_vectors = 8;
> +static int max_msix_vectors = -1;
> module_param(max_msix_vectors, int, 0);
> MODULE_PARM_DESC(max_msix_vectors,
> " max msix vectors - (default=8)");
When changing the default value, please also update the description reflecting
this change.
> @@ -1009,8 +1009,15 @@ _base_interrupt(int irq, void *bus_id)
> }
>
> wmb();
> - writel(reply_q->reply_post_host_index | (msix_index <<
> - MPI2_RPHI_MSIX_INDEX_SHIFT), &ioc->chip->ReplyPostHostIndex);
> + if (ioc->msix96_vector) {
> + writel(reply_q->reply_post_host_index | ((msix_index & 7) <<
> + MPI2_RPHI_MSIX_INDEX_SHIFT),
> + ioc->replyPostRegisterIndex[msix_index/8]);
> + } else {
> + writel(reply_q->reply_post_host_index | (msix_index <<
> + MPI2_RPHI_MSIX_INDEX_SHIFT),
> + &ioc->chip->ReplyPostHostIndex);
> + }
> atomic_dec(&reply_q->busy);
> return IRQ_HANDLED;
> }
> @@ -1560,8 +1567,6 @@ _base_check_enable_msix(struct MPT3SAS_ADAPTER *ioc)
>
> pci_read_config_word(ioc->pdev, base + 2, &message_control);
> ioc->msix_vector_count = (message_control & 0x3FF) + 1;
> - if (ioc->msix_vector_count > 8)
> - ioc->msix_vector_count = 8;
> dinitprintk(ioc, pr_info(MPT3SAS_FMT
> "msix is supported, vector_count(%d)\n",
> ioc->name, ioc->msix_vector_count));
> @@ -1880,6 +1885,31 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
> if (r)
> goto out_fail;
>
> + /* Use the Combined reply queue feature only for SAS3 C0 HBAs and
> + * also only when reply queue count is greater than 8
> + */
> + if (ioc->msix96_vector && ioc->reply_queue_count > 8) {
> + /* If this is an 96 vector supported device,
> + set up ReplyPostIndex addresses */
> + ioc->replyPostRegisterIndex = kcalloc(12,
> + sizeof(resource_size_t *), GFP_KERNEL);
> + if (!ioc->replyPostRegisterIndex) {
> + dfailprintk(ioc, printk(MPT3SAS_FMT
> + "allocation for reply Post Register Index failed!!!\n",
> + ioc->name));
> + r = -ENOMEM;
> + goto out_fail;
> + }
> +
> + for (i = 0; i < 12; i++) {
> + ioc->replyPostRegisterIndex[i] = (resource_size_t *)
> + ((u8 *)&ioc->chip->Doorbell +
> + MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET +
> + (i * 0x10));
> + }
> + } else
> + ioc->msix96_vector = 0;
> +
> list_for_each_entry(reply_q, &ioc->reply_queue_list, list)
> pr_info(MPT3SAS_FMT "%s: IRQ %d\n",
> reply_q->name, ((ioc->msix_enable) ? "PCI-MSI-X enabled" :
> @@ -1901,6 +1931,8 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
> pci_release_selected_regions(ioc->pdev, ioc->bars);
> pci_disable_pcie_error_reporting(pdev);
> pci_disable_device(pdev);
> + if (ioc->msix96_vector)
> + kfree(ioc->replyPostRegisterIndex);
> return r;
> }
>
> @@ -4522,8 +4554,16 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
>
> /* initialize reply post host index */
> list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
> - writel(reply_q->msix_index << MPI2_RPHI_MSIX_INDEX_SHIFT,
> - &ioc->chip->ReplyPostHostIndex);
> + if (ioc->msix96_vector) {
> + writel((reply_q->msix_index & 7)<<
> + MPI2_RPHI_MSIX_INDEX_SHIFT,
> + ioc->replyPostRegisterIndex[reply_q->msix_index/8]);
> + } else {
> + writel(reply_q->msix_index <<
> + MPI2_RPHI_MSIX_INDEX_SHIFT,
> + &ioc->chip->ReplyPostHostIndex);
> + }
> +
> if (!_base_is_controller_msix_enabled(ioc))
> goto skip_init_reply_post_host_index;
> }
> @@ -4577,6 +4617,9 @@ mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
> _base_free_irq(ioc);
> _base_disable_msix(ioc);
>
> + if (ioc->msix96_vector)
> + kfree(ioc->replyPostRegisterIndex);
> +
> if (ioc->chip_phys && ioc->chip)
> iounmap(ioc->chip);
> ioc->chip_phys = 0;
> @@ -4600,6 +4643,7 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
> {
> int r, i;
> int cpu_id, last_cpu_id = 0;
> + u8 revision;
>
> dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> __func__));
> @@ -4618,6 +4662,18 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
> r = -ENOMEM;
> goto out_free_resources;
> }
> + /* Check whether the controller revision is C0 or above.
> + C0 and above revision controllers support 96 vectors */
> + revision = ioc->pdev->revision;
> +
> + if ((ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3004 ||
> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3008 ||
> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_1 ||
> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_2 ||
> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_5 ||
> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_6) &&
> + (revision >= 0x02))
> + ioc->msix96_vector = 1;
>
> ioc->rdpq_array_enable_assigned = 0;
> ioc->dma_mask = 0;
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index afa8816..6b8d8f1 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -728,7 +728,8 @@ typedef void (*MPT3SAS_FLUSH_RUNNING_CMDS)(struct MPT3SAS_ADAPTER *ioc);
> * is assigned only ones
> * @reply_queue_count: number of reply queue's
> * @reply_queue_list: link list contaning the reply queue info
> - * @reply_post_host_index: head index in the pool where FW completes IO
> + * @msix96_vector: 96 MSI-X vector support
> + * @replyPostRegisterIndex: index of next position in Reply Desc Post Queue
> * @delayed_tr_list: target reset link list
> * @delayed_tr_volume_list: volume target reset link list
> * @@temp_sensors_count: flag to carry the number of temperature sensors
> @@ -937,6 +938,10 @@ struct MPT3SAS_ADAPTER {
> u8 reply_queue_count;
> struct list_head reply_queue_list;
>
> + u8 msix96_vector;
> + /* reply post register index */
> + resource_size_t **replyPostRegisterIndex;
> +
I know there are many uses of mixed-case varibles in this driver and changing
them when they're already in makes no sense, but maybe you could consider
getting rid of them in your mpt2sas/mpt3sas merge, as it is not really a
commonly seen pattern in the linux kernel.
> struct list_head delayed_tr_list;
> struct list_head delayed_tr_volume_list;
> u8 temp_sensors_count;
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
Thanks Johannes, we will take care of this point in our current
on-development mpt2sas/mpt3sas merging activity.
Thanks,
Sreekanth
On Fri, Jun 12, 2015 at 4:39 PM, Johannes Thumshirn <[email protected]> wrote:
> On Fri, Jun 12, 2015 at 03:12:13PM +0530, Sreekanth Reddy wrote:
>> In this patch, increased the number of MSIX vector support for SAS3 C0 HBAs to up-to 96.
>>
>> Following are changes that are done in this patch
>> 1. Support this feature only for SAS3 C0 cards and also only when reply post free queue count is greater than 8.
>> 2. Instead of using single ReplyPostHostIndex system interface, here 12 ReplyPostHostIndex system interfaces are used. reply post free queues numbered from 0 to 7 use the first ReplyPostHostIndex system interface to update its corresponding ReplyPostHostIndex values, reply post free queues numbered from 8 to 15 will use the second ReplyPostHostIndex system interface and so on. These 12 ReplyPostHostIndex system interfaces address are saved in the array replyPostRegisterIndex[].
>> 3. Update the ReplyPostHostIndex value of corresponding reply post free queue in the (its msix_index/8)th entry of replyPostRegisterIndex[] array after processing the reply post descriptor.
>>
>> Signed-off-by: Sreekanth Reddy <[email protected]>
>> ---
>> drivers/scsi/mpt3sas/mpt3sas_base.c | 70 +++++++++++++++++++++++++++++++++----
>> drivers/scsi/mpt3sas/mpt3sas_base.h | 7 +++-
>> 2 files changed, 69 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> index 14a781b..c13a365 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> @@ -83,7 +83,7 @@ static int msix_disable = -1;
>> module_param(msix_disable, int, 0);
>> MODULE_PARM_DESC(msix_disable, " disable msix routed interrupts (default=0)");
>>
>> -static int max_msix_vectors = 8;
>> +static int max_msix_vectors = -1;
>> module_param(max_msix_vectors, int, 0);
>> MODULE_PARM_DESC(max_msix_vectors,
>> " max msix vectors - (default=8)");
>
> When changing the default value, please also update the description reflecting
> this change.
>
>> @@ -1009,8 +1009,15 @@ _base_interrupt(int irq, void *bus_id)
>> }
>>
>> wmb();
>> - writel(reply_q->reply_post_host_index | (msix_index <<
>> - MPI2_RPHI_MSIX_INDEX_SHIFT), &ioc->chip->ReplyPostHostIndex);
>> + if (ioc->msix96_vector) {
>> + writel(reply_q->reply_post_host_index | ((msix_index & 7) <<
>> + MPI2_RPHI_MSIX_INDEX_SHIFT),
>> + ioc->replyPostRegisterIndex[msix_index/8]);
>> + } else {
>> + writel(reply_q->reply_post_host_index | (msix_index <<
>> + MPI2_RPHI_MSIX_INDEX_SHIFT),
>> + &ioc->chip->ReplyPostHostIndex);
>> + }
>> atomic_dec(&reply_q->busy);
>> return IRQ_HANDLED;
>> }
>> @@ -1560,8 +1567,6 @@ _base_check_enable_msix(struct MPT3SAS_ADAPTER *ioc)
>>
>> pci_read_config_word(ioc->pdev, base + 2, &message_control);
>> ioc->msix_vector_count = (message_control & 0x3FF) + 1;
>> - if (ioc->msix_vector_count > 8)
>> - ioc->msix_vector_count = 8;
>> dinitprintk(ioc, pr_info(MPT3SAS_FMT
>> "msix is supported, vector_count(%d)\n",
>> ioc->name, ioc->msix_vector_count));
>> @@ -1880,6 +1885,31 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
>> if (r)
>> goto out_fail;
>>
>> + /* Use the Combined reply queue feature only for SAS3 C0 HBAs and
>> + * also only when reply queue count is greater than 8
>> + */
>> + if (ioc->msix96_vector && ioc->reply_queue_count > 8) {
>> + /* If this is an 96 vector supported device,
>> + set up ReplyPostIndex addresses */
>> + ioc->replyPostRegisterIndex = kcalloc(12,
>> + sizeof(resource_size_t *), GFP_KERNEL);
>> + if (!ioc->replyPostRegisterIndex) {
>> + dfailprintk(ioc, printk(MPT3SAS_FMT
>> + "allocation for reply Post Register Index failed!!!\n",
>> + ioc->name));
>> + r = -ENOMEM;
>> + goto out_fail;
>> + }
>> +
>> + for (i = 0; i < 12; i++) {
>> + ioc->replyPostRegisterIndex[i] = (resource_size_t *)
>> + ((u8 *)&ioc->chip->Doorbell +
>> + MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET +
>> + (i * 0x10));
>> + }
>> + } else
>> + ioc->msix96_vector = 0;
>> +
>> list_for_each_entry(reply_q, &ioc->reply_queue_list, list)
>> pr_info(MPT3SAS_FMT "%s: IRQ %d\n",
>> reply_q->name, ((ioc->msix_enable) ? "PCI-MSI-X enabled" :
>> @@ -1901,6 +1931,8 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
>> pci_release_selected_regions(ioc->pdev, ioc->bars);
>> pci_disable_pcie_error_reporting(pdev);
>> pci_disable_device(pdev);
>> + if (ioc->msix96_vector)
>> + kfree(ioc->replyPostRegisterIndex);
>> return r;
>> }
>>
>> @@ -4522,8 +4554,16 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
>>
>> /* initialize reply post host index */
>> list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
>> - writel(reply_q->msix_index << MPI2_RPHI_MSIX_INDEX_SHIFT,
>> - &ioc->chip->ReplyPostHostIndex);
>> + if (ioc->msix96_vector) {
>> + writel((reply_q->msix_index & 7)<<
>> + MPI2_RPHI_MSIX_INDEX_SHIFT,
>> + ioc->replyPostRegisterIndex[reply_q->msix_index/8]);
>> + } else {
>> + writel(reply_q->msix_index <<
>> + MPI2_RPHI_MSIX_INDEX_SHIFT,
>> + &ioc->chip->ReplyPostHostIndex);
>> + }
>> +
>> if (!_base_is_controller_msix_enabled(ioc))
>> goto skip_init_reply_post_host_index;
>> }
>> @@ -4577,6 +4617,9 @@ mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
>> _base_free_irq(ioc);
>> _base_disable_msix(ioc);
>>
>> + if (ioc->msix96_vector)
>> + kfree(ioc->replyPostRegisterIndex);
>> +
>> if (ioc->chip_phys && ioc->chip)
>> iounmap(ioc->chip);
>> ioc->chip_phys = 0;
>> @@ -4600,6 +4643,7 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
>> {
>> int r, i;
>> int cpu_id, last_cpu_id = 0;
>> + u8 revision;
>>
>> dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
>> __func__));
>> @@ -4618,6 +4662,18 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
>> r = -ENOMEM;
>> goto out_free_resources;
>> }
>> + /* Check whether the controller revision is C0 or above.
>> + C0 and above revision controllers support 96 vectors */
>> + revision = ioc->pdev->revision;
>> +
>> + if ((ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3004 ||
>> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3008 ||
>> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_1 ||
>> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_2 ||
>> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_5 ||
>> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_6) &&
>> + (revision >= 0x02))
>> + ioc->msix96_vector = 1;
>>
>> ioc->rdpq_array_enable_assigned = 0;
>> ioc->dma_mask = 0;
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> index afa8816..6b8d8f1 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> @@ -728,7 +728,8 @@ typedef void (*MPT3SAS_FLUSH_RUNNING_CMDS)(struct MPT3SAS_ADAPTER *ioc);
>> * is assigned only ones
>> * @reply_queue_count: number of reply queue's
>> * @reply_queue_list: link list contaning the reply queue info
>> - * @reply_post_host_index: head index in the pool where FW completes IO
>> + * @msix96_vector: 96 MSI-X vector support
>> + * @replyPostRegisterIndex: index of next position in Reply Desc Post Queue
>> * @delayed_tr_list: target reset link list
>> * @delayed_tr_volume_list: volume target reset link list
>> * @@temp_sensors_count: flag to carry the number of temperature sensors
>> @@ -937,6 +938,10 @@ struct MPT3SAS_ADAPTER {
>> u8 reply_queue_count;
>> struct list_head reply_queue_list;
>>
>> + u8 msix96_vector;
>> + /* reply post register index */
>> + resource_size_t **replyPostRegisterIndex;
>> +
>
> I know there are many uses of mixed-case varibles in this driver and changing
> them when they're already in makes no sense, but maybe you could consider
> getting rid of them in your mpt2sas/mpt3sas merge, as it is not really a
> commonly seen pattern in the linux kernel.
>
>> struct list_head delayed_tr_list;
>> struct list_head delayed_tr_volume_list;
>> u8 temp_sensors_count;
>> --
>> 2.0.2
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
> --
> Johannes Thumshirn Storage
> [email protected] +49 911 74053 689
> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
> GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> HRB 21284 (AG Nürnberg)
--
Regards,
Sreekanth
On Fri, Jun 12, 2015 at 03:12:16PM +0530, Sreekanth Reddy wrote:
> Removed the redundancy code while freeing the controller resources.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 57 +++++++++++++++++++++----------------
> 1 file changed, 32 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index ce57320..32b86bf 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -1798,6 +1798,36 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc)
> }
>
> /**
> + * mpt3sas_base_unmap_resources - free controller resources
> + * @ioc: per adapter object
> + */
> +void
> +mpt3sas_base_unmap_resources(struct MPT3SAS_ADAPTER *ioc)
> +{
> + struct pci_dev *pdev = ioc->pdev;
> +
> + dexitprintk(ioc, printk(MPT3SAS_FMT "%s\n",
> + ioc->name, __func__));
> +
> + _base_free_irq(ioc);
> + _base_disable_msix(ioc);
> +
> + if (ioc->msix96_vector)
> + kfree(ioc->replyPostRegisterIndex);
kfree() already checks for zero or a NULL pointer.
> +
> + if (ioc->chip_phys) {
> + iounmap(ioc->chip);
> + ioc->chip_phys = 0;
> + }
> +
> + if (pci_is_enabled(pdev)) {
> + pci_release_selected_regions(ioc->pdev, ioc->bars);
> + pci_disable_pcie_error_reporting(pdev);
> + pci_disable_device(pdev);
> + }
> +}
> +
> +/**
> * mpt3sas_base_map_resources - map in controller resources (io/irq/memap)
> * @ioc: per adapter object
> *
> @@ -1925,14 +1955,7 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
> return 0;
>
> out_fail:
> - if (ioc->chip_phys)
> - iounmap(ioc->chip);
> - ioc->chip_phys = 0;
> - pci_release_selected_regions(ioc->pdev, ioc->bars);
> - pci_disable_pcie_error_reporting(pdev);
> - pci_disable_device(pdev);
> - if (ioc->msix96_vector)
> - kfree(ioc->replyPostRegisterIndex);
> + mpt3sas_base_unmap_resources(ioc);
> return r;
> }
>
> @@ -4667,8 +4690,6 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
> void
> mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
> {
> - struct pci_dev *pdev = ioc->pdev;
> -
> dexitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> __func__));
>
> @@ -4679,21 +4700,7 @@ mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
> ioc->shost_recovery = 0;
> }
>
> - _base_free_irq(ioc);
> - _base_disable_msix(ioc);
> -
> - if (ioc->msix96_vector)
> - kfree(ioc->replyPostRegisterIndex);
> -
> - if (ioc->chip_phys && ioc->chip)
> - iounmap(ioc->chip);
> - ioc->chip_phys = 0;
> -
> - if (pci_is_enabled(pdev)) {
> - pci_release_selected_regions(ioc->pdev, ioc->bars);
> - pci_disable_pcie_error_reporting(pdev);
> - pci_disable_device(pdev);
> - }
> + mpt3sas_base_unmap_resources(ioc);
> return;
> }
>
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 4:58 PM, Johannes Thumshirn <[email protected]> wrote:
> On Fri, Jun 12, 2015 at 03:12:16PM +0530, Sreekanth Reddy wrote:
>> Removed the redundancy code while freeing the controller resources.
>>
>> Signed-off-by: Sreekanth Reddy <[email protected]>
>> ---
>> drivers/scsi/mpt3sas/mpt3sas_base.c | 57 +++++++++++++++++++++----------------
>> 1 file changed, 32 insertions(+), 25 deletions(-)
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> index ce57320..32b86bf 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> @@ -1798,6 +1798,36 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc)
>> }
>>
>> /**
>> + * mpt3sas_base_unmap_resources - free controller resources
>> + * @ioc: per adapter object
>> + */
>> +void
>> +mpt3sas_base_unmap_resources(struct MPT3SAS_ADAPTER *ioc)
>> +{
>> + struct pci_dev *pdev = ioc->pdev;
>> +
>> + dexitprintk(ioc, printk(MPT3SAS_FMT "%s\n",
>> + ioc->name, __func__));
>> +
>> + _base_free_irq(ioc);
>> + _base_disable_msix(ioc);
>> +
>> + if (ioc->msix96_vector)
>> + kfree(ioc->replyPostRegisterIndex);
>
> kfree() already checks for zero or a NULL pointer.
Sorry Johannes, I didn't get you. If I understand this correctly, you
are suggesting to check for NULL pointer before calling kree() API as
shown below,
if (ioc->msix96_vector && (ioc->replyPostRegisterIndex != NULL))
kfree(ioc->replyPostRegisterIndex);
>
>> +
>> + if (ioc->chip_phys) {
>> + iounmap(ioc->chip);
>> + ioc->chip_phys = 0;
>> + }
>> +
>> + if (pci_is_enabled(pdev)) {
>> + pci_release_selected_regions(ioc->pdev, ioc->bars);
>> + pci_disable_pcie_error_reporting(pdev);
>> + pci_disable_device(pdev);
>> + }
>> +}
>> +
>> +/**
>> * mpt3sas_base_map_resources - map in controller resources (io/irq/memap)
>> * @ioc: per adapter object
>> *
>> @@ -1925,14 +1955,7 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
>> return 0;
>>
>> out_fail:
>> - if (ioc->chip_phys)
>> - iounmap(ioc->chip);
>> - ioc->chip_phys = 0;
>> - pci_release_selected_regions(ioc->pdev, ioc->bars);
>> - pci_disable_pcie_error_reporting(pdev);
>> - pci_disable_device(pdev);
>> - if (ioc->msix96_vector)
>> - kfree(ioc->replyPostRegisterIndex);
>> + mpt3sas_base_unmap_resources(ioc);
>> return r;
>> }
>>
>> @@ -4667,8 +4690,6 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
>> void
>> mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
>> {
>> - struct pci_dev *pdev = ioc->pdev;
>> -
>> dexitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
>> __func__));
>>
>> @@ -4679,21 +4700,7 @@ mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
>> ioc->shost_recovery = 0;
>> }
>>
>> - _base_free_irq(ioc);
>> - _base_disable_msix(ioc);
>> -
>> - if (ioc->msix96_vector)
>> - kfree(ioc->replyPostRegisterIndex);
>> -
>> - if (ioc->chip_phys && ioc->chip)
>> - iounmap(ioc->chip);
>> - ioc->chip_phys = 0;
>> -
>> - if (pci_is_enabled(pdev)) {
>> - pci_release_selected_regions(ioc->pdev, ioc->bars);
>> - pci_disable_pcie_error_reporting(pdev);
>> - pci_disable_device(pdev);
>> - }
>> + mpt3sas_base_unmap_resources(ioc);
>> return;
>> }
>>
>> --
>> 2.0.2
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
> --
> Johannes Thumshirn Storage
> [email protected] +49 911 74053 689
> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
> GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> HRB 21284 (AG Nürnberg)
--
Regards,
Sreekanth
On Fri, Jun 12, 2015 at 05:48:56PM +0530, Sreekanth Reddy wrote:
> On Fri, Jun 12, 2015 at 4:58 PM, Johannes Thumshirn <[email protected]> wrote:
> > On Fri, Jun 12, 2015 at 03:12:16PM +0530, Sreekanth Reddy wrote:
> >> Removed the redundancy code while freeing the controller resources.
> >>
> >> Signed-off-by: Sreekanth Reddy <[email protected]>
> >> ---
> >> drivers/scsi/mpt3sas/mpt3sas_base.c | 57 +++++++++++++++++++++----------------
[...]
> >> + _base_free_irq(ioc);
> >> + _base_disable_msix(ioc);
> >> +
> >> + if (ioc->msix96_vector)
> >> + kfree(ioc->replyPostRegisterIndex);
> >
> > kfree() already checks for zero or a NULL pointer.
>
> Sorry Johannes, I didn't get you. If I understand this correctly, you
> are suggesting to check for NULL pointer before calling kree() API as
> shown below,
>
> if (ioc->msix96_vector && (ioc->replyPostRegisterIndex != NULL))
> kfree(ioc->replyPostRegisterIndex);
Correct me if I'm wrong, but I thought you don't need the if
(ioc->msix96_vector) before the kfree(). ioc->replyPostRegisterIndex should be
NULL if ioc->msix96_vector is 0, as far as I can see.
In _scsih_probe() you have:
shost = scsi_host_alloc(&scsih_driver_template,
sizeof(struct MPT3SAS_ADAPTER));
if (!shost)
return -ENODEV;
/* init local params */
ioc = shost_priv(shost);
and scsi_host_alloc() does a kzalloc() for shost.
so ioc->replyPortRegisterIndex is NULL.
Or am I thinking wrong here?
>
> Regards,
> Sreekanth
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On 06/12/2015 05:42 AM, Sreekanth Reddy wrote:
...
> +#if defined(alloc_ordered_workqueue)
> + ioc->firmware_event_thread = alloc_ordered_workqueue(
> + ioc->firmware_event_name, WQ_MEM_RECLAIM);
> +#else
> + ioc->firmware_event_thread = create_singlethread_workqueue(
> ioc->firmware_event_name);
> +#endif
Hi Sreekanth,
I think the upstream version of this code can safely assume
alloc_ordered_workqueue is defined, no?
Regards,
-- Joe
On Fri, Jun 12, 2015 at 03:12:22PM +0530, Sreekanth Reddy wrote:
> Added the following Dell branding to the mpt3sas driver.
>
> "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Dell Branding String
> 0x1000 0x0097 0x1028 0x1F46 DELL 12Gbps HBA
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 36 ++++++++++++++++++++++++++++++++++++
> drivers/scsi/mpt3sas/mpt3sas_base.h | 11 +++++++++++
> 2 files changed, 47 insertions(+)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index 6739c0a..db362cb 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -2345,6 +2345,41 @@ _base_display_intel_branding(struct MPT3SAS_ADAPTER *ioc)
>
>
> /**
> + * _base_display_dell_branding - Display branding string
> + * @ioc: per adapter object
> + *
> + * Return nothing.
> + */
> +static void
> +_base_display_dell_branding(struct MPT3SAS_ADAPTER *ioc)
> +{
> + if (ioc->pdev->subsystem_vendor != PCI_VENDOR_ID_DELL)
> + return;
> +
> + switch (ioc->pdev->device) {
> + case MPI25_MFGPAGE_DEVID_SAS3008:
> + switch (ioc->pdev->subsystem_device) {
> + case MPT3SAS_DELL_12G_HBA_SSDID:
> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> + MPT3SAS_DELL_12G_HBA_BRANDING);
> + break;
> + default:
> + pr_info(MPT3SAS_FMT
> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
> + ioc->pdev->subsystem_device);
> + break;
> + }
> + break;
> + default:
> + pr_info(MPT3SAS_FMT
> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
> + ioc->pdev->subsystem_device);
> + break;
> + }
> +}
> +
> +
> +/**
> * _base_display_ioc_capabilities - Disply IOC's capabilities.
> * @ioc: per adapter object
> *
> @@ -2374,6 +2409,7 @@ _base_display_ioc_capabilities(struct MPT3SAS_ADAPTER *ioc)
> bios_version & 0x000000FF);
>
> _base_display_intel_branding(ioc);
> + _base_display_dell_branding(ioc);
>
> pr_info(MPT3SAS_FMT "Protocol=(", ioc->name);
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index 2318ef8..c4780c7 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -152,6 +152,17 @@
> #define MPT3SAS_INTEL_RS3UC080_SSDID 0x3524
>
> /*
> + * Dell HBA branding
> + */
> +#define MPT3SAS_DELL_12G_HBA_BRANDING \
> + "Dell 12Gbps HBA"
> +
> +/*
> + * Dell HBA SSDIDs
> + */
> +#define MPT3SAS_DELL_12G_HBA_SSDID 0x1F46
> +
> +/*
> * status bits for ioc->diag_buffer_status
> */
> #define MPT3_DIAG_BUFFER_IS_REGISTERED (0x01)
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
This might be something you might consider re-organizing for your code-base
merge as well, as it leads to a lot of code duplication the more OEMs you have.
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:17PM +0530, Sreekanth Reddy wrote:
> Update MPI 2.5 Release: MPI 2.5 Rev I (2.5.4) specification and 2.00.33 header files
>
> Below is the change set from the MPI specification for I Rev
>
> 1) Added Base Enclosure Level bit to the Flags field of Manufacturing Page 7.
> 2) Updated description of the MaxTargetPortConnectTime field of SAS IO Unit Page 1.
> 3) Added EnclosureLevel and ConnectorName fields to SAS Device Page 0. Also, added EnclosureLevel and ConnectorName Valid bit to the Flags field.
> 4) Added EnclosureLevel field to SAS Enclosure Page 0. Also, added EnclosureLevel Valid bit to the Flags field.
> 5) Added value for BIOS image to HashImageType.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpi/mpi2.h | 6 ++++--
> drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 27 +++++++++++++++++++++------
> drivers/scsi/mpt3sas/mpi/mpi2_ioc.h | 4 +++-
> 3 files changed, 28 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpi/mpi2.h b/drivers/scsi/mpt3sas/mpi/mpi2.h
> index c34c115..d730c5c 100644
> --- a/drivers/scsi/mpt3sas/mpi/mpi2.h
> +++ b/drivers/scsi/mpt3sas/mpi/mpi2.h
> @@ -8,7 +8,7 @@
> * scatter/gather formats.
> * Creation Date: June 21, 2006
> *
> - * mpi2.h Version: 02.00.31
> + * mpi2.h Version: 02.00.33
> *
> * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
> * prefix are for use only on MPI v2.5 products, and must not be used
> @@ -88,6 +88,8 @@
> * Added MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET.
> * 04-09-13 02.00.30 Bumped MPI2_HEADER_VERSION_UNIT.
> * 04-17-13 02.00.31 Bumped MPI2_HEADER_VERSION_UNIT.
> + * 08-19-13 02.00.32 Bumped MPI2_HEADER_VERSION_UNIT.
> + * 12-05-13 02.00.33 Bumped MPI2_HEADER_VERSION_UNIT.
> * --------------------------------------------------------------------------
> */
>
> @@ -121,7 +123,7 @@
> #define MPI2_VERSION_02_05 (0x0205)
>
> /*Unit and Dev versioning for this MPI header set */
> -#define MPI2_HEADER_VERSION_UNIT (0x1F)
> +#define MPI2_HEADER_VERSION_UNIT (0x21)
> #define MPI2_HEADER_VERSION_DEV (0x00)
> #define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00)
> #define MPI2_HEADER_VERSION_UNIT_SHIFT (8)
> diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
> index e261a31..62dfbf6 100644
> --- a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
> +++ b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
> @@ -6,7 +6,7 @@
> * Title: MPI Configuration messages and pages
> * Creation Date: November 10, 2006
> *
> - * mpi2_cnfg.h Version: 02.00.26
> + * mpi2_cnfg.h Version: 02.00.27
> *
> * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
> * prefix are for use only on MPI v2.5 products, and must not be used
> @@ -165,6 +165,16 @@
> * match the specification.
> * 08-19-13 02.00.26 Added reserved words to MPI2_CONFIG_PAGE_IO_UNIT_7 for
> * future use.
> + * 12-05-13 02.00.27 Added MPI2_MANPAGE7_FLAG_BASE_ENCLOSURE_LEVEL for
> + * MPI2_CONFIG_PAGE_MAN_7.
> + * Added EnclosureLevel and ConnectorName fields to
> + * MPI2_CONFIG_PAGE_SAS_DEV_0.
> + * Added MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID for
> + * MPI2_CONFIG_PAGE_SAS_DEV_0.
> + * Added EnclosureLevel field to
> + * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0.
> + * Added MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID for
> + * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0.
> * --------------------------------------------------------------------------
> */
>
> @@ -724,6 +734,7 @@ typedef struct _MPI2_CONFIG_PAGE_MAN_7 {
> #define MPI2_MANUFACTURING7_PAGEVERSION (0x01)
>
> /*defines for the Flags field */
> +#define MPI2_MANPAGE7_FLAG_BASE_ENCLOSURE_LEVEL (0x00000008)
> #define MPI2_MANPAGE7_FLAG_EVENTREPLAY_SLOT_ORDER (0x00000002)
> #define MPI2_MANPAGE7_FLAG_USE_SLOT_INFO (0x00000001)
>
> @@ -2633,9 +2644,9 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_0 {
> U8
> ControlGroup; /*0x2E */
> U8
> - Reserved1; /*0x2F */
> + EnclosureLevel; /*0x2F */
> U32
> - Reserved2; /*0x30 */
> + ConnectorName[4]; /*0x30 */
> U32
> Reserved3; /*0x34 */
> } MPI2_CONFIG_PAGE_SAS_DEV_0,
> @@ -2643,7 +2654,7 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_0 {
> Mpi2SasDevicePage0_t,
> *pMpi2SasDevicePage0_t;
>
> -#define MPI2_SASDEVICE0_PAGEVERSION (0x08)
> +#define MPI2_SASDEVICE0_PAGEVERSION (0x09)
>
> /*values for SAS Device Page 0 AccessStatus field */
> #define MPI2_SAS_DEVICE0_ASTATUS_NO_ERRORS (0x00)
> @@ -2683,6 +2694,7 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_0 {
> #define MPI2_SAS_DEVICE0_FLAGS_SATA_NCQ_SUPPORTED (0x0020)
> #define MPI2_SAS_DEVICE0_FLAGS_SATA_FUA_SUPPORTED (0x0010)
> #define MPI2_SAS_DEVICE0_FLAGS_PORT_SELECTOR_ATTACH (0x0008)
> +#define MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID (0x0002)
> #define MPI2_SAS_DEVICE0_FLAGS_DEVICE_PRESENT (0x0001)
>
>
> @@ -3019,8 +3031,10 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 {
> NumSlots; /*0x18 */
> U16
> StartSlot; /*0x1A */
> - U16
> + U8
> Reserved2; /*0x1C */
> + U8
> + EnclosureLevel; /*0x1D */
> U16
> SEPDevHandle; /*0x1E */
> U32
> @@ -3031,9 +3045,10 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 {
> *PTR_MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0,
> Mpi2SasEnclosurePage0_t, *pMpi2SasEnclosurePage0_t;
>
> -#define MPI2_SASENCLOSURE0_PAGEVERSION (0x03)
> +#define MPI2_SASENCLOSURE0_PAGEVERSION (0x04)
>
> /*values for SAS Enclosure Page 0 Flags field */
> +#define MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID (0x0010)
> #define MPI2_SAS_ENCLS0_FLAGS_MNG_MASK (0x000F)
> #define MPI2_SAS_ENCLS0_FLAGS_MNG_UNKNOWN (0x0000)
> #define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_SES (0x0001)
> diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h b/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
> index 4908309..d7598cc 100644
> --- a/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
> +++ b/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
> @@ -6,7 +6,7 @@
> * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages
> * Creation Date: October 11, 2006
> *
> - * mpi2_ioc.h Version: 02.00.23
> + * mpi2_ioc.h Version: 02.00.24
> *
> * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
> * prefix are for use only on MPI v2.5 products, and must not be used
> @@ -132,6 +132,7 @@
> * Added MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE.
> * Added MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY.
> * Added Encrypted Hash Extended Image.
> + * 12-05-13 02.00.24 Added MPI25_HASH_IMAGE_TYPE_BIOS.
> * --------------------------------------------------------------------------
> */
>
> @@ -1598,6 +1599,7 @@ Mpi25EncryptedHashEntry_t, *pMpi25EncryptedHashEntry_t;
> /* values for HashImageType */
> #define MPI25_HASH_IMAGE_TYPE_UNUSED (0x00)
> #define MPI25_HASH_IMAGE_TYPE_FIRMWARE (0x01)
> +#define MPI25_HASH_IMAGE_TYPE_BIOS (0x02)
>
> /* values for HashAlgorithm */
> #define MPI25_HASH_ALGORITHM_UNUSED (0x00)
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:19PM +0530, Sreekanth Reddy wrote:
> Bump mpt3sas Driver version to v5.100.00.00
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index 293ad23..9396a76 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -71,8 +71,8 @@
> #define MPT3SAS_DRIVER_NAME "mpt3sas"
> #define MPT3SAS_AUTHOR "Avago Technologies <[email protected]>"
> #define MPT3SAS_DESCRIPTION "LSI MPT Fusion SAS 3.0 Device Driver"
> -#define MPT3SAS_DRIVER_VERSION "04.100.00.00"
> -#define MPT3SAS_MAJOR_VERSION 4
> +#define MPT3SAS_DRIVER_VERSION "05.100.00.00"
> +#define MPT3SAS_MAJOR_VERSION 5
> #define MPT3SAS_MINOR_VERSION 100
> #define MPT3SAS_BUILD_VERSION 0
> #define MPT3SAS_RELEASE_VERSION 00
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:20PM +0530, Sreekanth Reddy wrote:
> Update MPI2 strings to MPI2.5.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 3 +--
> drivers/scsi/mpt3sas/mpt3sas_base.h | 1 -
> 2 files changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index 32b86bf..6739c0a 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -3901,7 +3901,7 @@ _base_send_ioc_init(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
> mpi_request.WhoInit = MPI2_WHOINIT_HOST_DRIVER;
> mpi_request.VF_ID = 0; /* TODO */
> mpi_request.VP_ID = 0;
> - mpi_request.MsgVersion = cpu_to_le16(MPI2_VERSION);
> + mpi_request.MsgVersion = cpu_to_le16(MPI25_VERSION);
> mpi_request.HeaderVersion = cpu_to_le16(MPI2_HEADER_VERSION);
>
> if (_base_is_controller_msix_enabled(ioc))
> @@ -4769,7 +4769,6 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
> ioc->build_sg_scmd = &_base_build_sg_scmd_ieee;
> ioc->build_sg = &_base_build_sg_ieee;
> ioc->build_zero_len_sge = &_base_build_zero_len_sge_ieee;
> - ioc->mpi25 = 1;
> ioc->sge_size_ieee = sizeof(Mpi2IeeeSgeSimple64_t);
>
> /*
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index 9396a76..2318ef8 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -819,7 +819,6 @@ struct MPT3SAS_ADAPTER {
> MPT_BUILD_SG_SCMD build_sg_scmd;
> MPT_BUILD_SG build_sg;
> MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge;
> - u8 mpi25;
> u16 sge_size_ieee;
>
> /* function ptr for MPI sg elements only */
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:21PM +0530, Sreekanth Reddy wrote:
> Following is the change set,
>
> 1. Added more defines for the BiosOptions field of MPI2_CONFIG_PAGE_BIOS_1.
> 2. Added MPI2_TOOLBOX_CLEAN_BIT26_PRODUCT_SPECIFIC definition.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpi/mpi2.h | 5 +++--
> drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 14 ++++++++++++--
> drivers/scsi/mpt3sas/mpi/mpi2_tool.h | 4 +++-
> 3 files changed, 18 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpi/mpi2.h b/drivers/scsi/mpt3sas/mpi/mpi2.h
> index d730c5c..c2d127c 100644
> --- a/drivers/scsi/mpt3sas/mpi/mpi2.h
> +++ b/drivers/scsi/mpt3sas/mpi/mpi2.h
> @@ -8,7 +8,7 @@
> * scatter/gather formats.
> * Creation Date: June 21, 2006
> *
> - * mpi2.h Version: 02.00.33
> + * mpi2.h Version: 02.00.34
> *
> * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
> * prefix are for use only on MPI v2.5 products, and must not be used
> @@ -90,6 +90,7 @@
> * 04-17-13 02.00.31 Bumped MPI2_HEADER_VERSION_UNIT.
> * 08-19-13 02.00.32 Bumped MPI2_HEADER_VERSION_UNIT.
> * 12-05-13 02.00.33 Bumped MPI2_HEADER_VERSION_UNIT.
> + * 01-08-14 02.00.34 Bumped MPI2_HEADER_VERSION_UNIT
> * --------------------------------------------------------------------------
> */
>
> @@ -123,7 +124,7 @@
> #define MPI2_VERSION_02_05 (0x0205)
>
> /*Unit and Dev versioning for this MPI header set */
> -#define MPI2_HEADER_VERSION_UNIT (0x21)
> +#define MPI2_HEADER_VERSION_UNIT (0x22)
> #define MPI2_HEADER_VERSION_DEV (0x00)
> #define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00)
> #define MPI2_HEADER_VERSION_UNIT_SHIFT (8)
> diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
> index 62dfbf6..66f2cc1 100644
> --- a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
> +++ b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
> @@ -6,7 +6,7 @@
> * Title: MPI Configuration messages and pages
> * Creation Date: November 10, 2006
> *
> - * mpi2_cnfg.h Version: 02.00.27
> + * mpi2_cnfg.h Version: 02.00.28
> *
> * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
> * prefix are for use only on MPI v2.5 products, and must not be used
> @@ -175,6 +175,8 @@
> * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0.
> * Added MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID for
> * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0.
> + * 01-08-14 02.00.28 Added more defines for the BiosOptions field of
> + * MPI2_CONFIG_PAGE_BIOS_1.
> * --------------------------------------------------------------------------
> */
>
> @@ -1334,9 +1336,17 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_1 {
> *PTR_MPI2_CONFIG_PAGE_BIOS_1,
> Mpi2BiosPage1_t, *pMpi2BiosPage1_t;
>
> -#define MPI2_BIOSPAGE1_PAGEVERSION (0x05)
> +#define MPI2_BIOSPAGE1_PAGEVERSION (0x06)
>
> /*values for BIOS Page 1 BiosOptions field */
> +#define MPI2_BIOSPAGE1_OPTIONS_X86_DISABLE_BIOS (0x00000400)
> +
> +#define MPI2_BIOSPAGE1_OPTIONS_MASK_REGISTRATION_UEFI_BSD (0x00000300)
> +#define MPI2_BIOSPAGE1_OPTIONS_USE_BIT0_REGISTRATION_UEFI_BSD (0x00000000)
> +#define MPI2_BIOSPAGE1_OPTIONS_FULL_REGISTRATION_UEFI_BSD (0x00000100)
> +#define MPI2_BIOSPAGE1_OPTIONS_ADAPTER_REGISTRATION_UEFI_BSD (0x00000200)
> +#define MPI2_BIOSPAGE1_OPTIONS_DISABLE_REGISTRATION_UEFI_BSD (0x00000300)
> +
> #define MPI2_BIOSPAGE1_OPTIONS_MASK_OEM_ID (0x000000F0)
> #define MPI2_BIOSPAGE1_OPTIONS_LSI_OEM_ID (0x00000000)
>
> diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_tool.h b/drivers/scsi/mpt3sas/mpi/mpi2_tool.h
> index 904910d..1629e5b 100644
> --- a/drivers/scsi/mpt3sas/mpi/mpi2_tool.h
> +++ b/drivers/scsi/mpt3sas/mpi/mpi2_tool.h
> @@ -6,7 +6,7 @@
> * Title: MPI diagnostic tool structures and definitions
> * Creation Date: March 26, 2007
> *
> - * mpi2_tool.h Version: 02.00.11
> + * mpi2_tool.h Version: 02.00.12
> *
> * Version History
> * ---------------
> @@ -33,6 +33,7 @@
> * 07-26-12 02.00.10 Modified MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST so that
> * it uses MPI Chain SGE as well as MPI Simple SGE.
> * 08-19-13 02.00.11 Added MPI2_TOOLBOX_TEXT_DISPLAY_TOOL and related info.
> + * 01-08-14 02.00.12 Added MPI2_TOOLBOX_CLEAN_BIT26_PRODUCT_SPECIFIC.
> * --------------------------------------------------------------------------
> */
>
> @@ -100,6 +101,7 @@ typedef struct _MPI2_TOOLBOX_CLEAN_REQUEST {
> #define MPI2_TOOLBOX_CLEAN_OTHER_PERSIST_PAGES (0x20000000)
> #define MPI2_TOOLBOX_CLEAN_FW_CURRENT (0x10000000)
> #define MPI2_TOOLBOX_CLEAN_FW_BACKUP (0x08000000)
> +#define MPI2_TOOLBOX_CLEAN_BIT26_PRODUCT_SPECIFIC (0x04000000)
> #define MPI2_TOOLBOX_CLEAN_MEGARAID (0x02000000)
> #define MPI2_TOOLBOX_CLEAN_INITIALIZATION (0x01000000)
> #define MPI2_TOOLBOX_CLEAN_FLASH (0x00000004)
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:24PM +0530, Sreekanth Reddy wrote:
> Bump mpt3sas driver version to v6.100.00.00.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index 7cdbc65..a89c752 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -71,8 +71,8 @@
> #define MPT3SAS_DRIVER_NAME "mpt3sas"
> #define MPT3SAS_AUTHOR "Avago Technologies <[email protected]>"
> #define MPT3SAS_DESCRIPTION "LSI MPT Fusion SAS 3.0 Device Driver"
> -#define MPT3SAS_DRIVER_VERSION "05.100.00.00"
> -#define MPT3SAS_MAJOR_VERSION 5
> +#define MPT3SAS_DRIVER_VERSION "06.100.00.00"
> +#define MPT3SAS_MAJOR_VERSION 6
> #define MPT3SAS_MINOR_VERSION 100
> #define MPT3SAS_BUILD_VERSION 0
> #define MPT3SAS_RELEASE_VERSION 00
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:25PM +0530, Sreekanth Reddy wrote:
> Below are the new changes to MPI 2.5 Rev K(2.5.6) specification and 2.00.35 header files
> 1) Added a minimum size requirement for target mode command buffers.
> 2) Added MinMSIxIndex and MaxMSIxIndex fields to CommandBufferPostBase Request.
> 3) For BIOS Page 1, added SSUTimeout field, and added Product Name String Format bits to the BiosOptions field
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpi/mpi2.h | 5 +++--
> drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 17 ++++++++++++++---
> 2 files changed, 17 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpi/mpi2.h b/drivers/scsi/mpt3sas/mpi/mpi2.h
> index c2d127c..ec27ad2 100644
> --- a/drivers/scsi/mpt3sas/mpi/mpi2.h
> +++ b/drivers/scsi/mpt3sas/mpi/mpi2.h
> @@ -8,7 +8,7 @@
> * scatter/gather formats.
> * Creation Date: June 21, 2006
> *
> - * mpi2.h Version: 02.00.34
> + * mpi2.h Version: 02.00.35
> *
> * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
> * prefix are for use only on MPI v2.5 products, and must not be used
> @@ -91,6 +91,7 @@
> * 08-19-13 02.00.32 Bumped MPI2_HEADER_VERSION_UNIT.
> * 12-05-13 02.00.33 Bumped MPI2_HEADER_VERSION_UNIT.
> * 01-08-14 02.00.34 Bumped MPI2_HEADER_VERSION_UNIT
> + * 06-13-14 02.00.35 Bumped MPI2_HEADER_VERSION_UNIT.
> * --------------------------------------------------------------------------
> */
>
> @@ -124,7 +125,7 @@
> #define MPI2_VERSION_02_05 (0x0205)
>
> /*Unit and Dev versioning for this MPI header set */
> -#define MPI2_HEADER_VERSION_UNIT (0x22)
> +#define MPI2_HEADER_VERSION_UNIT (0x23)
> #define MPI2_HEADER_VERSION_DEV (0x00)
> #define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00)
> #define MPI2_HEADER_VERSION_UNIT_SHIFT (8)
> diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
> index 66f2cc1..c337a85 100644
> --- a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
> +++ b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
> @@ -6,7 +6,7 @@
> * Title: MPI Configuration messages and pages
> * Creation Date: November 10, 2006
> *
> - * mpi2_cnfg.h Version: 02.00.28
> + * mpi2_cnfg.h Version: 02.00.29
> *
> * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
> * prefix are for use only on MPI v2.5 products, and must not be used
> @@ -177,6 +177,8 @@
> * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0.
> * 01-08-14 02.00.28 Added more defines for the BiosOptions field of
> * MPI2_CONFIG_PAGE_BIOS_1.
> + * 06-13-14 02.00.29 Added SSUTimeout field to MPI2_CONFIG_PAGE_BIOS_1, and
> + * more defines for the BiosOptions field..
> * --------------------------------------------------------------------------
> */
>
> @@ -1324,7 +1326,9 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_1 {
> MPI2_CONFIG_PAGE_HEADER Header; /*0x00 */
> U32 BiosOptions; /*0x04 */
> U32 IOCSettings; /*0x08 */
> - U32 Reserved1; /*0x0C */
> + U8 SSUTimeout; /*0x0C */
> + U8 Reserved1; /*0x0D */
> + U16 Reserved2; /*0x0E */
> U32 DeviceSettings; /*0x10 */
> U16 NumberOfDevices; /*0x14 */
> U16 UEFIVersion; /*0x16 */
> @@ -1336,9 +1340,16 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_1 {
> *PTR_MPI2_CONFIG_PAGE_BIOS_1,
> Mpi2BiosPage1_t, *pMpi2BiosPage1_t;
>
> -#define MPI2_BIOSPAGE1_PAGEVERSION (0x06)
> +#define MPI2_BIOSPAGE1_PAGEVERSION (0x07)
>
> /*values for BIOS Page 1 BiosOptions field */
> +#define MPI2_BIOSPAGE1_OPTIONS_PNS_MASK (0x00003800)
> +#define MPI2_BIOSPAGE1_OPTIONS_PNS_PBDHL (0x00000000)
> +#define MPI2_BIOSPAGE1_OPTIONS_PNS_ENCSLOSURE (0x00000800)
> +#define MPI2_BIOSPAGE1_OPTIONS_PNS_LWWID (0x00001000)
> +#define MPI2_BIOSPAGE1_OPTIONS_PNS_PSENS (0x00001800)
> +#define MPI2_BIOSPAGE1_OPTIONS_PNS_ESPHY (0x00002000)
> +
> #define MPI2_BIOSPAGE1_OPTIONS_X86_DISABLE_BIOS (0x00000400)
>
> #define MPI2_BIOSPAGE1_OPTIONS_MASK_REGISTRATION_UEFI_BSD (0x00000300)
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:27PM +0530, Sreekanth Reddy wrote:
> scsi_dma_map API will return a negative value (i.e. -ENOMEM)
> if DMA mapping of sg lists fails and zero if the sg list in the
> SCSI cmd is NULL. But drivers doesn't handled sg list DMA mapping
> failure case properly.
>
> So, Updated the code to return host busy error status to SCSI MID Layer(SML),
> when DMA mapping of scatter gather list fails for a SCSI command.
> So that SML will retry this SCSI cmd after some time.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index 267e489..0b26c8d 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -1345,7 +1345,7 @@ _base_build_sg_scmd_ieee(struct MPT3SAS_ADAPTER *ioc,
>
> sg_scmd = scsi_sglist(scmd);
> sges_left = scsi_dma_map(scmd);
> - if (!sges_left) {
> + if (!sges_left < 0) {
> sdev_printk(KERN_ERR, scmd->device,
> "pci_map_sg failed: request for %d bytes!\n",
> scsi_bufflen(scmd));
> @@ -1414,7 +1414,7 @@ _base_build_sg_scmd_ieee(struct MPT3SAS_ADAPTER *ioc,
> fill_in_last_segment:
>
> /* fill the last segment */
> - while (sges_left) {
> + while (sges_left > 0) {
> if (sges_left == 1)
> _base_add_sg_single_ieee(sg_local,
> simple_sgl_flags_last, 0, sg_dma_len(sg_scmd),
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:30PM +0530, Sreekanth Reddy wrote:
> Added dma_mapping_error() API after mapping an address with dma_map_single() API.
> Otherwise when CONFIG_DMA_API_DEBUG is enabled in the kernel, then it complains
> about mpt3sas driver not calling dma_mapping_error after mapping an address with
> dma_map_single
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_transport.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
> index 7a7aa68..70fd019 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
> @@ -1964,7 +1964,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
> } else {
> dma_addr_out = pci_map_single(ioc->pdev, bio_data(req->bio),
> blk_rq_bytes(req), PCI_DMA_BIDIRECTIONAL);
> - if (!dma_addr_out) {
> + if (pci_dma_mapping_error(ioc->pdev, dma_addr_out)) {
> pr_info(MPT3SAS_FMT "%s(): DMA Addr out = NULL\n",
> ioc->name, __func__);
> rc = -ENOMEM;
> @@ -1986,7 +1986,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
> } else {
> dma_addr_in = pci_map_single(ioc->pdev, bio_data(rsp->bio),
> blk_rq_bytes(rsp), PCI_DMA_BIDIRECTIONAL);
> - if (!dma_addr_in) {
> + if (pci_dma_mapping_error(ioc->pdev, dma_addr_in)) {
> pr_info(MPT3SAS_FMT "%s(): DMA Addr in = NULL\n",
> ioc->name, __func__);
> rc = -ENOMEM;
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:32PM +0530, Sreekanth Reddy wrote:
> Bump mpt3sas driver version to 9.100.00.00
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index b97039b..0ffe763 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -71,8 +71,8 @@
> #define MPT3SAS_DRIVER_NAME "mpt3sas"
> #define MPT3SAS_AUTHOR "Avago Technologies <[email protected]>"
> #define MPT3SAS_DESCRIPTION "LSI MPT Fusion SAS 3.0 Device Driver"
> -#define MPT3SAS_DRIVER_VERSION "06.100.00.00"
> -#define MPT3SAS_MAJOR_VERSION 6
> +#define MPT3SAS_DRIVER_VERSION "09.100.00.00"
> +#define MPT3SAS_MAJOR_VERSION 9
> #define MPT3SAS_MINOR_VERSION 100
> #define MPT3SAS_BUILD_VERSION 0
> #define MPT3SAS_RELEASE_VERSION 00
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:31PM +0530, Sreekanth Reddy wrote:
> Issue: When the disks are getting discovered and assigned device
> handles by the kernel, a device block followed by an unblock
> (due to broadcast primitives) issued by the driver is
> interspersed by the kernel changing the state of the device.
> Therefore the unblock by the driver results in a no operation
> within the kernel API.
>
> To fix this one, the below patch checks the return of the unblock API
> and performs a block followed by an unblock to unfreeze the block
> layer's I/O queue. Sufficient checks and prints are also added in the
> driver to identify this condition caused by the kernel.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_scsih.c | 89 ++++++++++++++++++++++++++++++------
> 1 file changed, 75 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> index 42bb731..5405a2f 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> @@ -2605,6 +2605,75 @@ _scsih_fw_event_cleanup_queue(struct MPT3SAS_ADAPTER *ioc)
> }
>
> /**
> + * _scsih_internal_device_block - block the sdev device
> + * @sdev: per device object
> + * @sas_device_priv_data : per device driver private data
> + *
> + * make sure device is blocked without error, if not
> + * print an error
> + */
> +static void
> +_scsih_internal_device_block(struct scsi_device *sdev,
> + struct MPT3SAS_DEVICE *sas_device_priv_data)
> +{
> + int r = 0;
> +
> + sdev_printk(KERN_INFO, sdev, "device_block, handle(0x%04x)\n",
> + sas_device_priv_data->sas_target->handle);
> + sas_device_priv_data->block = 1;
> +
> + r = scsi_internal_device_block(sdev);
> + if (r == -EINVAL)
> + sdev_printk(KERN_WARNING, sdev,
> + "device_block failed with return(%d) for handle(0x%04x)\n",
> + sas_device_priv_data->sas_target->handle, r);
> +}
> +
> +/**
> + * _scsih_internal_device_unblock - unblock the sdev device
> + * @sdev: per device object
> + * @sas_device_priv_data : per device driver private data
> + * make sure device is unblocked without error, if not retry
> + * by blocking and then unblocking
> + */
> +
> +static void
> +_scsih_internal_device_unblock(struct scsi_device *sdev,
> + struct MPT3SAS_DEVICE *sas_device_priv_data)
> +{
> + int r = 0;
> +
> + sdev_printk(KERN_WARNING, sdev, "device_unblock and setting to running, "
> + "handle(0x%04x)\n", sas_device_priv_data->sas_target->handle);
> + sas_device_priv_data->block = 0;
> + r = scsi_internal_device_unblock(sdev, SDEV_RUNNING);
> + if (r == -EINVAL) {
> + /* The device has been set to SDEV_RUNNING by SD layer during
> + * device addition but the request queue is still stopped by
> + * our earlier block call. We need to perform a block again
> + * to get the device to SDEV_BLOCK and then to SDEV_RUNNING */
> +
> + sdev_printk(KERN_WARNING, sdev,
> + "device_unblock failed with return(%d) for handle(0x%04x) "
> + "performing a block followed by an unblock\n",
> + sas_device_priv_data->sas_target->handle, r);
> + sas_device_priv_data->block = 1;
> + r = scsi_internal_device_block(sdev);
> + if (r)
> + sdev_printk(KERN_WARNING, sdev, "retried device_block "
> + "failed with return(%d) for handle(0x%04x)\n",
> + sas_device_priv_data->sas_target->handle, r);
> +
> + sas_device_priv_data->block = 0;
> + r = scsi_internal_device_unblock(sdev, SDEV_RUNNING);
> + if (r)
> + sdev_printk(KERN_WARNING, sdev, "retried device_unblock"
> + " failed with return(%d) for handle(0x%04x)\n",
> + sas_device_priv_data->sas_target->handle, r);
> + }
> +}
> +
> +/**
> * _scsih_ublock_io_all_device - unblock every device
> * @ioc: per adapter object
> *
> @@ -2623,11 +2692,10 @@ _scsih_ublock_io_all_device(struct MPT3SAS_ADAPTER *ioc)
> if (!sas_device_priv_data->block)
> continue;
>
> - sas_device_priv_data->block = 0;
> dewtprintk(ioc, sdev_printk(KERN_INFO, sdev,
> "device_running, handle(0x%04x)\n",
> sas_device_priv_data->sas_target->handle));
> - scsi_internal_device_unblock(sdev, SDEV_RUNNING);
> + _scsih_internal_device_unblock(sdev, sas_device_priv_data);
> }
> }
>
> @@ -2652,10 +2720,9 @@ _scsih_ublock_io_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address)
> if (sas_device_priv_data->sas_target->sas_address
> != sas_address)
> continue;
> - if (sas_device_priv_data->block) {
> - sas_device_priv_data->block = 0;
> - scsi_internal_device_unblock(sdev, SDEV_RUNNING);
> - }
> + if (sas_device_priv_data->block)
> + _scsih_internal_device_unblock(sdev,
> + sas_device_priv_data);
> }
> }
>
> @@ -2678,10 +2745,7 @@ _scsih_block_io_all_device(struct MPT3SAS_ADAPTER *ioc)
> continue;
> if (sas_device_priv_data->block)
> continue;
> - sas_device_priv_data->block = 1;
> - scsi_internal_device_block(sdev);
> - sdev_printk(KERN_INFO, sdev, "device_blocked, handle(0x%04x)\n",
> - sas_device_priv_data->sas_target->handle);
> + _scsih_internal_device_block(sdev, sas_device_priv_data);
> }
> }
>
> @@ -2713,10 +2777,7 @@ _scsih_block_io_device(struct MPT3SAS_ADAPTER *ioc, u16 handle)
> continue;
> if (sas_device->pend_sas_rphy_add)
> continue;
> - sas_device_priv_data->block = 1;
> - scsi_internal_device_block(sdev);
> - sdev_printk(KERN_INFO, sdev,
> - "device_blocked, handle(0x%04x)\n", handle);
> + _scsih_internal_device_block(sdev, sas_device_priv_data);
> }
> }
>
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:26PM +0530, Sreekanth Reddy wrote:
> For any SCSI command, if the driver receives
> IOC status = SCSI_IOC_TERMINATED and log info = 0x32010081 then
> that command will be completed with DID_RESET host status.
>
> The definition of this log info value is
> "Virtual IO has failed and has to be retried".
>
> Firmware will provide this log info value with IOC Status
> "SCSI_IOC_TERMINATED", whenever a drive (with is a part of a volume)
> is pulled and pushed back within some minimal delay.
> With this log info value, firmware informs the driver to retry the
> failed IO command infinite times, so to provide some time for the
> firmware to discover the reinserted drive successfully instated of
> just retrying failed command for five times(doesn't giving enough
> time for firmware to complete the drive discovery) and failing the
> IO permanently even though drive came back successfully.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_scsih.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> index 64dd90b..837c22a 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> @@ -4241,6 +4241,9 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
> scmd->device->expecting_cc_ua = 1;
> }
> break;
> + } else if (log_info == 0x32010081) {
> + scmd->result = DID_RESET << 16;
> + break;
Could you make that a #define instead of some magic vlaue, so everyone can see
what is happening when reading the source?
> }
> scmd->result = DID_SOFT_ERROR << 16;
> break;
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 6:10 PM, Johannes Thumshirn <[email protected]> wrote:
> On Fri, Jun 12, 2015 at 05:48:56PM +0530, Sreekanth Reddy wrote:
>> On Fri, Jun 12, 2015 at 4:58 PM, Johannes Thumshirn <[email protected]> wrote:
>> > On Fri, Jun 12, 2015 at 03:12:16PM +0530, Sreekanth Reddy wrote:
>> >> Removed the redundancy code while freeing the controller resources.
>> >>
>> >> Signed-off-by: Sreekanth Reddy <[email protected]>
>> >> ---
>> >> drivers/scsi/mpt3sas/mpt3sas_base.c | 57 +++++++++++++++++++++----------------
> [...]
>> >> + _base_free_irq(ioc);
>> >> + _base_disable_msix(ioc);
>> >> +
>> >> + if (ioc->msix96_vector)
>> >> + kfree(ioc->replyPostRegisterIndex);
>> >
>> > kfree() already checks for zero or a NULL pointer.
>>
>> Sorry Johannes, I didn't get you. If I understand this correctly, you
>> are suggesting to check for NULL pointer before calling kree() API as
>> shown below,
>>
>> if (ioc->msix96_vector && (ioc->replyPostRegisterIndex != NULL))
>> kfree(ioc->replyPostRegisterIndex);
>
> Correct me if I'm wrong, but I thought you don't need the if
> (ioc->msix96_vector) before the kfree(). ioc->replyPostRegisterIndex should be
> NULL if ioc->msix96_vector is 0, as far as I can see.
>
> In _scsih_probe() you have:
> shost = scsi_host_alloc(&scsih_driver_template,
> sizeof(struct MPT3SAS_ADAPTER));
> if (!shost)
> return -ENODEV;
>
> /* init local params */
> ioc = shost_priv(shost);
>
> and scsi_host_alloc() does a kzalloc() for shost.
>
> so ioc->replyPortRegisterIndex is NULL.
>
> Or am I thinking wrong here?
Yes, ioc->replyPostRegisterIndex will be NULL if ioc->msix96_vector is 0,
We have added this checks as a precautionary. since calling this
function (i.e kfree()) on memory not previously allocated with
kmalloc(), or on memory which has already been freed, may results in
very bad things, such as freeing memory belonging to another part of
the kernel.
>
>>
>> Regards,
>> Sreekanth
>
> --
> Johannes Thumshirn Storage
> [email protected] +49 911 74053 689
> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
> GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> HRB 21284 (AG Nürnberg)
--
Regards,
Sreekanth
On Mon, Jun 15, 2015 at 03:56:56PM +0530, Sreekanth Reddy wrote:
> On Fri, Jun 12, 2015 at 6:10 PM, Johannes Thumshirn <[email protected]> wrote:
> > On Fri, Jun 12, 2015 at 05:48:56PM +0530, Sreekanth Reddy wrote:
> >> On Fri, Jun 12, 2015 at 4:58 PM, Johannes Thumshirn <[email protected]> wrote:
> >> > On Fri, Jun 12, 2015 at 03:12:16PM +0530, Sreekanth Reddy wrote:
> >> >> Removed the redundancy code while freeing the controller resources.
> >> >>
> >> >> Signed-off-by: Sreekanth Reddy <[email protected]>
> >> >> ---
> >> >> drivers/scsi/mpt3sas/mpt3sas_base.c | 57 +++++++++++++++++++++----------------
> > [...]
> >> >> + _base_free_irq(ioc);
> >> >> + _base_disable_msix(ioc);
> >> >> +
> >> >> + if (ioc->msix96_vector)
> >> >> + kfree(ioc->replyPostRegisterIndex);
> >> >
> >> > kfree() already checks for zero or a NULL pointer.
> >>
> >> Sorry Johannes, I didn't get you. If I understand this correctly, you
> >> are suggesting to check for NULL pointer before calling kree() API as
> >> shown below,
> >>
> >> if (ioc->msix96_vector && (ioc->replyPostRegisterIndex != NULL))
> >> kfree(ioc->replyPostRegisterIndex);
> >
> > Correct me if I'm wrong, but I thought you don't need the if
> > (ioc->msix96_vector) before the kfree(). ioc->replyPostRegisterIndex should be
> > NULL if ioc->msix96_vector is 0, as far as I can see.
> >
> > In _scsih_probe() you have:
> > shost = scsi_host_alloc(&scsih_driver_template,
> > sizeof(struct MPT3SAS_ADAPTER));
> > if (!shost)
> > return -ENODEV;
> >
> > /* init local params */
> > ioc = shost_priv(shost);
> >
> > and scsi_host_alloc() does a kzalloc() for shost.
> >
> > so ioc->replyPortRegisterIndex is NULL.
> >
> > Or am I thinking wrong here?
>
> Yes, ioc->replyPostRegisterIndex will be NULL if ioc->msix96_vector is 0,
> We have added this checks as a precautionary. since calling this
> function (i.e kfree()) on memory not previously allocated with
> kmalloc(), or on memory which has already been freed, may results in
> very bad things, such as freeing memory belonging to another part of
> the kernel.
>
OK, then please leave it in.
> >
> >>
> >> Regards,
> >> Sreekanth
> >
> > --
> > Johannes Thumshirn Storage
> > [email protected] +49 911 74053 689
> > SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
> > GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> > HRB 21284 (AG N?rnberg)
>
>
>
> --
>
> Regards,
> Sreekanth
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Sat, Jun 13, 2015 at 2:33 AM, Joe Lawrence <[email protected]> wrote:
> On 06/12/2015 05:42 AM, Sreekanth Reddy wrote:
> ...
>> +#if defined(alloc_ordered_workqueue)
>> + ioc->firmware_event_thread = alloc_ordered_workqueue(
>> + ioc->firmware_event_name, WQ_MEM_RECLAIM);
>> +#else
>> + ioc->firmware_event_thread = create_singlethread_workqueue(
>> ioc->firmware_event_name);
>> +#endif
>
> Hi Sreekanth,
>
> I think the upstream version of this code can safely assume
> alloc_ordered_workqueue is defined, no?
yes, upstream version of this code can safely assume that
alloc_ordered_workqueue is defined.
While working in-house, I observed that some of the older kernels
doesn't defined this macro, so I have added this else section.
>
> Regards,
>
> -- Joe
--
Regards,
Sreekanth
On Mon, Jun 15, 2015 at 3:31 PM, Johannes Thumshirn <[email protected]> wrote:
> On Fri, Jun 12, 2015 at 03:12:26PM +0530, Sreekanth Reddy wrote:
>> For any SCSI command, if the driver receives
>> IOC status = SCSI_IOC_TERMINATED and log info = 0x32010081 then
>> that command will be completed with DID_RESET host status.
>>
>> The definition of this log info value is
>> "Virtual IO has failed and has to be retried".
>>
>> Firmware will provide this log info value with IOC Status
>> "SCSI_IOC_TERMINATED", whenever a drive (with is a part of a volume)
>> is pulled and pushed back within some minimal delay.
>> With this log info value, firmware informs the driver to retry the
>> failed IO command infinite times, so to provide some time for the
>> firmware to discover the reinserted drive successfully instated of
>> just retrying failed command for five times(doesn't giving enough
>> time for firmware to complete the drive discovery) and failing the
>> IO permanently even though drive came back successfully.
>>
>> Signed-off-by: Sreekanth Reddy <[email protected]>
>> ---
>> drivers/scsi/mpt3sas/mpt3sas_scsih.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
>> index 64dd90b..837c22a 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
>> @@ -4241,6 +4241,9 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
>> scmd->device->expecting_cc_ua = 1;
>> }
>> break;
>> + } else if (log_info == 0x32010081) {
>> + scmd->result = DID_RESET << 16;
>> + break;
>
> Could you make that a #define instead of some magic vlaue, so everyone can see
> what is happening when reading the source?
Sure, I will define a macro for this log_info value.
Thanks,
Sreekanth
>
>> }
>> scmd->result = DID_SOFT_ERROR << 16;
>> break;
>> --
>> 2.0.2
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
> --
> Johannes Thumshirn Storage
> [email protected] +49 911 74053 689
> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
> GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> HRB 21284 (AG Nürnberg)
--
Regards,
Sreekanth
On Mon, Jun 15, 2015 at 3:16 PM, Johannes Thumshirn <[email protected]> wrote:
> On Fri, Jun 12, 2015 at 03:12:22PM +0530, Sreekanth Reddy wrote:
>> Added the following Dell branding to the mpt3sas driver.
>>
>> "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Dell Branding String
>> 0x1000 0x0097 0x1028 0x1F46 DELL 12Gbps HBA
>>
>> Signed-off-by: Sreekanth Reddy <[email protected]>
>> ---
>> drivers/scsi/mpt3sas/mpt3sas_base.c | 36 ++++++++++++++++++++++++++++++++++++
>> drivers/scsi/mpt3sas/mpt3sas_base.h | 11 +++++++++++
>> 2 files changed, 47 insertions(+)
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> index 6739c0a..db362cb 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> @@ -2345,6 +2345,41 @@ _base_display_intel_branding(struct MPT3SAS_ADAPTER *ioc)
>>
>>
>> /**
>> + * _base_display_dell_branding - Display branding string
>> + * @ioc: per adapter object
>> + *
>> + * Return nothing.
>> + */
>> +static void
>> +_base_display_dell_branding(struct MPT3SAS_ADAPTER *ioc)
>> +{
>> + if (ioc->pdev->subsystem_vendor != PCI_VENDOR_ID_DELL)
>> + return;
>> +
>> + switch (ioc->pdev->device) {
>> + case MPI25_MFGPAGE_DEVID_SAS3008:
>> + switch (ioc->pdev->subsystem_device) {
>> + case MPT3SAS_DELL_12G_HBA_SSDID:
>> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
>> + MPT3SAS_DELL_12G_HBA_BRANDING);
>> + break;
>> + default:
>> + pr_info(MPT3SAS_FMT
>> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
>> + ioc->pdev->subsystem_device);
>> + break;
>> + }
>> + break;
>> + default:
>> + pr_info(MPT3SAS_FMT
>> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
>> + ioc->pdev->subsystem_device);
>> + break;
>> + }
>> +}
>> +
>> +
>> +/**
>> * _base_display_ioc_capabilities - Disply IOC's capabilities.
>> * @ioc: per adapter object
>> *
>> @@ -2374,6 +2409,7 @@ _base_display_ioc_capabilities(struct MPT3SAS_ADAPTER *ioc)
>> bios_version & 0x000000FF);
>>
>> _base_display_intel_branding(ioc);
>> + _base_display_dell_branding(ioc);
>>
>> pr_info(MPT3SAS_FMT "Protocol=(", ioc->name);
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> index 2318ef8..c4780c7 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> @@ -152,6 +152,17 @@
>> #define MPT3SAS_INTEL_RS3UC080_SSDID 0x3524
>>
>> /*
>> + * Dell HBA branding
>> + */
>> +#define MPT3SAS_DELL_12G_HBA_BRANDING \
>> + "Dell 12Gbps HBA"
>> +
>> +/*
>> + * Dell HBA SSDIDs
>> + */
>> +#define MPT3SAS_DELL_12G_HBA_SSDID 0x1F46
>> +
>> +/*
>> * status bits for ioc->diag_buffer_status
>> */
>> #define MPT3_DIAG_BUFFER_IS_REGISTERED (0x01)
>> --
>> 2.0.2
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
> This might be something you might consider re-organizing for your code-base
> merge as well, as it leads to a lot of code duplication the more OEMs you have.
May I know which hunk of this patch may leads to code duplication for
more OEMs we add? Whether declaring individual function for each OEMs
leads to this code duplication.
Thanks,
Sreekanth
>
> --
> Johannes Thumshirn Storage
> [email protected] +49 911 74053 689
> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
> GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> HRB 21284 (AG Nürnberg)
--
Regards,
Sreekanth
On Mon, Jun 15, 2015 at 04:41:56PM +0530, Sreekanth Reddy wrote:
> On Mon, Jun 15, 2015 at 3:16 PM, Johannes Thumshirn <[email protected]> wrote:
> > On Fri, Jun 12, 2015 at 03:12:22PM +0530, Sreekanth Reddy wrote:
> >> Added the following Dell branding to the mpt3sas driver.
> >>
> >> "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Dell Branding String
> >> 0x1000 0x0097 0x1028 0x1F46 DELL 12Gbps HBA
> >>
> >> Signed-off-by: Sreekanth Reddy <[email protected]>
> >> ---
> >> drivers/scsi/mpt3sas/mpt3sas_base.c | 36 ++++++++++++++++++++++++++++++++++++
> >> drivers/scsi/mpt3sas/mpt3sas_base.h | 11 +++++++++++
> >> 2 files changed, 47 insertions(+)
> >>
> >> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> >> index 6739c0a..db362cb 100644
> >> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> >> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> >> @@ -2345,6 +2345,41 @@ _base_display_intel_branding(struct MPT3SAS_ADAPTER *ioc)
> >>
> >>
> >> /**
> >> + * _base_display_dell_branding - Display branding string
> >> + * @ioc: per adapter object
> >> + *
> >> + * Return nothing.
> >> + */
> >> +static void
> >> +_base_display_dell_branding(struct MPT3SAS_ADAPTER *ioc)
> >> +{
> >> + if (ioc->pdev->subsystem_vendor != PCI_VENDOR_ID_DELL)
> >> + return;
> >> +
> >> + switch (ioc->pdev->device) {
> >> + case MPI25_MFGPAGE_DEVID_SAS3008:
> >> + switch (ioc->pdev->subsystem_device) {
> >> + case MPT3SAS_DELL_12G_HBA_SSDID:
> >> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> >> + MPT3SAS_DELL_12G_HBA_BRANDING);
> >> + break;
> >> + default:
> >> + pr_info(MPT3SAS_FMT
> >> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
> >> + ioc->pdev->subsystem_device);
> >> + break;
> >> + }
> >> + break;
> >> + default:
> >> + pr_info(MPT3SAS_FMT
> >> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
> >> + ioc->pdev->subsystem_device);
> >> + break;
> >> + }
> >> +}
> >> +
> >> +
> >> +/**
> >> * _base_display_ioc_capabilities - Disply IOC's capabilities.
> >> * @ioc: per adapter object
> >> *
> >> @@ -2374,6 +2409,7 @@ _base_display_ioc_capabilities(struct MPT3SAS_ADAPTER *ioc)
> >> bios_version & 0x000000FF);
> >>
> >> _base_display_intel_branding(ioc);
> >> + _base_display_dell_branding(ioc);
> >>
> >> pr_info(MPT3SAS_FMT "Protocol=(", ioc->name);
> >>
> >> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> >> index 2318ef8..c4780c7 100644
> >> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> >> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> >> @@ -152,6 +152,17 @@
> >> #define MPT3SAS_INTEL_RS3UC080_SSDID 0x3524
> >>
> >> /*
> >> + * Dell HBA branding
> >> + */
> >> +#define MPT3SAS_DELL_12G_HBA_BRANDING \
> >> + "Dell 12Gbps HBA"
> >> +
> >> +/*
> >> + * Dell HBA SSDIDs
> >> + */
> >> +#define MPT3SAS_DELL_12G_HBA_SSDID 0x1F46
> >> +
> >> +/*
> >> * status bits for ioc->diag_buffer_status
> >> */
> >> #define MPT3_DIAG_BUFFER_IS_REGISTERED (0x01)
> >> --
> >> 2.0.2
> >>
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> >> the body of a message to [email protected]
> >> More majordomo info at http://vger.kernel.org/majordomo-info.html
> >
> > This might be something you might consider re-organizing for your code-base
> > merge as well, as it leads to a lot of code duplication the more OEMs you have.
>
> May I know which hunk of this patch may leads to code duplication for
> more OEMs we add? Whether declaring individual function for each OEMs
> leads to this code duplication.
Hi Sreekanth,
In
[PATCH 11/20] [SCSI] mpt3sas: Add branding string support for OEM custom HBA
you add _base_display_cisco_branding(). In
[PATCH 10/20] [SCSI] mpt3sas: Add branding string support for OEM's HBA
you add _base_display_dell_branding(). You already have
_base_display_intel_branding().
Each of them follows the pattern:
1) Check if it is a OEM device for XXX
2) Check witch OEM device for XXX it is
3) Display a string based on that specific OEM device
4) Return
Johannes
On Mon, Jun 15, 2015 at 5:23 PM, Johannes Thumshirn <[email protected]> wrote:
> On Mon, Jun 15, 2015 at 04:41:56PM +0530, Sreekanth Reddy wrote:
>> On Mon, Jun 15, 2015 at 3:16 PM, Johannes Thumshirn <[email protected]> wrote:
>> > On Fri, Jun 12, 2015 at 03:12:22PM +0530, Sreekanth Reddy wrote:
>> >> Added the following Dell branding to the mpt3sas driver.
>> >>
>> >> "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Dell Branding String
>> >> 0x1000 0x0097 0x1028 0x1F46 DELL 12Gbps HBA
>> >>
>> >> Signed-off-by: Sreekanth Reddy <[email protected]>
>> >> ---
>> >> drivers/scsi/mpt3sas/mpt3sas_base.c | 36 ++++++++++++++++++++++++++++++++++++
>> >> drivers/scsi/mpt3sas/mpt3sas_base.h | 11 +++++++++++
>> >> 2 files changed, 47 insertions(+)
>> >>
>> >> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> >> index 6739c0a..db362cb 100644
>> >> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>> >> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> >> @@ -2345,6 +2345,41 @@ _base_display_intel_branding(struct MPT3SAS_ADAPTER *ioc)
>> >>
>> >>
>> >> /**
>> >> + * _base_display_dell_branding - Display branding string
>> >> + * @ioc: per adapter object
>> >> + *
>> >> + * Return nothing.
>> >> + */
>> >> +static void
>> >> +_base_display_dell_branding(struct MPT3SAS_ADAPTER *ioc)
>> >> +{
>> >> + if (ioc->pdev->subsystem_vendor != PCI_VENDOR_ID_DELL)
>> >> + return;
>> >> +
>> >> + switch (ioc->pdev->device) {
>> >> + case MPI25_MFGPAGE_DEVID_SAS3008:
>> >> + switch (ioc->pdev->subsystem_device) {
>> >> + case MPT3SAS_DELL_12G_HBA_SSDID:
>> >> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
>> >> + MPT3SAS_DELL_12G_HBA_BRANDING);
>> >> + break;
>> >> + default:
>> >> + pr_info(MPT3SAS_FMT
>> >> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
>> >> + ioc->pdev->subsystem_device);
>> >> + break;
>> >> + }
>> >> + break;
>> >> + default:
>> >> + pr_info(MPT3SAS_FMT
>> >> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
>> >> + ioc->pdev->subsystem_device);
>> >> + break;
>> >> + }
>> >> +}
>> >> +
>> >> +
>> >> +/**
>> >> * _base_display_ioc_capabilities - Disply IOC's capabilities.
>> >> * @ioc: per adapter object
>> >> *
>> >> @@ -2374,6 +2409,7 @@ _base_display_ioc_capabilities(struct MPT3SAS_ADAPTER *ioc)
>> >> bios_version & 0x000000FF);
>> >>
>> >> _base_display_intel_branding(ioc);
>> >> + _base_display_dell_branding(ioc);
>> >>
>> >> pr_info(MPT3SAS_FMT "Protocol=(", ioc->name);
>> >>
>> >> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> >> index 2318ef8..c4780c7 100644
>> >> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
>> >> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> >> @@ -152,6 +152,17 @@
>> >> #define MPT3SAS_INTEL_RS3UC080_SSDID 0x3524
>> >>
>> >> /*
>> >> + * Dell HBA branding
>> >> + */
>> >> +#define MPT3SAS_DELL_12G_HBA_BRANDING \
>> >> + "Dell 12Gbps HBA"
>> >> +
>> >> +/*
>> >> + * Dell HBA SSDIDs
>> >> + */
>> >> +#define MPT3SAS_DELL_12G_HBA_SSDID 0x1F46
>> >> +
>> >> +/*
>> >> * status bits for ioc->diag_buffer_status
>> >> */
>> >> #define MPT3_DIAG_BUFFER_IS_REGISTERED (0x01)
>> >> --
>> >> 2.0.2
>> >>
>> >> --
>> >> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
>> >> the body of a message to [email protected]
>> >> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> >
>> > This might be something you might consider re-organizing for your code-base
>> > merge as well, as it leads to a lot of code duplication the more OEMs you have.
>>
>> May I know which hunk of this patch may leads to code duplication for
>> more OEMs we add? Whether declaring individual function for each OEMs
>> leads to this code duplication.
>
> Hi Sreekanth,
>
> In
> [PATCH 11/20] [SCSI] mpt3sas: Add branding string support for OEM custom HBA
> you add _base_display_cisco_branding(). In
> [PATCH 10/20] [SCSI] mpt3sas: Add branding string support for OEM's HBA
> you add _base_display_dell_branding(). You already have
> _base_display_intel_branding().
>
> Each of them follows the pattern:
> 1) Check if it is a OEM device for XXX
> 2) Check witch OEM device for XXX it is
> 3) Display a string based on that specific OEM device
> 4) Return
Johannes,
Thanks for detail explanation. I will take of this while merging the
drivers code.
Thanks a lot,
Sreekanth
>
> Johannes
--
Regards,
Sreekanth
On Mon, 2015-06-15 at 16:26 +0530, Sreekanth Reddy wrote:
> On Sat, Jun 13, 2015 at 2:33 AM, Joe Lawrence <[email protected]> wrote:
> > On 06/12/2015 05:42 AM, Sreekanth Reddy wrote:
> > ...
> >> +#if defined(alloc_ordered_workqueue)
> >> + ioc->firmware_event_thread = alloc_ordered_workqueue(
> >> + ioc->firmware_event_name, WQ_MEM_RECLAIM);
> >> +#else
> >> + ioc->firmware_event_thread = create_singlethread_workqueue(
> >> ioc->firmware_event_name);
> >> +#endif
> >
> > Hi Sreekanth,
> >
> > I think the upstream version of this code can safely assume
> > alloc_ordered_workqueue is defined, no?
>
> yes, upstream version of this code can safely assume that
> alloc_ordered_workqueue is defined.
>
> While working in-house, I observed that some of the older kernels
> doesn't defined this macro, so I have added this else section.
The driver has to be defined for the current kernel. If you maintain a
backport, that's fine, but not in the upstream driver. The reasons are
fairly pragmatic: this code in the #else clause can't be compiled so
it's just junk to the upstream driver and the static checkers will find
it and you'll attract a flock of patches removing dead code.
James
On Tue, Jun 16, 2015 at 2:35 AM, James Bottomley
<[email protected]> wrote:
> On Mon, 2015-06-15 at 16:26 +0530, Sreekanth Reddy wrote:
>> On Sat, Jun 13, 2015 at 2:33 AM, Joe Lawrence <[email protected]> wrote:
>> > On 06/12/2015 05:42 AM, Sreekanth Reddy wrote:
>> > ...
>> >> +#if defined(alloc_ordered_workqueue)
>> >> + ioc->firmware_event_thread = alloc_ordered_workqueue(
>> >> + ioc->firmware_event_name, WQ_MEM_RECLAIM);
>> >> +#else
>> >> + ioc->firmware_event_thread = create_singlethread_workqueue(
>> >> ioc->firmware_event_name);
>> >> +#endif
>> >
>> > Hi Sreekanth,
>> >
>> > I think the upstream version of this code can safely assume
>> > alloc_ordered_workqueue is defined, no?
>>
>> yes, upstream version of this code can safely assume that
>> alloc_ordered_workqueue is defined.
>>
>> While working in-house, I observed that some of the older kernels
>> doesn't defined this macro, so I have added this else section.
>
> The driver has to be defined for the current kernel. If you maintain a
> backport, that's fine, but not in the upstream driver. The reasons are
> fairly pragmatic: this code in the #else clause can't be compiled so
> it's just junk to the upstream driver and the static checkers will find
> it and you'll attract a flock of patches removing dead code.
>
Accepted. I will post next version of this patch by removing the else section.
Thanks,
Sreekanth
> James
>
>
--
Regards,
Sreekanth
On 06/12/2015 11:42 AM, Sreekanth Reddy wrote:
> Driver initialization fails if driver tries to send IOC facts request message when the IOC is in reset or in a fault state.
>
> This patch will make sure that
> 1.Driver to send IOC facts request message only if HBA is in operational or ready state.
> 2.If IOC is in fault state, a diagnostic reset would be issued.
> 3.If IOC is in reset state then driver will wait for 10 seconds to exit out of reset state.
> If the HBA continues to be in reset state, then the HBA wouldn't be claimed by the driver.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 65 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 65 insertions(+)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index c13a365..ce57320 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -3169,6 +3169,9 @@ _base_wait_on_iocstate(struct MPT3SAS_ADAPTER *ioc, u32 ioc_state, int timeout,
> * Notes: MPI2_HIS_IOC2SYS_DB_STATUS - set to one when IOC writes to doorbell.
> */
> static int
> +_base_diag_reset(struct MPT3SAS_ADAPTER *ioc, int sleep_flag);
> +
> +static int
> _base_wait_for_doorbell_int(struct MPT3SAS_ADAPTER *ioc, int timeout,
> int sleep_flag)
> {
> @@ -3711,6 +3714,61 @@ _base_get_port_facts(struct MPT3SAS_ADAPTER *ioc, int port, int sleep_flag)
> }
>
> /**
> + * _base_wait_for_iocstate - Wait until the card is in READY or OPERATIONAL
> + * @ioc: per adapter object
> + * @timeout:
> + * @sleep_flag: CAN_SLEEP or NO_SLEEP
> + *
> + * Returns 0 for success, non-zero for failure.
> + */
> +static int
> +_base_wait_for_iocstate(struct MPT3SAS_ADAPTER *ioc, int timeout,
> + int sleep_flag)
> +{
> + u32 ioc_state;
> + int rc;
> +
> + dinitprintk(ioc, printk(MPT3SAS_FMT "%s\n", ioc->name,
> + __func__));
> +
> + if (ioc->pci_error_recovery)
> + return 0;
Hi Sreekanth, isn't that^ an error condition - 'return -EFAULT;'
would be better?
Tomas
> +
> + ioc_state = mpt3sas_base_get_iocstate(ioc, 0);
> + dhsprintk(ioc, printk(MPT3SAS_FMT "%s: ioc_state(0x%08x)\n",
> + ioc->name, __func__, ioc_state));
> +
> + if (((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_READY) ||
> + (ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_OPERATIONAL)
> + return 0;
> +
> + if (ioc_state & MPI2_DOORBELL_USED) {
> + dhsprintk(ioc, printk(MPT3SAS_FMT
> + "unexpected doorbell active!\n", ioc->name));
> + goto issue_diag_reset;
> + }
> +
> + if ((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_FAULT) {
> + mpt3sas_base_fault_info(ioc, ioc_state &
> + MPI2_DOORBELL_DATA_MASK);
> + goto issue_diag_reset;
> + }
> +
> + ioc_state = _base_wait_on_iocstate(ioc, MPI2_IOC_STATE_READY,
> + timeout, sleep_flag);
> + if (ioc_state) {
> + dfailprintk(ioc, printk(MPT3SAS_FMT
> + "%s: failed going to ready state (ioc_state=0x%x)\n",
> + ioc->name, __func__, ioc_state));
> + return -EFAULT;
> + }
> +
> + issue_diag_reset:
> + rc = _base_diag_reset(ioc, sleep_flag);
> + return rc;
> +}
> +
> +/**
> * _base_get_ioc_facts - obtain ioc facts reply and save in ioc
> * @ioc: per adapter object
> * @sleep_flag: CAN_SLEEP or NO_SLEEP
> @@ -3728,6 +3786,13 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
> dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> __func__));
>
> + r = _base_wait_for_iocstate(ioc, 10, sleep_flag);
> + if (r) {
> + dfailprintk(ioc, printk(MPT3SAS_FMT
> + "%s: failed getting to correct state\n",
> + ioc->name, __func__));
> + return r;
> + }
> mpi_reply_sz = sizeof(Mpi2IOCFactsReply_t);
> mpi_request_sz = sizeof(Mpi2IOCFactsRequest_t);
> memset(&mpi_request, 0, mpi_request_sz);
>
On Tue, Jun 16, 2015 at 9:29 PM, Tomas Henzl <[email protected]> wrote:
> On 06/12/2015 11:42 AM, Sreekanth Reddy wrote:
>> Driver initialization fails if driver tries to send IOC facts request message when the IOC is in reset or in a fault state.
>>
>> This patch will make sure that
>> 1.Driver to send IOC facts request message only if HBA is in operational or ready state.
>> 2.If IOC is in fault state, a diagnostic reset would be issued.
>> 3.If IOC is in reset state then driver will wait for 10 seconds to exit out of reset state.
>> If the HBA continues to be in reset state, then the HBA wouldn't be claimed by the driver.
>>
>> Signed-off-by: Sreekanth Reddy <[email protected]>
>> ---
>> drivers/scsi/mpt3sas/mpt3sas_base.c | 65 +++++++++++++++++++++++++++++++++++++
>> 1 file changed, 65 insertions(+)
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> index c13a365..ce57320 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> @@ -3169,6 +3169,9 @@ _base_wait_on_iocstate(struct MPT3SAS_ADAPTER *ioc, u32 ioc_state, int timeout,
>> * Notes: MPI2_HIS_IOC2SYS_DB_STATUS - set to one when IOC writes to doorbell.
>> */
>> static int
>> +_base_diag_reset(struct MPT3SAS_ADAPTER *ioc, int sleep_flag);
>> +
>> +static int
>> _base_wait_for_doorbell_int(struct MPT3SAS_ADAPTER *ioc, int timeout,
>> int sleep_flag)
>> {
>> @@ -3711,6 +3714,61 @@ _base_get_port_facts(struct MPT3SAS_ADAPTER *ioc, int port, int sleep_flag)
>> }
>>
>> /**
>> + * _base_wait_for_iocstate - Wait until the card is in READY or OPERATIONAL
>> + * @ioc: per adapter object
>> + * @timeout:
>> + * @sleep_flag: CAN_SLEEP or NO_SLEEP
>> + *
>> + * Returns 0 for success, non-zero for failure.
>> + */
>> +static int
>> +_base_wait_for_iocstate(struct MPT3SAS_ADAPTER *ioc, int timeout,
>> + int sleep_flag)
>> +{
>> + u32 ioc_state;
>> + int rc;
>> +
>> + dinitprintk(ioc, printk(MPT3SAS_FMT "%s\n", ioc->name,
>> + __func__));
>> +
>> + if (ioc->pci_error_recovery)
>> + return 0;
> Hi Sreekanth, isn't that^ an error condition - 'return -EFAULT;'
> would be better?
> Tomas
Accepted. I will post the next version of this patch with this change.
Thanks,
Sreekanth
>> +
>> + ioc_state = mpt3sas_base_get_iocstate(ioc, 0);
>> + dhsprintk(ioc, printk(MPT3SAS_FMT "%s: ioc_state(0x%08x)\n",
>> + ioc->name, __func__, ioc_state));
>> +
>> + if (((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_READY) ||
>> + (ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_OPERATIONAL)
>> + return 0;
>> +
>> + if (ioc_state & MPI2_DOORBELL_USED) {
>> + dhsprintk(ioc, printk(MPT3SAS_FMT
>> + "unexpected doorbell active!\n", ioc->name));
>> + goto issue_diag_reset;
>> + }
>> +
>> + if ((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_FAULT) {
>> + mpt3sas_base_fault_info(ioc, ioc_state &
>> + MPI2_DOORBELL_DATA_MASK);
>> + goto issue_diag_reset;
>> + }
>> +
>> + ioc_state = _base_wait_on_iocstate(ioc, MPI2_IOC_STATE_READY,
>> + timeout, sleep_flag);
>> + if (ioc_state) {
>> + dfailprintk(ioc, printk(MPT3SAS_FMT
>> + "%s: failed going to ready state (ioc_state=0x%x)\n",
>> + ioc->name, __func__, ioc_state));
>> + return -EFAULT;
>> + }
>> +
>> + issue_diag_reset:
>> + rc = _base_diag_reset(ioc, sleep_flag);
>> + return rc;
>> +}
>> +
>> +/**
>> * _base_get_ioc_facts - obtain ioc facts reply and save in ioc
>> * @ioc: per adapter object
>> * @sleep_flag: CAN_SLEEP or NO_SLEEP
>> @@ -3728,6 +3786,13 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
>> dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
>> __func__));
>>
>> + r = _base_wait_for_iocstate(ioc, 10, sleep_flag);
>> + if (r) {
>> + dfailprintk(ioc, printk(MPT3SAS_FMT
>> + "%s: failed getting to correct state\n",
>> + ioc->name, __func__));
>> + return r;
>> + }
>> mpi_reply_sz = sizeof(Mpi2IOCFactsReply_t);
>> mpi_request_sz = sizeof(Mpi2IOCFactsRequest_t);
>> memset(&mpi_request, 0, mpi_request_sz);
>>
>
--
Regards,
Sreekanth
Hi,
Any review comments on this patch. please let us known if any changes
are required.
Thanks,
Sreekanth
On Mon, Jun 15, 2015 at 5:30 PM, Sreekanth Reddy
<[email protected]> wrote:
> On Mon, Jun 15, 2015 at 5:23 PM, Johannes Thumshirn <[email protected]> wrote:
>> On Mon, Jun 15, 2015 at 04:41:56PM +0530, Sreekanth Reddy wrote:
>>> On Mon, Jun 15, 2015 at 3:16 PM, Johannes Thumshirn <[email protected]> wrote:
>>> > On Fri, Jun 12, 2015 at 03:12:22PM +0530, Sreekanth Reddy wrote:
>>> >> Added the following Dell branding to the mpt3sas driver.
>>> >>
>>> >> "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Dell Branding String
>>> >> 0x1000 0x0097 0x1028 0x1F46 DELL 12Gbps HBA
>>> >>
>>> >> Signed-off-by: Sreekanth Reddy <[email protected]>
>>> >> ---
>>> >> drivers/scsi/mpt3sas/mpt3sas_base.c | 36 ++++++++++++++++++++++++++++++++++++
>>> >> drivers/scsi/mpt3sas/mpt3sas_base.h | 11 +++++++++++
>>> >> 2 files changed, 47 insertions(+)
>>> >>
>>> >> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> >> index 6739c0a..db362cb 100644
>>> >> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> >> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> >> @@ -2345,6 +2345,41 @@ _base_display_intel_branding(struct MPT3SAS_ADAPTER *ioc)
>>> >>
>>> >>
>>> >> /**
>>> >> + * _base_display_dell_branding - Display branding string
>>> >> + * @ioc: per adapter object
>>> >> + *
>>> >> + * Return nothing.
>>> >> + */
>>> >> +static void
>>> >> +_base_display_dell_branding(struct MPT3SAS_ADAPTER *ioc)
>>> >> +{
>>> >> + if (ioc->pdev->subsystem_vendor != PCI_VENDOR_ID_DELL)
>>> >> + return;
>>> >> +
>>> >> + switch (ioc->pdev->device) {
>>> >> + case MPI25_MFGPAGE_DEVID_SAS3008:
>>> >> + switch (ioc->pdev->subsystem_device) {
>>> >> + case MPT3SAS_DELL_12G_HBA_SSDID:
>>> >> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
>>> >> + MPT3SAS_DELL_12G_HBA_BRANDING);
>>> >> + break;
>>> >> + default:
>>> >> + pr_info(MPT3SAS_FMT
>>> >> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
>>> >> + ioc->pdev->subsystem_device);
>>> >> + break;
>>> >> + }
>>> >> + break;
>>> >> + default:
>>> >> + pr_info(MPT3SAS_FMT
>>> >> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
>>> >> + ioc->pdev->subsystem_device);
>>> >> + break;
>>> >> + }
>>> >> +}
>>> >> +
>>> >> +
>>> >> +/**
>>> >> * _base_display_ioc_capabilities - Disply IOC's capabilities.
>>> >> * @ioc: per adapter object
>>> >> *
>>> >> @@ -2374,6 +2409,7 @@ _base_display_ioc_capabilities(struct MPT3SAS_ADAPTER *ioc)
>>> >> bios_version & 0x000000FF);
>>> >>
>>> >> _base_display_intel_branding(ioc);
>>> >> + _base_display_dell_branding(ioc);
>>> >>
>>> >> pr_info(MPT3SAS_FMT "Protocol=(", ioc->name);
>>> >>
>>> >> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
>>> >> index 2318ef8..c4780c7 100644
>>> >> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
>>> >> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
>>> >> @@ -152,6 +152,17 @@
>>> >> #define MPT3SAS_INTEL_RS3UC080_SSDID 0x3524
>>> >>
>>> >> /*
>>> >> + * Dell HBA branding
>>> >> + */
>>> >> +#define MPT3SAS_DELL_12G_HBA_BRANDING \
>>> >> + "Dell 12Gbps HBA"
>>> >> +
>>> >> +/*
>>> >> + * Dell HBA SSDIDs
>>> >> + */
>>> >> +#define MPT3SAS_DELL_12G_HBA_SSDID 0x1F46
>>> >> +
>>> >> +/*
>>> >> * status bits for ioc->diag_buffer_status
>>> >> */
>>> >> #define MPT3_DIAG_BUFFER_IS_REGISTERED (0x01)
>>> >> --
>>> >> 2.0.2
>>> >>
>>> >> --
>>> >> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
>>> >> the body of a message to [email protected]
>>> >> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>> >
>>> > This might be something you might consider re-organizing for your code-base
>>> > merge as well, as it leads to a lot of code duplication the more OEMs you have.
>>>
>>> May I know which hunk of this patch may leads to code duplication for
>>> more OEMs we add? Whether declaring individual function for each OEMs
>>> leads to this code duplication.
>>
>> Hi Sreekanth,
>>
>> In
>> [PATCH 11/20] [SCSI] mpt3sas: Add branding string support for OEM custom HBA
>> you add _base_display_cisco_branding(). In
>> [PATCH 10/20] [SCSI] mpt3sas: Add branding string support for OEM's HBA
>> you add _base_display_dell_branding(). You already have
>> _base_display_intel_branding().
>>
>> Each of them follows the pattern:
>> 1) Check if it is a OEM device for XXX
>> 2) Check witch OEM device for XXX it is
>> 3) Display a string based on that specific OEM device
>> 4) Return
>
> Johannes,
>
> Thanks for detail explanation. I will take of this while merging the
> drivers code.
>
> Thanks a lot,
> Sreekanth
>>
>> Johannes
>
>
>
> --
>
> Regards,
> Sreekanth
--
Regards,
Sreekanth
Hi,
Any other review comments on this patch. please let us known if any
changes are required.
Thanks,
Sreekanth
On Mon, Jun 15, 2015 at 4:18 PM, Johannes Thumshirn <[email protected]> wrote:
> On Mon, Jun 15, 2015 at 03:56:56PM +0530, Sreekanth Reddy wrote:
>> On Fri, Jun 12, 2015 at 6:10 PM, Johannes Thumshirn <[email protected]> wrote:
>> > On Fri, Jun 12, 2015 at 05:48:56PM +0530, Sreekanth Reddy wrote:
>> >> On Fri, Jun 12, 2015 at 4:58 PM, Johannes Thumshirn <[email protected]> wrote:
>> >> > On Fri, Jun 12, 2015 at 03:12:16PM +0530, Sreekanth Reddy wrote:
>> >> >> Removed the redundancy code while freeing the controller resources.
>> >> >>
>> >> >> Signed-off-by: Sreekanth Reddy <[email protected]>
>> >> >> ---
>> >> >> drivers/scsi/mpt3sas/mpt3sas_base.c | 57 +++++++++++++++++++++----------------
>> > [...]
>> >> >> + _base_free_irq(ioc);
>> >> >> + _base_disable_msix(ioc);
>> >> >> +
>> >> >> + if (ioc->msix96_vector)
>> >> >> + kfree(ioc->replyPostRegisterIndex);
>> >> >
>> >> > kfree() already checks for zero or a NULL pointer.
>> >>
>> >> Sorry Johannes, I didn't get you. If I understand this correctly, you
>> >> are suggesting to check for NULL pointer before calling kree() API as
>> >> shown below,
>> >>
>> >> if (ioc->msix96_vector && (ioc->replyPostRegisterIndex != NULL))
>> >> kfree(ioc->replyPostRegisterIndex);
>> >
>> > Correct me if I'm wrong, but I thought you don't need the if
>> > (ioc->msix96_vector) before the kfree(). ioc->replyPostRegisterIndex should be
>> > NULL if ioc->msix96_vector is 0, as far as I can see.
>> >
>> > In _scsih_probe() you have:
>> > shost = scsi_host_alloc(&scsih_driver_template,
>> > sizeof(struct MPT3SAS_ADAPTER));
>> > if (!shost)
>> > return -ENODEV;
>> >
>> > /* init local params */
>> > ioc = shost_priv(shost);
>> >
>> > and scsi_host_alloc() does a kzalloc() for shost.
>> >
>> > so ioc->replyPortRegisterIndex is NULL.
>> >
>> > Or am I thinking wrong here?
>>
>> Yes, ioc->replyPostRegisterIndex will be NULL if ioc->msix96_vector is 0,
>> We have added this checks as a precautionary. since calling this
>> function (i.e kfree()) on memory not previously allocated with
>> kmalloc(), or on memory which has already been freed, may results in
>> very bad things, such as freeing memory belonging to another part of
>> the kernel.
>>
>
> OK, then please leave it in.
>
>> >
>> >>
>> >> Regards,
>> >> Sreekanth
>> >
>> > --
>> > Johannes Thumshirn Storage
>> > [email protected] +49 911 74053 689
>> > SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
>> > GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
>> > HRB 21284 (AG Nürnberg)
>>
>>
>>
>> --
>>
>> Regards,
>> Sreekanth
>
> --
> Johannes Thumshirn Storage
> [email protected] +49 911 74053 689
> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
> GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> HRB 21284 (AG Nürnberg)
--
Regards,
Sreekanth
Hi,
Any review comments on this patch. please let us known if any changes
are required.
Thanks,
Sreekanth
On Fri, Jun 12, 2015 at 3:12 PM, Sreekanth Reddy
<[email protected]> wrote:
> Added support for below customer specific brandings
>
> "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Cisco Branding String
> 0x1000 0x97 0x1137 0x154 Cisco 9300-8i 12Gbps SAS HBA
> 0x1000 0x97 0x1137 0x155 Cisco 12G Modular SAS Pass through Controller
> 0x1000 0x97 0x1137 0x156 UCS C3X60 12G SAS Pass through Controller
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 29 +++++++++++++++++++++++++++--
> drivers/scsi/mpt3sas/mpt3sas_base.h | 16 ++++++++++++----
> 2 files changed, 39 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index 0b26c8d..2f2c331 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -2393,9 +2393,17 @@ _base_display_cisco_branding(struct MPT3SAS_ADAPTER *ioc)
> switch (ioc->pdev->device) {
> case MPI25_MFGPAGE_DEVID_SAS3008:
> switch (ioc->pdev->subsystem_device) {
> - case MPT3SAS_CISCO_12G_HBA_SSDID:
> + case MPT3SAS_CISCO_12G_8E_HBA_SSDID:
> pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> - MPT3SAS_CISCO_12G_HBA_BRANDING);
> + MPT3SAS_CISCO_12G_8E_HBA_BRANDING);
> + break;
> + case MPT3SAS_CISCO_12G_8I_HBA_SSDID:
> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> + MPT3SAS_CISCO_12G_8I_HBA_BRANDING);
> + break;
> + case MPT3SAS_CISCO_12G_AVILA_HBA_SSDID:
> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> + MPT3SAS_CISCO_12G_AVILA_HBA_BRANDING);
> break;
> default:
> pr_info(MPT3SAS_FMT
> @@ -2404,6 +2412,23 @@ _base_display_cisco_branding(struct MPT3SAS_ADAPTER *ioc)
> break;
> }
> break;
> + case MPI25_MFGPAGE_DEVID_SAS3108_1:
> + switch (ioc->pdev->subsystem_device) {
> + case MPT3SAS_CISCO_12G_AVILA_HBA_SSDID:
> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> + MPT3SAS_CISCO_12G_AVILA_HBA_BRANDING);
> + break;
> + case MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_SSDID:
> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> + MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_BRANDING);
> + break;
> + default:
> + pr_info(MPT3SAS_FMT
> + "Cisco 12Gbps SAS HBA: Subsystem ID: 0x%X\n",
> + ioc->name, ioc->pdev->subsystem_device);
> + break;
> + }
> + break;
> default:
> pr_info(MPT3SAS_FMT
> "Cisco 12Gbps SAS HBA: Subsystem ID: 0x%X\n",
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index a89c752..b97039b 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -165,13 +165,21 @@
> /*
> * Cisco HBA branding
> */
> -#define MPT3SAS_CISCO_12G_HBA_BRANDING \
> - "Cisco 9300-8E 12G SAS HBA"
> -
> +#define MPT3SAS_CISCO_12G_8E_HBA_BRANDING \
> + "Cisco 9300-8E 12G SAS HBA"
> +#define MPT3SAS_CISCO_12G_8I_HBA_BRANDING \
> + "Cisco 9300-8i 12G SAS HBA"
> +#define MPT3SAS_CISCO_12G_AVILA_HBA_BRANDING \
> + "Cisco 12G Modular SAS Pass through Controller"
> +#define MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_BRANDING \
> + "UCS C3X60 12G SAS Pass through Controller"
> /*
> * Cisco HBA SSSDIDs
> */
> - #define MPT3SAS_CISCO_12G_HBA_SSDID 0x14C
> +#define MPT3SAS_CISCO_12G_8E_HBA_SSDID 0x14C
> +#define MPT3SAS_CISCO_12G_8I_HBA_SSDID 0x154
> +#define MPT3SAS_CISCO_12G_AVILA_HBA_SSDID 0x155
> +#define MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_SSDID 0x156
>
> /*
> * status bits for ioc->diag_buffer_status
> --
> 2.0.2
>
--
Regards,
Sreekanth
Hi,
Any review comments on this patch. please let us known if any changes
are required.
Thanks,
Sreekanth
On Fri, Jun 12, 2015 at 3:12 PM, Sreekanth Reddy
<[email protected]> wrote:
> Add the following OEM's branding to the mpt3sas driver.
>
> "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Cisco Branding String
> 0x1000 0x97 SVID = 0x1137 0x014C Cisco 9300-8E 12G SAS HBA
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 34 ++++++++++++++++++++++++++++++++++
> drivers/scsi/mpt3sas/mpt3sas_base.h | 11 +++++++++++
> 2 files changed, 45 insertions(+)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index db362cb..267e489 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -2378,6 +2378,39 @@ _base_display_dell_branding(struct MPT3SAS_ADAPTER *ioc)
> }
> }
>
> +/**
> + * _base_display_cisco_branding - Display branding string
> + * @ioc: per adapter object
> + *
> + * Return nothing.
> + */
> +static void
> +_base_display_cisco_branding(struct MPT3SAS_ADAPTER *ioc)
> +{
> + if (ioc->pdev->subsystem_vendor != PCI_VENDOR_ID_CISCO)
> + return;
> +
> + switch (ioc->pdev->device) {
> + case MPI25_MFGPAGE_DEVID_SAS3008:
> + switch (ioc->pdev->subsystem_device) {
> + case MPT3SAS_CISCO_12G_HBA_SSDID:
> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> + MPT3SAS_CISCO_12G_HBA_BRANDING);
> + break;
> + default:
> + pr_info(MPT3SAS_FMT
> + "Cisco 12Gbps SAS HBA: Subsystem ID: 0x%X\n",
> + ioc->name, ioc->pdev->subsystem_device);
> + break;
> + }
> + break;
> + default:
> + pr_info(MPT3SAS_FMT
> + "Cisco 12Gbps SAS HBA: Subsystem ID: 0x%X\n",
> + ioc->name, ioc->pdev->subsystem_device);
> + break;
> + }
> +}
>
> /**
> * _base_display_ioc_capabilities - Disply IOC's capabilities.
> @@ -2410,6 +2443,7 @@ _base_display_ioc_capabilities(struct MPT3SAS_ADAPTER *ioc)
>
> _base_display_intel_branding(ioc);
> _base_display_dell_branding(ioc);
> + _base_display_cisco_branding(ioc);
>
> pr_info(MPT3SAS_FMT "Protocol=(", ioc->name);
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index c4780c7..7cdbc65 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -163,6 +163,17 @@
> #define MPT3SAS_DELL_12G_HBA_SSDID 0x1F46
>
> /*
> + * Cisco HBA branding
> + */
> +#define MPT3SAS_CISCO_12G_HBA_BRANDING \
> + "Cisco 9300-8E 12G SAS HBA"
> +
> +/*
> + * Cisco HBA SSSDIDs
> + */
> + #define MPT3SAS_CISCO_12G_HBA_SSDID 0x14C
> +
> +/*
> * status bits for ioc->diag_buffer_status
> */
> #define MPT3_DIAG_BUFFER_IS_REGISTERED (0x01)
> --
> 2.0.2
>
--
Regards,
Sreekanth
Hi,
Any other review comments on this patch. please let us known if any
changes are required.
Thanks,
Sreekanth
On Fri, Jun 12, 2015 at 3:12 PM, Sreekanth Reddy
<[email protected]> wrote:
> This Patch will provide more details of the devices such as slot number, enclosure logical id, enclosure level & connector name in the following scenarios,
>
> - When end device is added in the topology,
> - When the end device is removed from the setup,
> - When the SCSI mid layer issues TASK ABORT/ DEVICE RESET/ TARGET RESET during error handling,
> - When any command to the device fails with Sense key Hardware error or Medium error or Unit Attention,
> - When firmware returns device error or device not ready status for the end device,
> - When a Predicted fault is detected on an end device.
>
> This information can be used by the user to identify the location of the desired drive in the topology.
>
> Driver will get these information by reading the sas device page0.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.h | 2 +
> drivers/scsi/mpt3sas/mpt3sas_scsih.c | 238 +++++++++++++++++++++++++++++------
> 2 files changed, 201 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index b79ad4f..293ad23 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -317,6 +317,8 @@ struct _sas_device {
> u8 fast_path;
> u8 pfa_led_on;
> u8 pend_sas_rphy_add;
> + u8 enclosure_level;
> + u8 connector_name[4];
> };
>
> /**
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> index d457dba..64dd90b 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> @@ -585,6 +585,22 @@ _scsih_sas_device_remove(struct MPT3SAS_ADAPTER *ioc,
>
> if (!sas_device)
> return;
> + pr_info(MPT3SAS_FMT
> + "removing handle(0x%04x), sas_addr(0x%016llx)\n",
> + ioc->name, sas_device->handle,
> + (unsigned long long) sas_device->sas_address);
> +
> + if (sas_device->enclosure_handle != 0)
> + pr_info(MPT3SAS_FMT
> + "removing enclosure logical id(0x%016llx), slot(%d)\n",
> + ioc->name, (unsigned long long)
> + sas_device->enclosure_logical_id, sas_device->slot);
> +
> + if (sas_device->connector_name[0] != '\0')
> + pr_info(MPT3SAS_FMT
> + "removing enclosure level(0x%04x), connector name( %s)\n",
> + ioc->name, sas_device->enclosure_level,
> + sas_device->connector_name);
>
> spin_lock_irqsave(&ioc->sas_device_lock, flags);
> list_del(&sas_device->list);
> @@ -663,6 +679,18 @@ _scsih_sas_device_add(struct MPT3SAS_ADAPTER *ioc,
> ioc->name, __func__, sas_device->handle,
> (unsigned long long)sas_device->sas_address));
>
> + if (sas_device->enclosure_handle != 0)
> + dewtprintk(ioc, pr_info(MPT3SAS_FMT
> + "%s: enclosure logical id(0x%016llx), slot( %d)\n",
> + ioc->name, __func__, (unsigned long long)
> + sas_device->enclosure_logical_id, sas_device->slot));
> +
> + if (sas_device->connector_name[0] != '\0')
> + dewtprintk(ioc, pr_info(MPT3SAS_FMT
> + "%s: enclosure level(0x%04x), connector name( %s)\n",
> + ioc->name, __func__,
> + sas_device->enclosure_level, sas_device->connector_name));
> +
> spin_lock_irqsave(&ioc->sas_device_lock, flags);
> list_add_tail(&sas_device->list, &ioc->sas_device_list);
> spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
> @@ -704,6 +732,18 @@ _scsih_sas_device_init_add(struct MPT3SAS_ADAPTER *ioc,
> __func__, sas_device->handle,
> (unsigned long long)sas_device->sas_address));
>
> + if (sas_device->enclosure_handle != 0)
> + dewtprintk(ioc, pr_info(MPT3SAS_FMT
> + "%s: enclosure logical id(0x%016llx), slot( %d)\n",
> + ioc->name, __func__, (unsigned long long)
> + sas_device->enclosure_logical_id, sas_device->slot));
> +
> + if (sas_device->connector_name[0] != '\0')
> + dewtprintk(ioc, pr_info(MPT3SAS_FMT
> + "%s: enclosure level(0x%04x), connector name( %s)\n",
> + ioc->name, __func__, sas_device->enclosure_level,
> + sas_device->connector_name));
> +
> spin_lock_irqsave(&ioc->sas_device_lock, flags);
> list_add_tail(&sas_device->list, &ioc->sas_device_init_list);
> _scsih_determine_boot_device(ioc, sas_device, 0);
> @@ -1772,10 +1812,16 @@ _scsih_slave_configure(struct scsi_device *sdev)
> "sas_addr(0x%016llx), phy(%d), device_name(0x%016llx)\n",
> ds, handle, (unsigned long long)sas_device->sas_address,
> sas_device->phy, (unsigned long long)sas_device->device_name);
> - sdev_printk(KERN_INFO, sdev,
> - "%s: enclosure_logical_id(0x%016llx), slot(%d)\n",
> - ds, (unsigned long long)
> - sas_device->enclosure_logical_id, sas_device->slot);
> + if (sas_device->enclosure_handle != 0)
> + sdev_printk(KERN_INFO, sdev,
> + "%s: enclosure_logical_id(0x%016llx), slot(%d)\n",
> + ds, (unsigned long long)
> + sas_device->enclosure_logical_id, sas_device->slot);
> + if (sas_device->connector_name[0] != '\0')
> + sdev_printk(KERN_INFO, sdev,
> + "%s: enclosure level(0x%04x), connector name( %s)\n",
> + ds, sas_device->enclosure_level,
> + sas_device->connector_name);
>
> spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
>
> @@ -2189,10 +2235,17 @@ _scsih_tm_display_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd)
> sas_device->handle,
> (unsigned long long)sas_device->sas_address,
> sas_device->phy);
> - starget_printk(KERN_INFO, starget,
> - "enclosure_logical_id(0x%016llx), slot(%d)\n",
> - (unsigned long long)sas_device->enclosure_logical_id,
> - sas_device->slot);
> + if (sas_device->enclosure_handle != 0)
> + starget_printk(KERN_INFO, starget,
> + "enclosure_logical_id(0x%016llx), slot(%d)\n",
> + (unsigned long long)
> + sas_device->enclosure_logical_id,
> + sas_device->slot);
> + if (sas_device->connector_name)
> + starget_printk(KERN_INFO, starget,
> + "enclosure level(0x%04x),connector name(%s)\n",
> + sas_device->enclosure_level,
> + sas_device->connector_name);
> }
> spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
> }
> @@ -2813,6 +2866,18 @@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle)
> "setting delete flag: handle(0x%04x), sas_addr(0x%016llx)\n",
> ioc->name, handle,
> (unsigned long long)sas_address));
> + if (sas_device->enclosure_handle != 0)
> + dewtprintk(ioc, pr_info(MPT3SAS_FMT
> + "setting delete flag:enclosure logical id(0x%016llx),"
> + " slot(%d)\n", ioc->name, (unsigned long long)
> + sas_device->enclosure_logical_id,
> + sas_device->slot));
> + if (sas_device->connector_name)
> + dewtprintk(ioc, pr_info(MPT3SAS_FMT
> + "setting delete flag: enclosure level(0x%04x),"
> + " connector name( %s)\n", ioc->name,
> + sas_device->enclosure_level,
> + sas_device->connector_name));
> _scsih_ublock_io_device(ioc, sas_address);
> sas_target_priv_data->handle = MPT3SAS_INVALID_DEVICE_HANDLE;
> }
> @@ -3828,10 +3893,19 @@ _scsih_scsi_ioc_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
> "\tsas_address(0x%016llx), phy(%d)\n",
> ioc->name, (unsigned long long)
> sas_device->sas_address, sas_device->phy);
> - pr_warn(MPT3SAS_FMT
> - "\tenclosure_logical_id(0x%016llx), slot(%d)\n",
> - ioc->name, (unsigned long long)
> - sas_device->enclosure_logical_id, sas_device->slot);
> + if (sas_device->enclosure_handle != 0)
> + pr_warn(MPT3SAS_FMT
> + "\tenclosure_logical_id(0x%016llx),"
> + "slot(%d)\n", ioc->name,
> + (unsigned long long)
> + sas_device->enclosure_logical_id,
> + sas_device->slot);
> + if (sas_device->connector_name[0])
> + pr_warn(MPT3SAS_FMT
> + "\tenclosure level(0x%04x),"
> + " connector name( %s)\n", ioc->name,
> + sas_device->enclosure_level,
> + sas_device->connector_name);
> }
> spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
> }
> @@ -4006,7 +4080,16 @@ _scsih_smart_predicted_fault(struct MPT3SAS_ADAPTER *ioc, u16 handle)
> spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
> return;
> }
> - starget_printk(KERN_WARNING, starget, "predicted fault\n");
> + if (sas_device->enclosure_handle != 0)
> + starget_printk(KERN_INFO, starget, "predicted fault, "
> + "enclosure logical id(0x%016llx), slot(%d)\n",
> + (unsigned long long)sas_device->enclosure_logical_id,
> + sas_device->slot);
> + if (sas_device->connector_name[0] != '\0')
> + starget_printk(KERN_WARNING, starget, "predicted fault, "
> + "enclosure level(0x%04x), connector name( %s)\n",
> + sas_device->enclosure_level,
> + sas_device->connector_name);
> spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
>
> if (ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM)
> @@ -4126,8 +4209,13 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
> _scsih_smart_predicted_fault(ioc,
> le16_to_cpu(mpi_reply->DevHandle));
> mpt3sas_trigger_scsi(ioc, data.skey, data.asc, data.ascq);
> - }
>
> + if (!(ioc->logging_level & MPT_DEBUG_REPLY) &&
> + ((scmd->sense_buffer[2] == UNIT_ATTENTION) ||
> + (scmd->sense_buffer[2] == MEDIUM_ERROR) ||
> + (scmd->sense_buffer[2] == HARDWARE_ERROR)))
> + _scsih_scsi_ioc_info(ioc, scmd, mpi_reply, smid);
> + }
> switch (ioc_status) {
> case MPI2_IOCSTATUS_BUSY:
> case MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES:
> @@ -4795,6 +4883,16 @@ _scsih_check_device(struct MPT3SAS_ADAPTER *ioc,
> sas_device->handle, handle);
> sas_target_priv_data->handle = handle;
> sas_device->handle = handle;
> + if (sas_device_pg0.Flags &
> + MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) {
> + sas_device->enclosure_level =
> + le16_to_cpu(sas_device_pg0.EnclosureLevel);
> + memcpy(&sas_device->connector_name[0],
> + &sas_device_pg0.ConnectorName[0], 4);
> + } else {
> + sas_device->enclosure_level = 0;
> + sas_device->connector_name[0] = '\0';
> + }
> }
>
> /* check if device is present */
> @@ -4901,14 +4999,24 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num,
> ioc->name, __FILE__, __LINE__, __func__);
> sas_device->enclosure_handle =
> le16_to_cpu(sas_device_pg0.EnclosureHandle);
> - sas_device->slot =
> - le16_to_cpu(sas_device_pg0.Slot);
> + if (sas_device->enclosure_handle != 0)
> + sas_device->slot =
> + le16_to_cpu(sas_device_pg0.Slot);
> sas_device->device_info = device_info;
> sas_device->sas_address = sas_address;
> sas_device->phy = sas_device_pg0.PhyNum;
> sas_device->fast_path = (le16_to_cpu(sas_device_pg0.Flags) &
> MPI25_SAS_DEVICE0_FLAGS_FAST_PATH_CAPABLE) ? 1 : 0;
>
> + if (sas_device_pg0.Flags & MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) {
> + sas_device->enclosure_level =
> + le16_to_cpu(sas_device_pg0.EnclosureLevel);
> + memcpy(&sas_device->connector_name[0],
> + &sas_device_pg0.ConnectorName[0], 4);
> + } else {
> + sas_device->enclosure_level = 0;
> + sas_device->connector_name[0] = '\0';
> + }
> /* get enclosure_logical_id */
> if (sas_device->enclosure_handle && !(mpt3sas_config_get_enclosure_pg0(
> ioc, &mpi_reply, &enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE,
> @@ -4950,6 +5058,18 @@ _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc,
> ioc->name, __func__,
> sas_device->handle, (unsigned long long)
> sas_device->sas_address));
> + if (sas_device->enclosure_handle != 0)
> + dewtprintk(ioc, pr_info(MPT3SAS_FMT
> + "%s: enter: enclosure logical id(0x%016llx), slot(%d)\n",
> + ioc->name, __func__,
> + (unsigned long long)sas_device->enclosure_logical_id,
> + sas_device->slot));
> + if (sas_device->connector_name[0] != '\0')
> + dewtprintk(ioc, pr_info(MPT3SAS_FMT
> + "%s: enter: enclosure level(0x%04x), connector name( %s)\n",
> + ioc->name, __func__,
> + sas_device->enclosure_level,
> + sas_device->connector_name));
>
> if (sas_device->starget && sas_device->starget->hostdata) {
> sas_target_priv_data = sas_device->starget->hostdata;
> @@ -4966,12 +5086,34 @@ _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc,
> "removing handle(0x%04x), sas_addr(0x%016llx)\n",
> ioc->name, sas_device->handle,
> (unsigned long long) sas_device->sas_address);
> + if (sas_device->enclosure_handle != 0)
> + pr_info(MPT3SAS_FMT
> + "removing : enclosure logical id(0x%016llx), slot(%d)\n",
> + ioc->name,
> + (unsigned long long)sas_device->enclosure_logical_id,
> + sas_device->slot);
> + if (sas_device->connector_name[0] != '\0')
> + pr_info(MPT3SAS_FMT
> + "removing enclosure level(0x%04x), connector name( %s)\n",
> + ioc->name, sas_device->enclosure_level,
> + sas_device->connector_name);
>
> dewtprintk(ioc, pr_info(MPT3SAS_FMT
> "%s: exit: handle(0x%04x), sas_addr(0x%016llx)\n",
> ioc->name, __func__,
> - sas_device->handle, (unsigned long long)
> - sas_device->sas_address));
> + sas_device->handle, (unsigned long long)
> + sas_device->sas_address));
> + if (sas_device->enclosure_handle != 0)
> + dewtprintk(ioc, pr_info(MPT3SAS_FMT
> + "%s: exit: enclosure logical id(0x%016llx), slot(%d)\n",
> + ioc->name, __func__,
> + (unsigned long long)sas_device->enclosure_logical_id,
> + sas_device->slot));
> + if (sas_device->connector_name[0] != '\0')
> + dewtprintk(ioc, pr_info(MPT3SAS_FMT
> + "%s: exit: enclosure level(0x%04x), connector name(%s)\n",
> + ioc->name, __func__, sas_device->enclosure_level,
> + sas_device->connector_name));
>
> kfree(sas_device);
> }
> @@ -6364,9 +6506,7 @@ _scsih_prep_device_scan(struct MPT3SAS_ADAPTER *ioc)
> /**
> * _scsih_mark_responding_sas_device - mark a sas_devices as responding
> * @ioc: per adapter object
> - * @sas_address: sas address
> - * @slot: enclosure slot id
> - * @handle: device handle
> + * @sas_device_pg0: SAS Device page 0
> *
> * After host reset, find out whether devices are still responding.
> * Used in _scsih_remove_unresponsive_sas_devices.
> @@ -6374,8 +6514,8 @@ _scsih_prep_device_scan(struct MPT3SAS_ADAPTER *ioc)
> * Return nothing.
> */
> static void
> -_scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
> - u16 slot, u16 handle)
> +_scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc,
> +Mpi2SasDevicePage0_t *sas_device_pg0)
> {
> struct MPT3SAS_TARGET *sas_target_priv_data = NULL;
> struct scsi_target *starget;
> @@ -6384,8 +6524,8 @@ _scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
>
> spin_lock_irqsave(&ioc->sas_device_lock, flags);
> list_for_each_entry(sas_device, &ioc->sas_device_list, list) {
> - if (sas_device->sas_address == sas_address &&
> - sas_device->slot == slot) {
> + if ((sas_device->sas_address == sas_device_pg0->SASAddress) &&
> + (sas_device->slot == sas_device_pg0->Slot)) {
> sas_device->responding = 1;
> starget = sas_device->starget;
> if (starget && starget->hostdata) {
> @@ -6394,22 +6534,40 @@ _scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
> sas_target_priv_data->deleted = 0;
> } else
> sas_target_priv_data = NULL;
> - if (starget)
> + if (starget) {
> starget_printk(KERN_INFO, starget,
> - "handle(0x%04x), sas_addr(0x%016llx), "
> - "enclosure logical id(0x%016llx), "
> - "slot(%d)\n", handle,
> - (unsigned long long)sas_device->sas_address,
> + "handle(0x%04x), sas_addr(0x%016llx)\n",
> + sas_device_pg0->DevHandle,
> (unsigned long long)
> - sas_device->enclosure_logical_id,
> - sas_device->slot);
> - if (sas_device->handle == handle)
> + sas_device->sas_address);
> +
> + if (sas_device->enclosure_handle != 0)
> + starget_printk(KERN_INFO, starget,
> + "enclosure logical id(0x%016llx),"
> + " slot(%d)\n",
> + (unsigned long long)
> + sas_device->enclosure_logical_id,
> + sas_device->slot);
> + }
> + if (sas_device_pg0->Flags &
> + MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) {
> + sas_device->enclosure_level =
> + le16_to_cpu(sas_device_pg0->EnclosureLevel);
> + memcpy(&sas_device->connector_name[0],
> + &sas_device_pg0->ConnectorName[0], 4);
> + } else {
> + sas_device->enclosure_level = 0;
> + sas_device->connector_name[0] = '\0';
> + }
> +
> + if (sas_device->handle == sas_device_pg0->DevHandle)
> goto out;
> pr_info("\thandle changed from(0x%04x)!!!\n",
> sas_device->handle);
> - sas_device->handle = handle;
> + sas_device->handle = sas_device_pg0->DevHandle;
> if (sas_target_priv_data)
> - sas_target_priv_data->handle = handle;
> + sas_target_priv_data->handle =
> + sas_device_pg0->DevHandle;
> goto out;
> }
> }
> @@ -6448,13 +6606,15 @@ _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc)
> MPI2_IOCSTATUS_MASK;
> if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
> break;
> - handle = le16_to_cpu(sas_device_pg0.DevHandle);
> + handle = sas_device_pg0.DevHandle =
> + le16_to_cpu(sas_device_pg0.DevHandle);
> device_info = le32_to_cpu(sas_device_pg0.DeviceInfo);
> if (!(_scsih_is_end_device(device_info)))
> continue;
> - _scsih_mark_responding_sas_device(ioc,
> - le64_to_cpu(sas_device_pg0.SASAddress),
> - le16_to_cpu(sas_device_pg0.Slot), handle);
> + sas_device_pg0.SASAddress =
> + le64_to_cpu(sas_device_pg0.SASAddress);
> + sas_device_pg0.Slot = le16_to_cpu(sas_device_pg0.Slot);
> + _scsih_mark_responding_sas_device(ioc, &sas_device_pg0);
> }
>
> out:
> --
> 2.0.2
>
--
Regards,
Sreekanth
Hi,
Any other review comments on this patch. please let us known if any
changes are required.
Thanks,
Sreekanth
On Fri, Jun 12, 2015 at 4:46 PM, Sreekanth Reddy
<[email protected]> wrote:
> Thanks Johannes, we will take care of this point in our current
> on-development mpt2sas/mpt3sas merging activity.
>
>
> Thanks,
> Sreekanth
>
> On Fri, Jun 12, 2015 at 4:39 PM, Johannes Thumshirn <[email protected]> wrote:
>> On Fri, Jun 12, 2015 at 03:12:13PM +0530, Sreekanth Reddy wrote:
>>> In this patch, increased the number of MSIX vector support for SAS3 C0 HBAs to up-to 96.
>>>
>>> Following are changes that are done in this patch
>>> 1. Support this feature only for SAS3 C0 cards and also only when reply post free queue count is greater than 8.
>>> 2. Instead of using single ReplyPostHostIndex system interface, here 12 ReplyPostHostIndex system interfaces are used. reply post free queues numbered from 0 to 7 use the first ReplyPostHostIndex system interface to update its corresponding ReplyPostHostIndex values, reply post free queues numbered from 8 to 15 will use the second ReplyPostHostIndex system interface and so on. These 12 ReplyPostHostIndex system interfaces address are saved in the array replyPostRegisterIndex[].
>>> 3. Update the ReplyPostHostIndex value of corresponding reply post free queue in the (its msix_index/8)th entry of replyPostRegisterIndex[] array after processing the reply post descriptor.
>>>
>>> Signed-off-by: Sreekanth Reddy <[email protected]>
>>> ---
>>> drivers/scsi/mpt3sas/mpt3sas_base.c | 70 +++++++++++++++++++++++++++++++++----
>>> drivers/scsi/mpt3sas/mpt3sas_base.h | 7 +++-
>>> 2 files changed, 69 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> index 14a781b..c13a365 100644
>>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> @@ -83,7 +83,7 @@ static int msix_disable = -1;
>>> module_param(msix_disable, int, 0);
>>> MODULE_PARM_DESC(msix_disable, " disable msix routed interrupts (default=0)");
>>>
>>> -static int max_msix_vectors = 8;
>>> +static int max_msix_vectors = -1;
>>> module_param(max_msix_vectors, int, 0);
>>> MODULE_PARM_DESC(max_msix_vectors,
>>> " max msix vectors - (default=8)");
>>
>> When changing the default value, please also update the description reflecting
>> this change.
>>
>>> @@ -1009,8 +1009,15 @@ _base_interrupt(int irq, void *bus_id)
>>> }
>>>
>>> wmb();
>>> - writel(reply_q->reply_post_host_index | (msix_index <<
>>> - MPI2_RPHI_MSIX_INDEX_SHIFT), &ioc->chip->ReplyPostHostIndex);
>>> + if (ioc->msix96_vector) {
>>> + writel(reply_q->reply_post_host_index | ((msix_index & 7) <<
>>> + MPI2_RPHI_MSIX_INDEX_SHIFT),
>>> + ioc->replyPostRegisterIndex[msix_index/8]);
>>> + } else {
>>> + writel(reply_q->reply_post_host_index | (msix_index <<
>>> + MPI2_RPHI_MSIX_INDEX_SHIFT),
>>> + &ioc->chip->ReplyPostHostIndex);
>>> + }
>>> atomic_dec(&reply_q->busy);
>>> return IRQ_HANDLED;
>>> }
>>> @@ -1560,8 +1567,6 @@ _base_check_enable_msix(struct MPT3SAS_ADAPTER *ioc)
>>>
>>> pci_read_config_word(ioc->pdev, base + 2, &message_control);
>>> ioc->msix_vector_count = (message_control & 0x3FF) + 1;
>>> - if (ioc->msix_vector_count > 8)
>>> - ioc->msix_vector_count = 8;
>>> dinitprintk(ioc, pr_info(MPT3SAS_FMT
>>> "msix is supported, vector_count(%d)\n",
>>> ioc->name, ioc->msix_vector_count));
>>> @@ -1880,6 +1885,31 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
>>> if (r)
>>> goto out_fail;
>>>
>>> + /* Use the Combined reply queue feature only for SAS3 C0 HBAs and
>>> + * also only when reply queue count is greater than 8
>>> + */
>>> + if (ioc->msix96_vector && ioc->reply_queue_count > 8) {
>>> + /* If this is an 96 vector supported device,
>>> + set up ReplyPostIndex addresses */
>>> + ioc->replyPostRegisterIndex = kcalloc(12,
>>> + sizeof(resource_size_t *), GFP_KERNEL);
>>> + if (!ioc->replyPostRegisterIndex) {
>>> + dfailprintk(ioc, printk(MPT3SAS_FMT
>>> + "allocation for reply Post Register Index failed!!!\n",
>>> + ioc->name));
>>> + r = -ENOMEM;
>>> + goto out_fail;
>>> + }
>>> +
>>> + for (i = 0; i < 12; i++) {
>>> + ioc->replyPostRegisterIndex[i] = (resource_size_t *)
>>> + ((u8 *)&ioc->chip->Doorbell +
>>> + MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET +
>>> + (i * 0x10));
>>> + }
>>> + } else
>>> + ioc->msix96_vector = 0;
>>> +
>>> list_for_each_entry(reply_q, &ioc->reply_queue_list, list)
>>> pr_info(MPT3SAS_FMT "%s: IRQ %d\n",
>>> reply_q->name, ((ioc->msix_enable) ? "PCI-MSI-X enabled" :
>>> @@ -1901,6 +1931,8 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
>>> pci_release_selected_regions(ioc->pdev, ioc->bars);
>>> pci_disable_pcie_error_reporting(pdev);
>>> pci_disable_device(pdev);
>>> + if (ioc->msix96_vector)
>>> + kfree(ioc->replyPostRegisterIndex);
>>> return r;
>>> }
>>>
>>> @@ -4522,8 +4554,16 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
>>>
>>> /* initialize reply post host index */
>>> list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
>>> - writel(reply_q->msix_index << MPI2_RPHI_MSIX_INDEX_SHIFT,
>>> - &ioc->chip->ReplyPostHostIndex);
>>> + if (ioc->msix96_vector) {
>>> + writel((reply_q->msix_index & 7)<<
>>> + MPI2_RPHI_MSIX_INDEX_SHIFT,
>>> + ioc->replyPostRegisterIndex[reply_q->msix_index/8]);
>>> + } else {
>>> + writel(reply_q->msix_index <<
>>> + MPI2_RPHI_MSIX_INDEX_SHIFT,
>>> + &ioc->chip->ReplyPostHostIndex);
>>> + }
>>> +
>>> if (!_base_is_controller_msix_enabled(ioc))
>>> goto skip_init_reply_post_host_index;
>>> }
>>> @@ -4577,6 +4617,9 @@ mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
>>> _base_free_irq(ioc);
>>> _base_disable_msix(ioc);
>>>
>>> + if (ioc->msix96_vector)
>>> + kfree(ioc->replyPostRegisterIndex);
>>> +
>>> if (ioc->chip_phys && ioc->chip)
>>> iounmap(ioc->chip);
>>> ioc->chip_phys = 0;
>>> @@ -4600,6 +4643,7 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
>>> {
>>> int r, i;
>>> int cpu_id, last_cpu_id = 0;
>>> + u8 revision;
>>>
>>> dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
>>> __func__));
>>> @@ -4618,6 +4662,18 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
>>> r = -ENOMEM;
>>> goto out_free_resources;
>>> }
>>> + /* Check whether the controller revision is C0 or above.
>>> + C0 and above revision controllers support 96 vectors */
>>> + revision = ioc->pdev->revision;
>>> +
>>> + if ((ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3004 ||
>>> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3008 ||
>>> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_1 ||
>>> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_2 ||
>>> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_5 ||
>>> + ioc->pdev->device == MPI25_MFGPAGE_DEVID_SAS3108_6) &&
>>> + (revision >= 0x02))
>>> + ioc->msix96_vector = 1;
>>>
>>> ioc->rdpq_array_enable_assigned = 0;
>>> ioc->dma_mask = 0;
>>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
>>> index afa8816..6b8d8f1 100644
>>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
>>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
>>> @@ -728,7 +728,8 @@ typedef void (*MPT3SAS_FLUSH_RUNNING_CMDS)(struct MPT3SAS_ADAPTER *ioc);
>>> * is assigned only ones
>>> * @reply_queue_count: number of reply queue's
>>> * @reply_queue_list: link list contaning the reply queue info
>>> - * @reply_post_host_index: head index in the pool where FW completes IO
>>> + * @msix96_vector: 96 MSI-X vector support
>>> + * @replyPostRegisterIndex: index of next position in Reply Desc Post Queue
>>> * @delayed_tr_list: target reset link list
>>> * @delayed_tr_volume_list: volume target reset link list
>>> * @@temp_sensors_count: flag to carry the number of temperature sensors
>>> @@ -937,6 +938,10 @@ struct MPT3SAS_ADAPTER {
>>> u8 reply_queue_count;
>>> struct list_head reply_queue_list;
>>>
>>> + u8 msix96_vector;
>>> + /* reply post register index */
>>> + resource_size_t **replyPostRegisterIndex;
>>> +
>>
>> I know there are many uses of mixed-case varibles in this driver and changing
>> them when they're already in makes no sense, but maybe you could consider
>> getting rid of them in your mpt2sas/mpt3sas merge, as it is not really a
>> commonly seen pattern in the linux kernel.
>>
>>> struct list_head delayed_tr_list;
>>> struct list_head delayed_tr_volume_list;
>>> u8 temp_sensors_count;
>>> --
>>> 2.0.2
>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
>>> the body of a message to [email protected]
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>> --
>> Johannes Thumshirn Storage
>> [email protected] +49 911 74053 689
>> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
>> GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
>> HRB 21284 (AG Nürnberg)
>
>
>
> --
>
> Regards,
> Sreekanth
--
Regards,
Sreekanth
Hi,
Any review comments on this patch. please let us known if any changes
are required.
Thanks,
Sreekanth
On Mon, Mar 30, 2015 at 7:25 PM, Sreekanth Reddy
<[email protected]> wrote:
> Driver initialization fails if driver tries to send IOC facts request message when the IOC is in reset or in a fault state.
>
> This patch will make sure that
> 1.Driver to send IOC facts request message only if HBA is in operational or ready state.
> 2.If IOC is in fault state, a diagnostic reset would be issued.
> 3.If IOC is in reset state then driver will wait for 10 seconds to exit out of reset state.
> If the HBA continues to be in reset state, then the HBA wouldn't be claimed by the driver.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 65 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 65 insertions(+)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index c13a365..ce57320 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -3169,6 +3169,9 @@ _base_wait_on_iocstate(struct MPT3SAS_ADAPTER *ioc, u32 ioc_state, int timeout,
> * Notes: MPI2_HIS_IOC2SYS_DB_STATUS - set to one when IOC writes to doorbell.
> */
> static int
> +_base_diag_reset(struct MPT3SAS_ADAPTER *ioc, int sleep_flag);
> +
> +static int
> _base_wait_for_doorbell_int(struct MPT3SAS_ADAPTER *ioc, int timeout,
> int sleep_flag)
> {
> @@ -3711,6 +3714,61 @@ _base_get_port_facts(struct MPT3SAS_ADAPTER *ioc, int port, int sleep_flag)
> }
>
> /**
> + * _base_wait_for_iocstate - Wait until the card is in READY or OPERATIONAL
> + * @ioc: per adapter object
> + * @timeout:
> + * @sleep_flag: CAN_SLEEP or NO_SLEEP
> + *
> + * Returns 0 for success, non-zero for failure.
> + */
> +static int
> +_base_wait_for_iocstate(struct MPT3SAS_ADAPTER *ioc, int timeout,
> + int sleep_flag)
> +{
> + u32 ioc_state;
> + int rc;
> +
> + dinitprintk(ioc, printk(MPT3SAS_FMT "%s\n", ioc->name,
> + __func__));
> +
> + if (ioc->pci_error_recovery)
> + return 0;
> +
> + ioc_state = mpt3sas_base_get_iocstate(ioc, 0);
> + dhsprintk(ioc, printk(MPT3SAS_FMT "%s: ioc_state(0x%08x)\n",
> + ioc->name, __func__, ioc_state));
> +
> + if (((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_READY) ||
> + (ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_OPERATIONAL)
> + return 0;
> +
> + if (ioc_state & MPI2_DOORBELL_USED) {
> + dhsprintk(ioc, printk(MPT3SAS_FMT
> + "unexpected doorbell active!\n", ioc->name));
> + goto issue_diag_reset;
> + }
> +
> + if ((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_FAULT) {
> + mpt3sas_base_fault_info(ioc, ioc_state &
> + MPI2_DOORBELL_DATA_MASK);
> + goto issue_diag_reset;
> + }
> +
> + ioc_state = _base_wait_on_iocstate(ioc, MPI2_IOC_STATE_READY,
> + timeout, sleep_flag);
> + if (ioc_state) {
> + dfailprintk(ioc, printk(MPT3SAS_FMT
> + "%s: failed going to ready state (ioc_state=0x%x)\n",
> + ioc->name, __func__, ioc_state));
> + return -EFAULT;
> + }
> +
> + issue_diag_reset:
> + rc = _base_diag_reset(ioc, sleep_flag);
> + return rc;
> +}
> +
> +/**
> * _base_get_ioc_facts - obtain ioc facts reply and save in ioc
> * @ioc: per adapter object
> * @sleep_flag: CAN_SLEEP or NO_SLEEP
> @@ -3728,6 +3786,13 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
> dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> __func__));
>
> + r = _base_wait_for_iocstate(ioc, 10, sleep_flag);
> + if (r) {
> + dfailprintk(ioc, printk(MPT3SAS_FMT
> + "%s: failed getting to correct state\n",
> + ioc->name, __func__));
> + return r;
> + }
> mpi_reply_sz = sizeof(Mpi2IOCFactsReply_t);
> mpi_request_sz = sizeof(Mpi2IOCFactsRequest_t);
> memset(&mpi_request, 0, mpi_request_sz);
> --
> 2.0.2
>
--
Regards,
Sreekanth
On Fri, Jun 12, 2015 at 03:12:16PM +0530, Sreekanth Reddy wrote:
> Removed the redundancy code while freeing the controller resources.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 57 +++++++++++++++++++++----------------
> 1 file changed, 32 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index ce57320..32b86bf 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -1798,6 +1798,36 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc)
> }
>
> /**
> + * mpt3sas_base_unmap_resources - free controller resources
> + * @ioc: per adapter object
> + */
> +void
> +mpt3sas_base_unmap_resources(struct MPT3SAS_ADAPTER *ioc)
> +{
> + struct pci_dev *pdev = ioc->pdev;
> +
> + dexitprintk(ioc, printk(MPT3SAS_FMT "%s\n",
> + ioc->name, __func__));
> +
> + _base_free_irq(ioc);
> + _base_disable_msix(ioc);
> +
> + if (ioc->msix96_vector)
> + kfree(ioc->replyPostRegisterIndex);
> +
> + if (ioc->chip_phys) {
> + iounmap(ioc->chip);
> + ioc->chip_phys = 0;
> + }
> +
> + if (pci_is_enabled(pdev)) {
> + pci_release_selected_regions(ioc->pdev, ioc->bars);
> + pci_disable_pcie_error_reporting(pdev);
> + pci_disable_device(pdev);
> + }
> +}
> +
> +/**
> * mpt3sas_base_map_resources - map in controller resources (io/irq/memap)
> * @ioc: per adapter object
> *
> @@ -1925,14 +1955,7 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
> return 0;
>
> out_fail:
> - if (ioc->chip_phys)
> - iounmap(ioc->chip);
> - ioc->chip_phys = 0;
> - pci_release_selected_regions(ioc->pdev, ioc->bars);
> - pci_disable_pcie_error_reporting(pdev);
> - pci_disable_device(pdev);
> - if (ioc->msix96_vector)
> - kfree(ioc->replyPostRegisterIndex);
> + mpt3sas_base_unmap_resources(ioc);
> return r;
> }
>
> @@ -4667,8 +4690,6 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
> void
> mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
> {
> - struct pci_dev *pdev = ioc->pdev;
> -
> dexitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> __func__));
>
> @@ -4679,21 +4700,7 @@ mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
> ioc->shost_recovery = 0;
> }
>
> - _base_free_irq(ioc);
> - _base_disable_msix(ioc);
> -
> - if (ioc->msix96_vector)
> - kfree(ioc->replyPostRegisterIndex);
> -
> - if (ioc->chip_phys && ioc->chip)
> - iounmap(ioc->chip);
> - ioc->chip_phys = 0;
> -
> - if (pci_is_enabled(pdev)) {
> - pci_release_selected_regions(ioc->pdev, ioc->bars);
> - pci_disable_pcie_error_reporting(pdev);
> - pci_disable_device(pdev);
> - }
> + mpt3sas_base_unmap_resources(ioc);
> return;
> }
>
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:22PM +0530, Sreekanth Reddy wrote:
> Added the following Dell branding to the mpt3sas driver.
>
> "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Dell Branding String
> 0x1000 0x0097 0x1028 0x1F46 DELL 12Gbps HBA
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.c | 36 ++++++++++++++++++++++++++++++++++++
> drivers/scsi/mpt3sas/mpt3sas_base.h | 11 +++++++++++
> 2 files changed, 47 insertions(+)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index 6739c0a..db362cb 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -2345,6 +2345,41 @@ _base_display_intel_branding(struct MPT3SAS_ADAPTER *ioc)
>
>
> /**
> + * _base_display_dell_branding - Display branding string
> + * @ioc: per adapter object
> + *
> + * Return nothing.
> + */
> +static void
> +_base_display_dell_branding(struct MPT3SAS_ADAPTER *ioc)
> +{
> + if (ioc->pdev->subsystem_vendor != PCI_VENDOR_ID_DELL)
> + return;
> +
> + switch (ioc->pdev->device) {
> + case MPI25_MFGPAGE_DEVID_SAS3008:
> + switch (ioc->pdev->subsystem_device) {
> + case MPT3SAS_DELL_12G_HBA_SSDID:
> + pr_info(MPT3SAS_FMT "%s\n", ioc->name,
> + MPT3SAS_DELL_12G_HBA_BRANDING);
> + break;
> + default:
> + pr_info(MPT3SAS_FMT
> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
> + ioc->pdev->subsystem_device);
> + break;
> + }
> + break;
> + default:
> + pr_info(MPT3SAS_FMT
> + "Dell 12Gbps HBA: Subsystem ID: 0x%X\n", ioc->name,
> + ioc->pdev->subsystem_device);
> + break;
> + }
> +}
> +
> +
> +/**
> * _base_display_ioc_capabilities - Disply IOC's capabilities.
> * @ioc: per adapter object
> *
> @@ -2374,6 +2409,7 @@ _base_display_ioc_capabilities(struct MPT3SAS_ADAPTER *ioc)
> bios_version & 0x000000FF);
>
> _base_display_intel_branding(ioc);
> + _base_display_dell_branding(ioc);
>
> pr_info(MPT3SAS_FMT "Protocol=(", ioc->name);
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index 2318ef8..c4780c7 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -152,6 +152,17 @@
> #define MPT3SAS_INTEL_RS3UC080_SSDID 0x3524
>
> /*
> + * Dell HBA branding
> + */
> +#define MPT3SAS_DELL_12G_HBA_BRANDING \
> + "Dell 12Gbps HBA"
> +
> +/*
> + * Dell HBA SSDIDs
> + */
> +#define MPT3SAS_DELL_12G_HBA_SSDID 0x1F46
> +
> +/*
> * status bits for ioc->diag_buffer_status
> */
> #define MPT3_DIAG_BUFFER_IS_REGISTERED (0x01)
> --
> 2.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Thu, Jun 18, 2015 at 03:27:26PM +0530, Sreekanth Reddy wrote:
> Hi,
>
> Any other review comments on this patch. please let us known if any
> changes are required.
>
> Thanks,
> Sreekanth
>
Have you sent a follow up on this I may have missed?
> On Fri, Jun 12, 2015 at 4:46 PM, Sreekanth Reddy
> <[email protected]> wrote:
> > Thanks Johannes, we will take care of this point in our current
> > on-development mpt2sas/mpt3sas merging activity.
> >>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
[...]
> >>> index 14a781b..c13a365 100644
> >>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> >>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> >>> @@ -83,7 +83,7 @@ static int msix_disable = -1;
> >>> module_param(msix_disable, int, 0);
> >>> MODULE_PARM_DESC(msix_disable, " disable msix routed interrupts (default=0)");
> >>>
> >>> -static int max_msix_vectors = 8;
> >>> +static int max_msix_vectors = -1;
> >>> module_param(max_msix_vectors, int, 0);
> >>> MODULE_PARM_DESC(max_msix_vectors,
> >>> " max msix vectors - (default=8)");
^^^^^^^^^^^
> >>
> >> When changing the default value, please also update the description reflecting
> >> this change.
> >>
Thanks
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 12, 2015 at 03:12:18PM +0530, Sreekanth Reddy wrote:
> This Patch will provide more details of the devices such as slot number, enclosure logical id, enclosure level & connector name in the following scenarios,
>
> - When end device is added in the topology,
> - When the end device is removed from the setup,
> - When the SCSI mid layer issues TASK ABORT/ DEVICE RESET/ TARGET RESET during error handling,
> - When any command to the device fails with Sense key Hardware error or Medium error or Unit Attention,
> - When firmware returns device error or device not ready status for the end device,
> - When a Predicted fault is detected on an end device.
>
> This information can be used by the user to identify the location of the desired drive in the topology.
>
> Driver will get these information by reading the sas device page0.
>
> Signed-off-by: Sreekanth Reddy <[email protected]>
> ---
> drivers/scsi/mpt3sas/mpt3sas_base.h | 2 +
> drivers/scsi/mpt3sas/mpt3sas_scsih.c | 238 +++++++++++++++++++++++++++++------
> 2 files changed, 201 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index b79ad4f..293ad23 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -317,6 +317,8 @@ struct _sas_device {
> u8 fast_path;
> u8 pfa_led_on;
> u8 pend_sas_rphy_add;
> + u8 enclosure_level;
> + u8 connector_name[4];
Minor nit of different indent here, don't know if it is worth re-sending?
Other than that:
Reviewed-by: Johannes Thumshirn <[email protected]>
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 19, 2015 at 2:44 PM, Johannes Thumshirn <[email protected]> wrote:
> On Thu, Jun 18, 2015 at 03:27:26PM +0530, Sreekanth Reddy wrote:
>> Hi,
>>
>> Any other review comments on this patch. please let us known if any
>> changes are required.
>>
>> Thanks,
>> Sreekanth
>>
>
> Have you sent a follow up on this I may have missed?
>
>> On Fri, Jun 12, 2015 at 4:46 PM, Sreekanth Reddy
>> <[email protected]> wrote:
>> > Thanks Johannes, we will take care of this point in our current
>> > on-development mpt2sas/mpt3sas merging activity.
>> >>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>
> [...]
>
>> >>> index 14a781b..c13a365 100644
>> >>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>> >>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> >>> @@ -83,7 +83,7 @@ static int msix_disable = -1;
>> >>> module_param(msix_disable, int, 0);
>> >>> MODULE_PARM_DESC(msix_disable, " disable msix routed interrupts (default=0)");
>> >>>
>> >>> -static int max_msix_vectors = 8;
>> >>> +static int max_msix_vectors = -1;
>> >>> module_param(max_msix_vectors, int, 0);
>> >>> MODULE_PARM_DESC(max_msix_vectors,
>> >>> " max msix vectors - (default=8)");
> ^^^^^^^^^^^
>> >>
>> >> When changing the default value, please also update the description reflecting
>> >> this change.
Johannes, I didn't notice this previously, I will post next version of
this patch by updating the module parameter description
Thanks,
Sreekanth
>> >>
>
> Thanks
>
> --
> Johannes Thumshirn Storage
> [email protected] +49 911 74053 689
> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
> GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> HRB 21284 (AG Nürnberg)
--
Regards,
Sreekanth
On Fri, Jun 19, 2015 at 02:51:00PM +0530, Sreekanth Reddy wrote:
> On Fri, Jun 19, 2015 at 2:44 PM, Johannes Thumshirn <[email protected]> wrote:
> > On Thu, Jun 18, 2015 at 03:27:26PM +0530, Sreekanth Reddy wrote:
> >> Hi,
> >>
> >> Any other review comments on this patch. please let us known if any
> >> changes are required.
> >>
> >> Thanks,
> >> Sreekanth
> >>
> >
> > Have you sent a follow up on this I may have missed?
> >
> >> On Fri, Jun 12, 2015 at 4:46 PM, Sreekanth Reddy
> >> <[email protected]> wrote:
> >> > Thanks Johannes, we will take care of this point in our current
> >> > on-development mpt2sas/mpt3sas merging activity.
> >> >>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> >
> > [...]
> >
> >> >>> index 14a781b..c13a365 100644
> >> >>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> >> >>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> >> >>> @@ -83,7 +83,7 @@ static int msix_disable = -1;
> >> >>> module_param(msix_disable, int, 0);
> >> >>> MODULE_PARM_DESC(msix_disable, " disable msix routed interrupts (default=0)");
> >> >>>
> >> >>> -static int max_msix_vectors = 8;
> >> >>> +static int max_msix_vectors = -1;
> >> >>> module_param(max_msix_vectors, int, 0);
> >> >>> MODULE_PARM_DESC(max_msix_vectors,
> >> >>> " max msix vectors - (default=8)");
> > ^^^^^^^^^^^
> >> >>
> >> >> When changing the default value, please also update the description reflecting
> >> >> this change.
>
> Johannes, I didn't notice this previously, I will post next version of
> this patch by updating the module parameter description
No problem :-)
>
> Thanks,
> Sreekanth
> >> >>
> >
> > Thanks
> >
> > --
> > Johannes Thumshirn Storage
> > [email protected] +49 911 74053 689
> > SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
> > GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> > HRB 21284 (AG N?rnberg)
>
>
>
> --
>
> Regards,
> Sreekanth
--
Johannes Thumshirn Storage
[email protected] +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
On Fri, Jun 19, 2015 at 2:49 PM, Johannes Thumshirn <[email protected]> wrote:
> On Fri, Jun 12, 2015 at 03:12:18PM +0530, Sreekanth Reddy wrote:
>> This Patch will provide more details of the devices such as slot number, enclosure logical id, enclosure level & connector name in the following scenarios,
>>
>> - When end device is added in the topology,
>> - When the end device is removed from the setup,
>> - When the SCSI mid layer issues TASK ABORT/ DEVICE RESET/ TARGET RESET during error handling,
>> - When any command to the device fails with Sense key Hardware error or Medium error or Unit Attention,
>> - When firmware returns device error or device not ready status for the end device,
>> - When a Predicted fault is detected on an end device.
>>
>> This information can be used by the user to identify the location of the desired drive in the topology.
>>
>> Driver will get these information by reading the sas device page0.
>>
>> Signed-off-by: Sreekanth Reddy <[email protected]>
>> ---
>> drivers/scsi/mpt3sas/mpt3sas_base.h | 2 +
>> drivers/scsi/mpt3sas/mpt3sas_scsih.c | 238 +++++++++++++++++++++++++++++------
>> 2 files changed, 201 insertions(+), 39 deletions(-)
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> index b79ad4f..293ad23 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> @@ -317,6 +317,8 @@ struct _sas_device {
>> u8 fast_path;
>> u8 pfa_led_on;
>> u8 pend_sas_rphy_add;
>> + u8 enclosure_level;
>> + u8 connector_name[4];
>
> Minor nit of different indent here, don't know if it is worth re-sending?
Not an Issue. I will post the next version of this patch by adjusting
this indent.
Thanks,
Sreekanth
>
> Other than that:
>
> Reviewed-by: Johannes Thumshirn <[email protected]>
>
> --
> Johannes Thumshirn Storage
> [email protected] +49 911 74053 689
> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
> GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> HRB 21284 (AG Nürnberg)
--
Regards,
Sreekanth
> During hot-plugging of a disk(having a flaky link), the disk addition
> stops and any further disk addition or removal doesn't happen on that
> controller.
> This is because, when driver receives DELAY_NOT_RESPONDING event for
> a disk while it is undergoing addition at the SCSI Transport layer,
> the driver would block the I/O to that disk resulting in a
> deadlock. i.e the disk addition work couldn't be completed at the
> SCSI Transport Layer as it can't send any I/Os (such as Inquiry,
> Report LUNs etc) to the disk as I/Os are blocked to this drive. Also
> any subsequent device removal (TARGET_NOT_RESPONDING) or link
> update(RC_PHY_CHANGED) event couldn't be processed as they are in the
> queue to get processed after disk addition event.
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Removed the redundancy code while freeing the controller resources.
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Update MPI 2.5 Release: MPI 2.5 Rev I (2.5.4) specification and
> 2.00.33 header files Below is the change set from the MPI
> specification for I Rev
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Bump mpt3sas Driver version to v5.100.00.00
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Update MPI2 strings to MPI2.5.
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> @@ -1334,9 +1336,17 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_1 {
> *PTR_MPI2_CONFIG_PAGE_BIOS_1,
> Mpi2BiosPage1_t, *pMpi2BiosPage1_t;
>
> -#define MPI2_BIOSPAGE1_PAGEVERSION (0x05)
> +#define MPI2_BIOSPAGE1_PAGEVERSION (0x06)
>
> /*values for BIOS Page 1 BiosOptions field */
> +#define MPI2_BIOSPAGE1_OPTIONS_X86_DISABLE_BIOS (0x00000400)
Looks like you may have some bad whitespace here ^^^.
> +
> +#define MPI2_BIOSPAGE1_OPTIONS_MASK_REGISTRATION_UEFI_BSD (0x00000300)
> +#define MPI2_BIOSPAGE1_OPTIONS_USE_BIT0_REGISTRATION_UEFI_BSD (0x00000000)
> +#define MPI2_BIOSPAGE1_OPTIONS_FULL_REGISTRATION_UEFI_BSD (0x00000100)
> +#define MPI2_BIOSPAGE1_OPTIONS_ADAPTER_REGISTRATION_UEFI_BSD (0x00000200)
> +#define MPI2_BIOSPAGE1_OPTIONS_DISABLE_REGISTRATION_UEFI_BSD (0x00000300)
Otherwise OK.
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Added the following Dell branding to the mpt3sas driver. "VendorID"
> "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Dell Branding
> String 0x1000 0x0097 0x1028 0x1F46 DELL 12Gbps HBA
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Add the following OEM's branding to the mpt3sas driver. "VendorID"
> "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Cisco Branding
> String 0x1000 0x97 SVID = 0x1137 0x014C Cisco 9300-8E 12G SAS HBA
I'm not so keen on all this branding stuff. It is purely cosmetic and
doesn't change driver behavior.
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Bump mpt3sas driver version to v6.100.00.00.
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Below are the new changes to MPI 2.5 Rev K(2.5.6) specification and
> 2.00.35 header files 1) Added a minimum size requirement for target
> mode command buffers. 2) Added MinMSIxIndex and MaxMSIxIndex fields
> to CommandBufferPostBase Request. 3) For BIOS Page 1, added
> SSUTimeout field, and added Product Name String Format bits to the
> BiosOptions field
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> scsi_dma_map API will return a negative value (i.e. -ENOMEM) if DMA
> mapping of sg lists fails and zero if the sg list in the SCSI cmd is
> NULL. But drivers doesn't handled sg list DMA mapping failure case
> properly.
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Added support for below customer specific brandings "VendorID"
> "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Cisco Branding
> String 0x1000 0x97 0x1137 0x154 Cisco 9300-8i 12Gbps SAS HBA 0x1000
> 0x97 0x1137 0x155 Cisco 12G Modular SAS Pass through Controller 0x1000
> 0x97 0x1137 0x156 UCS C3X60 12G SAS Pass through Controller
Same comment about not actually changing driver behavior.
These changes belong in pci.ids, not in a driver.
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Added dma_mapping_error() API after mapping an address with
> dma_map_single() API. Otherwise when CONFIG_DMA_API_DEBUG is enabled
> in the kernel, then it complains about mpt3sas driver not calling
> dma_mapping_error after mapping an address with dma_map_single
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
>>>>> Sreekanth Reddy <[email protected]> writes:
> Bump mpt3sas driver version to 9.100.00.00
Reviewed-by: Martin K. Petersen <[email protected]>
--
Martin K. Petersen Oracle Linux Engineering
On Sat, Jun 20, 2015 at 1:57 AM, Martin K. Petersen
<[email protected]> wrote:
>>>>>> Sreekanth Reddy <[email protected]> writes:
>
>> @@ -1334,9 +1336,17 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_1 {
>> *PTR_MPI2_CONFIG_PAGE_BIOS_1,
>> Mpi2BiosPage1_t, *pMpi2BiosPage1_t;
>>
>> -#define MPI2_BIOSPAGE1_PAGEVERSION (0x05)
>> +#define MPI2_BIOSPAGE1_PAGEVERSION (0x06)
>>
>> /*values for BIOS Page 1 BiosOptions field */
>> +#define MPI2_BIOSPAGE1_OPTIONS_X86_DISABLE_BIOS (0x00000400)
>
> Looks like you may have some bad whitespace here ^^^.
Accepted. will post next version of this patch by removing these extra
white spaces.
Thanks,
Sreekanth
>
>> +
>> +#define MPI2_BIOSPAGE1_OPTIONS_MASK_REGISTRATION_UEFI_BSD (0x00000300)
>> +#define MPI2_BIOSPAGE1_OPTIONS_USE_BIT0_REGISTRATION_UEFI_BSD (0x00000000)
>> +#define MPI2_BIOSPAGE1_OPTIONS_FULL_REGISTRATION_UEFI_BSD (0x00000100)
>> +#define MPI2_BIOSPAGE1_OPTIONS_ADAPTER_REGISTRATION_UEFI_BSD (0x00000200)
>> +#define MPI2_BIOSPAGE1_OPTIONS_DISABLE_REGISTRATION_UEFI_BSD (0x00000300)
>
> Otherwise OK.
>
> Reviewed-by: Martin K. Petersen <[email protected]>
>
> --
> Martin K. Petersen Oracle Linux Engineering
--
Regards,
Sreekanth
On Sat, Jun 20, 2015 at 2:14 AM, Martin K. Petersen
<[email protected]> wrote:
>>>>>> Sreekanth Reddy <[email protected]> writes:
>
>> Added support for below customer specific brandings "VendorID"
>> "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Cisco Branding
>> String 0x1000 0x97 0x1137 0x154 Cisco 9300-8i 12Gbps SAS HBA 0x1000
>> 0x97 0x1137 0x155 Cisco 12G Modular SAS Pass through Controller 0x1000
>> 0x97 0x1137 0x156 UCS C3X60 12G SAS Pass through Controller
>
> Same comment about not actually changing driver behavior.
>
> These changes belong in pci.ids, not in a driver.
Yes Martin, I agree with you that these changes belong in pci.ids. But
Customers are asking us to print the HBA branding name while loading
the driver on their custom HBA's.
>
> --
> Martin K. Petersen Oracle Linux Engineering
--
Regards,
Sreekanth
>>>>> "Sreekanth" == Sreekanth Reddy <[email protected]> writes:
Sreekanth> I agree with you that these changes belong in pci.ids. But
Sreekanth> Customers are asking us to print the HBA branding name while
Sreekanth> loading the driver on their custom HBA's.
Yes, and other HBA vendors have done the same (although thankfully this
practice appears to be going out of fashion).
Personally, I find SAS2308 orders of magnitude more useful and helpful
than WHIZ-BANG2010 since the former tells me exactly what chip I'm
dealing with.
Anyway. No big deal. I just think it's a bad habit to use the kernel for
marketing purposes.
--
Martin K. Petersen Oracle Linux Engineering
On Tue, Jun 23, 2015 at 2:06 AM, Martin K. Petersen
<[email protected]> wrote:
>
> >>>>> "Sreekanth" == Sreekanth Reddy <[email protected]> writes:
>
> Sreekanth> I agree with you that these changes belong in pci.ids. But
> Sreekanth> Customers are asking us to print the HBA branding name while
> Sreekanth> loading the driver on their custom HBA's.
>
> Yes, and other HBA vendors have done the same (although thankfully this
> practice appears to be going out of fashion).
>
> Personally, I find SAS2308 orders of magnitude more useful and helpful
> than WHIZ-BANG2010 since the former tells me exactly what chip I'm
> dealing with.
>
> Anyway. No big deal. I just think it's a bad habit to use the kernel for
> marketing purposes.
Agreed. Can you please consider this patch for this time. Next time
onwards we take some actions to not encourage these types of request
from customers.
>
>
> --
> Martin K. Petersen Oracle Linux Engineering
--
Regards,
Sreekanth