forked from Minki/linux
scsi: pm80xx: Do not sleep in atomic context
hw_event_sas_phy_up() is used in hardirq/softirq context:
pm8001_interrupt_handler_msix() || pm8001_interrupt_handler_intx() || pm8001_tasklet
=> PM8001_CHIP_DISP->isr() = pm80xx_chip_isr()
=> process_oq() [spin_lock_irqsave(&pm8001_ha->lock,)]
=> process_one_iomb()
=> mpi_hw_event()
=> hw_event_sas_phy_up()
=> msleep(200)
Revert the msleep() back to an mdelay() to avoid sleeping in atomic
context.
Link: https://lore.kernel.org/r/20201126132952.2287996-2-bigeasy@linutronix.de
Fixes: 4daf1ef3c6
("scsi: pm80xx: Convert 'long' mdelay to msleep")
Cc: Vikram Auradkar <auradkar@google.com>
Cc: Jack Wang <jinpu.wang@cloud.ionos.com>
Acked-by: Jack Wang <jinpu.wang@cloud.ionos.com>
Signed-off-by: Ahmed S. Darwish <a.darwish@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
939785d35d
commit
4ba9e51657
@ -3296,7 +3296,7 @@ hw_event_sas_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
|
||||
pm8001_get_attached_sas_addr(phy, phy->sas_phy.attached_sas_addr);
|
||||
spin_unlock_irqrestore(&phy->sas_phy.frame_rcvd_lock, flags);
|
||||
if (pm8001_ha->flags == PM8001F_RUN_TIME)
|
||||
msleep(200);/*delay a moment to wait disk to spinup*/
|
||||
mdelay(200); /* delay a moment to wait for disk to spin up */
|
||||
pm8001_bytes_dmaed(pm8001_ha, phy_id);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user