mirror of
https://github.com/torvalds/linux.git
synced 2024-11-18 01:51:53 +00:00
lpfc: add sysfs interface to post NVME RSCN
To support scenarios which aren't bound to nvmetcli add port scenarios, which is currently where the nvmet_fc transport invokes the discovery event callbacks, a syfs attribute is added to lpfc which can be written to cause an RSCN to be generated for the nport. Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Arun Easi <aeasi@marvell.com> Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
6f2589f478
commit
41b194b843
@ -820,6 +820,7 @@ struct lpfc_hba {
|
|||||||
uint32_t cfg_use_msi;
|
uint32_t cfg_use_msi;
|
||||||
uint32_t cfg_auto_imax;
|
uint32_t cfg_auto_imax;
|
||||||
uint32_t cfg_fcp_imax;
|
uint32_t cfg_fcp_imax;
|
||||||
|
uint32_t cfg_force_rscn;
|
||||||
uint32_t cfg_cq_poll_threshold;
|
uint32_t cfg_cq_poll_threshold;
|
||||||
uint32_t cfg_cq_max_proc_limit;
|
uint32_t cfg_cq_max_proc_limit;
|
||||||
uint32_t cfg_fcp_cpu_map;
|
uint32_t cfg_fcp_cpu_map;
|
||||||
|
@ -4958,6 +4958,64 @@ static DEVICE_ATTR(lpfc_req_fw_upgrade, S_IRUGO | S_IWUSR,
|
|||||||
lpfc_request_firmware_upgrade_show,
|
lpfc_request_firmware_upgrade_show,
|
||||||
lpfc_request_firmware_upgrade_store);
|
lpfc_request_firmware_upgrade_store);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* lpfc_force_rscn_store
|
||||||
|
*
|
||||||
|
* @dev: class device that is converted into a Scsi_host.
|
||||||
|
* @attr: device attribute, not used.
|
||||||
|
* @buf: unused string
|
||||||
|
* @count: unused variable.
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Force the switch to send a RSCN to all other NPorts in our zone
|
||||||
|
* If we are direct connect pt2pt, build the RSCN command ourself
|
||||||
|
* and send to the other NPort. Not supported for private loop.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 - on success
|
||||||
|
* -EIO - if command is not sent
|
||||||
|
**/
|
||||||
|
static ssize_t
|
||||||
|
lpfc_force_rscn_store(struct device *dev, struct device_attribute *attr,
|
||||||
|
const char *buf, size_t count)
|
||||||
|
{
|
||||||
|
struct Scsi_Host *shost = class_to_shost(dev);
|
||||||
|
struct lpfc_vport *vport = (struct lpfc_vport *)shost->hostdata;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = lpfc_issue_els_rscn(vport, 0);
|
||||||
|
if (i)
|
||||||
|
return -EIO;
|
||||||
|
return strlen(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* lpfc_force_rscn: Force an RSCN to be sent to all remote NPorts
|
||||||
|
* connected to the HBA.
|
||||||
|
*
|
||||||
|
* Value range is any ascii value
|
||||||
|
*/
|
||||||
|
static int lpfc_force_rscn;
|
||||||
|
module_param(lpfc_force_rscn, int, 0644);
|
||||||
|
MODULE_PARM_DESC(lpfc_force_rscn,
|
||||||
|
"Force an RSCN to be sent to all remote NPorts");
|
||||||
|
lpfc_param_show(force_rscn)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* lpfc_force_rscn_init - Force an RSCN to be sent to all remote NPorts
|
||||||
|
* @phba: lpfc_hba pointer.
|
||||||
|
* @val: unused value.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* zero if val saved.
|
||||||
|
**/
|
||||||
|
static int
|
||||||
|
lpfc_force_rscn_init(struct lpfc_hba *phba, int val)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
static DEVICE_ATTR_RW(lpfc_force_rscn);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lpfc_fcp_imax_store
|
* lpfc_fcp_imax_store
|
||||||
*
|
*
|
||||||
@ -5958,6 +6016,7 @@ struct device_attribute *lpfc_hba_attrs[] = {
|
|||||||
&dev_attr_lpfc_nvme_oas,
|
&dev_attr_lpfc_nvme_oas,
|
||||||
&dev_attr_lpfc_nvme_embed_cmd,
|
&dev_attr_lpfc_nvme_embed_cmd,
|
||||||
&dev_attr_lpfc_fcp_imax,
|
&dev_attr_lpfc_fcp_imax,
|
||||||
|
&dev_attr_lpfc_force_rscn,
|
||||||
&dev_attr_lpfc_cq_poll_threshold,
|
&dev_attr_lpfc_cq_poll_threshold,
|
||||||
&dev_attr_lpfc_cq_max_proc_limit,
|
&dev_attr_lpfc_cq_max_proc_limit,
|
||||||
&dev_attr_lpfc_fcp_cpu_map,
|
&dev_attr_lpfc_fcp_cpu_map,
|
||||||
@ -7005,6 +7064,7 @@ lpfc_get_cfgparam(struct lpfc_hba *phba)
|
|||||||
lpfc_nvme_oas_init(phba, lpfc_nvme_oas);
|
lpfc_nvme_oas_init(phba, lpfc_nvme_oas);
|
||||||
lpfc_nvme_embed_cmd_init(phba, lpfc_nvme_embed_cmd);
|
lpfc_nvme_embed_cmd_init(phba, lpfc_nvme_embed_cmd);
|
||||||
lpfc_fcp_imax_init(phba, lpfc_fcp_imax);
|
lpfc_fcp_imax_init(phba, lpfc_fcp_imax);
|
||||||
|
lpfc_force_rscn_init(phba, lpfc_force_rscn);
|
||||||
lpfc_cq_poll_threshold_init(phba, lpfc_cq_poll_threshold);
|
lpfc_cq_poll_threshold_init(phba, lpfc_cq_poll_threshold);
|
||||||
lpfc_cq_max_proc_limit_init(phba, lpfc_cq_max_proc_limit);
|
lpfc_cq_max_proc_limit_init(phba, lpfc_cq_max_proc_limit);
|
||||||
lpfc_fcp_cpu_map_init(phba, lpfc_fcp_cpu_map);
|
lpfc_fcp_cpu_map_init(phba, lpfc_fcp_cpu_map);
|
||||||
|
Loading…
Reference in New Issue
Block a user