Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
"This is a set of six fixes. Two are instant crash/null deref types
(storvsc and isci). The two qla2xxx are initialisation problems that
cause MSI-X failures and card misdetection, the isci erroneous macro
is actually illegal C that's causing a miscompile with certain gcc
versions and the be2iscsi bad if expression is a static checker fix"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
[SCSI] storvsc: NULL pointer dereference fix
[SCSI] qla2xxx: Poll during initialization for ISP25xx and ISP83xx
[SCSI] isci: correct erroneous for_each_isci_host macro
[SCSI] isci: fix reset timeout handling
[SCSI] be2iscsi: fix bad if expression
[SCSI] qla2xxx: Fix multiqueue MSI-X registration.

+38 -30
+1 -1
drivers/scsi/be2iscsi/be_main.c
··· 325 325 if (!abrt_task->sc || abrt_task->state == ISCSI_TASK_FREE) 326 326 continue; 327 327 328 - if (abrt_task->sc->device->lun != abrt_task->sc->device->lun) 328 + if (sc->device->lun != abrt_task->sc->device->lun) 329 329 continue; 330 330 331 331 /* Invalidate WRB Posted for this Task */
+2 -3
drivers/scsi/isci/host.h
··· 311 311 } 312 312 313 313 #define for_each_isci_host(id, ihost, pdev) \ 314 - for (id = 0, ihost = to_pci_info(pdev)->hosts[id]; \ 315 - id < ARRAY_SIZE(to_pci_info(pdev)->hosts) && ihost; \ 316 - ihost = to_pci_info(pdev)->hosts[++id]) 314 + for (id = 0; id < SCI_MAX_CONTROLLERS && \ 315 + (ihost = to_pci_info(pdev)->hosts[id]); id++) 317 316 318 317 static inline void wait_for_start(struct isci_host *ihost) 319 318 {
-7
drivers/scsi/isci/port_config.c
··· 615 615 SCIC_SDS_APC_WAIT_LINK_UP_NOTIFICATION); 616 616 } else { 617 617 /* the phy is already the part of the port */ 618 - u32 port_state = iport->sm.current_state_id; 619 - 620 - /* if the PORT'S state is resetting then the link up is from 621 - * port hard reset in this case, we need to tell the port 622 - * that link up is recieved 623 - */ 624 - BUG_ON(port_state != SCI_PORT_RESETTING); 625 618 port_agent->phy_ready_mask |= 1 << phy_index; 626 619 sci_port_link_up(iport, iphy); 627 620 }
+1 -1
drivers/scsi/isci/task.c
··· 801 801 /* XXX: need to cleanup any ireqs targeting this 802 802 * domain_device 803 803 */ 804 - ret = TMF_RESP_FUNC_COMPLETE; 804 + ret = -ENODEV; 805 805 goto out; 806 806 } 807 807
+1 -2
drivers/scsi/qla2xxx/qla_def.h
··· 2996 2996 IS_QLA82XX(ha) || IS_QLA83XX(ha) || \ 2997 2997 IS_QLA8044(ha)) 2998 2998 #define IS_MSIX_NACK_CAPABLE(ha) (IS_QLA81XX(ha) || IS_QLA83XX(ha)) 2999 - #define IS_NOPOLLING_TYPE(ha) ((IS_QLA25XX(ha) || IS_QLA81XX(ha) || \ 3000 - IS_QLA83XX(ha)) && (ha)->flags.msix_enabled) 2999 + #define IS_NOPOLLING_TYPE(ha) (IS_QLA81XX(ha) && (ha)->flags.msix_enabled) 3001 3000 #define IS_FAC_REQUIRED(ha) (IS_QLA81XX(ha) || IS_QLA83XX(ha)) 3002 3001 #define IS_NOCACHE_VPD_TYPE(ha) (IS_QLA81XX(ha) || IS_QLA83XX(ha)) 3003 3002 #define IS_ALOGIO_CAPABLE(ha) (IS_QLA23XX(ha) || IS_FWI2_CAPABLE(ha))
+30 -16
drivers/scsi/qla2xxx/qla_isr.c
··· 2880 2880 qla24xx_enable_msix(struct qla_hw_data *ha, struct rsp_que *rsp) 2881 2881 { 2882 2882 #define MIN_MSIX_COUNT 2 2883 + #define ATIO_VECTOR 2 2883 2884 int i, ret; 2884 2885 struct msix_entry *entries; 2885 2886 struct qla_msix_entry *qentry; ··· 2937 2936 } 2938 2937 2939 2938 /* Enable MSI-X vectors for the base queue */ 2940 - for (i = 0; i < ha->msix_count; i++) { 2939 + for (i = 0; i < 2; i++) { 2941 2940 qentry = &ha->msix_entries[i]; 2942 - if (QLA_TGT_MODE_ENABLED() && IS_ATIO_MSIX_CAPABLE(ha)) { 2943 - ret = request_irq(qentry->vector, 2944 - qla83xx_msix_entries[i].handler, 2945 - 0, qla83xx_msix_entries[i].name, rsp); 2946 - } else if (IS_P3P_TYPE(ha)) { 2941 + if (IS_P3P_TYPE(ha)) 2947 2942 ret = request_irq(qentry->vector, 2948 2943 qla82xx_msix_entries[i].handler, 2949 2944 0, qla82xx_msix_entries[i].name, rsp); 2950 - } else { 2945 + else 2951 2946 ret = request_irq(qentry->vector, 2952 2947 msix_entries[i].handler, 2953 2948 0, msix_entries[i].name, rsp); 2954 - } 2955 - if (ret) { 2956 - ql_log(ql_log_fatal, vha, 0x00cb, 2957 - "MSI-X: unable to register handler -- %x/%d.\n", 2958 - qentry->vector, ret); 2959 - qla24xx_disable_msix(ha); 2960 - ha->mqenable = 0; 2961 - goto msix_out; 2962 - } 2949 + if (ret) 2950 + goto msix_register_fail; 2963 2951 qentry->have_irq = 1; 2964 2952 qentry->rsp = rsp; 2965 2953 rsp->msix = qentry; 2954 + } 2955 + 2956 + /* 2957 + * If target mode is enable, also request the vector for the ATIO 2958 + * queue. 2959 + */ 2960 + if (QLA_TGT_MODE_ENABLED() && IS_ATIO_MSIX_CAPABLE(ha)) { 2961 + qentry = &ha->msix_entries[ATIO_VECTOR]; 2962 + ret = request_irq(qentry->vector, 2963 + qla83xx_msix_entries[ATIO_VECTOR].handler, 2964 + 0, qla83xx_msix_entries[ATIO_VECTOR].name, rsp); 2965 + qentry->have_irq = 1; 2966 + qentry->rsp = rsp; 2967 + rsp->msix = qentry; 2968 + } 2969 + 2970 + msix_register_fail: 2971 + if (ret) { 2972 + ql_log(ql_log_fatal, vha, 0x00cb, 2973 + "MSI-X: unable to register handler -- %x/%d.\n", 2974 + qentry->vector, ret); 2975 + qla24xx_disable_msix(ha); 2976 + ha->mqenable = 0; 2977 + goto msix_out; 2966 2978 } 2967 2979 2968 2980 /* Enable MSI-X vector for response queue update for queue 0 */
+3
drivers/scsi/storvsc_drv.c
··· 1419 1419 { 1420 1420 struct stor_mem_pools *memp = sdevice->hostdata; 1421 1421 1422 + if (!memp) 1423 + return; 1424 + 1422 1425 mempool_destroy(memp->request_mempool); 1423 1426 kmem_cache_destroy(memp->request_pool); 1424 1427 kfree(memp);