Mel Gorman wrote: > On (24/07/07 22:01), Andrew Morton didst pronounce: >> On Tue, 13 Mar 2007 10:42:02 +0000 [EMAIL PROTECTED] (Mel Gorman) wrote: >> >>> There are problems in the use of SPARSEMEM and pageblock flags that causes >>> problems on ia64. >>> >>> <SNIP> >> SuperH allmodconfig blew up: >> >> mm/sparse.c: In function `sparse_init': >> mm/sparse.c:482: error: implicit declaration of function >> `sparse_early_usemap_alloc' >> mm/sparse.c:482: warning: assignment makes pointer from integer without a >> cast >> mm/sparse.c: In function `sparse_add_one_section': >> mm/sparse.c:553: error: implicit declaration of function >> `__kmalloc_section_usemap' >> mm/sparse.c:553: warning: assignment makes pointer from integer without a >> cast > > This error is due to a bad interaction between > generic-virtual-memmap-support-for-sparsemem.patch and > fix-corruption-of-memmap-on-ia64-sparsemem-when-mem_section-is-not-a-power-of-2.patch > . Functions that are needed whether CONFIG_SPARSEMEM_VMEMMAP is set are > not are depending on CONFIG_SPARSEMEM_VMEMMAP . This breaks on arch/sh > for example where SPARSEMEM may be set but not NUMA. > > Signed-off-by: Mel Gorman <[EMAIL PROTECTED]> > > --- > sparse.c | 58 +++++++++++++++++++++++++++++----------------------------- > 1 file changed, 29 insertions(+), 29 deletions(-) > > > diff -rup -X /usr/src/patchset-0.6/bin//dontdiff > linux-2.6.23-rc1-mm1-clean/mm/sparse.c > linux-2.6.23-rc1-mm1-005-sh-sparsemem-fix/mm/sparse.c > --- linux-2.6.23-rc1-mm1-clean/mm/sparse.c 2007-07-25 13:43:30.000000000 > +0100 > +++ linux-2.6.23-rc1-mm1-005-sh-sparsemem-fix/mm/sparse.c 2007-07-25 > 14:27:58.000000000 +0100 > @@ -220,6 +220,35 @@ void *alloc_bootmem_high_node(pg_data_t > return NULL; > } > > +static unsigned long usemap_size(void) > +{ > + unsigned long size_bytes; > + size_bytes = roundup(SECTION_BLOCKFLAGS_BITS, 8) / 8; > + size_bytes = roundup(size_bytes, sizeof(unsigned long)); > + return size_bytes; > +} > + > +#ifdef CONFIG_MEMORY_HOTPLUG > +static unsigned long *__kmalloc_section_usemap(void) > +{ > + return kmalloc(usemap_size(), GFP_KERNEL); > +} > +#endif /* CONFIG_MEMORY_HOTPLUG */ > + > +static unsigned long *sparse_early_usemap_alloc(unsigned long pnum) > +{ > + unsigned long *usemap; > + struct mem_section *ms = __nr_to_section(pnum); > + int nid = sparse_early_nid(ms); > + > + usemap = alloc_bootmem_node(NODE_DATA(nid), usemap_size()); > + if (usemap) > + return usemap; > + > + printk(KERN_WARNING "%s: allocation failed\n", __FUNCTION__); > + return NULL; > +} > + > #ifdef CONFIG_SPARSEMEM_VMEMMAP > /* > * Virtual Memory Map support > @@ -254,35 +283,6 @@ void *alloc_bootmem_high_node(pg_data_t > * require one PTE/TLB per PAGE_SIZE chunk of the virtual memory map. > */ > > -static unsigned long usemap_size(void) > -{ > - unsigned long size_bytes; > - size_bytes = roundup(SECTION_BLOCKFLAGS_BITS, 8) / 8; > - size_bytes = roundup(size_bytes, sizeof(unsigned long)); > - return size_bytes; > -} > - > -#ifdef CONFIG_MEMORY_HOTPLUG > -static unsigned long *__kmalloc_section_usemap(void) > -{ > - return kmalloc(usemap_size(), GFP_KERNEL); > -} > -#endif /* CONFIG_MEMORY_HOTPLUG */ > - > -static unsigned long *sparse_early_usemap_alloc(unsigned long pnum) > -{ > - unsigned long *usemap; > - struct mem_section *ms = __nr_to_section(pnum); > - int nid = sparse_early_nid(ms); > - > - usemap = alloc_bootmem_node(NODE_DATA(nid), usemap_size()); > - if (usemap) > - return usemap; > - > - printk(KERN_WARNING "%s: allocation failed\n", __FUNCTION__); > - return NULL; > -} > - > /* > * Allocate a block of memory to be used to back the virtual memory map > * or to back the page tables that are used to create the mapping.
This also affects NUMA-Q in some SPARSEMEM configurations. Applying this fixes it up. Looks very much like diff has dropped the stuff within my #ifdef 'incorrectly' and as such is a merge error. This should probabally be considered a fix to this patch: fix-corruption-of-memmap-on-ia64-sparsemem-when-mem_section-is-not-a-power-of-2.patch Acked-by: Andy Whitcroft <[EMAIL PROTECTED]> -apw - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/