Home Home > GIT Browse
summaryrefslogtreecommitdiff
authorHannes Reinecke <hare@suse.de>2009-08-21 10:28:25 (GMT)
committer Hannes Reinecke <hare@suse.de>2009-08-21 10:28:25 (GMT)
commit1b8ca42d4ee7316f91029fec3b4d3e3b998e96d3 (patch) (side-by-side diff)
treeb561ee2ee662727d1d08e67634112db5bdcce39f
parent9bae7f7510d27186ffc73c344597041bc08ae2df (diff)
- patches.drivers/mptsas-106xE-32bit-fix: LSI Logic SAS1068Erpm-2.6.16.60-0.53
doesn't work with PAE enabled (bnc#531004).
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kernel-source.changes6
-rw-r--r--patches.drivers/mptsas-106xE-32bit-fix52
-rw-r--r--series.conf1
3 files changed, 59 insertions, 0 deletions
diff --git a/kernel-source.changes b/kernel-source.changes
index 17595fd..d2c1265 100644
--- a/kernel-source.changes
+++ b/kernel-source.changes
@@ -1,2 +1,8 @@
-------------------------------------------------------------------
+Fri Aug 21 12:28:19 CEST 2009 - hare@suse.de
+
+- patches.drivers/mptsas-106xE-32bit-fix: LSI Logic SAS1068E
+ doesn't work with PAE enabled (bnc#531004).
+
+-------------------------------------------------------------------
Fri Aug 21 03:13:00 CEST 2009 - rgoldwyn@suse.de
diff --git a/patches.drivers/mptsas-106xE-32bit-fix b/patches.drivers/mptsas-106xE-32bit-fix
new file mode 100644
index 0000000..313be89
--- a/dev/null
+++ b/patches.drivers/mptsas-106xE-32bit-fix
@@ -0,0 +1,52 @@
+From: Kahyap Desai <kashyap.desai@lsi.com>
+Subject: LSI Logic SAS1068E doesn't work with PAE enabled
+References: bnc#531004
+
+On 32bit systems with more than 4GB of memory the mptsas driver fails
+to boot with some weird errors (runaway loop modprobe etc).
+
+The driver is using the upper_32_bit() macro instead of lengthy code
+to get upper 32. However, "Unsigned long" and "dma_addr_t" both has
+different size for PAE kernel, causing memory addressing errors.
+
+This patch corrects this problem.
+
+Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com>
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+
+diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
+index e768569..e9c33f7 100644
+--- a/drivers/message/fusion/mptbase.c
++++ b/drivers/message/fusion/mptbase.c
+@@ -1043,9 +1043,9 @@ mpt_add_sge_64bit(void *pAddr, u32 flagslength, dma_addr_t dma_addr)
+ {
+ SGESimple64_t *pSge = (SGESimple64_t *) pAddr;
+ pSge->Address.Low = cpu_to_le32
+- (lower_32_bits((unsigned long)(dma_addr)));
++ (lower_32_bits(dma_addr));
+ pSge->Address.High = cpu_to_le32
+- (upper_32_bits((unsigned long)dma_addr));
++ (upper_32_bits(dma_addr));
+ pSge->FlagsLength = cpu_to_le32
+ ((flagslength | MPT_SGE_FLAGS_64_BIT_ADDRESSING));
+ }
+@@ -1067,8 +1067,8 @@ mpt_add_sge_64bit_1078(void *pAddr, u32 flagslength, dma_addr_t dma_addr)
+ u32 tmp;
+
+ pSge->Address.Low = cpu_to_le32
+- (lower_32_bits((unsigned long)(dma_addr)));
+- tmp = (u32)(upper_32_bits((unsigned long)dma_addr));
++ (lower_32_bits(dma_addr));
++ tmp = (u32)(upper_32_bits(dma_addr));
+
+ /*
+ * 1078 errata workaround for the 36GB limitation
+@@ -1130,7 +1130,7 @@ mpt_add_chain_64bit(void *pAddr, u8 next, u16 length, dma_addr_t dma_addr)
+ pChain->NextChainOffset = next;
+
+ pChain->Address.Low = cpu_to_le32(tmp);
+- tmp = (u32)(upper_32_bits((unsigned long)dma_addr));
++ tmp = (u32)(upper_32_bits(dma_addr));
+ pChain->Address.High = cpu_to_le32(tmp);
+ }
+
diff --git a/series.conf b/series.conf
index 08ec97d..dd50866 100644
--- a/series.conf
+++ b/series.conf
@@ -1878,2 +1878,3 @@
patches.drivers/ipr-pci-eeh-permanent-failure
+ patches.drivers/mptsas-106xE-32bit-fix