[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Preparing for first test cycle



On Thu, Apr 20, 2000 at 12:30:27PM -0400, Ben Collins wrote:
> I think we need to get a kernel-source-2.2.15 package in right now, even
> if it means that it is actually a 2.2.15-pre19 (the latest pre). This way
> we can start building images, and have boot-floppies using it. I'm very
> sure it will release before we do.

Please include this patch from David Miller. Alan Cox already received
it (according to davem) and it will be in 2.2.15final. Without the
patch our two Ultra I sparc boxes didn't even survive a one minute
crashme run ;-)

So it's a crucial stability fix (at least for Ultra I cpus).

Greetings,



				Christian
-- 
Christian Meder, email: meder@isr.uni-stuttgart.de

What's the railroad to me ?
I never go to see
Where it ends.
It fills a few hollows,
And makes banks for the swallows, 
It sets the sand a-blowing,
And the blackberries a-growing.
                      (Henry David Thoreau)

Here is that patch for 2.2.15pre19

diff -u --recursive --new-file --exclude=CVS --exclude=.cvsignore ../vanilla/2.2/linux/arch/sparc64/kernel/unaligned.c linux/arch/sparc64/kernel/unaligned.c
--- ../vanilla/2.2/linux/arch/sparc64/kernel/unaligned.c	Thu Apr 22 19:24:51 1999
+++ linux/arch/sparc64/kernel/unaligned.c	Mon Apr  3 16:22:37 2000
@@ -1,4 +1,4 @@
-/* $Id: unaligned.c,v 1.15 1999/04/03 11:36:21 anton Exp $
+/* $Id: unaligned.c,v 1.15.2.2 2000/04/03 23:22:37 davem Exp $
  * unaligned.c: Unaligned load/store trap handling with special
  *              cases for the kernel to do them more quickly.
  *
@@ -587,9 +587,19 @@
 	                        
 	maybe_flush_windows(0, 0, rd, from_kernel);
 	reg = fetch_reg_addr(rd, regs);
-	if ((insn & 0x780000) == 0x180000)
-		reg[1] = 0;
-	reg[0] = 0;
+	if (from_kernel || rd < 16) {
+		reg[0] = 0;
+		if ((insn & 0x780000) == 0x180000)
+			reg[1] = 0;
+	} else if (current->tss.flags & SPARC_FLAG_32BIT) {
+		put_user(0, (int *)reg);
+		if ((insn & 0x780000) == 0x180000)
+			put_user(0, ((int *)reg) + 1);
+	} else {
+		put_user(0, reg);
+		if ((insn & 0x780000) == 0x180000)
+			put_user(0, reg + 1);
+	}
 	advance(regs);
 }
 


Reply to: