aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/pm8001/pm8001_sas.c
diff options
context:
space:
mode:
authorDeepak Ukey <deepak.ukey@microchip.com>2018-09-11 04:48:04 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2018-09-11 21:14:38 -0400
commit72349b62a571effd6faadd0600b8e657dd87afbf (patch)
treeebf719ebe39db294f399abefc2cc8272d5795c97 /drivers/scsi/pm8001/pm8001_sas.c
parent76cb25b058034d37244be6aca97a2ad52a5fbcad (diff)
scsi: pm80xx: Fixed system hang issue during kexec boot
When the firmware is not responding, execution of kexec boot causes a system hang. When firmware assertion happened, driver get notified with interrupt vector updated in MPI configuration table. Then, the driver will read scratchpad register and set controller_fatal_error flag to true. Signed-off-by: Deepak Ukey <deepak.ukey@microchip.com> Signed-off-by: Viswas G <Viswas.G@microchip.com> Acked-by: Jack Wang <jinpu.wang@profitbricks.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/pm8001/pm8001_sas.c')
-rw-r--r--drivers/scsi/pm8001/pm8001_sas.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
index e063faad66f5..b1e7d2699311 100644
--- a/drivers/scsi/pm8001/pm8001_sas.c
+++ b/drivers/scsi/pm8001/pm8001_sas.c
@@ -396,6 +396,13 @@ static int pm8001_task_exec(struct sas_task *task,
396 return 0; 396 return 0;
397 } 397 }
398 pm8001_ha = pm8001_find_ha_by_dev(task->dev); 398 pm8001_ha = pm8001_find_ha_by_dev(task->dev);
399 if (pm8001_ha->controller_fatal_error) {
400 struct task_status_struct *ts = &t->task_status;
401
402 ts->resp = SAS_TASK_UNDELIVERED;
403 t->task_done(t);
404 return 0;
405 }
399 PM8001_IO_DBG(pm8001_ha, pm8001_printk("pm8001_task_exec device \n ")); 406 PM8001_IO_DBG(pm8001_ha, pm8001_printk("pm8001_task_exec device \n "));
400 spin_lock_irqsave(&pm8001_ha->lock, flags); 407 spin_lock_irqsave(&pm8001_ha->lock, flags);
401 do { 408 do {