Commit 3515356a authored by William Lee Irwin III's avatar William Lee Irwin III Committed by Linus Torvalds

[PATCH] sparc32: fix initrd memcpy problem

The latter hunk of the forwarded patch has already been applied, so
please apply the patch as it appears in the un-forwarded part. I've
taken some liberties in adding the Acked/Signed-off lines in what I
hope is an agreeable way.

On Sun, Nov 14, 2004 at 11:16:40PM -0500, Jurij Smakov wrote:
> As a followup: I have tried fiddling more with the memcpy() routine.
> Insight from Rob Radez and comments in arch/sparc/lib/blockops.S suggest,
> that __copy_1page assumes that the memory regions copied are aligned on a
> double-word boundary. I have checked, that in the cramfs case it wasn't
> true, the destination was not aligned on the double-word boundary. So, I
> have implemented a simple workaround (see patch below), which together
> with Bob Breuer's iommu.c fix [0] made 2.6.8 kernel to boot on my
> machine (SS10 with Ross Hypersparc CPU)! I also confirm, that adding the
> suggested fix to the srmmu.c also [1] breaks sunlance on my machine. With
> that "fix" the line 'eth0: Memory error, status 88c3, addr 3713ba' is
> displayed continuously during boot, when it comes to configuring network
> interfaces. The successful patch for me is:
Acked-by: default avatarWilliam Irwin  <wli@holomorphy.com>
Acked-by: default avatarDave Miller  <davem@davemloft.net>
Signed-off-by: default avatarJurij Smakov <jurij@wooyd.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 693c84fd
...@@ -40,6 +40,9 @@ static inline void *__constant_memcpy(void *to, const void *from, __kernel_size_ ...@@ -40,6 +40,9 @@ static inline void *__constant_memcpy(void *to, const void *from, __kernel_size_
if(n <= 32) { if(n <= 32) {
__builtin_memcpy(to, from, n); __builtin_memcpy(to, from, n);
} else if (((unsigned int) to & 7) != 0) {
/* Destination is not aligned on the double-word boundary */
__memcpy(to, from, n);
} else { } else {
switch(n) { switch(n) {
case PAGE_SIZE: case PAGE_SIZE:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment