Re: Missing code in bootmem.c for discontigmem

From: Jesse Barnes <jbarnes_at_sgi.com>
Date: 2003-12-02 04:22:12
Yeah, sorry about that, I knew there would be a problem.  We need to fix
the ia64 discontig code to init the boot memory in the correct order
instead since the below change breaks other discontig platforms.

Jesse

On Thu, Nov 27, 2003 at 04:42:12PM +0100, Xavier Bru wrote:
> Hello all,
> 
> Booting 2.6.0-test10 on Numa system, we fall in:
>    Kernel panic: map_single: bounce buffer is not DMA'ble
> due to alloc_bootmem_low_pages() returning a highmem address at sw IO TLB
> initialization:
>    Placing software IO TLB between 0xe0000030014e4000 - 0xe0000030016e4000
> This was OK in test9 due to init_bootmem_core() sorting the pgdat_list.
> Restoring the previous code, system boots OK (using the last scsi 
> patches :-)
> Herafter the patch:
> 
> diff --exclude-from /home2/xb/proc/diff.exclude -Nur 0t10/mm/bootmem.c 
> linux-2.6.0-test10.old/mm/bootmem.c
> --- 0t10/mm/bootmem.c    2003-11-24 02:31:28.000000000 +0100
> +++ linux-2.6.0-test10.old/mm/bootmem.c    2003-11-27 15:19:53.000000000 
> +0100
> @@ -48,8 +48,24 @@
>     bootmem_data_t *bdata = pgdat->bdata;
>     unsigned long mapsize = ((end - start)+7)/8;
> 
> -    pgdat->pgdat_next = pgdat_list;
> -    pgdat_list = pgdat;
> +
> +    /*
> +     * sort pgdat_list so that the lowest one comes first,
> +     * which makes alloc_bootmem_low_pages work as desired.
> +     */
> +    if (!pgdat_list || pgdat_list->node_start_pfn > 
> pgdat->node_start_pfn) {
> +        pgdat->pgdat_next = pgdat_list;
> +        pgdat_list = pgdat;
> +    } else {
> +        pg_data_t *tmp = pgdat_list;
> +        while (tmp->pgdat_next) {
> +            if (tmp->pgdat_next->node_start_pfn > pgdat->node_start_pfn)
> +                break;
> +            tmp = tmp->pgdat_next;
> +        }
> +        pgdat->pgdat_next = tmp->pgdat_next;
> +        tmp->pgdat_next = pgdat;
> +    }
> 
>     mapsize = (mapsize + (sizeof(long) - 1UL)) & ~(sizeof(long) - 1UL);
>     bdata->node_bootmem_map = phys_to_virt(mapstart << PAGE_SHIFT);
> 
> -- 
> 
> Sinc?res salutations.
> _____________________________________________________________________
> 
> Xavier BRU                 BULL ISD/R&D/INTEL office:     FREC B1-422
> tel : +33 (0)4 76 29 77 45                    http://www-frec.bull.fr
> fax : +33 (0)4 76 29 77 70                 mailto:Xavier.Bru@bull.net
> addr: BULL, 1 rue de Provence, BP 208, 38432 Echirolles Cedex, FRANCE
> _____________________________________________________________________
> 
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Mon Dec 1 12:29:11 2003

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:20 EST