aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorRaghava Aditya Renukunta <raghavaaditya.renukunta@pmcs.com>2016-02-03 18:06:03 -0500
committerMartin K. Petersen <martin.petersen@oracle.com>2016-02-23 21:27:02 -0500
commitecc479e00db8eb110b200afe1effcb3df20ca7ae (patch)
tree2e8469ca391787d9e4de11acf530af5788c2922e /drivers/scsi
parentf88fa79a61726ce9434df9b4aede36961f709f17 (diff)
aacraid: Set correct msix count for EEH recovery
During EEH recovery number of online CPU's might change thereby changing the number of MSIx vectors. Since each fib is allocated to a vector, changes in the number of vectors causes fib to be sent thru invalid vectors.In addition the correct number of MSIx vectors is not updated in the INIT struct sent to the controller, when it is reinitialized. Fixed by reassigning vectors to fibs based on the updated number of MSIx vectors and updating the INIT structure before sending to controller. Fixes: MSI-X vector calculation for suspend/resume Cc: stable@vger.kernel.org Signed-off-by: Raghava Aditya Renukunta <raghavaaditya.renukunta@pmcs.com> Reviewed-by: Shane Seymour <shane.seymour@hpe.com> Reviewed-by: Johannes Thumshirn <jthushirn@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/aacraid/linit.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 822b695e5b45..511722041c83 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -1409,8 +1409,18 @@ static int aac_acquire_resources(struct aac_dev *dev)
1409 1409
1410 aac_adapter_enable_int(dev); 1410 aac_adapter_enable_int(dev);
1411 1411
1412 if (!dev->sync_mode) 1412 /*max msix may change after EEH
1413 * Re-assign vectors to fibs
1414 */
1415 aac_fib_vector_assign(dev);
1416
1417 if (!dev->sync_mode) {
1418 /* After EEH recovery or suspend resume, max_msix count
1419 * may change, therfore updating in init as well.
1420 */
1413 aac_adapter_start(dev); 1421 aac_adapter_start(dev);
1422 dev->init->Sa_MSIXVectors = cpu_to_le32(dev->max_msix);
1423 }
1414 return 0; 1424 return 0;
1415 1425
1416error_iounmap: 1426error_iounmap: