[kernel/f19] Apply scsi lockdep patch for powerpc IPR issues (rhbz 954252)

Josh Boyer jwboyer at fedoraproject.org
Mon Jun 10 11:51:24 UTC 2013


commit f259b76a836bed3e9e69b2a6178cfd82feff75d6
Author: Josh Boyer <jwboyer at redhat.com>
Date:   Mon Jun 10 07:50:56 2013 -0400

    Apply scsi lockdep patch for powerpc IPR issues (rhbz 954252)

 kernel.spec                                        |    7 ++
 ...le-irq-lock-inversion-dependency-detected.patch |   83 ++++++++++++++++++++
 2 files changed, 90 insertions(+), 0 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index 7e55da8..9de973f 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -787,6 +787,9 @@ Patch25034: b43-stop-format-string-leaking-into-error-msgs.patch
 #CVE-2013-2851 rhbz 969515 971662
 Patch25035: block-do-not-pass-disk-names-as-format-strings.patch
 
+#rhbz 954252
+Patch25036: scsi-ipr-possible-irq-lock-inversion-dependency-detected.patch
+
 # END OF PATCH DEFINITIONS
 
 %endif
@@ -1520,6 +1523,9 @@ ApplyPatch b43-stop-format-string-leaking-into-error-msgs.patch
 #CVE-2013-2851 rhbz 969515 971662
 ApplyPatch block-do-not-pass-disk-names-as-format-strings.patch
 
+#rhbz 954252
+ApplyPatch scsi-ipr-possible-irq-lock-inversion-dependency-detected.patch
+
 # END OF PATCH APPLICATIONS
 
 %endif
@@ -2348,6 +2354,7 @@ fi
 
 %changelog
 * Mon Jun 10 2013 Josh Boyer <jwboyer at redhat.com>
+- Apply scsi lockdep patch for powerpc IPR issues (rhbz 954252)
 - Linux v3.9.5
 
 * Fri Jun 07 2013 Josh Boyer <jwboyer at redhat.com>
diff --git a/scsi-ipr-possible-irq-lock-inversion-dependency-detected.patch b/scsi-ipr-possible-irq-lock-inversion-dependency-detected.patch
new file mode 100644
index 0000000..d89b9f8
--- /dev/null
+++ b/scsi-ipr-possible-irq-lock-inversion-dependency-detected.patch
@@ -0,0 +1,83 @@
+When enable lockdep, seeing "possible irq lock inversion dependency detected"
+error. This patch fixes the issue.
+
+Signed-off-by: Wen Xiong <wenxiong at linux.vnet.ibm.com>
+---
+ drivers/scsi/ipr.c |   17 +++++++++--------
+ 1 file changed, 9 insertions(+), 8 deletions(-)
+
+Index: b/drivers/scsi/ipr.c
+===================================================================
+--- a/drivers/scsi/ipr.c	2013-05-20 09:55:23.000000000 -0500
++++ b/drivers/scsi/ipr.c	2013-05-20 10:00:34.548380858 -0500
+@@ -9408,7 +9408,7 @@ static int ipr_probe_ioa(struct pci_dev 
+ 	void __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_dev 
+ 	unsigned 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_dev 
+ 	INIT_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_bloc
+ 		ipr_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;
+ }
+
+-- 
+--
+To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
+the body of a message to majordomo at vger.kernel.org
+More majordomo info at  http://vger.kernel.org/majordomo-info.html
\ No newline at end of file


More information about the scm-commits mailing list