* powerpc: Incorrect stw operand modifier in __set_pte_at
@ 2020-07-08 14:45 Mathieu Desnoyers
2020-07-08 16:16 ` Christophe Leroy
0 siblings, 1 reply; 3+ messages in thread
From: Mathieu Desnoyers @ 2020-07-08 14:45 UTC (permalink / raw)
To: Michael Ellerman, Benjamin Herrenschmidt, Paul Mackerras; +Cc: linuxppc-dev
Hi,
Reviewing use of the patterns "Un%Xn" with lwz and stw instructions
(where n should be the operand number) within the Linux kernel led
me to spot those 2 weird cases:
arch/powerpc/include/asm/nohash/pgtable.h:__set_pte_at()
__asm__ __volatile__("\
stw%U0%X0 %2,%0\n\
eieio\n\
stw%U0%X0 %L2,%1"
: "=m" (*ptep), "=m" (*((unsigned char *)ptep+4))
: "r" (pte) : "memory");
I would have expected the stw to be:
stw%U1%X1 %L2,%1"
and:
arch/powerpc/include/asm/book3s/32/pgtable.h:__set_pte_at()
__asm__ __volatile__("\
stw%U0%X0 %2,%0\n\
eieio\n\
stw%U0%X0 %L2,%1"
: "=m" (*ptep), "=m" (*((unsigned char *)ptep+4))
: "r" (pte) : "memory");
where I would have expected:
stw%U1%X1 %L2,%1"
Is it a bug or am I missing something ?
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: powerpc: Incorrect stw operand modifier in __set_pte_at
2020-07-08 14:45 powerpc: Incorrect stw operand modifier in __set_pte_at Mathieu Desnoyers
@ 2020-07-08 16:16 ` Christophe Leroy
2020-07-09 0:30 ` Segher Boessenkool
0 siblings, 1 reply; 3+ messages in thread
From: Christophe Leroy @ 2020-07-08 16:16 UTC (permalink / raw)
To: Mathieu Desnoyers, Michael Ellerman, Benjamin Herrenschmidt,
Paul Mackerras, Kumar Gala
Cc: linuxppc-dev
Le 08/07/2020 à 16:45, Mathieu Desnoyers a écrit :
> Hi,
>
> Reviewing use of the patterns "Un%Xn" with lwz and stw instructions
> (where n should be the operand number) within the Linux kernel led
> me to spot those 2 weird cases:
>
> arch/powerpc/include/asm/nohash/pgtable.h:__set_pte_at()
>
> __asm__ __volatile__("\
> stw%U0%X0 %2,%0\n\
> eieio\n\
> stw%U0%X0 %L2,%1"
> : "=m" (*ptep), "=m" (*((unsigned char *)ptep+4))
> : "r" (pte) : "memory");
>
> I would have expected the stw to be:
>
> stw%U1%X1 %L2,%1"
>
> and:
> arch/powerpc/include/asm/book3s/32/pgtable.h:__set_pte_at()
>
> __asm__ __volatile__("\
> stw%U0%X0 %2,%0\n\
> eieio\n\
> stw%U0%X0 %L2,%1"
> : "=m" (*ptep), "=m" (*((unsigned char *)ptep+4))
> : "r" (pte) : "memory");
>
> where I would have expected:
>
> stw%U1%X1 %L2,%1"
>
> Is it a bug or am I missing something ?
Well spotted. I guess it's definitly a bug.
Introduced 12 years ago by commit
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9bf2b5cd
("powerpc: Fixes for CONFIG_PTE_64BIT for SMP support").
It's gone unnoticed until now it seems.
Can you submit a patch for it ?
Christophe
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: powerpc: Incorrect stw operand modifier in __set_pte_at
2020-07-08 16:16 ` Christophe Leroy
@ 2020-07-09 0:30 ` Segher Boessenkool
0 siblings, 0 replies; 3+ messages in thread
From: Segher Boessenkool @ 2020-07-09 0:30 UTC (permalink / raw)
To: Christophe Leroy; +Cc: Mathieu Desnoyers, Paul Mackerras, linuxppc-dev
On Wed, Jul 08, 2020 at 06:16:54PM +0200, Christophe Leroy wrote:
> Le 08/07/2020 à 16:45, Mathieu Desnoyers a écrit :
> >Reviewing use of the patterns "Un%Xn" with lwz and stw instructions
> >(where n should be the operand number) within the Linux kernel led
> >me to spot those 2 weird cases:
> >
> >arch/powerpc/include/asm/nohash/pgtable.h:__set_pte_at()
> >
> > __asm__ __volatile__("\
> > stw%U0%X0 %2,%0\n\
> > eieio\n\
> > stw%U0%X0 %L2,%1"
> > : "=m" (*ptep), "=m" (*((unsigned char *)ptep+4))
> > : "r" (pte) : "memory");
> >
> >I would have expected the stw to be:
> >
> > stw%U1%X1 %L2,%1"
> >
> >and:
> >arch/powerpc/include/asm/book3s/32/pgtable.h:__set_pte_at()
> >
> > __asm__ __volatile__("\
> > stw%U0%X0 %2,%0\n\
> > eieio\n\
> > stw%U0%X0 %L2,%1"
> > : "=m" (*ptep), "=m" (*((unsigned char *)ptep+4))
> > : "r" (pte) : "memory");
> >
> >where I would have expected:
> >
> > stw%U1%X1 %L2,%1"
> >
> >Is it a bug or am I missing something ?
>
> Well spotted. I guess it's definitly a bug.
Yes :-)
> Introduced 12 years ago by commit
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9bf2b5cd
> ("powerpc: Fixes for CONFIG_PTE_64BIT for SMP support").
>
> It's gone unnoticed until now it seems.
Apparently it always could use offset form memory accesses? Or even
when not, %0 and %1 are likely to use the same base register for
addressing :-)
Segher
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-07-09 0:33 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-08 14:45 powerpc: Incorrect stw operand modifier in __set_pte_at Mathieu Desnoyers
2020-07-08 16:16 ` Christophe Leroy
2020-07-09 0:30 ` Segher Boessenkool
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).