diff options
author | Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com> | 2017-10-31 08:32:36 -0400 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2017-11-03 12:20:52 -0400 |
commit | 45aa6a1a2cca3847caed029e2b788fb4ae41c93c (patch) | |
tree | 6f1722942c97ac50f972c0ff18f6f0713f850f92 | |
parent | 6ce2f1d16cac243fa00ede738d0f1567df13ad8c (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.c | 88 |
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 | */ | ||
90 | static 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 | */ | ||
1344 | static 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))) { |