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

Pull SCSI fixes from James Bottomley:
"Three fixes. One is the qla24xx MSI regression, one is a theoretical
problem over blacklist matching, which would bite USB badly if it ever
triggered and one is a system hang with a particular type of IPR
device"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
qla2xxx: Fix NULL pointer deref in QLA interrupt
SCSI: fix new bug in scsi_dev_info_list string matching
ipr: Clear interrupt on croc/crocodile when running with LSI

+8 -5
+1
drivers/scsi/ipr.c
··· 10093 ioa_cfg->intr_flag = IPR_USE_MSI; 10094 else { 10095 ioa_cfg->intr_flag = IPR_USE_LSI; 10096 ioa_cfg->nvectors = 1; 10097 dev_info(&pdev->dev, "Cannot enable MSI.\n"); 10098 }
··· 10093 ioa_cfg->intr_flag = IPR_USE_MSI; 10094 else { 10095 ioa_cfg->intr_flag = IPR_USE_LSI; 10096 + ioa_cfg->clear_isr = 1; 10097 ioa_cfg->nvectors = 1; 10098 dev_info(&pdev->dev, "Cannot enable MSI.\n"); 10099 }
+1 -1
drivers/scsi/qla2xxx/qla_isr.c
··· 2548 if (!vha->flags.online) 2549 return; 2550 2551 - if (rsp->msix->cpuid != smp_processor_id()) { 2552 /* if kernel does not notify qla of IRQ's CPU change, 2553 * then set it here. 2554 */
··· 2548 if (!vha->flags.online) 2549 return; 2550 2551 + if (rsp->msix && rsp->msix->cpuid != smp_processor_id()) { 2552 /* if kernel does not notify qla of IRQ's CPU change, 2553 * then set it here. 2554 */
+6 -4
drivers/scsi/scsi_devinfo.c
··· 429 * here, and we don't know what device it is 430 * trying to work with, leave it as-is. 431 */ 432 - vmax = 8; /* max length of vendor */ 433 vskip = vendor; 434 while (vmax > 0 && *vskip == ' ') { 435 vmax--; ··· 439 while (vmax > 0 && vskip[vmax - 1] == ' ') 440 --vmax; 441 442 - mmax = 16; /* max length of model */ 443 mskip = model; 444 while (mmax > 0 && *mskip == ' ') { 445 mmax--; ··· 455 * Behave like the older version of get_device_flags. 456 */ 457 if (memcmp(devinfo->vendor, vskip, vmax) || 458 - devinfo->vendor[vmax]) 459 continue; 460 if (memcmp(devinfo->model, mskip, mmax) || 461 - devinfo->model[mmax]) 462 continue; 463 return devinfo; 464 } else {
··· 429 * here, and we don't know what device it is 430 * trying to work with, leave it as-is. 431 */ 432 + vmax = sizeof(devinfo->vendor); 433 vskip = vendor; 434 while (vmax > 0 && *vskip == ' ') { 435 vmax--; ··· 439 while (vmax > 0 && vskip[vmax - 1] == ' ') 440 --vmax; 441 442 + mmax = sizeof(devinfo->model); 443 mskip = model; 444 while (mmax > 0 && *mskip == ' ') { 445 mmax--; ··· 455 * Behave like the older version of get_device_flags. 456 */ 457 if (memcmp(devinfo->vendor, vskip, vmax) || 458 + (vmax < sizeof(devinfo->vendor) && 459 + devinfo->vendor[vmax])) 460 continue; 461 if (memcmp(devinfo->model, mskip, mmax) || 462 + (mmax < sizeof(devinfo->model) && 463 + devinfo->model[mmax])) 464 continue; 465 return devinfo; 466 } else {