lkml.org 
[lkml]   [2017]   [Aug]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 11/13] mpt3sas: NVMe drive support for BTDHMAPPING ioctl command and log info
    Date
    * 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>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    ---
    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 6362d60..99147ad 100644
    --- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c
    +++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
    @@ -79,32 +79,6 @@ enum block_state {
    };

    /**
    - * _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
    * @ioc: per adapter object
    * @smid: system request message index
    @@ -229,10 +203,9 @@ _ctl_display_some_debug(struct MPT3SAS_ADAPTER *ioc, u16 smid,
    Mpi2SCSIIOReply_t *scsi_reply =
    (Mpi2SCSIIOReply_t *)mpi_reply;
    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 = _ctl_sas_device_find_by_handle(ioc,
    + sas_device = mpt3sas_get_sdev_by_handle(ioc,
    le16_to_cpu(scsi_reply->DevHandle));
    if (sas_device) {
    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",
    ioc->name, (unsigned long long)
    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)
    pr_info(MPT3SAS_FMT
    "\tscsi_state(0x%02x), scsi_status"
    @@ -1353,6 +1343,42 @@ _ctl_btdh_search_sas_device(struct MPT3SAS_ADAPTER *ioc,
    }

    /**
    + * _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
    * @ioc: per adapter object
    * @btdh: btdh ioctl payload
    @@ -1410,6 +1436,8 @@ _ctl_btdh_mapping(struct MPT3SAS_ADAPTER *ioc, void __user *arg)

    rc = _ctl_btdh_search_sas_device(ioc, &karg);
    if (!rc)
    + rc = _ctl_btdh_search_pcie_device(ioc, &karg);
    + if (!rc)
    _ctl_btdh_search_raid_device(ioc, &karg);

    if (copy_to_user(arg, &karg, sizeof(karg))) {
    --
    1.7.1
    \
     
     \ /
      Last update: 2017-08-08 11:07    [W:2.528 / U:0.464 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site