Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 55200
b: refs/heads/master
c: 7054a60
h: refs/heads/master
v: v3
  • Loading branch information
James Smart authored and James Bottomley committed May 6, 2007
1 parent 1c12c45 commit df3cdb3
Show file tree
Hide file tree
Showing 10 changed files with 169 additions and 80 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: de0c5b32b50ef2673f4cd434b9c2732237d715dd
refs/heads/master: 7054a606e6724674a5acd103ed74eacb02c73393
4 changes: 0 additions & 4 deletions trunk/drivers/scsi/lpfc/lpfc.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,6 @@ struct lpfc_sli2_slim;
requests */
#define LPFC_MAX_NS_RETRY 3 /* Number of retry attempts to contact
the NameServer before giving up. */
#define LPFC_DFT_HBA_Q_DEPTH 2048 /* max cmds per hba */
#define LPFC_LC_HBA_Q_DEPTH 1024 /* max cmds per low cost hba */
#define LPFC_LP101_HBA_Q_DEPTH 128 /* max cmds per low cost hba */

#define LPFC_CMD_PER_LUN 3 /* max outstanding cmds per lun */
#define LPFC_SG_SEG_CNT 64 /* sg element count per scsi cmnd */
#define LPFC_IOCB_LIST_CNT 2250 /* list of IOCBs for fast-path usage. */
Expand Down
35 changes: 16 additions & 19 deletions trunk/drivers/scsi/lpfc/lpfc_attr.c
Original file line number Diff line number Diff line change
Expand Up @@ -828,6 +828,18 @@ lpfc_nodev_tmo_init(struct lpfc_hba *phba, int val)
return -EINVAL;
}

static void
lpfc_update_rport_devloss_tmo(struct lpfc_hba *phba)
{
struct lpfc_nodelist *ndlp;

spin_lock_irq(phba->host->host_lock);
list_for_each_entry(ndlp, &phba->fc_nodes, nlp_listp)
if (ndlp->rport)
ndlp->rport->dev_loss_tmo = phba->cfg_devloss_tmo;
spin_unlock_irq(phba->host->host_lock);
}

static int
lpfc_nodev_tmo_set(struct lpfc_hba *phba, int val)
{
Expand All @@ -843,6 +855,7 @@ lpfc_nodev_tmo_set(struct lpfc_hba *phba, int val)
if (val >= LPFC_MIN_DEVLOSS_TMO && val <= LPFC_MAX_DEVLOSS_TMO) {
phba->cfg_nodev_tmo = val;
phba->cfg_devloss_tmo = val;
lpfc_update_rport_devloss_tmo(phba);
return 0;
}

Expand Down Expand Up @@ -878,6 +891,7 @@ lpfc_devloss_tmo_set(struct lpfc_hba *phba, int val)
phba->cfg_nodev_tmo = val;
phba->cfg_devloss_tmo = val;
phba->dev_loss_tmo_changed = 1;
lpfc_update_rport_devloss_tmo(phba);
return 0;
}

Expand Down Expand Up @@ -997,7 +1011,7 @@ LPFC_ATTR_R(ack0, 0, 0, 1, "Enable ACK0 support");
/*
# lpfc_cr_delay & lpfc_cr_count: Default values for I/O colaesing
# cr_delay (msec) or cr_count outstanding commands. cr_delay can take
# value [0,63]. cr_count can take value [0,255]. Default value of cr_delay
# value [0,63]. cr_count can take value [1,255]. Default value of cr_delay
# is 0. Default value of cr_count is 1. The cr_count feature is disabled if
# cr_delay is set to 0.
*/
Expand Down Expand Up @@ -1955,25 +1969,8 @@ lpfc_get_cfgparam(struct lpfc_hba *phba)
sizeof(struct fcp_rsp) +
(phba->cfg_sg_seg_cnt * sizeof(struct ulp_bde64));

switch (phba->pcidev->device) {
case PCI_DEVICE_ID_LP101:
case PCI_DEVICE_ID_BSMB:
case PCI_DEVICE_ID_ZSMB:
phba->cfg_hba_queue_depth = LPFC_LP101_HBA_Q_DEPTH;
break;
case PCI_DEVICE_ID_RFLY:
case PCI_DEVICE_ID_PFLY:
case PCI_DEVICE_ID_BMID:
case PCI_DEVICE_ID_ZMID:
case PCI_DEVICE_ID_TFLY:
phba->cfg_hba_queue_depth = LPFC_LC_HBA_Q_DEPTH;
break;
default:
phba->cfg_hba_queue_depth = LPFC_DFT_HBA_Q_DEPTH;
}

if (phba->cfg_hba_queue_depth > lpfc_hba_queue_depth)
lpfc_hba_queue_depth_init(phba, lpfc_hba_queue_depth);
lpfc_hba_queue_depth_init(phba, lpfc_hba_queue_depth);

return;
}
6 changes: 3 additions & 3 deletions trunk/drivers/scsi/lpfc/lpfc_ct.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,22 +334,22 @@ lpfc_ns_rsp(struct lpfc_hba * phba, struct lpfc_dmabuf * mp, uint32_t Size)

lpfc_set_disctmo(phba);

Cnt = Size > FCELSSIZE ? FCELSSIZE : Size;

list_add_tail(&head, &mp->list);
list_for_each_entry_safe(mp, next_mp, &head, list) {
mlast = mp;

Cnt = Size > FCELSSIZE ? FCELSSIZE : Size;

Size -= Cnt;

if (!ctptr) {
Cnt = FCELSSIZE;
ctptr = (uint32_t *) mlast->virt;
} else
Cnt -= 16; /* subtract length of CT header */

/* Loop through entire NameServer list of DIDs */
while (Cnt) {
while (Cnt >= sizeof (uint32_t)) {

/* Get next DID from NameServer List */
CTentry = *ctptr++;
Expand Down
12 changes: 8 additions & 4 deletions trunk/drivers/scsi/lpfc/lpfc_els.c
Original file line number Diff line number Diff line change
Expand Up @@ -3214,7 +3214,7 @@ lpfc_els_timeout_handler(struct lpfc_hba *phba)
IOCB_t *cmd = NULL;
struct lpfc_dmabuf *pcmd;
uint32_t *elscmd;
uint32_t els_command;
uint32_t els_command=0;
uint32_t timeout;
uint32_t remote_ID;

Expand All @@ -3233,12 +3233,16 @@ lpfc_els_timeout_handler(struct lpfc_hba *phba)
list_for_each_entry_safe(piocb, tmp_iocb, &pring->txcmplq, list) {
cmd = &piocb->iocb;

if (piocb->iocb_flag & LPFC_IO_LIBDFC) {
if ((piocb->iocb_flag & LPFC_IO_LIBDFC) ||
(piocb->iocb.ulpCommand == CMD_ABORT_XRI_CN) ||
(piocb->iocb.ulpCommand == CMD_CLOSE_XRI_CN)) {
continue;
}
pcmd = (struct lpfc_dmabuf *) piocb->context2;
elscmd = (uint32_t *) (pcmd->virt);
els_command = *elscmd;
if (pcmd) {
elscmd = (uint32_t *) (pcmd->virt);
els_command = *elscmd;
}

if ((els_command == ELS_CMD_FARP)
|| (els_command == ELS_CMD_FARPR)) {
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/scsi/lpfc/lpfc_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1375,8 +1375,6 @@ lpfc_offline(struct lpfc_hba * phba)

/* stop all timers associated with this hba */
lpfc_stop_timer(phba);
phba->work_hba_events = 0;
phba->work_ha = 0;

lpfc_printf_log(phba,
KERN_WARNING,
Expand All @@ -1389,6 +1387,8 @@ lpfc_offline(struct lpfc_hba * phba)
lpfc_sli_hba_down(phba);
lpfc_cleanup(phba);
spin_lock_irqsave(phba->host->host_lock, iflag);
phba->work_hba_events = 0;
phba->work_ha = 0;
phba->fc_flag |= FC_OFFLINE_MODE;
spin_unlock_irqrestore(phba->host->host_lock, iflag);
}
Expand Down
27 changes: 27 additions & 0 deletions trunk/drivers/scsi/lpfc/lpfc_nportdisc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1019,9 +1019,36 @@ lpfc_rcv_logo_reglogin_issue(struct lpfc_hba * phba,
uint32_t evt)
{
struct lpfc_iocbq *cmdiocb;
LPFC_MBOXQ_t *mb;
LPFC_MBOXQ_t *nextmb;
struct lpfc_dmabuf *mp;

cmdiocb = (struct lpfc_iocbq *) arg;

/* cleanup any ndlp on mbox q waiting for reglogin cmpl */
if ((mb = phba->sli.mbox_active)) {
if ((mb->mb.mbxCommand == MBX_REG_LOGIN64) &&
(ndlp == (struct lpfc_nodelist *) mb->context2)) {
mb->context2 = NULL;
mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
}
}

spin_lock_irq(phba->host->host_lock);
list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) {
if ((mb->mb.mbxCommand == MBX_REG_LOGIN64) &&
(ndlp == (struct lpfc_nodelist *) mb->context2)) {
mp = (struct lpfc_dmabuf *) (mb->context1);
if (mp) {
lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp);
}
list_del(&mb->list);
mempool_free(mb, phba->mbox_mem_pool);
}
}
spin_unlock_irq(phba->host->host_lock);

lpfc_rcv_logo(phba, ndlp, cmdiocb, ELS_CMD_LOGO);
return ndlp->nlp_state;
}
Expand Down
Loading

0 comments on commit df3cdb3

Please sign in to comment.