ipr: possible irq lock inversion dependency detected
Subsystems (2)
cover ipr: possible irq lock inversion dependency detected
Hi All,
When enable lockdep, seeing "possible irq lock inversion dependency detected" error. This patch fixed the issue.
Thanks,
Wendy
PATCH 1/1 ipr: possible irq lock inversion dependency detected
When enable lockdep, seeing "possible irq lock inversion dependency detected" error. This patch fixes the issue.
Signed-off-by Wen Xiong <[email protected]>
--- drivers/scsi/ipr.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
drivers/scsi/ipr.c +9 -8
@@ -9408,7 +9408,7 @@ static int ipr_probe_ioa(struct pci_devvoid __iomem *ipr_regs;int rc =PCIBIOS_SUCCESSFUL ;volatile u32 mask, uproc, interrupts; -unsigned long lock_flags; +unsigned long lock_flags, driver_lock_flags;ENTER ;
@@ -9631,9 +9631,9 @@ static int ipr_probe_ioa(struct pci_dev }else ioa_cfg->reset = ipr_reset_start_bist; -spin_lock (&ipr_driver_lock); +spin_lock_irqsave (&ipr_driver_lock, driver_lock_flags);list_add_tail (&ioa_cfg->queue, &ipr_ioa_head); -spin_unlock (&ipr_driver_lock); +spin_unlock_irqrestore (&ipr_driver_lock, driver_lock_flags);LEAVE ; out:
@@ -9716,6 +9716,7 @@ static void __ipr_remove(struct pci_devunsigned long host_lock_flags =0 ;struct ipr_ioa_cfg *ioa_cfg =pci_get_drvdata (pdev);int i; +unsigned long driver_lock_flags;ENTER ;spin_lock_irqsave (ioa_cfg->host->host_lock, host_lock_flags);
@@ -9739,9 +9740,9 @@ static void __ipr_remove(struct pci_devINIT_LIST_HEAD (&ioa_cfg->used_res_q);spin_lock_irqsave (ioa_cfg->host->host_lock, host_lock_flags); -spin_lock (&ipr_driver_lock); +spin_lock_irqsave (&ipr_driver_lock, driver_lock_flags);list_del (&ioa_cfg->queue); -spin_unlock (&ipr_driver_lock); +spin_unlock_irqrestore (&ipr_driver_lock, driver_lock_flags);if (ioa_cfg->sdt_state ==ABORT_DUMP ) ioa_cfg->sdt_state =WAIT_FOR_DUMP ;
@@ -10007,12 +10008,12 @@ static int ipr_halt(struct notifier_bloc {struct ipr_cmnd *ipr_cmd;struct ipr_ioa_cfg *ioa_cfg; -unsigned long flags =0 ; +unsigned long flags =0 , driver_lock_flags;if (event !=SYS_RESTART && event !=SYS_HALT && event !=SYS_POWER_OFF )return NOTIFY_DONE ; -spin_lock (&ipr_driver_lock); +spin_lock_irqsave (&ipr_driver_lock, driver_lock_flags);list_for_each_entry (ioa_cfg, &ipr_ioa_head, queue) {spin_lock_irqsave (ioa_cfg->host->host_lock, flags);
@@ -10030,7 +10031,7 @@ static int ipr_halt(struct notifier_blocipr_do_req (ipr_cmd, ipr_halt_done, ipr_timeout,IPR_DEVICE_RESET_TIMEOUT );spin_unlock_irqrestore (ioa_cfg->host->host_lock, flags); } -spin_unlock (&ipr_driver_lock); +spin_unlock_irqrestore (&ipr_driver_lock, driver_lock_flags);return NOTIFY_OK ; }
Quoted 4 lines · On 05/24/2013 09:59 AM, [email protected] wrote:
When enable lockdep, seeing "possible irq lock inversion dependency detected" error. This patch fixes the issue.
Signed-off-by Wen Xiong <[email protected]>
Acked-by Brian King <[email protected]>
Signature · 3 lines
Brian King Power Linux I/O IBM Linux Technology Center