]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.1-stable patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 3 Jan 2012 20:11:41 +0000 (12:11 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 3 Jan 2012 20:11:41 +0000 (12:11 -0800)
added patches:
mpt2sas-crashes-on-shutdown.patch

queue-3.1/mpt2sas-crashes-on-shutdown.patch [new file with mode: 0644]
queue-3.1/series

diff --git a/queue-3.1/mpt2sas-crashes-on-shutdown.patch b/queue-3.1/mpt2sas-crashes-on-shutdown.patch
new file mode 100644 (file)
index 0000000..b35bc3c
--- /dev/null
@@ -0,0 +1,75 @@
+From davem@davemloft.net  Tue Jan  3 12:06:53 2012
+From: David Miller <davem@davemloft.net>
+Date: Mon, 26 Dec 2011 14:59:20 -0500 (EST)
+Subject: mpt2sas crashes on shutdown
+To: stable@vger.kernel.org
+Cc: linux-scsi@vger.kernel.org, nagalakshmi.nandigama@lsi.com
+Message-ID: <20111226.145920.1088076837634135764.davem@davemloft.net>
+
+From: David Miller <davem@davemloft.net>
+
+[Fixed differently in 3.2]
+
+The mpt2sas driver accesses I/O space as virtual addresses when
+saving and restoring the MSIX table, this only works by luck on x86.
+
+One needs to use the appropriate {read,write}{b,w,l}() APIs.
+
+This is fixed in v3.2.x because all of this code got rewritten for
+NUMA I/O support.
+
+But both 3.0.x and 3.1.x still have this bug, and my Niagara sparc
+machines crash on shutdown every single time due to this bug making my
+-stable work more difficult than it needs to be.
+
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: Eric Moore <Eric.Moore@lsi.com>
+Cc: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/mpt2sas/mpt2sas_base.c |    6 +++---
+ drivers/scsi/mpt2sas/mpt2sas_base.h |    2 +-
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/scsi/mpt2sas/mpt2sas_base.c
++++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
+@@ -1096,7 +1096,7 @@ _base_save_msix_table(struct MPT2SAS_ADA
+               return;
+       for (i = 0; i < ioc->msix_vector_count; i++)
+-              ioc->msix_table_backup[i] = ioc->msix_table[i];
++              ioc->msix_table_backup[i] = readl(&ioc->msix_table[i]);
+ }
+ /**
+@@ -1113,7 +1113,7 @@ _base_restore_msix_table(struct MPT2SAS_
+               return;
+       for (i = 0; i < ioc->msix_vector_count; i++)
+-              ioc->msix_table[i] = ioc->msix_table_backup[i];
++              writel(ioc->msix_table_backup[i], &ioc->msix_table[i]);
+ }
+ /**
+@@ -1144,7 +1144,7 @@ _base_check_enable_msix(struct MPT2SAS_A
+       /* get msix table  */
+       pci_read_config_dword(ioc->pdev, base + 4, &msix_table_offset);
+       msix_table_offset &= 0xFFFFFFF8;
+-      ioc->msix_table = (u32 *)((void *)ioc->chip + msix_table_offset);
++      ioc->msix_table = ((void __iomem *)ioc->chip + msix_table_offset);
+       dinitprintk(ioc, printk(MPT2SAS_INFO_FMT "msix is supported, "
+           "vector_count(%d), table_offset(0x%08x), table(%p)\n", ioc->name,
+--- a/drivers/scsi/mpt2sas/mpt2sas_base.h
++++ b/drivers/scsi/mpt2sas/mpt2sas_base.h
+@@ -779,7 +779,7 @@ struct MPT2SAS_ADAPTER {
+       u8              msix_enable;
+       u16             msix_vector_count;
+-      u32             *msix_table;
++      u32 __iomem     *msix_table;
+       u32             *msix_table_backup;
+       u32             ioc_reset_count;
index 5bde08f940f4fedb7be6a59ac9bcd7ae220be235..f8a114c76d4c777fa966635d6bdb4f4798f34bb3 100644 (file)
@@ -47,3 +47,4 @@ watchdog-hpwdt-changes-to-handle-nx-secure-bit-in-32bit-path.patch
 drm-radeon-kms-bail-on-btc-parts-if-mc-ucode-is-missing.patch
 mm-hugetlb-fix-non-atomic-enqueue-of-huge-page.patch
 mm-mempolicy.c-refix-mbind_range-vma-issue.patch
+mpt2sas-crashes-on-shutdown.patch