[RFC PATCH v2 11/41] arm64/sve: Expand task_struct for Scalable Vector Extension state
Mark Rutland
mark.rutland at arm.com
Wed Mar 22 09:20:35 PDT 2017
On Wed, Mar 22, 2017 at 02:50:41PM +0000, Dave Martin wrote:
> This patch expands task_struct to accommodate the Scalable Vector
> Extension state.
>
> The extra space is not used for anything yet.
[...]
> +#ifdef CONFIG_ARM64_SVE
> +
> +static void *__sve_state(struct task_struct *task)
> +{
> + return (char *)task + ALIGN(sizeof(*task), 16);
> +}
> +
> +static void *sve_pffr(struct task_struct *task)
> +{
> + unsigned int vl = sve_get_vl();
> +
> + BUG_ON(vl % 16);
> + return (char *)__sve_state(task) + 34 * vl;
> +}
Can we mnemonicise the magic numbers for these?
That, and some comment regarding how the task_struct and sve state are
organised in memory, as that's painful to reverse-engineer.
> +
> +#else /* ! CONFIG_ARM64_SVE */
> +
> +/* Dummy declarations for usage protected with IS_ENABLED(CONFIG_ARM64_SVE): */
> +extern void *__sve_state(struct task_struct *task);
> +extern void *sve_pffr(struct task_struct *task);
> +
> +#endif /* ! CONFIG_ARM64_SVE */
The usual pattern is to make these static inlines, with a BUILD_BUG() if
calls are expected/required to be optimised away entirely.
Thanks,
Mark.
More information about the linux-arm-kernel
mailing list