Re: sparc compile error caused by x86 arch updates

Jeremy Fitzhardinge
2008-01-31T16:51:21Z

Adrian Bunk wrote:
> On Thu, Jan 31, 2008 at 05:15:23PM +0100, Ingo Molnar wrote:
>
>> * Adrian Bunk <bunk@kernel.org> wrote:
>>
>>
>>> On Thu, Jan 31, 2008 at 05:00:33PM +0100, Ingo Molnar wrote:
>>>
>>>> * Adrian Bunk <bunk@kernel.org> wrote:
>>>>
>>>>
>>>>> You tested x86 but broke more than half a dozen other archtectures,
>>>>> with at least 3 different commits breaking other architectures.
>>>>>
>>>> Note that all known breakages are fixed in current -git, except for the
>>>> s390 problem that Martin/Nick posted the fix.
>>>>
>>> What about the breakages caused by commit
>>> a5a19c63f4e55e32dc0bc3d936d7f94793d8b380 (this commit broke the
>>> defconfig compilation on at least avr32, blackfin, sh, sparc and uml)?
>>>
>> the patch below fixes that.
>>
>
> The sparc breakage (might not have been reported until now and I
> bisected it just a few minutes ago) is caused by the following part of
> commit a5a19c63f4e55e32dc0bc3d936d7f94793d8b380:
>
> --- a/include/linux/swap.h
> +++ b/include/linux/swap.h
> @@ -6,6 +6,7 @@
> #include <linux/mmzone.h>
> #include <linux/list.h>
> #include <linux/sched.h>
> +#include <linux/pagemap.h>
>
> #include <asm/atomic.h>
> #include <asm/page.h>
>
>
>

Drat. I added that because of

/* only sparc can not include linux/pagemap.h in this file
* so leave page_cache_release and release_pages undeclared... */
#define free_page_and_swap_cache(page) \
page_cache_release(page)
#define free_pages_and_swap_cache(pages, nr) \
release_pages((pages), (nr), 0);

But I guess I overlooked the comment...

I guess the fix is to scatter linux/pagemap.h into the appropriate
places where these macros are used (asm-generic/tlb.h, for a start).

J
> The compile error with the sparc defconfig is:
>
> <-- snip -->
>
> ...
> CC init/main.o
> In file included from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/highmem.h:24,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h:10,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/swap.h:9,
> from include2/asm/pgtable.h:15,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/mm.h:39,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/asm-generic/dma-mapping.h:17,
> from include2/asm/dma-mapping.h:6,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/dma-mapping.h:52,
> from include2/asm/sbus.h:10,
> from include2/asm/dma.h:13,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/bootmem.h:8,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/init/main.c:26:
> include2/asm/highmem.h: In function 'kmap':
> include2/asm/highmem.h:60: error: implicit declaration of function 'PageHighMem'
> include2/asm/highmem.h:61: error: implicit declaration of function 'page_address'
> include2/asm/highmem.h:61: warning: return makes pointer from integer without a cast
> In file included from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/swap.h:9,
> from include2/asm/pgtable.h:15,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/mm.h:39,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/asm-generic/dma-mapping.h:17,
> from include2/asm/dma-mapping.h:6,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/dma-mapping.h:52,
> from include2/asm/sbus.h:10,
> from include2/asm/dma.h:13,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/bootmem.h:8,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/init/main.c:26:
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h: In function 'lock_page':
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h:169: error: implicit declaration of function 'TestSetPageLocked'
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h: In function 'wait_on_page_locked':
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h:199: error: implicit declaration of function 'PageLocked'
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h:200: error: 'PG_locked' undeclared (first use in this function)
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h:200: error: (Each undeclared identifier is reported only once
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h:200: error: for each function it appears in.)
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h: In function 'wait_on_page_writeback':
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h:208: error: implicit declaration of function 'PageWriteback'
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/pagemap.h:209: error: 'PG_writeback' undeclared (first use in this function)
> In file included from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/asm-generic/dma-mapping.h:17,
> from include2/asm/dma-mapping.h:6,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/dma-mapping.h:52,
> from include2/asm/sbus.h:10,
> from include2/asm/dma.h:13,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/bootmem.h:8,
> from /home/bunk/linux/kernel-2.6/git/linux-2.6/init/main.c:26:
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/mm.h: At top level:
> /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/mm.h:556: error: conflicting types for 'page_address'
> include2/asm/highmem.h:61: error: previous implicit declaration of 'page_address' was here
> make[2]: *** [init/main.o] Error 1
> make[1]: *** [init] Error 2
> make: *** [sub-make] Error 2
>
> <-- snip -->
>
>
>
>> Ingo
>>
>
> cu
> Adrian
>
>