From: Catalin Marinas <catalin.marinas@arm.com>
To: Mark Brown <broonie@kernel.org>
Cc: Will Deacon <will@kernel.org>, Marc Zyngier <maz@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>,
James Morse <james.morse@arm.com>,
Alexandru Elisei <alexandru.elisei@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
linux-arm-kernel@lists.infradead.org,
linux-kselftest@vger.kernel.org, kvmarm@lists.cs.columbia.edu
Subject: Re: [PATCH v11 10/40] arm64/sme: Basic enumeration support
Date: Tue, 22 Feb 2022 12:09:37 +0000 [thread overview]
Message-ID: <YhTSgWRfEcn7ZVg1@arm.com> (raw)
In-Reply-To: <YhQb6r0mVSYDHowo@sirena.org.uk>
On Mon, Feb 21, 2022 at 11:10:34PM +0000, Mark Brown wrote:
> On Mon, Feb 21, 2022 at 07:24:59PM +0000, Catalin Marinas wrote:
> > On Mon, Feb 21, 2022 at 03:01:03PM +0000, Mark Brown wrote:
> > > We do run the kernel in streaming mode - entering the kernel through a
> > > syscall or preemption will not change the streaming mode state, and we
> > > need to be in streaming mode in order to save or restore the register
> > > state for streaming mode. In particular we need FA64 enabled for EL1 in
> > > order to context switch FFR when in streaming mode, without it we'll
> > > generate an exception when we execute the rdffr or wrffr. We don't do
> > > any real floating point work in streaming mode but we absolutely need to
> > > run in streaming mode and only exit streaming mode when restoring a
> > > context where it is disabled, when using floating point in the kernel or
> > > when idling the CPU.
>
> > So, IIUC, for Linux it is mandatory that FEAT_SME_FA64 is supported,
> > otherwise we won't be able to enable SME. Does the architecture say
>
> The feature is not mandatory and we do not require it for Linux. It is
> expected that many implementations will choose to not support FA64.
>
> The only impact it has on the kernel is that if it's present then we
> need to enable it for each EL and then context switch FFR in streaming
> mode, the code is there to do that conditionally already.
OK, I get it. So FFR is only present if FA64 is supported.
> This is actually a bit awkward for not disabling streaming mode when we
> do a syscall since the disabled instructions include the FPSMID mov
> vector, vector instruction which we currently use to zero the high bits
> of the Z registers. That issue goes away if the optimisations I've got
> for relaxed flushing of the non-shared SVE state that we discussed in
> relation to syscall-abi get merged, though it'd still be there if we add
> a sysctl to force flushing. This is a solvable problem though, even if
> we have to use a less efficient sequence to flush in streaming mode.
I guess the simplest is to just disable streaming mode on syscall. The C
library would mark the syscall wrappers as not streaming compatible, so
whoever is calling them might disable SM anyway.
So I think your original proposal in the ABI doc is fine (I just need
the libc people to confirm ;)).
--
Catalin
next prev parent reply other threads:[~2022-02-22 12:09 UTC|newest]
Thread overview: 131+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-07 15:20 [PATCH v11 00/40] arm64/sme: Initial support for the Scalable Matrix Extension Mark Brown
2022-02-07 15:20 ` [PATCH v11 01/40] arm64: Define CPACR_EL1_FPEN similarly to other floating point controls Mark Brown
2022-02-10 11:34 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 02/40] arm64: Always use individual bits in CPACR floating point enables Mark Brown
2022-02-10 11:36 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 03/40] arm64: cpufeature: Always specify and use a field width for capabilities Mark Brown
2022-02-10 11:39 ` Catalin Marinas
2022-02-10 11:55 ` Suzuki K Poulose
2022-03-01 22:56 ` Qian Cai
[not found] ` <878rts3bpi.wl-maz@kernel.org>
2022-03-02 11:52 ` Catalin Marinas
2022-03-02 13:02 ` Mark Brown
2022-03-02 12:58 ` Mark Brown
2022-02-07 15:20 ` [PATCH v11 04/40] kselftest/arm64: Remove local ARRAY_SIZE() definitions Mark Brown
2022-02-07 23:45 ` Shuah Khan
2022-02-10 15:03 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 05/40] kselftest/arm64: signal: Allow tests to be incompatible with features Mark Brown
2022-02-07 23:54 ` Shuah Khan
2022-02-08 15:32 ` Mark Brown
2022-02-10 15:08 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 06/40] arm64/sme: Provide ABI documentation for SME Mark Brown
2022-02-08 0:10 ` Shuah Khan
2022-02-08 15:46 ` Mark Brown
2022-02-08 18:38 ` Mark Brown
2022-02-08 18:48 ` Shuah Khan
2022-02-08 19:00 ` Mark Brown
2022-02-10 15:12 ` Shuah Khan
2022-02-10 16:18 ` Mark Brown
2022-02-10 16:46 ` Shuah Khan
2022-02-10 18:32 ` Catalin Marinas
2022-02-10 19:45 ` Mark Brown
2022-02-11 17:02 ` Catalin Marinas
2022-02-11 18:13 ` Mark Brown
2022-02-14 18:19 ` Catalin Marinas
2022-02-14 19:40 ` Mark Brown
2022-02-07 15:20 ` [PATCH v11 07/40] arm64/sme: System register and exception syndrome definitions Mark Brown
2022-02-10 18:35 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 08/40] arm64/sme: Manually encode SME instructions Mark Brown
2022-02-10 18:57 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 09/40] arm64/sme: Early CPU setup for SME Mark Brown
2022-02-21 11:54 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 10/40] arm64/sme: Basic enumeration support Mark Brown
2022-02-21 14:32 ` Catalin Marinas
2022-02-21 15:01 ` Mark Brown
2022-02-21 19:24 ` Catalin Marinas
2022-02-21 23:10 ` Mark Brown
2022-02-22 12:09 ` Catalin Marinas [this message]
2022-02-21 16:07 ` Szabolcs Nagy
2022-02-21 19:04 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 11/40] arm64/sme: Identify supported SME vector lengths at boot Mark Brown
2022-02-21 15:57 ` Catalin Marinas
2022-02-21 23:39 ` Mark Brown
2022-02-07 15:20 ` [PATCH v11 12/40] arm64/sme: Implement sysctl to set the default vector length Mark Brown
2022-02-21 16:48 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 13/40] arm64/sme: Implement vector length configuration prctl()s Mark Brown
2022-02-21 16:48 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 14/40] arm64/sme: Implement support for TPIDR2 Mark Brown
2022-02-21 16:58 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 15/40] arm64/sme: Implement SVCR context switching Mark Brown
2022-02-21 18:12 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 16/40] arm64/sme: Implement streaming SVE " Mark Brown
2022-02-22 12:53 ` Catalin Marinas
2022-02-22 13:42 ` Mark Brown
2022-02-07 15:20 ` [PATCH v11 17/40] arm64/sme: Implement ZA " Mark Brown
2022-02-22 12:53 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 18/40] arm64/sme: Implement traps and syscall handling for SME Mark Brown
2022-02-22 17:54 ` Catalin Marinas
2022-02-22 18:16 ` Mark Brown
2022-02-07 15:20 ` [PATCH v11 19/40] arm64/sme: Disable ZA and streaming mode when handling signals Mark Brown
2022-02-22 18:48 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 20/40] arm64/sme: Implement streaming SVE signal handling Mark Brown
2022-02-23 15:16 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 21/40] arm64/sme: Implement ZA " Mark Brown
2022-02-23 15:19 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 22/40] arm64/sme: Implement ptrace support for streaming mode SVE registers Mark Brown
2022-02-23 15:22 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 23/40] arm64/sme: Add ptrace support for ZA Mark Brown
2022-02-23 15:27 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 24/40] arm64/sme: Disable streaming mode and ZA when flushing CPU state Mark Brown
2022-02-23 15:28 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 25/40] arm64/sme: Save and restore streaming mode over EFI runtime calls Mark Brown
2022-02-23 15:31 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 26/40] KVM: arm64: Hide SME system registers from guests Mark Brown
2022-02-23 15:32 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 27/40] KVM: arm64: Trap SME usage in guest Mark Brown
2022-02-23 15:34 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 28/40] KVM: arm64: Handle SME host state when running guests Mark Brown
2022-02-23 15:40 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 29/40] arm64/sme: Provide Kconfig for SME Mark Brown
2022-02-23 15:41 ` Catalin Marinas
2022-02-07 15:20 ` [PATCH v11 30/40] kselftest/arm64: Add manual encodings for SME instructions Mark Brown
2022-02-07 23:57 ` Shuah Khan
2022-02-23 15:41 ` Catalin Marinas
2022-02-07 15:21 ` [PATCH v11 31/40] kselftest/arm64: sme: Add SME support to vlset Mark Brown
2022-02-08 0:15 ` Shuah Khan
2022-02-08 15:51 ` Mark Brown
2022-02-23 15:42 ` Catalin Marinas
2022-02-07 15:21 ` [PATCH v11 32/40] kselftest/arm64: Add tests for TPIDR2 Mark Brown
2022-02-08 0:23 ` Shuah Khan
2022-02-08 16:19 ` Mark Brown
2022-02-23 15:42 ` Catalin Marinas
2022-02-07 15:21 ` [PATCH v11 33/40] kselftest/arm64: Extend vector configuration API tests to cover SME Mark Brown
2022-02-08 0:24 ` Shuah Khan
2022-02-23 15:43 ` Catalin Marinas
2022-02-07 15:21 ` [PATCH v11 34/40] kselftest/arm64: sme: Provide streaming mode SVE stress test Mark Brown
2022-02-08 0:40 ` Shuah Khan
2022-02-08 16:23 ` Mark Brown
2022-02-23 15:45 ` Catalin Marinas
2022-02-07 15:21 ` [PATCH v11 35/40] kselftest/arm64: signal: Handle ZA signal context in core code Mark Brown
2022-02-08 1:01 ` Shuah Khan
2022-02-08 16:29 ` Mark Brown
2022-02-23 15:46 ` Catalin Marinas
2022-02-07 15:21 ` [PATCH v11 36/40] kselftest/arm64: Add stress test for SME ZA context switching Mark Brown
2022-02-23 15:47 ` Catalin Marinas
2022-02-07 15:21 ` [PATCH v11 37/40] kselftest/arm64: signal: Add SME signal handling tests Mark Brown
2022-02-08 1:08 ` Shuah Khan
2022-02-08 17:27 ` Mark Brown
2022-02-23 15:47 ` Catalin Marinas
2022-02-07 15:21 ` [PATCH v11 38/40] kselftest/arm64: Add streaming SVE to SVE ptrace tests Mark Brown
2022-02-08 1:13 ` Shuah Khan
2022-02-23 15:47 ` Catalin Marinas
2022-02-07 15:21 ` [PATCH v11 39/40] kselftest/arm64: Add coverage for the ZA ptrace interface Mark Brown
2022-02-08 1:20 ` Shuah Khan
2022-02-23 15:47 ` Catalin Marinas
2022-02-07 15:21 ` [PATCH v11 40/40] kselftest/arm64: Add SME support to syscall ABI test Mark Brown
2022-02-08 1:52 ` Shuah Khan
2022-02-08 18:15 ` Mark Brown
2022-02-08 18:50 ` Shuah Khan
2022-02-23 15:49 ` Catalin Marinas
2022-02-08 18:54 ` [PATCH v11 00/40] arm64/sme: Initial support for the Scalable Matrix Extension Shuah Khan
2022-02-25 15:50 ` Will Deacon
2022-02-25 15:52 ` Will Deacon
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=YhTSgWRfEcn7ZVg1@arm.com \
--to=catalin.marinas@arm.com \
--cc=Basant.KumarDwivedi@arm.com \
--cc=Salil.Akerkar@arm.com \
--cc=alan.hayward@arm.com \
--cc=alexandru.elisei@arm.com \
--cc=broonie@kernel.org \
--cc=james.morse@arm.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=luis.machado@arm.com \
--cc=maz@kernel.org \
--cc=shuah@kernel.org \
--cc=skhan@linuxfoundation.org \
--cc=suzuki.poulose@arm.com \
--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