Message ID | 1452842182-684-6-git-send-email-RaghavaAditya.Renukunta@pmcs.com (mailing list archive) |
---|---|
State | Changes Requested, archived |
Headers | show |
On Thu, Jan 14, 2016 at 11:16:18PM -0800, Raghava Aditya Renukunta wrote: > From: Raghava Aditya Renukunta <raghavaaditya.renukunta@pmcs.com> > > 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. > > Changes in V2: > Replaced fib vector allocation code with aac_fib_vector_assign > > Changes in V3: > None > > 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> > --- > drivers/scsi/aacraid/linit.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c > index 08c6835..6d79181 100644 > --- a/drivers/scsi/aacraid/linit.c > +++ b/drivers/scsi/aacraid/linit.c > @@ -1410,8 +1410,18 @@ static int aac_acquire_resources(struct aac_dev *dev) > > aac_adapter_enable_int(dev); > > - if (!dev->sync_mode) > + /*max msix may change after EEH > + * Re-assign vectors to fibs > + */ > + aac_fib_vector_assign(dev); > + > + if (!dev->sync_mode) { > + /* After EEH recovery or suspend resume, max_msix count > + * may change, therfore updating in init as well. > + */ > aac_adapter_start(dev); > + dev->init->Sa_MSIXVectors = cpu_to_le32(dev->max_msix); > + } > return 0; > > error_iounmap: > -- > 1.9.1 > Looks good, Reviewed-by: Johannes Thumshirn <jthushirn@suse.de>
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 08c6835..6d79181 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c @@ -1410,8 +1410,18 @@ static int aac_acquire_resources(struct aac_dev *dev) aac_adapter_enable_int(dev); - if (!dev->sync_mode) + /*max msix may change after EEH + * Re-assign vectors to fibs + */ + aac_fib_vector_assign(dev); + + if (!dev->sync_mode) { + /* After EEH recovery or suspend resume, max_msix count + * may change, therfore updating in init as well. + */ aac_adapter_start(dev); + dev->init->Sa_MSIXVectors = cpu_to_le32(dev->max_msix); + } return 0; error_iounmap: