All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Aaron Lindsay <aaron@os.amperecomputing.com>
Cc: cota@braap.org, richard.henderson@linaro.org, qemu-devel@nongnu.org
Subject: Re: plugins: Missing Store Exclusive Memory Accesses
Date: Thu, 21 Oct 2021 13:28:32 +0100	[thread overview]
Message-ID: <87mtn2tv56.fsf@linaro.org> (raw)
In-Reply-To: <YXCA62xdRDeueQR6@strawberry.localdomain>


Aaron Lindsay <aaron@os.amperecomputing.com> writes:

> On Oct 20 18:54, Alex Bennée wrote:
>> Have you got a test case you are using so I can try and replicate the
>> failure you are seeing? So far by inspection everything looks OK to me.
>
> I took some time today to put together a minimal(ish) reproducer using
> usermode. The source files used are below, I compiled the test binary on an
> AArch64 system using:
>
> $ gcc -g -o stxp stxp.s stxp.c
>
> Then built the plugin from stxp_plugin.cc, and ran it all like:
>
> qemu-aarch64 \
>     -cpu cortex-a57 \
>     -D stxp_plugin.log \
>     -d plugin \
>     -plugin 'stxp_plugin.so' \
>     ./stxp
>
> I observe that, for me, the objdump of stxp contains:
> 000000000040070c <loop>:
>   40070c:   f9800011    prfm    pstl1strm, [x0]
>   400710:   c87f4410    ldxp    x16, x17, [x0]
>   400714:   c8300c02    stxp    w16, x2, x3, [x0]
>   400718:   f1000652    subs    x18, x18, #0x1
>   40071c:   54000040    b.eq    400724 <done>  // b.none
>   400720:   17fffffb    b   40070c <loop>
>
> But the output in stxp_plugin.log looks something like:
> 	Executing PC: 0x40070c
> 	Executing PC: 0x400710
> 	PC 0x400710 accessed memory at 0x550080ec70
> 	PC 0x400710 accessed memory at 0x550080ec78
> 	Executing PC: 0x400714
> 	Executing PC: 0x400718
> 	Executing PC: 0x40071c
> 	Executing PC: 0x400720
>
> From this, I believe the ldxp instruction at PC 0x400710 is reporting two
> memory accesses but the stxp instruction at 0x400714 is not.

This is fascinating but I can't replicate your results. I get the
following pattern:

  Executing PC: 0x400910                                                                
  Executing PC: 0x400914                                                                
  PC 0x400914 accessed memory at 0x55007fffd0 
  PC 0x400914 accessed memory at 0x55007fffd8                                           
  Executing PC: 0x400918                                                                
  PC 0x400918 accessed memory at 0x55007fffd0 
  PC 0x400918 accessed memory at 0x55007fffd8                                           
  PC 0x400918 accessed memory at 0x55007fffd0                                           
  PC 0x400918 accessed memory at 0x55007fffd8                                           
  Executing PC: 0x40091c                                                                
  Executing PC: 0x400920                                                                
  Executing PC: 0x400924                                                                
  Executing PC: 0x400910                                                                
  Executing PC: 0x400914                                                                
  PC 0x400914 accessed memory at 0x55007fffd0                                           
  PC 0x400914 accessed memory at 0x55007fffd8                                           
  Executing PC: 0x400918                                                                
  PC 0x400918 accessed memory at 0x55007fffd0                                           
  PC 0x400918 accessed memory at 0x55007fffd8                                           
  PC 0x400918 accessed memory at 0x55007fffd0                                           
  PC 0x400918 accessed memory at 0x55007fffd8                                           
  Executing PC: 0x40091c                                                                
  Executing PC: 0x400920                                                                
  Executing PC: 0x400924                                                                
  Executing PC: 0x400910                                                                
  Executing PC: 0x400914                                                                
  PC 0x400914 accessed memory at 0x55007fffd0                                           
  PC 0x400914 accessed memory at 0x55007fffd8                                           
  Executing PC: 0x400918                                                                
  PC 0x400918 accessed memory at 0x55007fffd0                                           
  PC 0x400918 accessed memory at 0x55007fffd8                                           
  PC 0x400918 accessed memory at 0x55007fffd0 
  PC 0x400918 accessed memory at 0x55007fffd8                                           
  Executing PC: 0x40091c                                                                
  Executing PC: 0x400920                                                                
  Executing PC: 0x400924                                                                
  Executing PC: 0x400910                                                                
  Executing PC: 0x400914                                                                
  PC 0x400914 accessed memory at 0x55007fffd0                                           
  PC 0x400914 accessed memory at 0x55007fffd8                                           
  Executing PC: 0x400918                                                                
  PC 0x400918 accessed memory at 0x55007fffd0 
  PC 0x400918 accessed memory at 0x55007fffd8                                           
  PC 0x400918 accessed memory at 0x55007fffd0                                           
  PC 0x400918 accessed memory at 0x55007fffd8 

It's a bit clearer if you use the contrib/execlog plugin:

  ./qemu-aarch64 -plugin contrib/plugins/libexeclog.so -d plugin  ./tests/tcg/aarch64-linux-user/stxp

  0, 0x400910, 0xf9800011, "prfm pstl1strm, [x0]
  0, 0x400914, 0xc87f4410, "ldxp x16, x17, [x0]", load, 0x55007fffd0, load, 0x55007fffd8 
  0, 0x400918, 0xc8300c02, "stxp w16, x2, x3, [x0]", load, 0x55007fffd0, load, 0x55007fffd8, store, 0x55007fffd0, store, 0x55007fffd8 
  0, 0x40091c, 0xf1000652, "subs x18, x18, #1"
  0, 0x400920, 0x54000040, "b.eq #0x400928"
  0, 0x400924, 0x17fffffb, "b #0x400910"
  0, 0x400910, 0xf9800011, "prfm pstl1strm, [x0]
  0, 0x400914, 0xc87f4410, "ldxp x16, x17, [x0]", load, 0x55007fffd0, load, 0x55007fffd8 
  0, 0x400918, 0xc8300c02, "stxp w16, x2, x3, [x0]", load, 0x55007fffd0, load, 0x55007fffd8, store, 0x55007fffd0, store, 0x55007fffd8 
  0, 0x40091c, 0xf1000652, "subs x18, x18, #1"
  0, 0x400920, 0x54000040, "b.eq #0x400928"
  0, 0x400924, 0x17fffffb, "b #0x400910"
  0, 0x400910, 0xf9800011, "prfm pstl1strm, [x0]
  0, 0x400914, 0xc87f4410, "ldxp x16, x17, [x0]", load, 0x55007fffd0, load, 0x55007fffd8 
  0, 0x400918, 0xc8300c02, "stxp w16, x2, x3, [x0]", load, 0x55007fffd0, load, 0x55007fffd8, store, 0x55007fffd0, store, 0x55007fffd8 
  0, 0x40091c, 0xf1000652, "subs x18, x18, #1"
  0, 0x400920, 0x54000040, "b.eq #0x400928"
  0, 0x400924, 0x17fffffb, "b #0x400910"
  0, 0x400910, 0xf9800011, "prfm pstl1strm, [x0]
  0, 0x400914, 0xc87f4410, "ldxp x16, x17, [x0]", load, 0x55007fffd0, load, 0x55007fffd8 
  0, 0x400918, 0xc8300c02, "stxp w16, x2, x3, [x0]", load, 0x55007fffd0, load, 0x55007fffd8, store, 0x55007fffd0, store, 0x55007fffd8 
  0, 0x40091c, 0xf1000652, "subs x18, x18, #1"
  0, 0x400920, 0x54000040, "b.eq #0x400928"
  0, 0x400924, 0x17fffffb, "b #0x400910"
  0, 0x400910, 0xf9800011, "prfm pstl1strm, [x0]
  0, 0x400914, 0xc87f4410, "ldxp x16, x17, [x0]", load, 0x55007fffd0, load, 0x55007fffd8 
  0, 0x400918, 0xc8300c02, "stxp w16, x2, x3, [x0]", load, 0x55007fffd0, load, 0x55007fffd8, store, 0x55007fffd0, store, 0x55007fffd8 
  0, 0x40091c, 0xf1000652, "subs x18, x18, #1"
  0, 0x400920, 0x54000040, "b.eq #0x400928"
  0, 0x400924, 0x17fffffb, "b #0x400910"

Although you can see stxp looks a bit weird on account of the loads it
does during the cmpxchng. So consider me stumped. The only thing I can
thing of next is to see how closely I can replicate your build
environment.

-- 
Alex Bennée


  reply	other threads:[~2021-10-21 12:36 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-16 20:44 plugins: Missing Store Exclusive Memory Accesses Aaron Lindsay
2021-09-17 11:05 ` Alex Bennée
2021-09-17 14:44   ` Aaron Lindsay via
2021-09-21 20:28   ` Aaron Lindsay via
2021-09-22 20:22     ` Aaron Lindsay via
2021-10-20 17:12       ` Aaron Lindsay via
2021-10-20 17:54         ` Alex Bennée
2021-10-20 20:49           ` Aaron Lindsay via
2021-10-21 12:28             ` Alex Bennée [this message]
2021-10-21 20:40               ` Aaron Lindsay via
2021-10-22  8:37                 ` Alex Bennée

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=87mtn2tv56.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=aaron@os.amperecomputing.com \
    --cc=cota@braap.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.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.