aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSuganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>2017-10-31 08:32:36 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2017-11-03 12:20:52 -0400
commit45aa6a1a2cca3847caed029e2b788fb4ae41c93c (patch)
tree6f1722942c97ac50f972c0ff18f6f0713f850f92
parent6ce2f1d16cac243fa00ede738d0f1567df13ad8c (diff)
scsi: mpt3sas: NVMe drive support for BTDHMAPPING ioctl command and log info
* Added debug prints for pcie devices in ioctl debug path. Which will be helpful for debugging. * Added PCIe device support for ioctl BTDHMAPPING ioctl. Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com> Signed-off-by: Suganath Prabu S <suganath-prabu.subramani@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_ctl.c88
1 files changed, 58 insertions, 30 deletions
diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
index 205c4435aa88..b4c374b08e5e 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
@@ -79,32 +79,6 @@ enum block_state {
79}; 79};
80 80
81/** 81/**
82 * _ctl_sas_device_find_by_handle - sas device search
83 * @ioc: per adapter object
84 * @handle: sas device handle (assigned by firmware)
85 * Context: Calling function should acquire ioc->sas_device_lock
86 *
87 * This searches for sas_device based on sas_address, then return sas_device
88 * object.
89 */
90static struct _sas_device *
91_ctl_sas_device_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle)
92{
93 struct _sas_device *sas_device, *r;
94
95 r = NULL;
96 list_for_each_entry(sas_device, &ioc->sas_device_list, list) {
97 if (sas_device->handle != handle)
98 continue;
99 r = sas_device;
100 goto out;
101 }
102
103 out:
104 return r;
105}
106
107/**
108 * _ctl_display_some_debug - debug routine 82 * _ctl_display_some_debug - debug routine
109 * @ioc: per adapter object 83 * @ioc: per adapter object
110 * @smid: system request message index 84 * @smid: system request message index
@@ -229,10 +203,9 @@ _ctl_display_some_debug(struct MPT3SAS_ADAPTER *ioc, u16 smid,
229 Mpi2SCSIIOReply_t *scsi_reply = 203 Mpi2SCSIIOReply_t *scsi_reply =
230 (Mpi2SCSIIOReply_t *)mpi_reply; 204 (Mpi2SCSIIOReply_t *)mpi_reply;
231 struct _sas_device *sas_device = NULL; 205 struct _sas_device *sas_device = NULL;
232 unsigned long flags; 206 struct _pcie_device *pcie_device = NULL;
233 207
234 spin_lock_irqsave(&ioc->sas_device_lock, flags); 208 sas_device = mpt3sas_get_sdev_by_handle(ioc,
235 sas_device = _ctl_sas_device_find_by_handle(ioc,
236 le16_to_cpu(scsi_reply->DevHandle)); 209 le16_to_cpu(scsi_reply->DevHandle));
237 if (sas_device) { 210 if (sas_device) {
238 pr_warn(MPT3SAS_FMT "\tsas_address(0x%016llx), phy(%d)\n", 211 pr_warn(MPT3SAS_FMT "\tsas_address(0x%016llx), phy(%d)\n",
@@ -242,8 +215,25 @@ _ctl_display_some_debug(struct MPT3SAS_ADAPTER *ioc, u16 smid,
242 "\tenclosure_logical_id(0x%016llx), slot(%d)\n", 215 "\tenclosure_logical_id(0x%016llx), slot(%d)\n",
243 ioc->name, (unsigned long long) 216 ioc->name, (unsigned long long)
244 sas_device->enclosure_logical_id, sas_device->slot); 217 sas_device->enclosure_logical_id, sas_device->slot);
218 sas_device_put(sas_device);
219 }
220 if (!sas_device) {
221 pcie_device = mpt3sas_get_pdev_by_handle(ioc,
222 le16_to_cpu(scsi_reply->DevHandle));
223 if (pcie_device) {
224 pr_warn(MPT3SAS_FMT
225 "\tWWID(0x%016llx), port(%d)\n", ioc->name,
226 (unsigned long long)pcie_device->wwid,
227 pcie_device->port_num);
228 if (pcie_device->enclosure_handle != 0)
229 pr_warn(MPT3SAS_FMT
230 "\tenclosure_logical_id(0x%016llx), slot(%d)\n",
231 ioc->name, (unsigned long long)
232 pcie_device->enclosure_logical_id,
233 pcie_device->slot);
234 pcie_device_put(pcie_device);
235 }
245 } 236 }
246 spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
247 if (scsi_reply->SCSIState || scsi_reply->SCSIStatus) 237 if (scsi_reply->SCSIState || scsi_reply->SCSIStatus)
248 pr_info(MPT3SAS_FMT 238 pr_info(MPT3SAS_FMT
249 "\tscsi_state(0x%02x), scsi_status" 239 "\tscsi_state(0x%02x), scsi_status"
@@ -1347,6 +1337,42 @@ _ctl_btdh_search_sas_device(struct MPT3SAS_ADAPTER *ioc,
1347} 1337}
1348 1338
1349/** 1339/**
1340 * _ctl_btdh_search_pcie_device - searching for pcie device
1341 * @ioc: per adapter object
1342 * @btdh: btdh ioctl payload
1343 */
1344static int
1345_ctl_btdh_search_pcie_device(struct MPT3SAS_ADAPTER *ioc,
1346 struct mpt3_ioctl_btdh_mapping *btdh)
1347{
1348 struct _pcie_device *pcie_device;
1349 unsigned long flags;
1350 int rc = 0;
1351
1352 if (list_empty(&ioc->pcie_device_list))
1353 return rc;
1354
1355 spin_lock_irqsave(&ioc->pcie_device_lock, flags);
1356 list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) {
1357 if (btdh->bus == 0xFFFFFFFF && btdh->id == 0xFFFFFFFF &&
1358 btdh->handle == pcie_device->handle) {
1359 btdh->bus = pcie_device->channel;
1360 btdh->id = pcie_device->id;
1361 rc = 1;
1362 goto out;
1363 } else if (btdh->bus == pcie_device->channel && btdh->id ==
1364 pcie_device->id && btdh->handle == 0xFFFF) {
1365 btdh->handle = pcie_device->handle;
1366 rc = 1;
1367 goto out;
1368 }
1369 }
1370 out:
1371 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags);
1372 return rc;
1373}
1374
1375/**
1350 * _ctl_btdh_search_raid_device - searching for raid device 1376 * _ctl_btdh_search_raid_device - searching for raid device
1351 * @ioc: per adapter object 1377 * @ioc: per adapter object
1352 * @btdh: btdh ioctl payload 1378 * @btdh: btdh ioctl payload
@@ -1404,6 +1430,8 @@ _ctl_btdh_mapping(struct MPT3SAS_ADAPTER *ioc, void __user *arg)
1404 1430
1405 rc = _ctl_btdh_search_sas_device(ioc, &karg); 1431 rc = _ctl_btdh_search_sas_device(ioc, &karg);
1406 if (!rc) 1432 if (!rc)
1433 rc = _ctl_btdh_search_pcie_device(ioc, &karg);
1434 if (!rc)
1407 _ctl_btdh_search_raid_device(ioc, &karg); 1435 _ctl_btdh_search_raid_device(ioc, &karg);
1408 1436
1409 if (copy_to_user(arg, &karg, sizeof(karg))) { 1437 if (copy_to_user(arg, &karg, sizeof(karg))) {