diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-31 16:31:23 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-31 16:31:23 -0400 |
commit | a75ee6ecd411a50bf4da927c2fdb2cb56246a2bd (patch) | |
tree | fcb06e1940152b115901fda68e7eea1cc1196ff3 /drivers/scsi/lpfc/lpfc_init.c | |
parent | c9651e70ad0aa499814817cbf3cc1d0b806ed3a1 (diff) | |
parent | 699316948628dab9e813c415640fe5b9f65cd5e3 (diff) |
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
Pull SCSI updates from James Bottomley:
"This is primarily another round of driver updates (lpfc, bfa, fcoe,
ipr) plus a new ufshcd driver. There shouldn't be anything
controversial in here (The final deletion of scsi proc_ops which
caused some build breakage has been held over until the next merge
window to give us more time to stabilise it).
I'm afraid, with me moving continents at exactly the wrong time,
anything submitted after the merge window opened has been held over to
the next merge window."
* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (63 commits)
[SCSI] ipr: Driver version 2.5.3
[SCSI] ipr: Increase alignment boundary of command blocks
[SCSI] ipr: Increase max concurrent oustanding commands
[SCSI] ipr: Remove unnecessary memory barriers
[SCSI] ipr: Remove unnecessary interrupt clearing on new adapters
[SCSI] ipr: Fix target id allocation re-use problem
[SCSI] atp870u, mpt2sas, qla4xxx use pci_dev->revision
[SCSI] fcoe: Drop the rtnl_mutex before calling fcoe_ctlr_link_up
[SCSI] bfa: Update the driver version to 3.0.23.0
[SCSI] bfa: BSG and User interface fixes.
[SCSI] bfa: Fix to avoid vport delete hang on request queue full scenario.
[SCSI] bfa: Move service parameter programming logic into firmware.
[SCSI] bfa: Revised Fabric Assigned Address(FAA) feature implementation.
[SCSI] bfa: Flash controller IOC pll init fixes.
[SCSI] bfa: Serialize the IOC hw semaphore unlock logic.
[SCSI] bfa: Modify ISR to process pending completions
[SCSI] bfa: Add fc host issue lip support
[SCSI] mpt2sas: remove extraneous sas_log_info messages
[SCSI] libfc: fcoe_transport_create fails in single-CPU environment
[SCSI] fcoe: reduce contention for fcoe_rx_list lock [v2]
...
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_init.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index b38f99f3be32..9598fdcb08ab 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************* | 1 | /******************************************************************* |
2 | * This file is part of the Emulex Linux Device Driver for * | 2 | * This file is part of the Emulex Linux Device Driver for * |
3 | * Fibre Channel Host Bus Adapters. * | 3 | * Fibre Channel Host Bus Adapters. * |
4 | * Copyright (C) 2004-2011 Emulex. All rights reserved. * | 4 | * Copyright (C) 2004-2012 Emulex. All rights reserved. * |
5 | * EMULEX and SLI are trademarks of Emulex. * | 5 | * EMULEX and SLI are trademarks of Emulex. * |
6 | * www.emulex.com * | 6 | * www.emulex.com * |
7 | * Portions Copyright (C) 2004-2005 Christoph Hellwig * | 7 | * Portions Copyright (C) 2004-2005 Christoph Hellwig * |
@@ -2704,16 +2704,14 @@ lpfc_offline_prep(struct lpfc_hba * phba) | |||
2704 | } | 2704 | } |
2705 | spin_lock_irq(shost->host_lock); | 2705 | spin_lock_irq(shost->host_lock); |
2706 | ndlp->nlp_flag &= ~NLP_NPR_ADISC; | 2706 | ndlp->nlp_flag &= ~NLP_NPR_ADISC; |
2707 | 2707 | spin_unlock_irq(shost->host_lock); | |
2708 | /* | 2708 | /* |
2709 | * Whenever an SLI4 port goes offline, free the | 2709 | * Whenever an SLI4 port goes offline, free the |
2710 | * RPI. A new RPI when the adapter port comes | 2710 | * RPI. Get a new RPI when the adapter port |
2711 | * back online. | 2711 | * comes back online. |
2712 | */ | 2712 | */ |
2713 | if (phba->sli_rev == LPFC_SLI_REV4) | 2713 | if (phba->sli_rev == LPFC_SLI_REV4) |
2714 | lpfc_sli4_free_rpi(phba, ndlp->nlp_rpi); | 2714 | lpfc_sli4_free_rpi(phba, ndlp->nlp_rpi); |
2715 | |||
2716 | spin_unlock_irq(shost->host_lock); | ||
2717 | lpfc_unreg_rpi(vports[i], ndlp); | 2715 | lpfc_unreg_rpi(vports[i], ndlp); |
2718 | } | 2716 | } |
2719 | } | 2717 | } |
@@ -2786,9 +2784,13 @@ lpfc_scsi_buf_update(struct lpfc_hba *phba) | |||
2786 | 2784 | ||
2787 | spin_lock_irq(&phba->hbalock); | 2785 | spin_lock_irq(&phba->hbalock); |
2788 | spin_lock(&phba->scsi_buf_list_lock); | 2786 | spin_lock(&phba->scsi_buf_list_lock); |
2789 | list_for_each_entry_safe(sb, sb_next, &phba->lpfc_scsi_buf_list, list) | 2787 | list_for_each_entry_safe(sb, sb_next, &phba->lpfc_scsi_buf_list, list) { |
2790 | sb->cur_iocbq.sli4_xritag = | 2788 | sb->cur_iocbq.sli4_xritag = |
2791 | phba->sli4_hba.xri_ids[sb->cur_iocbq.sli4_lxritag]; | 2789 | phba->sli4_hba.xri_ids[sb->cur_iocbq.sli4_lxritag]; |
2790 | set_bit(sb->cur_iocbq.sli4_lxritag, phba->sli4_hba.xri_bmask); | ||
2791 | phba->sli4_hba.max_cfg_param.xri_used++; | ||
2792 | phba->sli4_hba.xri_count++; | ||
2793 | } | ||
2792 | spin_unlock(&phba->scsi_buf_list_lock); | 2794 | spin_unlock(&phba->scsi_buf_list_lock); |
2793 | spin_unlock_irq(&phba->hbalock); | 2795 | spin_unlock_irq(&phba->hbalock); |
2794 | return 0; | 2796 | return 0; |
@@ -3723,6 +3725,7 @@ lpfc_sli4_async_fip_evt(struct lpfc_hba *phba, | |||
3723 | break; | 3725 | break; |
3724 | 3726 | ||
3725 | case LPFC_FIP_EVENT_TYPE_FCF_DEAD: | 3727 | case LPFC_FIP_EVENT_TYPE_FCF_DEAD: |
3728 | phba->fcoe_cvl_eventtag = acqe_fip->event_tag; | ||
3726 | lpfc_printf_log(phba, KERN_ERR, LOG_FIP | LOG_DISCOVERY, | 3729 | lpfc_printf_log(phba, KERN_ERR, LOG_FIP | LOG_DISCOVERY, |
3727 | "2549 FCF (x%x) disconnected from network, " | 3730 | "2549 FCF (x%x) disconnected from network, " |
3728 | "tag:x%x\n", acqe_fip->index, acqe_fip->event_tag); | 3731 | "tag:x%x\n", acqe_fip->index, acqe_fip->event_tag); |
@@ -3784,6 +3787,7 @@ lpfc_sli4_async_fip_evt(struct lpfc_hba *phba, | |||
3784 | } | 3787 | } |
3785 | break; | 3788 | break; |
3786 | case LPFC_FIP_EVENT_TYPE_CVL: | 3789 | case LPFC_FIP_EVENT_TYPE_CVL: |
3790 | phba->fcoe_cvl_eventtag = acqe_fip->event_tag; | ||
3787 | lpfc_printf_log(phba, KERN_ERR, LOG_FIP | LOG_DISCOVERY, | 3791 | lpfc_printf_log(phba, KERN_ERR, LOG_FIP | LOG_DISCOVERY, |
3788 | "2718 Clear Virtual Link Received for VPI 0x%x" | 3792 | "2718 Clear Virtual Link Received for VPI 0x%x" |
3789 | " tag 0x%x\n", acqe_fip->index, acqe_fip->event_tag); | 3793 | " tag 0x%x\n", acqe_fip->index, acqe_fip->event_tag); |
@@ -5226,8 +5230,7 @@ lpfc_sli4_create_rpi_hdr(struct lpfc_hba *phba) | |||
5226 | * rpi is normalized to a zero base because the physical rpi is | 5230 | * rpi is normalized to a zero base because the physical rpi is |
5227 | * port based. | 5231 | * port based. |
5228 | */ | 5232 | */ |
5229 | curr_rpi_range = phba->sli4_hba.next_rpi - | 5233 | curr_rpi_range = phba->sli4_hba.next_rpi; |
5230 | phba->sli4_hba.max_cfg_param.rpi_base; | ||
5231 | spin_unlock_irq(&phba->hbalock); | 5234 | spin_unlock_irq(&phba->hbalock); |
5232 | 5235 | ||
5233 | /* | 5236 | /* |
@@ -5818,10 +5821,9 @@ lpfc_sli4_post_status_check(struct lpfc_hba *phba) | |||
5818 | readl(phba->sli4_hba.u.if_type2. | 5821 | readl(phba->sli4_hba.u.if_type2. |
5819 | ERR2regaddr); | 5822 | ERR2regaddr); |
5820 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | 5823 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, |
5821 | "2888 Port Error Detected " | 5824 | "2888 Unrecoverable port error " |
5822 | "during POST: " | 5825 | "following POST: port status reg " |
5823 | "port status reg 0x%x, " | 5826 | "0x%x, port_smphr reg 0x%x, " |
5824 | "port_smphr reg 0x%x, " | ||
5825 | "error 1=0x%x, error 2=0x%x\n", | 5827 | "error 1=0x%x, error 2=0x%x\n", |
5826 | reg_data.word0, | 5828 | reg_data.word0, |
5827 | portsmphr_reg.word0, | 5829 | portsmphr_reg.word0, |
@@ -6142,7 +6144,6 @@ lpfc_sli4_read_config(struct lpfc_hba *phba) | |||
6142 | phba->sli4_hba.next_xri = phba->sli4_hba.max_cfg_param.xri_base; | 6144 | phba->sli4_hba.next_xri = phba->sli4_hba.max_cfg_param.xri_base; |
6143 | phba->vpi_base = phba->sli4_hba.max_cfg_param.vpi_base; | 6145 | phba->vpi_base = phba->sli4_hba.max_cfg_param.vpi_base; |
6144 | phba->vfi_base = phba->sli4_hba.max_cfg_param.vfi_base; | 6146 | phba->vfi_base = phba->sli4_hba.max_cfg_param.vfi_base; |
6145 | phba->sli4_hba.next_rpi = phba->sli4_hba.max_cfg_param.rpi_base; | ||
6146 | phba->max_vpi = (phba->sli4_hba.max_cfg_param.max_vpi > 0) ? | 6147 | phba->max_vpi = (phba->sli4_hba.max_cfg_param.max_vpi > 0) ? |
6147 | (phba->sli4_hba.max_cfg_param.max_vpi - 1) : 0; | 6148 | (phba->sli4_hba.max_cfg_param.max_vpi - 1) : 0; |
6148 | phba->max_vports = phba->max_vpi; | 6149 | phba->max_vports = phba->max_vpi; |
@@ -7231,6 +7232,7 @@ lpfc_pci_function_reset(struct lpfc_hba *phba) | |||
7231 | uint32_t rdy_chk, num_resets = 0, reset_again = 0; | 7232 | uint32_t rdy_chk, num_resets = 0, reset_again = 0; |
7232 | union lpfc_sli4_cfg_shdr *shdr; | 7233 | union lpfc_sli4_cfg_shdr *shdr; |
7233 | struct lpfc_register reg_data; | 7234 | struct lpfc_register reg_data; |
7235 | uint16_t devid; | ||
7234 | 7236 | ||
7235 | if_type = bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf); | 7237 | if_type = bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf); |
7236 | switch (if_type) { | 7238 | switch (if_type) { |
@@ -7277,7 +7279,9 @@ lpfc_pci_function_reset(struct lpfc_hba *phba) | |||
7277 | LPFC_SLIPORT_INIT_PORT); | 7279 | LPFC_SLIPORT_INIT_PORT); |
7278 | writel(reg_data.word0, phba->sli4_hba.u.if_type2. | 7280 | writel(reg_data.word0, phba->sli4_hba.u.if_type2. |
7279 | CTRLregaddr); | 7281 | CTRLregaddr); |
7280 | 7282 | /* flush */ | |
7283 | pci_read_config_word(phba->pcidev, | ||
7284 | PCI_DEVICE_ID, &devid); | ||
7281 | /* | 7285 | /* |
7282 | * Poll the Port Status Register and wait for RDY for | 7286 | * Poll the Port Status Register and wait for RDY for |
7283 | * up to 10 seconds. If the port doesn't respond, treat | 7287 | * up to 10 seconds. If the port doesn't respond, treat |
@@ -7315,11 +7319,10 @@ lpfc_pci_function_reset(struct lpfc_hba *phba) | |||
7315 | phba->work_status[1] = readl( | 7319 | phba->work_status[1] = readl( |
7316 | phba->sli4_hba.u.if_type2.ERR2regaddr); | 7320 | phba->sli4_hba.u.if_type2.ERR2regaddr); |
7317 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | 7321 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, |
7318 | "2890 Port Error Detected " | 7322 | "2890 Port error detected during port " |
7319 | "during Port Reset: " | 7323 | "reset(%d): port status reg 0x%x, " |
7320 | "port status reg 0x%x, " | ||
7321 | "error 1=0x%x, error 2=0x%x\n", | 7324 | "error 1=0x%x, error 2=0x%x\n", |
7322 | reg_data.word0, | 7325 | num_resets, reg_data.word0, |
7323 | phba->work_status[0], | 7326 | phba->work_status[0], |
7324 | phba->work_status[1]); | 7327 | phba->work_status[1]); |
7325 | rc = -ENODEV; | 7328 | rc = -ENODEV; |