scsi: aacraid: Reorder Adapter status check

The driver currently checks the SELF_TEST_FAILED first and then
KERNEL_PANIC next. Under error conditions(boot code failure) both
SELF_TEST_FAILED and KERNEL_PANIC can be set at the same time.

The driver has the capability to reset the controller on an KERNEL_PANIC,
but not on SELF_TEST_FAILED.

Fixed by first checking KERNEL_PANIC and then the others.

Cc: stable@vger.kernel.org
Fixes: e8b12f0fb8 ([SCSI] aacraid: Add new code for PMC-Sierra's SRC base controller family)
Signed-off-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
Reviewed-by: David Carroll <David.Carroll@microsemi.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Raghava Aditya Renukunta 2017-02-16 12:51:21 -08:00 committed by Martin K. Petersen
parent 146aa1786d
commit c421530bf8

View file

@ -436,17 +436,24 @@ static int aac_src_check_health(struct aac_dev *dev)
{ {
u32 status = src_readl(dev, MUnit.OMR); u32 status = src_readl(dev, MUnit.OMR);
/*
* Check to see if the board failed any self tests.
*/
if (unlikely(status & SELF_TEST_FAILED))
return -1;
/* /*
* Check to see if the board panic'd. * Check to see if the board panic'd.
*/ */
if (unlikely(status & KERNEL_PANIC)) if (unlikely(status & KERNEL_PANIC))
return (status >> 16) & 0xFF; goto err_blink;
/*
* Check to see if the board failed any self tests.
*/
if (unlikely(status & SELF_TEST_FAILED))
goto err_out;
/*
* Check to see if the board failed any self tests.
*/
if (unlikely(status & MONITOR_PANIC))
goto err_out;
/* /*
* Wait for the adapter to be up and running. * Wait for the adapter to be up and running.
*/ */
@ -456,6 +463,12 @@ static int aac_src_check_health(struct aac_dev *dev)
* Everything is OK * Everything is OK
*/ */
return 0; return 0;
err_out:
return -1;
err_blink:
return (status > 16) & 0xFF;
} }
static inline u32 aac_get_vector(struct aac_dev *dev) static inline u32 aac_get_vector(struct aac_dev *dev)