[Top] [All Lists]

early crash on indigo2 fix breaks indy ...

To: Ulf Carlsson <>
Subject: early crash on indigo2 fix breaks indy ...
From: Florian Lohoff <>
Date: Mon, 24 Apr 2000 13:22:21 +0200
Cc: Florian Lohoff <>,
In-reply-to: <>; from Ulf Carlsson on Mon, Apr 24, 2000 at 03:49:21AM -0700
Organization: rfc822 - pure communication
References: <> <>
On Mon, Apr 24, 2000 at 03:49:21AM -0700, Ulf Carlsson wrote:
> > Modified files:
> >     arch/mips/arc  : memory.c 
> > 
> > Log message:
> >     Fix early crash on SGI_IP22 due to not reserving kernel
> >     pages in the boomem setup
> This breaks on my Indy.  What machine are you using?  Do we know whether the
> part of memory where the kernel is loaded is reported as free memory from the
> prom or should we add some tests?

Indigo2 - I had the problem that the first alloc_bootmem i think
got back pages in the kernel marked as "free" - The resulting memset
let the kernel crash. My solution was to mark the kernel pages
as reserved.

BTW: What does break on indy ? Does it crash ? Does it hang in SCSI Detection ?
The SCSI detection is a different thing - The problem is that the kernel
gets loaded in a area which is from the MAX_DMA_ADDRESS DMAable memory.
Afterwards no pages are left for DMA and the generic scsi layer is not
able to get dma able pages (from zone 0 GFP_DMA) which results in error
messages in the scsi layer. I solved this by changing mm/init.c
to put ALL pages into zone 0 as from my understanding the MAX_DMA_ADDRESS
is only aplicable to PC style DMA Controllers which the indy/indigo2 hopefully
dont have. For this patch i didnt apply to CVS nobody gave back 
and usefull comment.

Here is the fix i am using:

Index: init.c
RCS file: /cvs/linux/arch/mips/mm/init.c,v
retrieving revision 1.27
diff -u -r1.27 init.c
--- init.c      2000/02/23 01:33:56     1.27
+++ init.c      2000/04/24 11:29:51
@@ -256,13 +256,16 @@
        max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
        low = max_low_pfn;
+#if defined(CONFIG_ISA) || defined(CONFIG_PCI)
        if (low < max_dma)
                zones_size[ZONE_DMA] = low;
        else {
                zones_size[ZONE_DMA] = max_dma;
                zones_size[ZONE_NORMAL] = low - max_dma;
+       zones_size[ZONE_DMA] = low;

Florian Lohoff                  +49-subject-2-change
"Technology is a constant battle between manufacturers producing bigger and
more idiot-proof systems and nature producing bigger and better idiots."

<Prev in Thread] Current Thread [Next in Thread>