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>
This commit is contained in:
parent
6ce2f1d16c
commit
45aa6a1a2c
@ -78,32 +78,6 @@ enum block_state {
|
|||||||
BLOCKING,
|
BLOCKING,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* _ctl_sas_device_find_by_handle - sas device search
|
|
||||||
* @ioc: per adapter object
|
|
||||||
* @handle: sas device handle (assigned by firmware)
|
|
||||||
* Context: Calling function should acquire ioc->sas_device_lock
|
|
||||||
*
|
|
||||||
* This searches for sas_device based on sas_address, then return sas_device
|
|
||||||
* object.
|
|
||||||
*/
|
|
||||||
static struct _sas_device *
|
|
||||||
_ctl_sas_device_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle)
|
|
||||||
{
|
|
||||||
struct _sas_device *sas_device, *r;
|
|
||||||
|
|
||||||
r = NULL;
|
|
||||||
list_for_each_entry(sas_device, &ioc->sas_device_list, list) {
|
|
||||||
if (sas_device->handle != handle)
|
|
||||||
continue;
|
|
||||||
r = sas_device;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _ctl_display_some_debug - debug routine
|
* _ctl_display_some_debug - debug routine
|
||||||
* @ioc: per adapter object
|
* @ioc: per adapter object
|
||||||
@ -229,10 +203,9 @@ _ctl_display_some_debug(struct MPT3SAS_ADAPTER *ioc, u16 smid,
|
|||||||
Mpi2SCSIIOReply_t *scsi_reply =
|
Mpi2SCSIIOReply_t *scsi_reply =
|
||||||
(Mpi2SCSIIOReply_t *)mpi_reply;
|
(Mpi2SCSIIOReply_t *)mpi_reply;
|
||||||
struct _sas_device *sas_device = NULL;
|
struct _sas_device *sas_device = NULL;
|
||||||
unsigned long flags;
|
struct _pcie_device *pcie_device = NULL;
|
||||||
|
|
||||||
spin_lock_irqsave(&ioc->sas_device_lock, flags);
|
sas_device = mpt3sas_get_sdev_by_handle(ioc,
|
||||||
sas_device = _ctl_sas_device_find_by_handle(ioc,
|
|
||||||
le16_to_cpu(scsi_reply->DevHandle));
|
le16_to_cpu(scsi_reply->DevHandle));
|
||||||
if (sas_device) {
|
if (sas_device) {
|
||||||
pr_warn(MPT3SAS_FMT "\tsas_address(0x%016llx), phy(%d)\n",
|
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,
|
|||||||
"\tenclosure_logical_id(0x%016llx), slot(%d)\n",
|
"\tenclosure_logical_id(0x%016llx), slot(%d)\n",
|
||||||
ioc->name, (unsigned long long)
|
ioc->name, (unsigned long long)
|
||||||
sas_device->enclosure_logical_id, sas_device->slot);
|
sas_device->enclosure_logical_id, sas_device->slot);
|
||||||
|
sas_device_put(sas_device);
|
||||||
|
}
|
||||||
|
if (!sas_device) {
|
||||||
|
pcie_device = mpt3sas_get_pdev_by_handle(ioc,
|
||||||
|
le16_to_cpu(scsi_reply->DevHandle));
|
||||||
|
if (pcie_device) {
|
||||||
|
pr_warn(MPT3SAS_FMT
|
||||||
|
"\tWWID(0x%016llx), port(%d)\n", ioc->name,
|
||||||
|
(unsigned long long)pcie_device->wwid,
|
||||||
|
pcie_device->port_num);
|
||||||
|
if (pcie_device->enclosure_handle != 0)
|
||||||
|
pr_warn(MPT3SAS_FMT
|
||||||
|
"\tenclosure_logical_id(0x%016llx), slot(%d)\n",
|
||||||
|
ioc->name, (unsigned long long)
|
||||||
|
pcie_device->enclosure_logical_id,
|
||||||
|
pcie_device->slot);
|
||||||
|
pcie_device_put(pcie_device);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
|
|
||||||
if (scsi_reply->SCSIState || scsi_reply->SCSIStatus)
|
if (scsi_reply->SCSIState || scsi_reply->SCSIStatus)
|
||||||
pr_info(MPT3SAS_FMT
|
pr_info(MPT3SAS_FMT
|
||||||
"\tscsi_state(0x%02x), scsi_status"
|
"\tscsi_state(0x%02x), scsi_status"
|
||||||
@ -1346,6 +1336,42 @@ _ctl_btdh_search_sas_device(struct MPT3SAS_ADAPTER *ioc,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _ctl_btdh_search_pcie_device - searching for pcie device
|
||||||
|
* @ioc: per adapter object
|
||||||
|
* @btdh: btdh ioctl payload
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
_ctl_btdh_search_pcie_device(struct MPT3SAS_ADAPTER *ioc,
|
||||||
|
struct mpt3_ioctl_btdh_mapping *btdh)
|
||||||
|
{
|
||||||
|
struct _pcie_device *pcie_device;
|
||||||
|
unsigned long flags;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
if (list_empty(&ioc->pcie_device_list))
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&ioc->pcie_device_lock, flags);
|
||||||
|
list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) {
|
||||||
|
if (btdh->bus == 0xFFFFFFFF && btdh->id == 0xFFFFFFFF &&
|
||||||
|
btdh->handle == pcie_device->handle) {
|
||||||
|
btdh->bus = pcie_device->channel;
|
||||||
|
btdh->id = pcie_device->id;
|
||||||
|
rc = 1;
|
||||||
|
goto out;
|
||||||
|
} else if (btdh->bus == pcie_device->channel && btdh->id ==
|
||||||
|
pcie_device->id && btdh->handle == 0xFFFF) {
|
||||||
|
btdh->handle = pcie_device->handle;
|
||||||
|
rc = 1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
spin_unlock_irqrestore(&ioc->pcie_device_lock, flags);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _ctl_btdh_search_raid_device - searching for raid device
|
* _ctl_btdh_search_raid_device - searching for raid device
|
||||||
* @ioc: per adapter object
|
* @ioc: per adapter object
|
||||||
@ -1403,6 +1429,8 @@ _ctl_btdh_mapping(struct MPT3SAS_ADAPTER *ioc, void __user *arg)
|
|||||||
__func__));
|
__func__));
|
||||||
|
|
||||||
rc = _ctl_btdh_search_sas_device(ioc, &karg);
|
rc = _ctl_btdh_search_sas_device(ioc, &karg);
|
||||||
|
if (!rc)
|
||||||
|
rc = _ctl_btdh_search_pcie_device(ioc, &karg);
|
||||||
if (!rc)
|
if (!rc)
|
||||||
_ctl_btdh_search_raid_device(ioc, &karg);
|
_ctl_btdh_search_raid_device(ioc, &karg);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user