From: Michael Neuling <mikey@neuling.org>
To: Anshuman Khandual <khandual@linux.vnet.ibm.com>,
Rashmica Gupta <rashmicy@gmail.com>,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH] selftests/powerpc: Add test to check if TAR is corrupted
Date: Thu, 03 Dec 2015 09:29:19 +1100 [thread overview]
Message-ID: <1449095359.30090.117.camel@neuling.org> (raw)
In-Reply-To: <565E7DC6.4080306@linux.vnet.ibm.com>
> Re: [PATCH] selftests/powerpc: Add test to check if TAR is corrupted
The patch description should mention TM too.
On Wed, 2015-12-02 at 10:42 +0530, Anshuman Khandual wrote:
> On 12/02/2015 08:52 AM, Rashmica Gupta wrote:
> > If the transaction is aborted, the TAR should be rolled back to the
> > checkpointed value before the transaction began.
>=20
> And if it does not abort, it should continue to hold the changed
> (inside the transaction) TAR value after the transaction finishes.
> The test here does check for both these cases and hence the commit
> message should reflect that as well. This test can also accommodate
> checks for PPR and DSCR register in one go.
Good point. =20
> In the TM ptrace patch series (https://lkml.org/lkml/2015/10/8/522)
> which is still under review, there are couple of tests related
> to (TAR, PPR, DSCR) registers with (TM running & TM suspended) and
> without TM. There, the values are being checked using ptrace
> interface
> instead. Can you please check them and just make sure that we are not
> duplicating anything here.
Even if it is duplicated, I'd prefer to have this separate test as
well. This is much simpler than that ptrace test.
Thanks for the review.
Mikey
>=20
> >=20
> > Signed-off-by: Rashmica Gupta <rashmicy@gmail.com>
> > ---
> > To check this yourself, undo the changes from the patch
> > "powerpc/tm: Fix
> > context switching TAR, PPR and DSCR SPRs".
> >=20
> > tools/testing/selftests/powerpc/tm/.gitignore | 1 +
> > tools/testing/selftests/powerpc/tm/Makefile | 2 +-
> > tools/testing/selftests/powerpc/tm/tm-tar.c | 90
> > +++++++++++++++++++++++++++
> > 3 files changed, 92 insertions(+), 1 deletion(-)
> > create mode 100644 tools/testing/selftests/powerpc/tm/tm-tar.c
> >=20
> > diff --git a/tools/testing/selftests/powerpc/tm/.gitignore
> > b/tools/testing/selftests/powerpc/tm/.gitignore
> > index 76eae258feeb..9bf6749550e3 100644
> > --- a/tools/testing/selftests/powerpc/tm/.gitignore
> > +++ b/tools/testing/selftests/powerpc/tm/.gitignore
> > @@ -4,3 +4,4 @@ tm-signal-msr-resv
> > tm-signal-stack
> > tm-fork
> > tm-dscr
> > +tm-tar
> > diff --git a/tools/testing/selftests/powerpc/tm/Makefile
> > b/tools/testing/selftests/powerpc/tm/Makefile
> > index 59eec240339d..ab2992f69b4c 100644
> > --- a/tools/testing/selftests/powerpc/tm/Makefile
> > +++ b/tools/testing/selftests/powerpc/tm/Makefile
> > @@ -1,4 +1,4 @@
> > -TEST_PROGS :=3D tm-resched-dscr tm-syscall tm-signal-msr-resv tm
> > -signal-stack tm-fork tm-dscr
> > +TEST_PROGS :=3D tm-resched-dscr tm-syscall tm-signal-msr-resv tm
> > -signal-stack tm-fork tm-dscr tm-tar
> > =20
> > all: $(TEST_PROGS)
> > =20
> > diff --git a/tools/testing/selftests/powerpc/tm/tm-tar.c
> > b/tools/testing/selftests/powerpc/tm/tm-tar.c
> > new file mode 100644
> > index 000000000000..22a0c3485412
> > --- /dev/null
> > +++ b/tools/testing/selftests/powerpc/tm/tm-tar.c
> > @@ -0,0 +1,90 @@
> > +/*=20
> > + * Copyright 2015, Michael Neuling, IBM Corp.=20
> > + * Licensed under GPLv2.
> > + * Original: Michael Neuling 19/7/2013
> > + * Edited: Rashmica Gupta 01/12/2015
> > + *
> > + * Do some transactions, see if the tar is corrupted.
>=20
> It can use a better explanation here.
>=20
> > + *
> > + */
> > +
> > +#include <stdio.h>
> > +#include <stdlib.h>
> > +#include <unistd.h>
> > +#include <string.h>
> > +
> > +#include "tm.h"
> > +#include "utils.h"
> > +
> > +#define SPRN_TAR 0x32f
> > +
> > +int num_loops =3D 10000;
> > +
> > +int test_tar(void)
> > +{
> > + int i;
> > +
> > + SKIP_IF(!have_htm());
> > +
> > + for (i =3D 0; i < num_loops; i++)
> > + {
> > + uint64_t result =3D 0;
> > + asm __volatile__(
> > + "li 7, 1;"
> > + "mtspr %[tar], 7;" // tar =3D
> > 1
>=20
> Please use /* */ kind of comment sections not //.
>=20
> > + "tbegin.;"=09
> > + "beq 3f;"
> > + "li 4, 0x7000;" // Loop
> > lots, to use time
> > + "2:;" // Start loop
>=20
> Here as well.
>=20
> > + "li 7, 2;"
> > + "mtspr %[tar], 7;" // tar =3D
> > 2
> > + "tsuspend.;"
> > + "li 7, 3;"
> > + "mtspr %[tar], 7;" // tar =3D
> > 3
> > + "tresume.;"
> > + "subi 4, 4, 1;"
> > + "cmpdi 4, 0;"
> > + "bne 2b;"
> > + "tend.;"
> > +
> > + // Transaction sucess! TAR should be 3.
> > + "mfspr 7, %[tar];"
> > + "ori %[res], 7, 4;" // res =3D 3|4 =3D
> > 7
> > + "b 4f;"
> > +
> > + // Abort handler. TAR should be rolled
> > back to 1.
> > + "3:;"
> > + "mfspr 7, %[tar];"
> > + "ori %[res], 7, 8;" // res =3D
> > 1|8 =3D 9
> > + "4:;"
> > +
> > + : [res]"=3Dr"(result)
> > + : [tar]"i"(SPRN_TAR)
> > + : "memory", "r0", "r4", "r7");
> > +
> > + // If result is anything else other than 7 or 9,
> > the tar
> > + // value must have been corrupted.
>=20
> Here as well.
>=20
> > + if ((result !=3D 7) && (result !=3D 9))=20
> > + return 1;
> > + =09
> > + }
> > + return 0;
> > +}
> > +
> > +int main(int argc, char *argv[])
> > +
> > + // A low number of iterations (eg 100) can cause a false
> > pass.
>=20
> Here as well.
>=20
> > + if (argc > 1) {
> > + if (strcmp(argv[1], "-h") =3D=3D 0) {
> > + printf("Syntax:\n\t%s [<num loops>]\n",
> > + argv[0]);
> > + return 0;
> > + } else {
> > + num_loops =3D atoi(argv[1]);
> > + }
> > + }
> > +
> > + printf("Starting, %d loops\n", num_loops);
> > +
> > + test_harness(test_tar, "tm_tar");
> > +}
> >=20
>=20
prev parent reply other threads:[~2015-12-02 22:29 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-02 3:22 [PATCH] selftests/powerpc: Add test to check if TAR is corrupted Rashmica Gupta
2015-12-02 5:12 ` Anshuman Khandual
2015-12-02 22:29 ` Michael Neuling [this message]
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=1449095359.30090.117.camel@neuling.org \
--to=mikey@neuling.org \
--cc=khandual@linux.vnet.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=rashmicy@gmail.com \
/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 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).