From: Dave Martin <dave.martin@foss.arm.com>
To: Alan Hayward <Alan.Hayward@arm.com>
Cc: "Dave P Martin" <Dave.Martin@arm.com>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
"libc-alpha@sourceware.org" <libc-alpha@sourceware.org>,
"gdb@sourceware.org" <gdb@sourceware.org>,
"Ard Biesheuvel" <ard.biesheuvel@linaro.org>,
"Szabolcs Nagy" <Szabolcs.Nagy@arm.com>,
"Catalin Marinas" <Catalin.Marinas@arm.com>,
"Yao Qi" <Yao.Qi@arm.com>, "Will Deacon" <Will.Deacon@arm.com>,
"Richard Sandiford" <Richard.Sandiford@arm.com>, nd <nd@arm.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"kvmarm@lists.cs.columbia.edu" <kvmarm@lists.cs.columbia.edu>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v2 14/28] arm64/sve: Backend logic for setting the vector length
Date: Wed, 20 Sep 2017 12:09:04 +0100 [thread overview]
Message-ID: <20170920110902.GG24231@e103592.cambridge.arm.com> (raw)
In-Reply-To: <FC5BA359-D37C-493C-87CD-146B83D3CCB5@arm.com>
On Wed, Sep 20, 2017 at 10:59:55AM +0000, Alan Hayward wrote:
> (Resending without disclaimer)
>
> > On 31 Aug 2017, at 18:00, Dave Martin <Dave.Martin@arm.com> wrote:
>
> >
> > +int sve_set_vector_length(struct task_struct *task,
> > + unsigned long vl, unsigned long flags)
> > +{
> > + WARN_ON(task == current && preemptible());
> > +
> > + if (flags & ~(unsigned long)(PR_SVE_VL_INHERIT |
> > + PR_SVE_SET_VL_ONEXEC))
> > + return -EINVAL;
> > +
> > + if (!sve_vl_valid(vl))
> > + return -EINVAL;
> > +
> > + /*
> > + * Clamp to the maximum vector length that VL-agnostic SVE code can
> > + * work with. A flag may be assigned in the future to allow setting
> > + * of larger vector lengths without confusing older software.
> > + */
> > + if (vl > SVE_VL_ARCH_MAX)
> > + vl = SVE_VL_ARCH_MAX;
> > +
> > + vl = find_supported_vector_length(vl);
> > +
>
>
> Given, sve_set_vector_length is called when setting the vector length in
> PTRACE_SETREGSET, it looks to me like if you set VL to a value that’s not
> supported by the hardware, then it’s going to round down to the previous value.
> Is that correct? I’m not sure if that’s explained in the docs?
Does this cover it?
"On success, the calling thread's vector length is changed to the
largest value supported by the system that is less than or equal to vl."
(For ptrace, I just cross-reference the PR_SVE_SET_VL behaviour, above.)
> What happens if you give a vl value lower than the min supported value in the
> hardware?
This is impossible, unless vl < SVE_VL_MIN (which is rejected explicitly
by the !sve_vl_valid() check in sve_set_vector_length()).
The architecture required support for all power-of-two vector lengths
less than the maximum supported vector length, so by construction
SVE_VL_MIN is supported by all hardware.
To be defensive, if we fail to detect support for SVE_VL_MIN, I set the
corresponding bit in sve_vq_map and WARN. This is just to help ensure
find_supported_vector_length doesn't fall off the end of sve_vq_map.
Does that sounds correct? There may be a clearer way of achieving this.
Cheers
---Dave
>
>
> > +/*
> > + * All vector length selection from userspace comes through here.
> > + * We're on a slow path, so some sanity-checks are included.
> > + * If things go wrong there's a bug somewhere, but try to fall back to a
> > + * safe choice.
> > + */
> > +static unsigned int find_supported_vector_length(unsigned int vl)
> > +{
> > + int bit;
> > + int max_vl = sve_max_vl;
> > +
> > + if (WARN_ON(!sve_vl_valid(vl)))
> > + vl = SVE_VL_MIN;
> > +
> > + if (WARN_ON(!sve_vl_valid(max_vl)))
> > + max_vl = SVE_VL_MIN;
> > +
> > + if (vl > max_vl)
> > + vl = max_vl;
> > +
> > + bit = find_next_bit(sve_vq_map, SVE_VQ_MAX,
> > + vq_to_bit(sve_vq_from_vl(vl)));
> > + return sve_vl_from_vq(bit_to_vq(bit));
> > +}
> > +
>
>
> Thanks,
> Alan.
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2017-09-20 11:09 UTC|newest]
Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-31 17:00 [PATCH v2 00/28] ARM Scalable Vector Extension (SVE) Dave Martin
2017-08-31 17:00 ` [PATCH v2 01/28] regset: Add support for dynamically sized regsets Dave Martin
2017-08-31 17:00 ` [PATCH v2 02/28] arm64: KVM: Hide unsupported AArch64 CPU features from guests Dave Martin
2017-09-13 14:37 ` Alex Bennée
2017-09-13 14:37 ` Alex Bennée
2017-09-15 0:04 ` Dave Martin
2017-08-31 17:00 ` [PATCH v2 03/28] arm64: efi: Add missing Kconfig dependency on KERNEL_MODE_NEON Dave Martin
2017-08-31 17:00 ` [PATCH v2 04/28] arm64: Port deprecated instruction emulation to new sysctl interface Dave Martin
2017-08-31 17:00 ` [PATCH v2 05/28] arm64: fpsimd: Simplify uses of {set,clear}_ti_thread_flag() Dave Martin
2017-08-31 17:00 ` [PATCH v2 06/28] arm64/sve: System register and exception syndrome definitions Dave Martin
2017-09-13 14:48 ` Alex Bennée
2017-09-13 14:48 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 07/28] arm64/sve: Low-level SVE architectural state manipulation functions Dave Martin
2017-09-13 15:39 ` Alex Bennée
2017-09-13 15:39 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 08/28] arm64/sve: Kconfig update and conditional compilation support Dave Martin
2017-08-31 17:00 ` [PATCH v2 09/28] arm64/sve: Signal frame and context structure definition Dave Martin
2017-09-13 13:36 ` Catalin Marinas
2017-09-13 21:33 ` Dave Martin
2017-08-31 17:00 ` [PATCH v2 10/28] arm64/sve: Low-level CPU setup Dave Martin
2017-09-13 13:32 ` Catalin Marinas
2017-09-13 19:21 ` Dave Martin
2017-09-13 19:21 ` Dave Martin
2017-10-05 10:47 ` Dave Martin
2017-10-05 11:04 ` Suzuki K Poulose
2017-10-05 11:22 ` Dave Martin
2017-08-31 17:00 ` [PATCH v2 11/28] arm64/sve: Core task context handling Dave Martin
2017-09-13 14:33 ` Catalin Marinas
2017-09-14 19:55 ` Dave Martin
2017-09-20 13:58 ` Catalin Marinas
2017-10-03 11:11 ` Dave Martin
2017-10-03 11:11 ` Dave Martin
2017-10-04 17:29 ` Catalin Marinas
2017-10-03 11:33 ` Dave Martin
2017-10-05 11:28 ` Catalin Marinas
2017-10-06 13:10 ` Dave Martin
2017-10-06 13:36 ` Catalin Marinas
2017-10-06 15:15 ` Dave Martin
2017-10-06 15:15 ` Dave Martin
2017-10-06 15:33 ` Catalin Marinas
2017-09-13 17:26 ` Catalin Marinas
2017-09-13 19:17 ` Dave Martin
2017-09-13 22:21 ` Catalin Marinas
2017-09-14 19:40 ` Dave Martin
2017-09-19 17:13 ` Catalin Marinas
2017-08-31 17:00 ` [PATCH v2 12/28] arm64/sve: Support vector length resetting for new processes Dave Martin
2017-09-14 8:47 ` Alex Bennée
2017-09-14 8:47 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 13/28] arm64/sve: Signal handling support Dave Martin
2017-09-14 9:30 ` Alex Bennée
2017-09-14 9:30 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 14/28] arm64/sve: Backend logic for setting the vector length Dave Martin
2017-09-13 17:29 ` Catalin Marinas
2017-09-13 19:06 ` Dave Martin
2017-09-13 22:11 ` Catalin Marinas
2017-10-05 16:42 ` Dave Martin
2017-10-05 16:53 ` Catalin Marinas
2017-10-05 17:04 ` Dave Martin
2017-09-20 10:57 ` Alan Hayward
2017-09-20 10:59 ` Alan Hayward
2017-09-20 11:09 ` Dave Martin [this message]
2017-09-20 18:08 ` Alan Hayward
2017-09-21 11:19 ` Dave Martin
2017-09-21 11:57 ` Alan Hayward
2017-08-31 17:00 ` [PATCH v2 15/28] arm64: cpufeature: Move sys_caps_initialised declarations Dave Martin
2017-09-14 9:33 ` Alex Bennée
2017-09-14 9:33 ` Alex Bennée
2017-09-14 9:35 ` Suzuki K Poulose
2017-08-31 17:00 ` [PATCH v2 16/28] arm64/sve: Probe SVE capabilities and usable vector lengths Dave Martin
2017-09-14 9:45 ` Alex Bennée
2017-09-14 9:45 ` Alex Bennée
2017-09-28 14:22 ` Dave Martin
2017-09-28 17:32 ` Alex Bennée
2017-09-28 17:32 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 17/28] arm64/sve: Preserve SVE registers around kernel-mode NEON use Dave Martin
2017-09-14 10:52 ` Alex Bennée
2017-09-14 10:52 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 18/28] arm64/sve: Preserve SVE registers around EFI runtime service calls Dave Martin
2017-08-31 17:00 ` Dave Martin
2017-09-14 11:01 ` Alex Bennée
2017-09-14 11:01 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 19/28] arm64/sve: ptrace and ELF coredump support Dave Martin
2017-09-06 16:21 ` Okamoto, Takayuki
2017-09-06 16:21 ` Okamoto, Takayuki
2017-09-06 18:16 ` Dave Martin
2017-09-07 5:11 ` Okamoto, Takayuki
2017-09-07 5:11 ` Okamoto, Takayuki
2017-09-08 13:11 ` Dave Martin
2017-09-14 12:57 ` Alex Bennée
2017-09-14 12:57 ` Alex Bennée
2017-09-28 14:57 ` Dave Martin
2017-09-29 12:46 ` Dave Martin
2017-08-31 17:00 ` [PATCH v2 20/28] arm64/sve: Add prctl controls for userspace vector length management Dave Martin
2017-09-14 13:02 ` Alex Bennée
2017-09-14 13:02 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 21/28] arm64/sve: Add sysctl to set the default vector length for new processes Dave Martin
2017-09-14 13:05 ` Alex Bennée
2017-09-14 13:05 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 22/28] arm64/sve: KVM: Prevent guests from using SVE Dave Martin
2017-09-14 13:28 ` Alex Bennée
2017-09-14 13:28 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 23/28] arm64/sve: KVM: Treat guest SVE use as undefined instruction execution Dave Martin
2017-09-14 13:30 ` Alex Bennée
2017-09-14 13:30 ` Alex Bennée
2017-09-14 13:31 ` Alex Bennée
2017-09-14 13:31 ` Alex Bennée
2017-09-29 13:00 ` Dave Martin
2017-09-29 14:43 ` Alex Bennée
2017-09-29 14:43 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 24/28] arm64/sve: KVM: Hide SVE from CPU features exposed to guests Dave Martin
2017-09-14 13:32 ` Alex Bennée
2017-09-14 13:32 ` Alex Bennée
2017-08-31 17:00 ` [PATCH v2 25/28] arm64/sve: Detect SVE and activate runtime support Dave Martin
2017-08-31 17:00 ` [PATCH v2 26/28] arm64/sve: Add documentation Dave Martin
2017-10-05 16:39 ` Szabolcs Nagy
2017-10-05 17:02 ` Dave Martin
2017-10-06 15:43 ` Szabolcs Nagy
2017-10-06 17:37 ` Dave Martin
2017-10-09 9:34 ` Alex Bennée
2017-10-09 9:34 ` Alex Bennée
2017-10-09 9:49 ` Dave Martin
2017-10-09 14:07 ` Alex Bennée
2017-10-09 14:07 ` Alex Bennée
2017-10-09 16:20 ` Dave Martin
2017-10-09 16:20 ` Dave Martin
2017-08-31 17:00 ` [RFC PATCH v2 27/28] arm64: signal: Report signal frame size to userspace via auxv Dave Martin
2017-08-31 17:00 ` Dave Martin
2017-08-31 17:01 ` [RFC PATCH v2 28/28] arm64/sve: signal: Include SVE when computing AT_MINSIGSTKSZ Dave Martin
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=20170920110902.GG24231@e103592.cambridge.arm.com \
--to=dave.martin@foss.arm.com \
--cc=Alan.Hayward@arm.com \
--cc=Catalin.Marinas@arm.com \
--cc=Dave.Martin@arm.com \
--cc=Richard.Sandiford@arm.com \
--cc=Szabolcs.Nagy@arm.com \
--cc=Will.Deacon@arm.com \
--cc=Yao.Qi@arm.com \
--cc=alex.bennee@linaro.org \
--cc=ard.biesheuvel@linaro.org \
--cc=gdb@sourceware.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=libc-alpha@sourceware.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=nd@arm.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).