lkml.org 
[lkml]   [2003]   [Nov]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: Bootmem broke ARM
On Mon, Nov 17, 2003 at 10:04:40AM -0800, Jesse Barnes wrote:
> On Sun, Nov 16, 2003 at 12:11:31PM -0800, Andrew Morton wrote:
> > Russell King <rmk+lkml@arm.linux.org.uk> wrote:
> > > With previous kernels, the nodes are added to the list in reverse order,
> > > so architecture code knew we had to add the highest PFN first and the
> > > lowest PFN node last.
>
> You're right, I think the arch code should probably worry about this.
>
> > It looks to be bogus on ia64 as well, for which the patch was written.
>
> Yep, I think it is bogus. There's only one caller on ia64 that would be
> affected--swiotlb_init(), and afaik multi-node systems won't be using
> that code (except maybe NEC?), so even if the pgdat list is out of order
> we should be ok. If not I'll fix the ia64 discontig code.

Ok, I've received word from the original reporter on the ARM lists that
this patch does indeed solve their problem.

Linus - can this be merged for 2.6.0-test10 please, or do you consider
this too large a change?

===== mm/bootmem.c 1.22 vs edited =====
--- 1.22/mm/bootmem.c Sun Sep 28 10:11:27 2003
+++ edited/mm/bootmem.c Mon Nov 17 10:44:59 2003
@@ -48,24 +48,8 @@
bootmem_data_t *bdata = pgdat->bdata;
unsigned long mapsize = ((end - start)+7)/8;

-
- /*
- * 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;
- }
+ pgdat->pgdat_next = pgdat_list;
+ pgdat_list = pgdat;

mapsize = (mapsize + (sizeof(long) - 1UL)) & ~(sizeof(long) - 1UL);
bdata->node_bootmem_map = phys_to_virt(mapstart << PAGE_SHIFT);
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:58    [W:0.042 / U:0.060 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site