Merge tag 'ntb-4.4' of git://github.com/jonmason/ntb
[cascardo/linux.git] / drivers / scsi / lpfc / lpfc_init.c
index f962118..db9446c 100644 (file)
@@ -699,7 +699,9 @@ lpfc_hba_init_link_fc_topology(struct lpfc_hba *phba, uint32_t fc_topology,
            ((phba->cfg_link_speed == LPFC_USER_LINK_SPEED_10G) &&
             !(phba->lmt & LMT_10Gb)) ||
            ((phba->cfg_link_speed == LPFC_USER_LINK_SPEED_16G) &&
-            !(phba->lmt & LMT_16Gb))) {
+            !(phba->lmt & LMT_16Gb)) ||
+           ((phba->cfg_link_speed == LPFC_USER_LINK_SPEED_32G) &&
+            !(phba->lmt & LMT_32Gb))) {
                /* Reset link speed to auto */
                lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT,
                        "1302 Invalid speed for this board:%d "
@@ -2035,7 +2037,9 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
                && descp && descp[0] != '\0')
                return;
 
-       if (phba->lmt & LMT_16Gb)
+       if (phba->lmt & LMT_32Gb)
+               max_speed = 32;
+       else if (phba->lmt & LMT_16Gb)
                max_speed = 16;
        else if (phba->lmt & LMT_10Gb)
                max_speed = 10;
@@ -2229,6 +2233,9 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
                m = (typeof(m)){"OCe15100", "PCIe",
                                "Obsolete, Unsupported FCoE"};
                break;
+       case PCI_DEVICE_ID_LANCER_G6_FC:
+               m = (typeof(m)){"LPe32000", "PCIe", "Fibre Channel Adapter"};
+               break;
        case PCI_DEVICE_ID_SKYHAWK:
        case PCI_DEVICE_ID_SKYHAWK_VF:
                oneConnect = 1;
@@ -2253,7 +2260,7 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
                                phba->Port);
                else if (max_speed == 0)
                        snprintf(descp, 255,
-                               "Emulex %s %s %s ",
+                               "Emulex %s %s %s",
                                m.name, m.bus, m.function);
                else
                        snprintf(descp, 255,
@@ -3491,6 +3498,8 @@ void lpfc_host_attrib_init(struct Scsi_Host *shost)
                                 sizeof fc_host_symbolic_name(shost));
 
        fc_host_supported_speeds(shost) = 0;
+       if (phba->lmt & LMT_32Gb)
+               fc_host_supported_speeds(shost) |= FC_PORTSPEED_32GBIT;
        if (phba->lmt & LMT_16Gb)
                fc_host_supported_speeds(shost) |= FC_PORTSPEED_16GBIT;
        if (phba->lmt & LMT_10Gb)
@@ -3854,6 +3863,9 @@ lpfc_sli4_port_speed_parse(struct lpfc_hba *phba, uint32_t evt_code,
                case LPFC_FC_LA_SPEED_16G:
                        port_speed = 16000;
                        break;
+               case LPFC_FC_LA_SPEED_32G:
+                       port_speed = 32000;
+                       break;
                default:
                        port_speed = 0;
                }
@@ -4982,8 +4994,7 @@ lpfc_sli_driver_resource_setup(struct lpfc_hba *phba)
        }
 
        if (!phba->sli.ring)
-               phba->sli.ring = (struct lpfc_sli_ring *)
-                       kzalloc(LPFC_SLI3_MAX_RING *
+               phba->sli.ring = kzalloc(LPFC_SLI3_MAX_RING *
                        sizeof(struct lpfc_sli_ring), GFP_KERNEL);
        if (!phba->sli.ring)
                return -ENOMEM;
@@ -4995,7 +5006,7 @@ lpfc_sli_driver_resource_setup(struct lpfc_hba *phba)
 
        /* Initialize the host templates the configured values. */
        lpfc_vport_template.sg_tablesize = phba->cfg_sg_seg_cnt;
-       lpfc_template.sg_tablesize = phba->cfg_sg_seg_cnt;
+       lpfc_template_s3.sg_tablesize = phba->cfg_sg_seg_cnt;
 
        /* There are going to be 2 reserved BDEs: 1 FCP cmnd + 1 FCP rsp */
        if (phba->cfg_enable_bg) {
@@ -8679,7 +8690,6 @@ lpfc_sli4_set_affinity(struct lpfc_hba *phba, int vectors)
 #ifdef CONFIG_X86
        struct cpuinfo_x86 *cpuinfo;
 #endif
-       struct cpumask *mask;
        uint8_t chann[LPFC_FCP_IO_CHAN_MAX+1];
 
        /* If there is no mapping, just return */
@@ -8773,11 +8783,8 @@ found:
                        first_cpu = cpu;
 
                /* Now affinitize to the selected CPU */
-               mask = &cpup->maskbits;
-               cpumask_clear(mask);
-               cpumask_set_cpu(cpu, mask);
                i = irq_set_affinity_hint(phba->sli4_hba.msix_entries[idx].
-                                         vector, mask);
+                                         vector, get_cpu_mask(cpu));
 
                lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
                                "3330 Set Affinity: CPU %d channel %d "
@@ -10287,7 +10294,7 @@ lpfc_pci_probe_one_s4(struct pci_dev *pdev, const struct pci_device_id *pid)
        struct lpfc_hba   *phba;
        struct lpfc_vport *vport = NULL;
        struct Scsi_Host  *shost = NULL;
-       int error, ret;
+       int error;
        uint32_t cfg_mode, intr_mode;
        int adjusted_fcp_io_channel;
 
@@ -10411,7 +10418,7 @@ lpfc_pci_probe_one_s4(struct pci_dev *pdev, const struct pci_device_id *pid)
 
        /* check for firmware upgrade or downgrade */
        if (phba->cfg_request_firmware_upgrade)
-               ret = lpfc_sli4_request_firmware_update(phba, INT_FW_UPGRADE);
+               lpfc_sli4_request_firmware_update(phba, INT_FW_UPGRADE);
 
        /* Check if there are static vports to be created. */
        lpfc_create_static_vport(phba);
@@ -11354,6 +11361,8 @@ static struct pci_device_id lpfc_id_table[] = {
                PCI_ANY_ID, PCI_ANY_ID, },
        {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FCOE_VF,
                PCI_ANY_ID, PCI_ANY_ID, },
+       {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_G6_FC,
+               PCI_ANY_ID, PCI_ANY_ID, },
        {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SKYHAWK,
                PCI_ANY_ID, PCI_ANY_ID, },
        {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SKYHAWK_VF,
@@ -11477,6 +11486,7 @@ lpfc_exit(void)
                free_pages((unsigned long)_dump_buf_dif, _dump_buf_dif_order);
        }
        kfree(lpfc_used_cpu);
+       idr_destroy(&lpfc_hba_index);
 }
 
 module_init(lpfc_init);