linux-kselftest.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Mark Brown <broonie@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Shuah Khan <shuah@kernel.org>,
	"Alan Hayward" <alan.hayward@arm.com>,
	Luis Machado <luis.machado@arm.com>,
	"Salil Akerkar" <Salil.Akerkar@arm.com>,
	Basant Kumar Dwivedi <Basant.KumarDwivedi@arm.com>,
	Szabolcs Nagy <szabolcs.nagy@arm.com>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-kselftest@vger.kernel.org>
Subject: Re: [PATCH v1 23/38] arm64/sme: Implement ZA context switching
Date: Mon, 11 Oct 2021 13:27:25 +0100	[thread overview]
Message-ID: <20211011132725.00000f47@Huawei.com> (raw)
In-Reply-To: <20210930181144.10029-24-broonie@kernel.org>

On Thu, 30 Sep 2021 19:11:29 +0100
Mark Brown <broonie@kernel.org> wrote:

> Allocate space for storing ZA on first access to SME and use that to save
> and restore ZA state when context switching. We do this by using the vector
> form of the LDR and STR ZA instructions, these do not require streaming
> mode and have implementation recommendations that they avoid contention
> issues in shared SMCU implementations.
> 
> Since ZA is architecturally guaranteed to be zeroed when enabled we do not
> need to explicitly zero ZA, either we will be restoring from a saved copy
> or trapping on first use of SME so we know that ZA must be disabled.
> 
> Signed-off-by: Mark Brown <broonie@kernel.org>

sme_alloc() forwards definition should be in the next patch.
> ---
>  arch/arm64/include/asm/fpsimd.h       |  5 ++++-
>  arch/arm64/include/asm/fpsimdmacros.h | 22 ++++++++++++++++++++++
>  arch/arm64/include/asm/processor.h    |  1 +
>  arch/arm64/kernel/entry-fpsimd.S      | 22 ++++++++++++++++++++++
>  arch/arm64/kernel/fpsimd.c            | 16 ++++++++++------
>  arch/arm64/kvm/fpsimd.c               |  2 +-
>  6 files changed, 60 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/fpsimd.h b/arch/arm64/include/asm/fpsimd.h
> index 43737ca91f1a..45f7153067bb 100644
> --- a/arch/arm64/include/asm/fpsimd.h
> +++ b/arch/arm64/include/asm/fpsimd.h
> @@ -47,7 +47,7 @@ extern void fpsimd_update_current_state(struct user_fpsimd_state const *state);
>  
>  extern void fpsimd_bind_state_to_cpu(struct user_fpsimd_state *state,
>  				     void *sve_state, unsigned int sve_vl,
> -				     unsigned int sme_vl);
> +				     void *za_state, unsigned int sme_vl);
>  
>  extern void fpsimd_flush_task_state(struct task_struct *target);
>  extern void fpsimd_save_and_flush_cpu_state(void);
> @@ -90,6 +90,8 @@ extern void sve_flush_live(bool flush_ffr, unsigned long vq_minus_1);
>  extern unsigned int sve_get_vl(void);
>  extern void sve_set_vq(unsigned long vq_minus_1);
>  extern void sme_set_vq(unsigned long vq_minus_1);
> +extern void sme_save_state(void *state, unsigned int vq_minus_1);
> +extern void sme_load_state(void const *state, unsigned int vq_minus_1);
>  
>  struct arm64_cpu_capabilities;
>  extern void sve_kernel_enable(const struct arm64_cpu_capabilities *__unused);
> @@ -119,6 +121,7 @@ static inline unsigned int __bit_to_vq(unsigned int bit)
>  extern size_t sve_state_size(struct task_struct const *task);
>  
>  extern void sve_alloc(struct task_struct *task);
> +extern void sme_alloc(struct task_struct *task);

Should be in the next patch where this function is introduced.

>  extern void fpsimd_release_task(struct task_struct *task);
>  extern void fpsimd_sync_to_sve(struct task_struct *task);
>  extern void sve_sync_to_fpsimd(struct task_struct *task);

  reply	other threads:[~2021-10-11 12:27 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-30 18:11 [PATCH v1 00/38] arm64/sme: Initial support for the Scalable Matrix Extension Mark Brown
2021-09-30 18:11 ` [PATCH v1 01/38] arm64/fp: Reindent fpsimd_save() Mark Brown
2021-10-11  9:39   ` Jonathan Cameron
2021-10-11 13:02     ` Mark Brown
2021-09-30 18:11 ` [PATCH v1 02/38] arm64/sve: Remove sve_load_from_fpsimd_state() Mark Brown
2021-09-30 18:11 ` [PATCH v1 03/38] arm64/sve: Make access to FFR optional Mark Brown
2021-09-30 18:11 ` [PATCH v1 04/38] arm64/sve: Rename find_supported_vector_length() Mark Brown
2021-09-30 18:11 ` [PATCH v1 05/38] arm64/sve: Use accessor functions for vector lengths in thread_struct Mark Brown
2021-09-30 18:11 ` [PATCH v1 06/38] arm64/sve: Put system wide vector length information into structs Mark Brown
2021-10-01  3:13   ` kernel test robot
2021-09-30 18:11 ` [PATCH v1 07/38] arm64/sve: Explicitly load vector length when restoring SVE state Mark Brown
2021-09-30 18:11 ` [PATCH v1 08/38] arm64/sve: Track vector lengths for tasks in an array Mark Brown
2021-10-11 10:20   ` Jonathan Cameron
2021-10-11 13:14     ` Mark Brown
2021-10-11 13:18       ` Jonathan Cameron
2021-09-30 18:11 ` [PATCH v1 09/38] arm64/sve: Make sysctl interface for SVE reusable by SME Mark Brown
2021-09-30 18:11 ` [PATCH v1 10/38] arm64/sve: Generalise vector length configuration prctl() for SME Mark Brown
2021-10-11 10:27   ` Jonathan Cameron
2021-10-11 13:18     ` Mark Brown
2021-09-30 18:11 ` [PATCH v1 11/38] selftests: arm64: Parameterise ptrace vector length information Mark Brown
2021-09-30 18:11 ` [PATCH v1 12/38] arm64/sme: Provide ABI documentation for SME Mark Brown
2021-10-08 14:11   ` Alan Hayward
2021-10-08 15:28     ` Mark Brown
2021-10-08 16:45       ` Alan Hayward
2021-10-08 17:04         ` Mark Brown
2021-10-11 11:15           ` Alan Hayward
2021-10-11 11:48             ` Mark Brown
2021-10-11 11:05   ` Jonathan Cameron
2021-10-11 13:20     ` Mark Brown
2021-10-11 13:17   ` Szabolcs Nagy
2021-10-11 13:23     ` Mark Brown
2021-10-11 14:19       ` Szabolcs Nagy
2021-10-11 20:10         ` Mark Brown
2021-10-12  8:23           ` Szabolcs Nagy
2021-10-13 18:37             ` Mark Brown
2021-10-14  9:57               ` Szabolcs Nagy
2021-09-30 18:11 ` [PATCH v1 13/38] arm64/sme: System register and exception syndrome definitions Mark Brown
2021-09-30 18:11 ` [PATCH v1 14/38] arm64/sme: Define macros for manually encoding SME instructions Mark Brown
2021-09-30 18:11 ` [PATCH v1 15/38] arm64/sme: Early CPU setup for SME Mark Brown
2021-09-30 18:11 ` [PATCH v1 16/38] arm64/sme: Basic enumeration support Mark Brown
2021-09-30 18:11 ` [PATCH v1 17/38] arm64/sme: Identify supported SME vector lengths at boot Mark Brown
2021-09-30 18:11 ` [PATCH v1 18/38] arm64/sme: Implement sysctl to set the default vector length Mark Brown
2021-09-30 18:11 ` [PATCH v1 19/38] arm64/sme: Implement vector length configuration prctl()s Mark Brown
2021-10-01  5:20   ` kernel test robot
2021-10-01 12:40     ` Mark Brown
2021-10-08  1:32       ` [kbuild-all] " Chen, Rong A
2021-10-01 16:38   ` kernel test robot
2021-09-30 18:11 ` [PATCH v1 20/38] arm64/sme: Implement support for TPIDR2 Mark Brown
2021-09-30 18:11 ` [PATCH v1 21/38] arm64/sme: Implement SVCR context switching Mark Brown
2021-10-11 12:15   ` Jonathan Cameron
2021-09-30 18:11 ` [PATCH v1 22/38] arm64/sme: Implement streaming SVE " Mark Brown
2021-09-30 18:11 ` [PATCH v1 23/38] arm64/sme: Implement ZA " Mark Brown
2021-10-11 12:27   ` Jonathan Cameron [this message]
2021-09-30 18:11 ` [PATCH v1 24/38] arm64/sme: Implement traps and syscall handling for SME Mark Brown
2021-10-11 12:37   ` Jonathan Cameron
2021-09-30 18:11 ` [PATCH v1 25/38] arm64/sme: Implement streaming SVE signal handling Mark Brown
2021-09-30 18:11 ` [PATCH v1 26/38] arm64/sme: Implement ZA " Mark Brown
2021-09-30 18:11 ` [PATCH v1 27/38] arm64/sme: Implement ptrace support for streaming mode SVE registers Mark Brown
2021-09-30 18:11 ` [PATCH v1 28/38] arm64/sme: Add ptrace support for ZA Mark Brown
2021-09-30 18:11 ` [PATCH v1 29/38] arm64/sme: Disable streaming mode and ZA when flushing CPU state Mark Brown
2021-09-30 18:11 ` [PATCH v1 30/38] arm64/sme: Save and restore streaming mode over EFI runtime calls Mark Brown
2021-09-30 18:11 ` [PATCH v1 31/38] arm64/sme: Provide Kconfig for SME Mark Brown
2021-09-30 18:11 ` [PATCH v1 32/38] kselftest/arm64: Add tests for TPIDR2 Mark Brown
2021-09-30 18:11 ` [PATCH v1 33/38] kselftest/arm64: Extend vector configuration API tests to cover SME Mark Brown
2021-09-30 18:11 ` [PATCH v1 34/38] kselftest/arm64: sme: Provide streaming mode SVE stress test Mark Brown
2021-09-30 18:11 ` [PATCH v1 35/38] kselftest/arm64: Add stress test for SME ZA context switching Mark Brown
2021-09-30 18:11 ` [PATCH v1 36/38] kselftest/arm64: signal: Add SME signal handling tests Mark Brown
2021-09-30 18:11 ` [PATCH v1 37/38] selftests: arm64: Add streaming SVE to SVE ptrace tests Mark Brown
2021-09-30 18:11 ` [PATCH v1 38/38] selftests: arm64: Add coverage for the ZA ptrace interface Mark Brown

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=20211011132725.00000f47@Huawei.com \
    --to=jonathan.cameron@huawei.com \
    --cc=Basant.KumarDwivedi@arm.com \
    --cc=Salil.Akerkar@arm.com \
    --cc=alan.hayward@arm.com \
    --cc=broonie@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=luis.machado@arm.com \
    --cc=shuah@kernel.org \
    --cc=skhan@linuxfoundation.org \
    --cc=szabolcs.nagy@arm.com \
    --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 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).