SCSI fixes on 20160708
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. Signed-off-by: James E.J. Bottomley <jejb@linux.vnet.ibm.com> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABAgAGBQJXgAriAAoJEAVr7HOZEZN40VcP/R65ZYezkobZDVR+xQfCwDnn cCaFSl4a+FtsGnzs2hb88ZZWA2hn4xWDAdjwoPxRwD7yq8KB1Oxb2wEOiJMjIgJH N/NU6zEIjMvVei8jDuAJJ13c1Xa1/y59ptD1nykm1dJlLGjwAE1jBiAuDs1OOm27 SnvIj+mOSRiesGqp2Srg6+w+QmOJ0biXiSf5EUhj7rFKayIaM3yLrQZ2E4a5oUfc EZYzCBagObQoYwABw/6Nd1HhFdpptRnOvIr8xk+ch5w2m+AEiw1xAf+/B9ws25fB EB4O7fQcNzIEbjRRIehGhtp83Q7ST77kq5mE7CHDLeu/v93ZzKBmEZXIM2Bdg2x5 TBEvFrkIFe1ECITHInegvG4/V/mNLFYcad9Ygdbdt6ndXWoJ5l1a8BRcNMCX0smQ g7jXqMz0vYKW+JSZvP1fHtqsJR6t6CHAFOKtwwb5xlhRvbZRMB311pr3UfbMqlTx qZOfGMqF/ta51RWkenNlRZHvg8WeeTxGioNexS8qU9j+9CUvvj5eIemEpBEBiblN 8BnbEAAnjSTSMGPFuOMQ8Njh3umC4ozzc8WcaXNjHnUMcIXaOY3PkcjUf65pi5S+ fPjV18350LAhiIlneHSCcGBO+Z+D5OjPJdQGywMb3fs9HICNfi41QsJrJVAkA3e5 vc2XZhSAfEQuwniuGJU3 =0CCg -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
ee40fb2948
|
@ -10093,6 +10093,7 @@ static int ipr_probe_ioa(struct pci_dev *pdev,
|
||||||
ioa_cfg->intr_flag = IPR_USE_MSI;
|
ioa_cfg->intr_flag = IPR_USE_MSI;
|
||||||
else {
|
else {
|
||||||
ioa_cfg->intr_flag = IPR_USE_LSI;
|
ioa_cfg->intr_flag = IPR_USE_LSI;
|
||||||
|
ioa_cfg->clear_isr = 1;
|
||||||
ioa_cfg->nvectors = 1;
|
ioa_cfg->nvectors = 1;
|
||||||
dev_info(&pdev->dev, "Cannot enable MSI.\n");
|
dev_info(&pdev->dev, "Cannot enable MSI.\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -2548,7 +2548,7 @@ void qla24xx_process_response_queue(struct scsi_qla_host *vha,
|
||||||
if (!vha->flags.online)
|
if (!vha->flags.online)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (rsp->msix->cpuid != smp_processor_id()) {
|
if (rsp->msix && rsp->msix->cpuid != smp_processor_id()) {
|
||||||
/* if kernel does not notify qla of IRQ's CPU change,
|
/* if kernel does not notify qla of IRQ's CPU change,
|
||||||
* then set it here.
|
* then set it here.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -429,7 +429,7 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,
|
||||||
* here, and we don't know what device it is
|
* here, and we don't know what device it is
|
||||||
* trying to work with, leave it as-is.
|
* trying to work with, leave it as-is.
|
||||||
*/
|
*/
|
||||||
vmax = 8; /* max length of vendor */
|
vmax = sizeof(devinfo->vendor);
|
||||||
vskip = vendor;
|
vskip = vendor;
|
||||||
while (vmax > 0 && *vskip == ' ') {
|
while (vmax > 0 && *vskip == ' ') {
|
||||||
vmax--;
|
vmax--;
|
||||||
|
@ -439,7 +439,7 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,
|
||||||
while (vmax > 0 && vskip[vmax - 1] == ' ')
|
while (vmax > 0 && vskip[vmax - 1] == ' ')
|
||||||
--vmax;
|
--vmax;
|
||||||
|
|
||||||
mmax = 16; /* max length of model */
|
mmax = sizeof(devinfo->model);
|
||||||
mskip = model;
|
mskip = model;
|
||||||
while (mmax > 0 && *mskip == ' ') {
|
while (mmax > 0 && *mskip == ' ') {
|
||||||
mmax--;
|
mmax--;
|
||||||
|
@ -455,10 +455,12 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,
|
||||||
* Behave like the older version of get_device_flags.
|
* Behave like the older version of get_device_flags.
|
||||||
*/
|
*/
|
||||||
if (memcmp(devinfo->vendor, vskip, vmax) ||
|
if (memcmp(devinfo->vendor, vskip, vmax) ||
|
||||||
devinfo->vendor[vmax])
|
(vmax < sizeof(devinfo->vendor) &&
|
||||||
|
devinfo->vendor[vmax]))
|
||||||
continue;
|
continue;
|
||||||
if (memcmp(devinfo->model, mskip, mmax) ||
|
if (memcmp(devinfo->model, mskip, mmax) ||
|
||||||
devinfo->model[mmax])
|
(mmax < sizeof(devinfo->model) &&
|
||||||
|
devinfo->model[mmax]))
|
||||||
continue;
|
continue;
|
||||||
return devinfo;
|
return devinfo;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue