Re: BUILD_BUG() in smaps_account() (was: Re: [PATCHv12 01/37] mm, proc: adjust PSS calculation)

From: Tony Luck
Date: Thu Jan 21 2016 - 14:31:53 EST


On Mon, Jan 18, 2016 at 6:56 AM, Geert Uytterhoeven
<geert@xxxxxxxxxxxxxx> wrote:
> Hi Kirill,
>
> On Mon, Jan 18, 2016 at 12:40 PM, Kirill A. Shutemov
> <kirill@xxxxxxxxxxxxx> wrote:
>> On Mon, Jan 18, 2016 at 11:09:00AM +0100, Geert Uytterhoeven wrote:
>>> fs/built-in.o: In function `smaps_account':
>>> task_mmu.c:(.text+0x4f8fa): undefined reference to
>>> `__compiletime_assert_471'
>>>
>>> Seen with m68k/allmodconfig or allyesconfig and gcc version 4.1.2 20061115
>>> (prerelease) (Ubuntu 4.1.1-21).
>>> Not seen when compiling the affected file with gcc 4.6.3 or 4.9.0, or with the
>>> m68k defconfigs.
>>
>> Ughh.
>>
>> Please, test this:
>>
>> From 5ac27019f886eef033e84c9579e09099469ccbf9 Mon Sep 17 00:00:00 2001
>> From: "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx>
>> Date: Mon, 18 Jan 2016 14:32:49 +0300
>> Subject: [PATCH] mm, proc: add workaround for old compilers
>>
>> For THP=n, HPAGE_PMD_NR in smaps_account() expands to BUILD_BUG().
>> That's fine since this codepath is eliminated by modern compilers.
>>
>> But older compilers have not that efficient dead code elimination.
>> It causes problem at least with gcc 4.1.2 on m68k.
>>
>> Let's replace HPAGE_PMD_NR with 1 << compound_order(page).
>>
>> Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>
>> Reported-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
>
> Thanks, that fixes it!
>
> Tested-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>

Same breakage on ia64 (with gcc 4.3.4). Same fix works for me.

Tested-by: Tony Luck <tony.luck@xxxxxxxxx>