linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Cyril Bur <cyrilbur@gmail.com>
To: Chris Smart <chris@distroguy.com>
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH] powerpc: Add support for userspace P9 copy paste
Date: Tue, 26 Apr 2016 16:42:09 +1000	[thread overview]
Message-ID: <20160426164209.7c28ca8c@camb691> (raw)
In-Reply-To: <20160426002844.GA9198@x1.distroguy.com>

On Tue, 26 Apr 2016 10:28:50 +1000
Chris Smart <chris@distroguy.com> wrote:

> The copy paste facility introduced in POWER9 provides an optimised
> mechanism for a userspace application to copy a cacheline. This is
> provided by a pair of instructions, copy and paste, while a third,
> cp_abort (copy paste abort), provides a clean up of the state in case of
> a failure.
> 
> The copy instruction will read a 128 byte cacheline and store it in an
> internal buffer. The subsequent paste instruction will store this
> internal buffer to memory and set a CR field if the paste succeeds.
> 
> Since the state of the copy paste buffer is internal (and not
> architecturally visible), in the unlikely event of a context switch, the
> state cannot be stored and the paste should therefore fail.
> 
> The cp_abort instruction exists to fail and clean up any such
> interrupted copy paste sequence and is to be called by the kernel as
> part of the context switch. Doing so prevents data from a preceding copy
> in one process leaking into the paste of another.
> 
> This code enables use of the cp_abort instruction if a supported
> processor is detected.
> 
> NOTE: this is for userspace only, not in kernel, and does not deal
> with KVM guests.
> 
> Patch created with much assistance from Michael Neuling
> <mikey@neuling.org>
> 

Hi Chris,

Patch looks good. Looks like you've put 8 spaces (instead of a tab) on the
PPC_CP_ABORT line.

Apart from that,

Reviewed-by: Cyril Bur <cyrilbur@gmail.com>

> Signed-off-by: Chris Smart <chris@distroguy.com>
> ---
> 
> Note: A follow-up patch is expected soon with a working self-test.
> 
>  arch/powerpc/include/asm/ppc-opcode.h | 2 ++
>  arch/powerpc/kernel/entry_64.S        | 9 +++++++++
>  2 files changed, 11 insertions(+)
> 
> diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h
> index 7ab04fc59e24..1d035c1cc889 100644
> --- a/arch/powerpc/include/asm/ppc-opcode.h
> +++ b/arch/powerpc/include/asm/ppc-opcode.h
> @@ -131,6 +131,7 @@
>  /* sorted alphabetically */
>  #define PPC_INST_BHRBE			0x7c00025c
>  #define PPC_INST_CLRBHRB		0x7c00035c
> +#define PPC_INST_CP_ABORT		0x7c00068c
>  #define PPC_INST_DCBA			0x7c0005ec
>  #define PPC_INST_DCBA_MASK		0xfc0007fe
>  #define PPC_INST_DCBAL			0x7c2005ec
> @@ -285,6 +286,7 @@
>  #endif
>  
>  /* Deal with instructions that older assemblers aren't aware of */
> +#define	PPC_CP_ABORT		stringify_in_c(.long PPC_INST_CP_ABORT)
>  #define	PPC_DCBAL(a, b)		stringify_in_c(.long PPC_INST_DCBAL | \
>  					__PPC_RA(a) | __PPC_RB(b))
>  #define	PPC_DCBZL(a, b)		stringify_in_c(.long PPC_INST_DCBZL | \
> diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
> index 8b9d68676d2b..ab1457c3f1d1 100644
> --- a/arch/powerpc/kernel/entry_64.S
> +++ b/arch/powerpc/kernel/entry_64.S
> @@ -36,6 +36,7 @@
>  #include <asm/hw_irq.h>
>  #include <asm/context_tracking.h>
>  #include <asm/tm.h>
> +#include <asm/ppc-opcode.h>
>  
>  /*
>   * System calls.
> @@ -508,6 +509,14 @@ BEGIN_FTR_SECTION
>  	ldarx	r6,0,r1
>  END_FTR_SECTION_IFSET(CPU_FTR_STCX_CHECKS_ADDRESS)
>  
> +BEGIN_FTR_SECTION
> +/*
> + * A cp_abort (copy paste abort) here ensures that when context switching, a
> + * copy from one process can't leak into the paste of another.
> + */
> +        PPC_CP_ABORT
> +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
> +
>  #ifdef CONFIG_PPC_BOOK3S
>  /* Cancel all explict user streams as they will have no use after context
>   * switch and will stop the HW from creating streams itself

  reply	other threads:[~2016-04-26  6:42 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-26  0:28 [PATCH] powerpc: Add support for userspace P9 copy paste Chris Smart
2016-04-26  6:42 ` Cyril Bur [this message]
2016-04-26  6:49   ` Chris Smart
2016-04-26  7:45 ` Balbir Singh
2016-04-27  2:05   ` Michael Neuling
2016-04-27 15:25 ` David Laight
2016-04-27 23:51   ` Chris Smart
2016-04-28 14:48     ` David Laight
2016-04-28 14:22 ` Michael Ellerman

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=20160426164209.7c28ca8c@camb691 \
    --to=cyrilbur@gmail.com \
    --cc=chris@distroguy.com \
    --cc=linuxppc-dev@lists.ozlabs.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 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).