mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull more SCSI updates from James Bottomley: "These are mostly minor updates. There are two drivers (lpfc and mpi3mr) which missed the initial pull and a core change to retry a start/stop unit which affect suspend/resume" * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (32 commits) scsi: lpfc: Update lpfc version to 14.4.0.5 scsi: lpfc: Support loopback tests with VMID enabled scsi: lpfc: Revise TRACE_EVENT log flag severities from KERN_ERR to KERN_WARNING scsi: lpfc: Ensure DA_ID handling completion before deleting an NPIV instance scsi: lpfc: Fix kref imbalance on fabric ndlps from dev_loss_tmo handler scsi: lpfc: Restrict support for 32 byte CDBs to specific HBAs scsi: lpfc: Update phba link state conditional before sending CMF_SYNC_WQE scsi: lpfc: Add ELS_RSP cmd to the list of WQEs to flush in lpfc_els_flush_cmd() scsi: mpi3mr: Update driver version to 8.12.0.0.50 scsi: mpi3mr: Improve wait logic while controller transitions to READY state scsi: mpi3mr: Update MPI Headers to revision 34 scsi: mpi3mr: Use firmware-provided timestamp update interval scsi: mpi3mr: Enhance the Enable Controller retry logic scsi: sd: Fix off-by-one error in sd_read_block_characteristics() scsi: pm8001: Do not overwrite PCI queue mapping scsi: scsi_debug: Remove a useless memset() scsi: pmcraid: Convert comma to semicolon scsi: sd: Retry START STOP UNIT commands scsi: mpi3mr: A performance fix scsi: ufs: qcom: Update MODE_MAX cfg_bw value ...
This commit is contained in:
@@ -1609,7 +1609,7 @@ mptctl_eventreport (MPT_ADAPTER *ioc, unsigned long arg)
|
||||
maxEvents = numBytes/sizeof(MPT_IOCTL_EVENTS);
|
||||
|
||||
|
||||
max = MPTCTL_EVENT_LOG_SIZE < maxEvents ? MPTCTL_EVENT_LOG_SIZE : maxEvents;
|
||||
max = min(maxEvents, MPTCTL_EVENT_LOG_SIZE);
|
||||
|
||||
/* If fewer than 1 event is requested, there must have
|
||||
* been some type of error.
|
||||
|
||||
@@ -485,7 +485,6 @@ struct cxgbi_device {
|
||||
unsigned char nmtus;
|
||||
unsigned char nports;
|
||||
struct pci_dev *pdev;
|
||||
struct dentry *debugfs_root;
|
||||
struct iscsi_transport *itp;
|
||||
struct module *owner;
|
||||
|
||||
@@ -499,7 +498,6 @@ struct cxgbi_device {
|
||||
unsigned int rxq_idx_cntr;
|
||||
struct cxgbi_ports_map pmap;
|
||||
|
||||
void (*dev_ddp_cleanup)(struct cxgbi_device *);
|
||||
struct cxgbi_ppm* (*cdev2ppm)(struct cxgbi_device *);
|
||||
int (*csk_ddp_set_map)(struct cxgbi_ppm *, struct cxgbi_sock *,
|
||||
struct cxgbi_task_tag_info *);
|
||||
@@ -512,7 +510,6 @@ struct cxgbi_device {
|
||||
unsigned int, int);
|
||||
|
||||
void (*csk_release_offload_resources)(struct cxgbi_sock *);
|
||||
int (*csk_rx_pdu_ready)(struct cxgbi_sock *, struct sk_buff *);
|
||||
u32 (*csk_send_rx_credits)(struct cxgbi_sock *, u32);
|
||||
int (*csk_push_tx_frames)(struct cxgbi_sock *, int);
|
||||
void (*csk_send_abort_req)(struct cxgbi_sock *);
|
||||
|
||||
@@ -2421,7 +2421,7 @@ out:
|
||||
spin_lock_irqsave(&device->done_lock, flags);
|
||||
if (test_bit(SAS_HA_FROZEN, &ha->state)) {
|
||||
spin_unlock_irqrestore(&device->done_lock, flags);
|
||||
dev_info(dev, "slot complete: task(%pK) ignored\n ",
|
||||
dev_info(dev, "slot complete: task(%pK) ignored\n",
|
||||
task);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ static unsigned int default_timeout = IBMVFC_DEFAULT_TIMEOUT;
|
||||
static u64 max_lun = IBMVFC_MAX_LUN;
|
||||
static unsigned int max_targets = IBMVFC_MAX_TARGETS;
|
||||
static unsigned int max_requests = IBMVFC_MAX_REQUESTS_DEFAULT;
|
||||
static u16 max_sectors = IBMVFC_MAX_SECTORS;
|
||||
static u16 scsi_qdepth = IBMVFC_SCSI_QDEPTH;
|
||||
static unsigned int disc_threads = IBMVFC_MAX_DISC_THREADS;
|
||||
static unsigned int ibmvfc_debug = IBMVFC_DEBUG;
|
||||
@@ -83,6 +84,9 @@ MODULE_PARM_DESC(default_timeout,
|
||||
module_param_named(max_requests, max_requests, uint, S_IRUGO);
|
||||
MODULE_PARM_DESC(max_requests, "Maximum requests for this adapter. "
|
||||
"[Default=" __stringify(IBMVFC_MAX_REQUESTS_DEFAULT) "]");
|
||||
module_param_named(max_sectors, max_sectors, ushort, S_IRUGO);
|
||||
MODULE_PARM_DESC(max_sectors, "Maximum sectors for this adapter. "
|
||||
"[Default=" __stringify(IBMVFC_MAX_SECTORS) "]");
|
||||
module_param_named(scsi_qdepth, scsi_qdepth, ushort, S_IRUGO);
|
||||
MODULE_PARM_DESC(scsi_qdepth, "Maximum scsi command depth per adapter queue. "
|
||||
"[Default=" __stringify(IBMVFC_SCSI_QDEPTH) "]");
|
||||
@@ -1494,7 +1498,7 @@ static void ibmvfc_set_login_info(struct ibmvfc_host *vhost)
|
||||
memset(login_info, 0, sizeof(*login_info));
|
||||
|
||||
login_info->ostype = cpu_to_be32(IBMVFC_OS_LINUX);
|
||||
login_info->max_dma_len = cpu_to_be64(IBMVFC_MAX_SECTORS << 9);
|
||||
login_info->max_dma_len = cpu_to_be64(max_sectors << 9);
|
||||
login_info->max_payload = cpu_to_be32(sizeof(struct ibmvfc_fcp_cmd_iu));
|
||||
login_info->max_response = cpu_to_be32(sizeof(struct ibmvfc_fcp_rsp));
|
||||
login_info->partition_num = cpu_to_be32(vhost->partition_number);
|
||||
@@ -5230,7 +5234,7 @@ static void ibmvfc_npiv_login_done(struct ibmvfc_event *evt)
|
||||
}
|
||||
|
||||
vhost->logged_in = 1;
|
||||
npiv_max_sectors = min((uint)(be64_to_cpu(rsp->max_dma_len) >> 9), IBMVFC_MAX_SECTORS);
|
||||
npiv_max_sectors = min((uint)(be64_to_cpu(rsp->max_dma_len) >> 9), max_sectors);
|
||||
dev_info(vhost->dev, "Host partition: %s, device: %s %s %s max sectors %u\n",
|
||||
rsp->partition_name, rsp->device_name, rsp->port_loc_code,
|
||||
rsp->drc_name, npiv_max_sectors);
|
||||
@@ -6329,7 +6333,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
||||
shost->can_queue = scsi_qdepth;
|
||||
shost->max_lun = max_lun;
|
||||
shost->max_id = max_targets;
|
||||
shost->max_sectors = IBMVFC_MAX_SECTORS;
|
||||
shost->max_sectors = max_sectors;
|
||||
shost->max_cmd_len = IBMVFC_MAX_CDB_LEN;
|
||||
shost->unique_id = shost->host_no;
|
||||
shost->nr_hw_queues = mq_enabled ? min(max_scsi_queues, nr_scsi_hw_queues) : 1;
|
||||
@@ -6556,6 +6560,7 @@ static struct fc_function_template ibmvfc_transport_functions = {
|
||||
**/
|
||||
static int __init ibmvfc_module_init(void)
|
||||
{
|
||||
int min_max_sectors = PAGE_SIZE >> 9;
|
||||
int rc;
|
||||
|
||||
if (!firmware_has_feature(FW_FEATURE_VIO))
|
||||
@@ -6564,6 +6569,16 @@ static int __init ibmvfc_module_init(void)
|
||||
printk(KERN_INFO IBMVFC_NAME": IBM Virtual Fibre Channel Driver version: %s %s\n",
|
||||
IBMVFC_DRIVER_VERSION, IBMVFC_DRIVER_DATE);
|
||||
|
||||
/*
|
||||
* Range check the max_sectors module parameter. The upper bounds is
|
||||
* implicity checked since the parameter is a ushort.
|
||||
*/
|
||||
if (max_sectors < min_max_sectors) {
|
||||
printk(KERN_ERR IBMVFC_NAME ": max_sectors must be at least %d.\n",
|
||||
min_max_sectors);
|
||||
max_sectors = min_max_sectors;
|
||||
}
|
||||
|
||||
ibmvfc_transport_template = fc_attach_transport(&ibmvfc_transport_functions);
|
||||
if (!ibmvfc_transport_template)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#define IBMVFC_DEBUG 0
|
||||
#define IBMVFC_MAX_TARGETS 1024
|
||||
#define IBMVFC_MAX_LUN 0xffffffff
|
||||
#define IBMVFC_MAX_SECTORS 0xffffu
|
||||
#define IBMVFC_MAX_SECTORS 2048
|
||||
#define IBMVFC_MAX_DISC_THREADS 4
|
||||
#define IBMVFC_TGT_MEMPOOL_SZ 64
|
||||
#define IBMVFC_MAX_CMDS_PER_LUN 64
|
||||
|
||||
@@ -3208,6 +3208,9 @@ lpfc_bsg_diag_loopback_run(struct bsg_job *job)
|
||||
cmdiocbq->num_bdes = num_bde;
|
||||
cmdiocbq->cmd_flag |= LPFC_IO_LIBDFC;
|
||||
cmdiocbq->cmd_flag |= LPFC_IO_LOOPBACK;
|
||||
if (phba->cfg_vmid_app_header)
|
||||
cmdiocbq->cmd_flag |= LPFC_IO_VMID;
|
||||
|
||||
cmdiocbq->vport = phba->pport;
|
||||
cmdiocbq->cmd_cmpl = NULL;
|
||||
cmdiocbq->bpl_dmabuf = txbmp;
|
||||
|
||||
@@ -1572,8 +1572,8 @@ lpfc_cmpl_ct_cmd_gft_id(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
}
|
||||
}
|
||||
} else
|
||||
lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"3065 GFT_ID failed x%08x\n", ulp_status);
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_DISCOVERY,
|
||||
"3065 GFT_ID status x%08x\n", ulp_status);
|
||||
|
||||
out:
|
||||
lpfc_ct_free_iocb(phba, cmdiocb);
|
||||
@@ -1647,6 +1647,18 @@ lpfc_cmpl_ct(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
}
|
||||
|
||||
out:
|
||||
/* If the caller wanted a synchronous DA_ID completion, signal the
|
||||
* wait obj and clear flag to reset the vport.
|
||||
*/
|
||||
if (ndlp->save_flags & NLP_WAIT_FOR_DA_ID) {
|
||||
if (ndlp->da_id_waitq)
|
||||
wake_up(ndlp->da_id_waitq);
|
||||
}
|
||||
|
||||
spin_lock_irq(&ndlp->lock);
|
||||
ndlp->save_flags &= ~NLP_WAIT_FOR_DA_ID;
|
||||
spin_unlock_irq(&ndlp->lock);
|
||||
|
||||
lpfc_ct_free_iocb(phba, cmdiocb);
|
||||
lpfc_nlp_put(ndlp);
|
||||
return;
|
||||
@@ -2246,7 +2258,7 @@ lpfc_cmpl_ct_disc_fdmi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
}
|
||||
|
||||
lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
|
||||
"0229 FDMI cmd %04x failed, latt = %d "
|
||||
"0229 FDMI cmd %04x latt = %d "
|
||||
"ulp_status: x%x, rid x%x\n",
|
||||
be16_to_cpu(fdmi_cmd), latt, ulp_status,
|
||||
ulp_word4);
|
||||
@@ -2263,9 +2275,9 @@ lpfc_cmpl_ct_disc_fdmi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
/* Check for a CT LS_RJT response */
|
||||
cmd = be16_to_cpu(fdmi_cmd);
|
||||
if (be16_to_cpu(fdmi_rsp) == SLI_CT_RESPONSE_FS_RJT) {
|
||||
/* FDMI rsp failed */
|
||||
/* Log FDMI reject */
|
||||
lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY | LOG_ELS,
|
||||
"0220 FDMI cmd failed FS_RJT Data: x%x", cmd);
|
||||
"0220 FDMI cmd FS_RJT Data: x%x", cmd);
|
||||
|
||||
/* Should we fallback to FDMI-2 / FDMI-1 ? */
|
||||
switch (cmd) {
|
||||
|
||||
@@ -90,6 +90,8 @@ enum lpfc_nlp_save_flags {
|
||||
NLP_IN_RECOV_POST_DEV_LOSS = 0x1,
|
||||
/* wait for outstanding LOGO to cmpl */
|
||||
NLP_WAIT_FOR_LOGO = 0x2,
|
||||
/* wait for outstanding DA_ID to finish */
|
||||
NLP_WAIT_FOR_DA_ID = 0x4
|
||||
};
|
||||
|
||||
struct lpfc_nodelist {
|
||||
@@ -159,7 +161,12 @@ struct lpfc_nodelist {
|
||||
uint32_t nvme_fb_size; /* NVME target's supported byte cnt */
|
||||
#define NVME_FB_BIT_SHIFT 9 /* PRLI Rsp first burst in 512B units. */
|
||||
uint32_t nlp_defer_did;
|
||||
|
||||
/* These wait objects are NPIV specific. These IOs must complete
|
||||
* synchronously.
|
||||
*/
|
||||
wait_queue_head_t *logo_waitq;
|
||||
wait_queue_head_t *da_id_waitq;
|
||||
};
|
||||
|
||||
struct lpfc_node_rrq {
|
||||
|
||||
@@ -979,7 +979,7 @@ lpfc_cmpl_els_flogi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
phba->fcoe_cvl_eventtag_attn =
|
||||
phba->fcoe_cvl_eventtag;
|
||||
lpfc_printf_log(phba, KERN_WARNING, LOG_FIP | LOG_ELS,
|
||||
"2611 FLOGI failed on FCF (x%x), "
|
||||
"2611 FLOGI FCF (x%x), "
|
||||
"status:x%x/x%x, tmo:x%x, perform "
|
||||
"roundrobin FCF failover\n",
|
||||
phba->fcf.current_rec.fcf_indx,
|
||||
@@ -997,11 +997,11 @@ stop_rr_fcf_flogi:
|
||||
if (!(ulp_status == IOSTAT_LOCAL_REJECT &&
|
||||
((ulp_word4 & IOERR_PARAM_MASK) ==
|
||||
IOERR_LOOP_OPEN_FAILURE)))
|
||||
lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"2858 FLOGI failure Status:x%x/x%x TMO"
|
||||
":x%x Data x%lx x%x\n",
|
||||
ulp_status, ulp_word4, tmo,
|
||||
phba->hba_flag, phba->fcf.fcf_flag);
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
|
||||
"2858 FLOGI Status:x%x/x%x TMO"
|
||||
":x%x Data x%lx x%x\n",
|
||||
ulp_status, ulp_word4, tmo,
|
||||
phba->hba_flag, phba->fcf.fcf_flag);
|
||||
|
||||
/* Check for retry */
|
||||
if (lpfc_els_retry(phba, cmdiocb, rspiocb)) {
|
||||
@@ -1023,7 +1023,7 @@ stop_rr_fcf_flogi:
|
||||
lpfc_nlp_put(ndlp);
|
||||
|
||||
lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS,
|
||||
"0150 FLOGI failure Status:x%x/x%x "
|
||||
"0150 FLOGI Status:x%x/x%x "
|
||||
"xri x%x TMO:x%x refcnt %d\n",
|
||||
ulp_status, ulp_word4, cmdiocb->sli4_xritag,
|
||||
tmo, kref_read(&ndlp->kref));
|
||||
@@ -1032,11 +1032,11 @@ stop_rr_fcf_flogi:
|
||||
if (!(ulp_status == IOSTAT_LOCAL_REJECT &&
|
||||
((ulp_word4 & IOERR_PARAM_MASK) ==
|
||||
IOERR_LOOP_OPEN_FAILURE))) {
|
||||
/* FLOGI failure */
|
||||
lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"0100 FLOGI failure Status:x%x/x%x "
|
||||
"TMO:x%x\n",
|
||||
ulp_status, ulp_word4, tmo);
|
||||
/* Warn FLOGI status */
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
|
||||
"0100 FLOGI Status:x%x/x%x "
|
||||
"TMO:x%x\n",
|
||||
ulp_status, ulp_word4, tmo);
|
||||
goto flogifail;
|
||||
}
|
||||
|
||||
@@ -1964,16 +1964,16 @@ lpfc_cmpl_els_rrq(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
|
||||
if (ulp_status) {
|
||||
/* Check for retry */
|
||||
/* RRQ failed Don't print the vport to vport rjts */
|
||||
/* Warn RRQ status Don't print the vport to vport rjts */
|
||||
if (ulp_status != IOSTAT_LS_RJT ||
|
||||
(((ulp_word4) >> 16 != LSRJT_INVALID_CMD) &&
|
||||
((ulp_word4) >> 16 != LSRJT_UNABLE_TPC)) ||
|
||||
(phba)->pport->cfg_log_verbose & LOG_ELS)
|
||||
lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"2881 RRQ failure DID:%06X Status:"
|
||||
"x%x/x%x\n",
|
||||
ndlp->nlp_DID, ulp_status,
|
||||
ulp_word4);
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
|
||||
"2881 RRQ DID:%06X Status:"
|
||||
"x%x/x%x\n",
|
||||
ndlp->nlp_DID, ulp_status,
|
||||
ulp_word4);
|
||||
}
|
||||
|
||||
lpfc_clr_rrq_active(phba, rrq->xritag, rrq);
|
||||
@@ -2077,16 +2077,16 @@ lpfc_cmpl_els_plogi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
/* PLOGI failed Don't print the vport to vport rjts */
|
||||
/* Warn PLOGI status Don't print the vport to vport rjts */
|
||||
if (ulp_status != IOSTAT_LS_RJT ||
|
||||
(((ulp_word4) >> 16 != LSRJT_INVALID_CMD) &&
|
||||
((ulp_word4) >> 16 != LSRJT_UNABLE_TPC)) ||
|
||||
(phba)->pport->cfg_log_verbose & LOG_ELS)
|
||||
lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"2753 PLOGI failure DID:%06X "
|
||||
"Status:x%x/x%x\n",
|
||||
ndlp->nlp_DID, ulp_status,
|
||||
ulp_word4);
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
|
||||
"2753 PLOGI DID:%06X "
|
||||
"Status:x%x/x%x\n",
|
||||
ndlp->nlp_DID, ulp_status,
|
||||
ulp_word4);
|
||||
|
||||
/* Do not call DSM for lpfc_els_abort'ed ELS cmds */
|
||||
if (!lpfc_error_lost_link(vport, ulp_status, ulp_word4))
|
||||
@@ -2323,7 +2323,6 @@ lpfc_cmpl_els_prli(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
struct lpfc_vport *vport = cmdiocb->vport;
|
||||
struct lpfc_nodelist *ndlp;
|
||||
char *mode;
|
||||
u32 loglevel;
|
||||
u32 ulp_status;
|
||||
u32 ulp_word4;
|
||||
bool release_node = false;
|
||||
@@ -2372,17 +2371,14 @@ lpfc_cmpl_els_prli(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
* could be expected.
|
||||
*/
|
||||
if (test_bit(FC_FABRIC, &vport->fc_flag) ||
|
||||
vport->cfg_enable_fc4_type != LPFC_ENABLE_BOTH) {
|
||||
mode = KERN_ERR;
|
||||
loglevel = LOG_TRACE_EVENT;
|
||||
} else {
|
||||
vport->cfg_enable_fc4_type != LPFC_ENABLE_BOTH)
|
||||
mode = KERN_WARNING;
|
||||
else
|
||||
mode = KERN_INFO;
|
||||
loglevel = LOG_ELS;
|
||||
}
|
||||
|
||||
/* PRLI failed */
|
||||
lpfc_printf_vlog(vport, mode, loglevel,
|
||||
"2754 PRLI failure DID:%06X Status:x%x/x%x, "
|
||||
/* Warn PRLI status */
|
||||
lpfc_printf_vlog(vport, mode, LOG_ELS,
|
||||
"2754 PRLI DID:%06X Status:x%x/x%x, "
|
||||
"data: x%x x%x x%x\n",
|
||||
ndlp->nlp_DID, ulp_status,
|
||||
ulp_word4, ndlp->nlp_state,
|
||||
@@ -2854,11 +2850,11 @@ lpfc_cmpl_els_adisc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
/* ADISC failed */
|
||||
lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"2755 ADISC failure DID:%06X Status:x%x/x%x\n",
|
||||
ndlp->nlp_DID, ulp_status,
|
||||
ulp_word4);
|
||||
/* Warn ADISC status */
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
|
||||
"2755 ADISC DID:%06X Status:x%x/x%x\n",
|
||||
ndlp->nlp_DID, ulp_status,
|
||||
ulp_word4);
|
||||
lpfc_disc_state_machine(vport, ndlp, cmdiocb,
|
||||
NLP_EVT_CMPL_ADISC);
|
||||
|
||||
@@ -3045,12 +3041,12 @@ lpfc_cmpl_els_logo(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
* discovery. The PLOGI will retry.
|
||||
*/
|
||||
if (ulp_status) {
|
||||
/* LOGO failed */
|
||||
lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"2756 LOGO failure, No Retry DID:%06X "
|
||||
"Status:x%x/x%x\n",
|
||||
ndlp->nlp_DID, ulp_status,
|
||||
ulp_word4);
|
||||
/* Warn LOGO status */
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
|
||||
"2756 LOGO, No Retry DID:%06X "
|
||||
"Status:x%x/x%x\n",
|
||||
ndlp->nlp_DID, ulp_status,
|
||||
ulp_word4);
|
||||
|
||||
if (lpfc_error_lost_link(vport, ulp_status, ulp_word4))
|
||||
skip_recovery = 1;
|
||||
@@ -4837,11 +4833,10 @@ lpfc_els_retry(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
if ((phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) &&
|
||||
(cmd == ELS_CMD_FDISC) &&
|
||||
(stat.un.b.lsRjtRsnCodeExp == LSEXP_OUT_OF_RESOURCE)){
|
||||
lpfc_printf_vlog(vport, KERN_ERR,
|
||||
LOG_TRACE_EVENT,
|
||||
"0125 FDISC Failed (x%x). "
|
||||
"Fabric out of resources\n",
|
||||
stat.un.lsRjtError);
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
|
||||
"0125 FDISC (x%x). "
|
||||
"Fabric out of resources\n",
|
||||
stat.un.lsRjtError);
|
||||
lpfc_vport_set_state(vport,
|
||||
FC_VPORT_NO_FABRIC_RSCS);
|
||||
}
|
||||
@@ -4877,11 +4872,10 @@ lpfc_els_retry(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
LSEXP_NOTHING_MORE) {
|
||||
vport->fc_sparam.cmn.bbRcvSizeMsb &= 0xf;
|
||||
retry = 1;
|
||||
lpfc_printf_vlog(vport, KERN_ERR,
|
||||
LOG_TRACE_EVENT,
|
||||
"0820 FLOGI Failed (x%x). "
|
||||
"BBCredit Not Supported\n",
|
||||
stat.un.lsRjtError);
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
|
||||
"0820 FLOGI (x%x). "
|
||||
"BBCredit Not Supported\n",
|
||||
stat.un.lsRjtError);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -4891,11 +4885,10 @@ lpfc_els_retry(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
((stat.un.b.lsRjtRsnCodeExp == LSEXP_INVALID_PNAME) ||
|
||||
(stat.un.b.lsRjtRsnCodeExp == LSEXP_INVALID_NPORT_ID))
|
||||
) {
|
||||
lpfc_printf_vlog(vport, KERN_ERR,
|
||||
LOG_TRACE_EVENT,
|
||||
"0122 FDISC Failed (x%x). "
|
||||
"Fabric Detected Bad WWN\n",
|
||||
stat.un.lsRjtError);
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
|
||||
"0122 FDISC (x%x). "
|
||||
"Fabric Detected Bad WWN\n",
|
||||
stat.un.lsRjtError);
|
||||
lpfc_vport_set_state(vport,
|
||||
FC_VPORT_FABRIC_REJ_WWN);
|
||||
}
|
||||
@@ -5355,8 +5348,8 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
u32 ulp_status, ulp_word4, tmo, did, iotag;
|
||||
|
||||
if (!vport) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"3177 ELS response failed\n");
|
||||
lpfc_printf_log(phba, KERN_WARNING, LOG_ELS,
|
||||
"3177 null vport in ELS rsp\n");
|
||||
goto out;
|
||||
}
|
||||
if (cmdiocb->context_un.mbox)
|
||||
@@ -9658,11 +9651,12 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport)
|
||||
if (piocb->cmd_flag & LPFC_DRIVER_ABORTED && !mbx_tmo_err)
|
||||
continue;
|
||||
|
||||
/* On the ELS ring we can have ELS_REQUESTs or
|
||||
* GEN_REQUESTs waiting for a response.
|
||||
/* On the ELS ring we can have ELS_REQUESTs, ELS_RSPs,
|
||||
* or GEN_REQUESTs waiting for a CQE response.
|
||||
*/
|
||||
ulp_command = get_job_cmnd(phba, piocb);
|
||||
if (ulp_command == CMD_ELS_REQUEST64_CR) {
|
||||
if (ulp_command == CMD_ELS_REQUEST64_WQE ||
|
||||
ulp_command == CMD_XMIT_ELS_RSP64_WQE) {
|
||||
list_add_tail(&piocb->dlist, &abort_list);
|
||||
|
||||
/* If the link is down when flushing ELS commands
|
||||
@@ -11327,10 +11321,10 @@ lpfc_cmpl_els_fdisc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
/* Check for retry */
|
||||
if (lpfc_els_retry(phba, cmdiocb, rspiocb))
|
||||
goto out;
|
||||
/* FDISC failed */
|
||||
lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"0126 FDISC failed. (x%x/x%x)\n",
|
||||
ulp_status, ulp_word4);
|
||||
/* Warn FDISC status */
|
||||
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
|
||||
"0126 FDISC cmpl status: x%x/x%x)\n",
|
||||
ulp_status, ulp_word4);
|
||||
goto fdisc_failed;
|
||||
}
|
||||
|
||||
|
||||
@@ -527,6 +527,9 @@ lpfc_dev_loss_tmo_handler(struct lpfc_nodelist *ndlp)
|
||||
* the following lpfc_nlp_put is necessary after fabric node is
|
||||
* recovered.
|
||||
*/
|
||||
spin_lock_irqsave(&ndlp->lock, iflags);
|
||||
ndlp->nlp_flag &= ~NLP_IN_DEV_LOSS;
|
||||
spin_unlock_irqrestore(&ndlp->lock, iflags);
|
||||
if (recovering) {
|
||||
lpfc_printf_vlog(vport, KERN_INFO,
|
||||
LOG_DISCOVERY | LOG_NODE,
|
||||
@@ -539,6 +542,7 @@ lpfc_dev_loss_tmo_handler(struct lpfc_nodelist *ndlp)
|
||||
spin_lock_irqsave(&ndlp->lock, iflags);
|
||||
ndlp->save_flags |= NLP_IN_RECOV_POST_DEV_LOSS;
|
||||
spin_unlock_irqrestore(&ndlp->lock, iflags);
|
||||
return fcf_inuse;
|
||||
} else if (ndlp->nlp_state == NLP_STE_UNMAPPED_NODE) {
|
||||
/* Fabric node fully recovered before this dev_loss_tmo
|
||||
* queue work is processed. Thus, ignore the
|
||||
@@ -552,15 +556,9 @@ lpfc_dev_loss_tmo_handler(struct lpfc_nodelist *ndlp)
|
||||
ndlp->nlp_DID, kref_read(&ndlp->kref),
|
||||
ndlp, ndlp->nlp_flag,
|
||||
vport->port_state);
|
||||
spin_lock_irqsave(&ndlp->lock, iflags);
|
||||
ndlp->nlp_flag &= ~NLP_IN_DEV_LOSS;
|
||||
spin_unlock_irqrestore(&ndlp->lock, iflags);
|
||||
return fcf_inuse;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&ndlp->lock, iflags);
|
||||
ndlp->nlp_flag &= ~NLP_IN_DEV_LOSS;
|
||||
spin_unlock_irqrestore(&ndlp->lock, iflags);
|
||||
lpfc_nlp_put(ndlp);
|
||||
return fcf_inuse;
|
||||
}
|
||||
|
||||
@@ -561,6 +561,27 @@ struct fc_vft_header {
|
||||
|
||||
#include <uapi/scsi/fc/fc_els.h>
|
||||
|
||||
/*
|
||||
* Application Header
|
||||
*/
|
||||
struct fc_app_header {
|
||||
uint32_t dst_app_id;
|
||||
uint32_t src_app_id;
|
||||
#define LOOPBACK_SRC_APPID 0x4321
|
||||
uint32_t word2;
|
||||
uint32_t word3;
|
||||
};
|
||||
|
||||
/*
|
||||
* dfctl optional header definition
|
||||
*/
|
||||
enum lpfc_fc_dfctl {
|
||||
LPFC_FC_NO_DEVICE_HEADER,
|
||||
LPFC_FC_16B_DEVICE_HEADER,
|
||||
LPFC_FC_32B_DEVICE_HEADER,
|
||||
LPFC_FC_64B_DEVICE_HEADER,
|
||||
};
|
||||
|
||||
/*
|
||||
* Extended Link Service LS_COMMAND codes (Payload Word 0)
|
||||
*/
|
||||
|
||||
@@ -4847,6 +4847,7 @@ struct fcp_iwrite64_wqe {
|
||||
#define cmd_buff_len_SHIFT 16
|
||||
#define cmd_buff_len_MASK 0x00000ffff
|
||||
#define cmd_buff_len_WORD word3
|
||||
/* Note: payload_offset_len field depends on ASIC support */
|
||||
#define payload_offset_len_SHIFT 0
|
||||
#define payload_offset_len_MASK 0x0000ffff
|
||||
#define payload_offset_len_WORD word3
|
||||
@@ -4863,6 +4864,7 @@ struct fcp_iread64_wqe {
|
||||
#define cmd_buff_len_SHIFT 16
|
||||
#define cmd_buff_len_MASK 0x00000ffff
|
||||
#define cmd_buff_len_WORD word3
|
||||
/* Note: payload_offset_len field depends on ASIC support */
|
||||
#define payload_offset_len_SHIFT 0
|
||||
#define payload_offset_len_MASK 0x0000ffff
|
||||
#define payload_offset_len_WORD word3
|
||||
@@ -4879,6 +4881,7 @@ struct fcp_icmnd64_wqe {
|
||||
#define cmd_buff_len_SHIFT 16
|
||||
#define cmd_buff_len_MASK 0x00000ffff
|
||||
#define cmd_buff_len_WORD word3
|
||||
/* Note: payload_offset_len field depends on ASIC support */
|
||||
#define payload_offset_len_SHIFT 0
|
||||
#define payload_offset_len_MASK 0x0000ffff
|
||||
#define payload_offset_len_WORD word3
|
||||
|
||||
@@ -4699,6 +4699,7 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev)
|
||||
uint64_t wwn;
|
||||
bool use_no_reset_hba = false;
|
||||
int rc;
|
||||
u8 if_type;
|
||||
|
||||
if (lpfc_no_hba_reset_cnt) {
|
||||
if (phba->sli_rev < LPFC_SLI_REV4 &&
|
||||
@@ -4773,10 +4774,24 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev)
|
||||
shost->max_id = LPFC_MAX_TARGET;
|
||||
shost->max_lun = vport->cfg_max_luns;
|
||||
shost->this_id = -1;
|
||||
if (phba->sli_rev == LPFC_SLI_REV4)
|
||||
shost->max_cmd_len = LPFC_FCP_CDB_LEN_32;
|
||||
else
|
||||
|
||||
/* Set max_cmd_len applicable to ASIC support */
|
||||
if (phba->sli_rev == LPFC_SLI_REV4) {
|
||||
if_type = bf_get(lpfc_sli_intf_if_type,
|
||||
&phba->sli4_hba.sli_intf);
|
||||
switch (if_type) {
|
||||
case LPFC_SLI_INTF_IF_TYPE_2:
|
||||
fallthrough;
|
||||
case LPFC_SLI_INTF_IF_TYPE_6:
|
||||
shost->max_cmd_len = LPFC_FCP_CDB_LEN_32;
|
||||
break;
|
||||
default:
|
||||
shost->max_cmd_len = LPFC_FCP_CDB_LEN;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
shost->max_cmd_len = LPFC_FCP_CDB_LEN;
|
||||
}
|
||||
|
||||
if (phba->sli_rev == LPFC_SLI_REV4) {
|
||||
if (!phba->cfg_fcp_mq_threshold ||
|
||||
@@ -10436,6 +10451,7 @@ lpfc_sli4_queue_create(struct lpfc_hba *phba)
|
||||
struct lpfc_vector_map_info *cpup;
|
||||
struct lpfc_vector_map_info *eqcpup;
|
||||
struct lpfc_eq_intr_info *eqi;
|
||||
u32 wqesize;
|
||||
|
||||
/*
|
||||
* Create HBA Record arrays.
|
||||
@@ -10655,9 +10671,15 @@ lpfc_sli4_queue_create(struct lpfc_hba *phba)
|
||||
* Create ELS Work Queues
|
||||
*/
|
||||
|
||||
/* Create slow-path ELS Work Queue */
|
||||
/*
|
||||
* Create slow-path ELS Work Queue.
|
||||
* Increase the ELS WQ size when WQEs contain an embedded cdb
|
||||
*/
|
||||
wqesize = (phba->fcp_embed_io) ?
|
||||
LPFC_WQE128_SIZE : phba->sli4_hba.wq_esize;
|
||||
|
||||
qdesc = lpfc_sli4_queue_alloc(phba, LPFC_DEFAULT_PAGE_SIZE,
|
||||
phba->sli4_hba.wq_esize,
|
||||
wqesize,
|
||||
phba->sli4_hba.wq_ecount, cpu);
|
||||
if (!qdesc) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
|
||||
|
||||
@@ -4760,7 +4760,7 @@ static int lpfc_scsi_prep_cmnd_buf_s4(struct lpfc_vport *vport,
|
||||
|
||||
/* Word 3 */
|
||||
bf_set(payload_offset_len, &wqe->fcp_icmd,
|
||||
sizeof(struct fcp_cmnd32) + sizeof(struct fcp_rsp));
|
||||
sizeof(struct fcp_cmnd) + sizeof(struct fcp_rsp));
|
||||
|
||||
/* Word 6 */
|
||||
bf_set(wqe_ctxt_tag, &wqe->generic.wqe_com,
|
||||
|
||||
@@ -1940,12 +1940,15 @@ lpfc_issue_cmf_sync_wqe(struct lpfc_hba *phba, u32 ms, u64 total)
|
||||
atot = atomic_xchg(&phba->cgn_sync_alarm_cnt, 0);
|
||||
wtot = atomic_xchg(&phba->cgn_sync_warn_cnt, 0);
|
||||
|
||||
spin_lock_irqsave(&phba->hbalock, iflags);
|
||||
|
||||
/* ONLY Managed mode will send the CMF_SYNC_WQE to the HBA */
|
||||
if (phba->cmf_active_mode != LPFC_CFG_MANAGED ||
|
||||
phba->link_state == LPFC_LINK_DOWN)
|
||||
return 0;
|
||||
phba->link_state < LPFC_LINK_UP) {
|
||||
ret_val = 0;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&phba->hbalock, iflags);
|
||||
sync_buf = __lpfc_sli_get_iocbq(phba);
|
||||
if (!sync_buf) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_CGN_MGMT,
|
||||
@@ -8818,7 +8821,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
|
||||
rc = lpfc_sli4_queue_setup(phba);
|
||||
if (unlikely(rc)) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"0381 Error %d during queue setup.\n ", rc);
|
||||
"0381 Error %d during queue setup.\n", rc);
|
||||
goto out_stop_timers;
|
||||
}
|
||||
/* Initialize the driver internal SLI layer lists. */
|
||||
@@ -11090,9 +11093,17 @@ __lpfc_sli_prep_xmit_seq64_s4(struct lpfc_iocbq *cmdiocbq,
|
||||
/* Word 9 */
|
||||
bf_set(wqe_rcvoxid, &wqe->xmit_sequence.wqe_com, ox_id);
|
||||
|
||||
/* Word 12 */
|
||||
if (cmdiocbq->cmd_flag & (LPFC_IO_LIBDFC | LPFC_IO_LOOPBACK))
|
||||
if (cmdiocbq->cmd_flag & (LPFC_IO_LIBDFC | LPFC_IO_LOOPBACK)) {
|
||||
/* Word 10 */
|
||||
if (cmdiocbq->cmd_flag & LPFC_IO_VMID) {
|
||||
bf_set(wqe_appid, &wqe->xmit_sequence.wqe_com, 1);
|
||||
bf_set(wqe_wqes, &wqe->xmit_sequence.wqe_com, 1);
|
||||
wqe->words[31] = LOOPBACK_SRC_APPID;
|
||||
}
|
||||
|
||||
/* Word 12 */
|
||||
wqe->xmit_sequence.xmit_len = full_size;
|
||||
}
|
||||
else
|
||||
wqe->xmit_sequence.xmit_len =
|
||||
wqe->xmit_sequence.bde.tus.f.bdeSize;
|
||||
@@ -18431,6 +18442,7 @@ lpfc_fc_frame_check(struct lpfc_hba *phba, struct fc_frame_header *fc_hdr)
|
||||
{
|
||||
/* make rctl_names static to save stack space */
|
||||
struct fc_vft_header *fc_vft_hdr;
|
||||
struct fc_app_header *fc_app_hdr;
|
||||
uint32_t *header = (uint32_t *) fc_hdr;
|
||||
|
||||
#define FC_RCTL_MDS_DIAGS 0xF4
|
||||
@@ -18486,6 +18498,32 @@ lpfc_fc_frame_check(struct lpfc_hba *phba, struct fc_frame_header *fc_hdr)
|
||||
goto drop;
|
||||
}
|
||||
|
||||
if (unlikely(phba->link_flag == LS_LOOPBACK_MODE &&
|
||||
phba->cfg_vmid_app_header)) {
|
||||
/* Application header is 16B device header */
|
||||
if (fc_hdr->fh_df_ctl & LPFC_FC_16B_DEVICE_HEADER) {
|
||||
fc_app_hdr = (struct fc_app_header *) (fc_hdr + 1);
|
||||
if (be32_to_cpu(fc_app_hdr->src_app_id) !=
|
||||
LOOPBACK_SRC_APPID) {
|
||||
lpfc_printf_log(phba, KERN_WARNING,
|
||||
LOG_ELS | LOG_LIBDFC,
|
||||
"1932 Loopback src app id "
|
||||
"not matched, app_id:x%x\n",
|
||||
be32_to_cpu(fc_app_hdr->src_app_id));
|
||||
|
||||
goto drop;
|
||||
}
|
||||
} else {
|
||||
lpfc_printf_log(phba, KERN_WARNING,
|
||||
LOG_ELS | LOG_LIBDFC,
|
||||
"1933 Loopback df_ctl bit not set, "
|
||||
"df_ctl:x%x\n",
|
||||
fc_hdr->fh_df_ctl);
|
||||
|
||||
goto drop;
|
||||
}
|
||||
}
|
||||
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_ELS,
|
||||
"2538 Received frame rctl:x%x, type:x%x, "
|
||||
"frame Data:%08x %08x %08x %08x %08x %08x %08x\n",
|
||||
@@ -21149,7 +21187,7 @@ lpfc_drain_txq(struct lpfc_hba *phba)
|
||||
if (!piocbq) {
|
||||
spin_unlock_irqrestore(&pring->ring_lock, iflags);
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
|
||||
"2823 txq empty and txq_cnt is %d\n ",
|
||||
"2823 txq empty and txq_cnt is %d\n",
|
||||
txq_cnt);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
* included with this package. *
|
||||
*******************************************************************/
|
||||
|
||||
#define LPFC_DRIVER_VERSION "14.4.0.4"
|
||||
#define LPFC_DRIVER_VERSION "14.4.0.5"
|
||||
#define LPFC_DRIVER_NAME "lpfc"
|
||||
|
||||
/* Used for SLI 2/3 */
|
||||
|
||||
@@ -626,6 +626,7 @@ lpfc_vport_delete(struct fc_vport *fc_vport)
|
||||
struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
|
||||
struct lpfc_hba *phba = vport->phba;
|
||||
int rc;
|
||||
DECLARE_WAIT_QUEUE_HEAD_ONSTACK(waitq);
|
||||
|
||||
if (vport->port_type == LPFC_PHYSICAL_PORT) {
|
||||
lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
|
||||
@@ -679,21 +680,49 @@ lpfc_vport_delete(struct fc_vport *fc_vport)
|
||||
if (!ndlp)
|
||||
goto skip_logo;
|
||||
|
||||
/* Send the DA_ID and Fabric LOGO to cleanup the NPIV fabric entries. */
|
||||
if (ndlp && ndlp->nlp_state == NLP_STE_UNMAPPED_NODE &&
|
||||
phba->link_state >= LPFC_LINK_UP &&
|
||||
phba->fc_topology != LPFC_TOPOLOGY_LOOP) {
|
||||
if (vport->cfg_enable_da_id) {
|
||||
/* Send DA_ID and wait for a completion. */
|
||||
/* Send DA_ID and wait for a completion. This is best
|
||||
* effort. If the DA_ID fails, likely the fabric will
|
||||
* "leak" NportIDs but at least the driver issued the
|
||||
* command.
|
||||
*/
|
||||
ndlp = lpfc_findnode_did(vport, NameServer_DID);
|
||||
if (!ndlp)
|
||||
goto issue_logo;
|
||||
|
||||
spin_lock_irq(&ndlp->lock);
|
||||
ndlp->da_id_waitq = &waitq;
|
||||
ndlp->save_flags |= NLP_WAIT_FOR_DA_ID;
|
||||
spin_unlock_irq(&ndlp->lock);
|
||||
|
||||
rc = lpfc_ns_cmd(vport, SLI_CTNS_DA_ID, 0, 0);
|
||||
if (rc) {
|
||||
lpfc_printf_log(vport->phba, KERN_WARNING,
|
||||
LOG_VPORT,
|
||||
"1829 CT command failed to "
|
||||
"delete objects on fabric, "
|
||||
"rc %d\n", rc);
|
||||
if (!rc) {
|
||||
wait_event_timeout(waitq,
|
||||
!(ndlp->save_flags & NLP_WAIT_FOR_DA_ID),
|
||||
msecs_to_jiffies(phba->fc_ratov * 2000));
|
||||
}
|
||||
|
||||
lpfc_printf_vlog(vport, KERN_INFO, LOG_VPORT | LOG_ELS,
|
||||
"1829 DA_ID issue status %d. "
|
||||
"SFlag x%x NState x%x, NFlag x%x "
|
||||
"Rpi x%x\n",
|
||||
rc, ndlp->save_flags, ndlp->nlp_state,
|
||||
ndlp->nlp_flag, ndlp->nlp_rpi);
|
||||
|
||||
/* Remove the waitq and save_flags. It no
|
||||
* longer matters if the wake happened.
|
||||
*/
|
||||
spin_lock_irq(&ndlp->lock);
|
||||
ndlp->da_id_waitq = NULL;
|
||||
ndlp->save_flags &= ~NLP_WAIT_FOR_DA_ID;
|
||||
spin_unlock_irq(&ndlp->lock);
|
||||
}
|
||||
|
||||
issue_logo:
|
||||
/*
|
||||
* If the vpi is not registered, then a valid FDISC doesn't
|
||||
* exist and there is no need for a ELS LOGO. Just cleanup
|
||||
|
||||
@@ -6380,7 +6380,7 @@ static int megasas_init_fw(struct megasas_instance *instance)
|
||||
GFP_KERNEL);
|
||||
if (!fusion->stream_detect_by_ld[i]) {
|
||||
dev_err(&instance->pdev->dev,
|
||||
"unable to allocate stream detect by LD\n ");
|
||||
"unable to allocate stream detect by LD\n");
|
||||
for (j = 0; j < i; ++j)
|
||||
kfree(fusion->stream_detect_by_ld[j]);
|
||||
kfree(fusion->stream_detect_by_ld);
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
#define MPI3_SECURITY_PGAD_SLOT_GROUP_MASK (0x0000ff00)
|
||||
#define MPI3_SECURITY_PGAD_SLOT_GROUP_SHIFT (8)
|
||||
#define MPI3_SECURITY_PGAD_SLOT_MASK (0x000000ff)
|
||||
#define MPI3_INSTANCE_PGAD_INSTANCE_MASK (0x0000ffff)
|
||||
struct mpi3_config_request {
|
||||
__le16 host_tag;
|
||||
u8 ioc_use_only02;
|
||||
@@ -75,7 +76,8 @@ struct mpi3_config_request {
|
||||
u8 ioc_use_only06;
|
||||
u8 msg_flags;
|
||||
__le16 change_count;
|
||||
__le16 reserved0a;
|
||||
u8 proxy_ioc_number;
|
||||
u8 reserved0b;
|
||||
u8 page_version;
|
||||
u8 page_number;
|
||||
u8 page_type;
|
||||
@@ -206,6 +208,9 @@ struct mpi3_config_page_header {
|
||||
#define MPI3_MFGPAGE_DEVID_SAS5116_MPI_MGMT (0x00b5)
|
||||
#define MPI3_MFGPAGE_DEVID_SAS5116_NVME_MGMT (0x00b6)
|
||||
#define MPI3_MFGPAGE_DEVID_SAS5116_PCIE_SWITCH (0x00b8)
|
||||
#define MPI3_MFGPAGE_DEVID_SAS5248_MPI (0x00f0)
|
||||
#define MPI3_MFGPAGE_DEVID_SAS5248_MPI_NS (0x00f1)
|
||||
#define MPI3_MFGPAGE_DEVID_SAS5248_PCIE_SWITCH (0x00f2)
|
||||
struct mpi3_man_page0 {
|
||||
struct mpi3_config_page_header header;
|
||||
u8 chip_revision[8];
|
||||
@@ -1074,6 +1079,8 @@ struct mpi3_io_unit_page8 {
|
||||
#define MPI3_IOUNIT8_SBSTATE_SVN_UPDATE_PENDING (0x04)
|
||||
#define MPI3_IOUNIT8_SBSTATE_KEY_UPDATE_PENDING (0x02)
|
||||
#define MPI3_IOUNIT8_SBSTATE_SECURE_BOOT_ENABLED (0x01)
|
||||
#define MPI3_IOUNIT8_SBMODE_CURRENT_KEY_IOUNIT17 (0x10)
|
||||
#define MPI3_IOUNIT8_SBMODE_HARD_SECURE_RECERTIFIED (0x08)
|
||||
struct mpi3_io_unit_page9 {
|
||||
struct mpi3_config_page_header header;
|
||||
__le32 flags;
|
||||
@@ -1089,6 +1096,8 @@ struct mpi3_io_unit_page9 {
|
||||
#define MPI3_IOUNIT9_FLAGS_UBM_ENCLOSURE_ORDER_BACKPLANE_TYPE (0x00000004)
|
||||
#define MPI3_IOUNIT9_FLAGS_VDFIRST_ENABLED (0x00000001)
|
||||
#define MPI3_IOUNIT9_FIRSTDEVICE_UNKNOWN (0xffff)
|
||||
#define MPI3_IOUNIT9_FIRSTDEVICE_IN_DRIVER_PAGE_0 (0xfffe)
|
||||
|
||||
struct mpi3_io_unit_page10 {
|
||||
struct mpi3_config_page_header header;
|
||||
u8 flags;
|
||||
@@ -1224,6 +1233,19 @@ struct mpi3_io_unit_page15 {
|
||||
#define MPI3_IOUNIT15_FLAGS_EPRSUPPORT_WITHOUT_POWER_BRAKE_GPIO (0x01)
|
||||
#define MPI3_IOUNIT15_FLAGS_EPRSUPPORT_WITH_POWER_BRAKE_GPIO (0x02)
|
||||
#define MPI3_IOUNIT15_NUMPOWERBUDGETDATA_POWER_BUDGETING_DISABLED (0x00)
|
||||
|
||||
struct mpi3_io_unit_page17 {
|
||||
struct mpi3_config_page_header header;
|
||||
u8 num_instances;
|
||||
u8 instance;
|
||||
__le16 reserved0a;
|
||||
__le32 reserved0c[4];
|
||||
__le16 key_length;
|
||||
u8 encryption_algorithm;
|
||||
u8 reserved1f;
|
||||
__le32 current_key[];
|
||||
};
|
||||
#define MPI3_IOUNIT17_PAGEVERSION (0x00)
|
||||
struct mpi3_ioc_page0 {
|
||||
struct mpi3_config_page_header header;
|
||||
__le32 reserved08;
|
||||
@@ -1311,7 +1333,7 @@ struct mpi3_driver_page0 {
|
||||
u8 tur_interval;
|
||||
u8 reserved10;
|
||||
u8 security_key_timeout;
|
||||
__le16 reserved12;
|
||||
__le16 first_device;
|
||||
__le32 reserved14;
|
||||
__le32 reserved18;
|
||||
};
|
||||
@@ -1324,10 +1346,13 @@ struct mpi3_driver_page0 {
|
||||
#define MPI3_DRIVER0_BSDOPTS_REGISTRATION_IOC_AND_DEVS (0x00000000)
|
||||
#define MPI3_DRIVER0_BSDOPTS_REGISTRATION_IOC_ONLY (0x00000001)
|
||||
#define MPI3_DRIVER0_BSDOPTS_REGISTRATION_IOC_AND_INTERNAL_DEVS (0x00000002)
|
||||
#define MPI3_DRIVER0_FIRSTDEVICE_IGNORE1 (0x0000)
|
||||
#define MPI3_DRIVER0_FIRSTDEVICE_IGNORE2 (0xffff)
|
||||
struct mpi3_driver_page1 {
|
||||
struct mpi3_config_page_header header;
|
||||
__le32 flags;
|
||||
__le32 reserved0c;
|
||||
u8 time_stamp_update;
|
||||
u8 reserved0d[3];
|
||||
__le16 host_diag_trace_max_size;
|
||||
__le16 host_diag_trace_min_size;
|
||||
__le16 host_diag_trace_decrement_size;
|
||||
@@ -2347,6 +2372,10 @@ struct mpi3_device0_vd_format {
|
||||
#define MPI3_DEVICE0_VD_DEVICE_INFO_SAS (0x0001)
|
||||
#define MPI3_DEVICE0_VD_FLAGS_IO_THROTTLE_GROUP_QD_MASK (0xf000)
|
||||
#define MPI3_DEVICE0_VD_FLAGS_IO_THROTTLE_GROUP_QD_SHIFT (12)
|
||||
#define MPI3_DEVICE0_VD_FLAGS_OSEXPOSURE_MASK (0x0003)
|
||||
#define MPI3_DEVICE0_VD_FLAGS_OSEXPOSURE_HDD (0x0000)
|
||||
#define MPI3_DEVICE0_VD_FLAGS_OSEXPOSURE_SSD (0x0001)
|
||||
#define MPI3_DEVICE0_VD_FLAGS_OSEXPOSURE_NO_GUIDANCE (0x0002)
|
||||
union mpi3_device0_dev_spec_format {
|
||||
struct mpi3_device0_sas_sata_format sas_sata_format;
|
||||
struct mpi3_device0_pcie_format pcie_format;
|
||||
|
||||
@@ -205,13 +205,14 @@ struct mpi3_encrypted_hash_entry {
|
||||
u8 hash_image_type;
|
||||
u8 hash_algorithm;
|
||||
u8 encryption_algorithm;
|
||||
u8 reserved03;
|
||||
u8 flags;
|
||||
__le16 public_key_size;
|
||||
__le16 signature_size;
|
||||
__le32 public_key[MPI3_PUBLIC_KEY_MAX];
|
||||
};
|
||||
|
||||
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_SIGNATURE (0x03)
|
||||
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH (0x03)
|
||||
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH_1_OF_2 (0x04)
|
||||
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH_2_OF_2 (0x05)
|
||||
#define MPI3_HASH_ALGORITHM_VERSION_MASK (0xe0)
|
||||
#define MPI3_HASH_ALGORITHM_VERSION_NONE (0x00)
|
||||
#define MPI3_HASH_ALGORITHM_VERSION_SHA1 (0x20)
|
||||
@@ -230,6 +231,12 @@ struct mpi3_encrypted_hash_entry {
|
||||
#define MPI3_ENCRYPTION_ALGORITHM_RSA4096 (0x05)
|
||||
#define MPI3_ENCRYPTION_ALGORITHM_RSA3072 (0x06)
|
||||
|
||||
/* hierarchical signature system (hss) */
|
||||
#define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_87 (0x0b)
|
||||
#define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_65 (0x0c)
|
||||
#define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_44 (0x0d)
|
||||
#define MPI3_ENCRYPTED_HASH_ENTRY_FLAGS_PAIRED_KEY_MASK (0x0f)
|
||||
|
||||
#ifndef MPI3_ENCRYPTED_HASH_ENTRY_MAX
|
||||
#define MPI3_ENCRYPTED_HASH_ENTRY_MAX (1)
|
||||
#endif
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user