| From 5bdbeaef6368c89e0061d4c01a124e4cc252ed10 Mon Sep 17 00:00:00 2001 |
| From: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com> |
| Date: Thu, 16 Feb 2017 12:51:21 -0800 |
| Subject: [PATCH] scsi: aacraid: Reorder Adapter status check |
| |
| commit c421530bf848604e97d0785a03b3fe2c62775083 upstream. |
| |
| 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> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c |
| index 28f8b8a1b8a4..2cdc9f825486 100644 |
| --- a/drivers/scsi/aacraid/src.c |
| +++ b/drivers/scsi/aacraid/src.c |
| @@ -414,16 +414,23 @@ static int aac_src_check_health(struct aac_dev *dev) |
| u32 status = src_readl(dev, MUnit.OMR); |
| |
| /* |
| + * Check to see if the board panic'd. |
| + */ |
| + if (unlikely(status & KERNEL_PANIC)) |
| + goto err_blink; |
| + |
| + /* |
| * Check to see if the board failed any self tests. |
| */ |
| if (unlikely(status & SELF_TEST_FAILED)) |
| - return -1; |
| + goto err_out; |
| |
| /* |
| - * Check to see if the board panic'd. |
| + * Check to see if the board failed any self tests. |
| */ |
| - if (unlikely(status & KERNEL_PANIC)) |
| - return (status >> 16) & 0xFF; |
| + if (unlikely(status & MONITOR_PANIC)) |
| + goto err_out; |
| + |
| /* |
| * Wait for the adapter to be up and running. |
| */ |
| @@ -433,6 +440,12 @@ static int aac_src_check_health(struct aac_dev *dev) |
| * Everything is OK |
| */ |
| return 0; |
| + |
| +err_out: |
| + return -1; |
| + |
| +err_blink: |
| + return (status > 16) & 0xFF; |
| } |
| |
| /** |
| -- |
| 2.12.0 |
| |