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: e8b12f0fb835223752 ([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:
parent
146aa1786d
commit
c421530bf8
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user