On (08/11/07 08:52), Zou Nan hai didst pronounce:> Resend the patch for more people to review> > On some single node x64 system with huge amount of physical memory e.g >> 64G. the memmap size maybe very big. > > If the memmap is allocated from low pages, it may occupies too much> memory below 4G. > then swiotlb could fail to reserve bounce buffer under 4G which will> lead to boot failure.> > This patch will first try to allocate memmap memory above 4G in sparse> vmemmap code. > If it failed, it will allocate memmap above MAX_DMA_ADDRESS. > This patch is against 2.6.24-rc1-git14>

You never state that you depend on the strict_goal patch either here or ina leader mail. The usual way of getting peoples attention is to have threemails. In your case it would be

Wrong markup there I believe. The __meminit markup is for functionsthat are needed at runtime when memory is hot-added or hot-removed.Bootmem functions do not qualify. __init is sufficient.

The name is confusing as well. I don't know what a high node is, but Ithink you mean alloc_bootmem_highmem or alloc_bootmem_highmem_zone.That in *itself* is confusing on x86_64 because the memory above 4GiB isZONE_NORMAL, not ZONE_HIGHMEM. Calling it alloc_bootmem_nondma() makesit worse.

I think you need to rework this to have an arch-specific functionlike arch_alloc_vmemmap_block() that by default allocates with____alloc_bootmem_node() and otherwise uses an arch-specific function.In this case, it would know to call __alloc_bootmem_core() with the properaddressing limits.

Confusing. Your declaration here makes it look like a bootmem APIfunction but it is an arch-specific function that only exists forx86-64. I know it gets overridden later when a weak symbol but the morecommon approach is to have Kconfig define something likeARCH_HIGHMEM_VMEMMAP and