All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: Peter Zijlstra <peterz@infradead.org>, Will Deacon <will@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	PowerPC <linuxppc-dev@lists.ozlabs.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Stephen Rothwell <sfr@canb.auug.org.au>,
	Linux Next Mailing List <linux-next@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: linux-next: build failure on powerpc 8xx with 16k pages
Date: Thu, 4 Jun 2020 14:35:14 +0000	[thread overview]
Message-ID: <1160ea76-729b-60a2-31d6-998c57b77858@csgroup.eu> (raw)
In-Reply-To: <20200604120007.GA4117@hirez.programming.kicks-ass.net>



On 06/04/2020 12:00 PM, Peter Zijlstra wrote:
> On Thu, Jun 04, 2020 at 12:17:23PM +0100, Will Deacon wrote:
>> Hi, [+Peter]
>>
>> On Thu, Jun 04, 2020 at 10:48:03AM +0000, Christophe Leroy wrote:
>>> Using mpc885_ads_defconfig with CONFIG_PPC_16K_PAGES instead of
>>> CONFIG_PPC_4K_PAGES, getting the following build failure:
>>>
>>>    CC      mm/gup.o
>>> In file included from ./include/linux/kernel.h:11:0,
>>>                   from mm/gup.c:2:
>>> In function 'gup_hugepte.constprop',
>>>      inlined from 'gup_huge_pd.isra.78' at mm/gup.c:2465:8:
>>> ./include/linux/compiler.h:392:38: error: call to '__compiletime_assert_257'
>>> declared with attribute error: Unsupported access size for
>>> {READ,WRITE}_ONCE().
>>>    _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
>>>                                        ^
>>> ./include/linux/compiler.h:373:4: note: in definition of macro
>>> '__compiletime_assert'
>>>      prefix ## suffix();    \
>>>      ^
>>> ./include/linux/compiler.h:392:2: note: in expansion of macro
>>> '_compiletime_assert'
>>>    _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
>>>    ^
>>> ./include/linux/compiler.h:405:2: note: in expansion of macro
>>> 'compiletime_assert'
>>>    compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
>>>    ^
>>> ./include/linux/compiler.h:291:2: note: in expansion of macro
>>> 'compiletime_assert_rwonce_type'
>>>    compiletime_assert_rwonce_type(x);    \
>>>    ^
>>> mm/gup.c:2428:8: note: in expansion of macro 'READ_ONCE'
>>>    pte = READ_ONCE(*ptep);
>>>          ^
>>> In function 'gup_get_pte',
>>>      inlined from 'gup_pte_range' at mm/gup.c:2228:9,
>>>      inlined from 'gup_pmd_range' at mm/gup.c:2613:15,
>>>      inlined from 'gup_pud_range' at mm/gup.c:2641:15,
>>>      inlined from 'gup_p4d_range' at mm/gup.c:2666:15,
>>>      inlined from 'gup_pgd_range' at mm/gup.c:2694:15,
>>>      inlined from 'internal_get_user_pages_fast' at mm/gup.c:2785:3:
>>
>> At first glance, this looks like a real bug in the 16k page code -- you're
>> loading the pte non-atomically on the fast GUP path and so you're prone to
>> tearing, which probably isn't what you want. For a short-term hack, I'd
>> suggest having CONFIG_HAVE_FAST_GUP depend on !CONFIG_PPC_16K_PAGES, but if
>> you want to support this them you'll need to rework your pte_t so that it
>> can be loaded atomically.
> 
> Looking at commit 55c8fc3f49302, they're all the exact same value, so
> what they could do is grow another special gup_get_pte() variant that
> just loads the first value.
> 
> Also, per that very same commit, there's a distinct lack of WRITE_ONCE()
> in the pte_update() / __set_pte_at() paths for much of Power.
> 

Thanks for the idea.

Now I get the same issue at

    CC      mm/mincore.o
In file included from ./include/asm-generic/bug.h:5:0,
                  from ./arch/powerpc/include/asm/bug.h:109,
                  from ./include/linux/bug.h:5,
                  from ./include/linux/mmdebug.h:5,
                  from ./include/linux/mm.h:9,
                  from ./include/linux/pagemap.h:8,
                  from mm/mincore.c:11:
In function 'huge_ptep_get',
     inlined from 'mincore_hugetlb' at mm/mincore.c:35:20:
./include/linux/compiler.h:392:38: error: call to 
'__compiletime_assert_218' declared with attribute error: Unsupported 
access size for {READ,WRITE}_ONCE().
   _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
                                       ^
./include/linux/compiler.h:373:4: note: in definition of macro 
'__compiletime_assert'
     prefix ## suffix();    \
     ^
./include/linux/compiler.h:392:2: note: in expansion of macro 
'_compiletime_assert'
   _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
   ^
./include/linux/compiler.h:405:2: note: in expansion of macro 
'compiletime_assert'
   compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
   ^
./include/linux/compiler.h:291:2: note: in expansion of macro 
'compiletime_assert_rwonce_type'
   compiletime_assert_rwonce_type(x);    \
   ^
./include/asm-generic/hugetlb.h:125:9: note: in expansion of macro 
'READ_ONCE'
   return READ_ONCE(*ptep);
          ^
make[2]: *** [mm/mincore.o] Error 1

I guess for this one I have to implement platform specific huge_ptep_get()

Christophe

WARNING: multiple messages have this Message-ID (diff)
From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: Peter Zijlstra <peterz@infradead.org>, Will Deacon <will@kernel.org>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux Next Mailing List <linux-next@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	PowerPC <linuxppc-dev@lists.ozlabs.org>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: linux-next: build failure on powerpc 8xx with 16k pages
Date: Thu, 4 Jun 2020 14:35:14 +0000	[thread overview]
Message-ID: <1160ea76-729b-60a2-31d6-998c57b77858@csgroup.eu> (raw)
In-Reply-To: <20200604120007.GA4117@hirez.programming.kicks-ass.net>



On 06/04/2020 12:00 PM, Peter Zijlstra wrote:
> On Thu, Jun 04, 2020 at 12:17:23PM +0100, Will Deacon wrote:
>> Hi, [+Peter]
>>
>> On Thu, Jun 04, 2020 at 10:48:03AM +0000, Christophe Leroy wrote:
>>> Using mpc885_ads_defconfig with CONFIG_PPC_16K_PAGES instead of
>>> CONFIG_PPC_4K_PAGES, getting the following build failure:
>>>
>>>    CC      mm/gup.o
>>> In file included from ./include/linux/kernel.h:11:0,
>>>                   from mm/gup.c:2:
>>> In function 'gup_hugepte.constprop',
>>>      inlined from 'gup_huge_pd.isra.78' at mm/gup.c:2465:8:
>>> ./include/linux/compiler.h:392:38: error: call to '__compiletime_assert_257'
>>> declared with attribute error: Unsupported access size for
>>> {READ,WRITE}_ONCE().
>>>    _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
>>>                                        ^
>>> ./include/linux/compiler.h:373:4: note: in definition of macro
>>> '__compiletime_assert'
>>>      prefix ## suffix();    \
>>>      ^
>>> ./include/linux/compiler.h:392:2: note: in expansion of macro
>>> '_compiletime_assert'
>>>    _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
>>>    ^
>>> ./include/linux/compiler.h:405:2: note: in expansion of macro
>>> 'compiletime_assert'
>>>    compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
>>>    ^
>>> ./include/linux/compiler.h:291:2: note: in expansion of macro
>>> 'compiletime_assert_rwonce_type'
>>>    compiletime_assert_rwonce_type(x);    \
>>>    ^
>>> mm/gup.c:2428:8: note: in expansion of macro 'READ_ONCE'
>>>    pte = READ_ONCE(*ptep);
>>>          ^
>>> In function 'gup_get_pte',
>>>      inlined from 'gup_pte_range' at mm/gup.c:2228:9,
>>>      inlined from 'gup_pmd_range' at mm/gup.c:2613:15,
>>>      inlined from 'gup_pud_range' at mm/gup.c:2641:15,
>>>      inlined from 'gup_p4d_range' at mm/gup.c:2666:15,
>>>      inlined from 'gup_pgd_range' at mm/gup.c:2694:15,
>>>      inlined from 'internal_get_user_pages_fast' at mm/gup.c:2785:3:
>>
>> At first glance, this looks like a real bug in the 16k page code -- you're
>> loading the pte non-atomically on the fast GUP path and so you're prone to
>> tearing, which probably isn't what you want. For a short-term hack, I'd
>> suggest having CONFIG_HAVE_FAST_GUP depend on !CONFIG_PPC_16K_PAGES, but if
>> you want to support this them you'll need to rework your pte_t so that it
>> can be loaded atomically.
> 
> Looking at commit 55c8fc3f49302, they're all the exact same value, so
> what they could do is grow another special gup_get_pte() variant that
> just loads the first value.
> 
> Also, per that very same commit, there's a distinct lack of WRITE_ONCE()
> in the pte_update() / __set_pte_at() paths for much of Power.
> 

Thanks for the idea.

Now I get the same issue at

    CC      mm/mincore.o
In file included from ./include/asm-generic/bug.h:5:0,
                  from ./arch/powerpc/include/asm/bug.h:109,
                  from ./include/linux/bug.h:5,
                  from ./include/linux/mmdebug.h:5,
                  from ./include/linux/mm.h:9,
                  from ./include/linux/pagemap.h:8,
                  from mm/mincore.c:11:
In function 'huge_ptep_get',
     inlined from 'mincore_hugetlb' at mm/mincore.c:35:20:
./include/linux/compiler.h:392:38: error: call to 
'__compiletime_assert_218' declared with attribute error: Unsupported 
access size for {READ,WRITE}_ONCE().
   _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
                                       ^
./include/linux/compiler.h:373:4: note: in definition of macro 
'__compiletime_assert'
     prefix ## suffix();    \
     ^
./include/linux/compiler.h:392:2: note: in expansion of macro 
'_compiletime_assert'
   _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
   ^
./include/linux/compiler.h:405:2: note: in expansion of macro 
'compiletime_assert'
   compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
   ^
./include/linux/compiler.h:291:2: note: in expansion of macro 
'compiletime_assert_rwonce_type'
   compiletime_assert_rwonce_type(x);    \
   ^
./include/asm-generic/hugetlb.h:125:9: note: in expansion of macro 
'READ_ONCE'
   return READ_ONCE(*ptep);
          ^
make[2]: *** [mm/mincore.o] Error 1

I guess for this one I have to implement platform specific huge_ptep_get()

Christophe

  reply	other threads:[~2020-06-04 14:39 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-04 10:48 linux-next: build failure on powerpc 8xx with 16k pages Christophe Leroy
2020-06-04 11:17 ` Will Deacon
2020-06-04 11:17   ` Will Deacon
2020-06-04 12:00   ` Peter Zijlstra
2020-06-04 12:00     ` Peter Zijlstra
2020-06-04 14:35     ` Christophe Leroy [this message]
2020-06-04 14:35       ` Christophe Leroy
2020-06-04 16:10       ` Will Deacon
2020-06-04 16:10         ` Will Deacon
2020-06-04 13:55   ` Christophe Leroy
2020-06-04 13:55     ` Christophe Leroy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1160ea76-729b-60a2-31d6-998c57b77858@csgroup.eu \
    --to=christophe.leroy@csgroup.eu \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-next@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=peterz@infradead.org \
    --cc=sfr@canb.auug.org.au \
    --cc=tglx@linutronix.de \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.