From: "Alex Bennée" <alex.bennee@linaro.org>
To: Dave Martin <Dave.Martin@arm.com>
Cc: linux-arm-kernel@lists.infradead.org, linux-arch@vger.kernel.org,
libc-alpha@sourceware.org,
Ard Biesheuvel <ard.biesheuvel@linaro.org>,
Szabolcs Nagy <szabolcs.nagy@arm.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>,
Oleg Nesterov <oleg@redhat.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Richard Sandiford <richard.sandiford@arm.com>,
kvmarm@lists.cs.columbia.edu
Subject: Re: [PATCH 01/27] regset: Add support for dynamically sized regsets
Date: Fri, 18 Aug 2017 12:52:11 +0100 [thread overview]
Message-ID: <87pobthz4k.fsf@linaro.org> (raw)
In-Reply-To: <1502280338-23002-2-git-send-email-Dave.Martin@arm.com>
Dave Martin <Dave.Martin@arm.com> writes:
> Currently the regset API doesn't allow for the possibility that
> regsets (or at least, the amount of meaningful data in a regset)
> may change in size.
>
> In particular, this results in useless padding being added to
> coredumps in a regset's current size is smaller than its
> theoretical maximum size.
>
> This patch adds a get_size() function to struct user_regset.
> Individual regset implementations can implement this function to
> return the current size of the regset data. A regset_size()
> function is added to provide callers with an abstract interface for
> determining the size of a regset without needing to know whether
> the regset is dynamically sized or not.
>
> The only affected user of this interface is the ELF coredump code:
> This patch ports ELF coredump to dump regsets with their actual
> size in the coredump. This has no effect except for new regsets
> that are dynamically sized and provide a get_size() implementation.
>
> Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> fs/binfmt_elf.c | 6 ++---
> include/linux/regset.h | 67 ++++++++++++++++++++++++++++++++++++++++++++------
> 2 files changed, 63 insertions(+), 10 deletions(-)
>
> diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
> index 879ff9c..16d2403 100644
> --- a/fs/binfmt_elf.c
> +++ b/fs/binfmt_elf.c
> @@ -1697,7 +1697,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
> long signr, size_t *total)
> {
> unsigned int i;
> - unsigned int regset_size = view->regsets[0].n * view->regsets[0].size;
> + unsigned int size = regset_size(t->task, &view->regsets[0]);
>
> /*
> * NT_PRSTATUS is the one special case, because the regset data
> @@ -1706,7 +1706,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
> * We assume that regset 0 is NT_PRSTATUS.
> */
> fill_prstatus(&t->prstatus, t->task, signr);
> - (void) view->regsets[0].get(t->task, &view->regsets[0], 0, regset_size,
> + (void) view->regsets[0].get(t->task, &view->regsets[0], 0, size,
> &t->prstatus.pr_reg, NULL);
>
> fill_note(&t->notes[0], "CORE", NT_PRSTATUS,
> @@ -1726,7 +1726,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
> if (regset->core_note_type && regset->get &&
> (!regset->active || regset->active(t->task, regset))) {
> int ret;
> - size_t size = regset->n * regset->size;
> + size_t size = regset_size(t->task, regset);
> void *data = kmalloc(size, GFP_KERNEL);
> if (unlikely(!data))
> return 0;
> diff --git a/include/linux/regset.h b/include/linux/regset.h
> index 8e0c9fe..494ceda 100644
> --- a/include/linux/regset.h
> +++ b/include/linux/regset.h
> @@ -107,6 +107,28 @@ typedef int user_regset_writeback_fn(struct task_struct *target,
> int immediate);
>
> /**
> + * user_regset_get_size_fn - type of @get_size function in &struct user_regset
> + * @target: thread being examined
> + * @regset: regset being examined
> + *
> + * This call is optional; usually the pointer is %NULL.
> + *
> + * When provided, this function must return the current size of regset
> + * data, as observed by the @get function in &struct user_regset. The
> + * value returned must be a multiple of @size. The returned size is
> + * required to be valid only until the next time (if any) @regset is
> + * modified for @target.
> + *
> + * This function is intended for dynamically sized regsets. A regset
> + * that is statically sized does not need to implement it.
> + *
> + * This function should not be called directly: instead, callers should
> + * call regset_size() to determine the current size of a regset.
> + */
> +typedef unsigned int user_regset_get_size_fn(struct task_struct *target,
> + const struct user_regset *regset);
> +
> +/**
> * struct user_regset - accessible thread CPU state
> * @n: Number of slots (registers).
> * @size: Size in bytes of a slot (register).
> @@ -117,19 +139,33 @@ typedef int user_regset_writeback_fn(struct task_struct *target,
> * @set: Function to store values.
> * @active: Function to report if regset is active, or %NULL.
> * @writeback: Function to write data back to user memory, or %NULL.
> + * @get_size: Function to return the regset's size, or %NULL.
> *
> * This data structure describes a machine resource we call a register set.
> * This is part of the state of an individual thread, not necessarily
> * actual CPU registers per se. A register set consists of a number of
> * similar slots, given by @n. Each slot is @size bytes, and aligned to
> - * @align bytes (which is at least @size).
> + * @align bytes (which is at least @size). For dynamically-sized
> + * regsets, @n must contain the maximum possible number of slots for the
> + * regset, and @get_size must point to a function that returns the
> + * current regset size.
> *
> - * These functions must be called only on the current thread or on a
> - * thread that is in %TASK_STOPPED or %TASK_TRACED state, that we are
> - * guaranteed will not be woken up and return to user mode, and that we
> - * have called wait_task_inactive() on. (The target thread always might
> - * wake up for SIGKILL while these functions are working, in which case
> - * that thread's user_regset state might be scrambled.)
> + * Callers that need to know only the current size of the regset and do
> + * not care about its internal structure should call regset_size()
> + * instead of inspecting @n or calling @get_size.
> + *
> + * For backward compatibility, the @get and @set methods must pad to, or
> + * accept, @n * @size bytes, even if the current regset size is smaller.
> + * The precise semantics of these operations depend on the regset being
> + * accessed.
> + *
> + * The functions to which &struct user_regset members point must be
> + * called only on the current thread or on a thread that is in
> + * %TASK_STOPPED or %TASK_TRACED state, that we are guaranteed will not
> + * be woken up and return to user mode, and that we have called
> + * wait_task_inactive() on. (The target thread always might wake up for
> + * SIGKILL while these functions are working, in which case that
> + * thread's user_regset state might be scrambled.)
> *
> * The @pos argument must be aligned according to @align; the @count
> * argument must be a multiple of @size. These functions are not
> @@ -156,6 +192,7 @@ struct user_regset {
> user_regset_set_fn *set;
> user_regset_active_fn *active;
> user_regset_writeback_fn *writeback;
> + user_regset_get_size_fn *get_size;
> unsigned int n;
> unsigned int size;
> unsigned int align;
> @@ -371,5 +408,21 @@ static inline int copy_regset_from_user(struct task_struct *target,
> return regset->set(target, regset, offset, size, NULL, data);
> }
>
> +/**
> + * regset_size - determine the current size of a regset
> + * @target: thread to be examined
> + * @regset: regset to be examined
> + *
> + * Note that the returned size is valid only until the next time
> + * (if any) @regset is modified for @target.
> + */
> +static inline unsigned int regset_size(struct task_struct *target,
> + const struct user_regset *regset)
> +{
> + if (!regset->get_size)
> + return regset->n * regset->size;
> + else
> + return regset->get_size(target, regset);
> +}
>
> #endif /* <linux/regset.h> */
WARNING: multiple messages have this Message-ID (diff)
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Dave Martin <Dave.Martin@arm.com>
Cc: linux-arm-kernel@lists.infradead.org, linux-arch@vger.kernel.org,
libc-alpha@sourceware.org,
Ard Biesheuvel <ard.biesheuvel@linaro.org>,
Szabolcs Nagy <szabolcs.nagy@arm.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>,
Oleg Nesterov <oleg@redhat.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Richard Sandiford <richard.sandiford@arm.com>,
kvmarm@lists.cs.columbia.edu
Subject: Re: [PATCH 01/27] regset: Add support for dynamically sized regsets
Date: Fri, 18 Aug 2017 12:52:11 +0100 [thread overview]
Message-ID: <87pobthz4k.fsf@linaro.org> (raw)
Message-ID: <20170818115211.vCz-Ws1KAcWlFxQ3dpjv97MO9fZtcHwTiC7hSooGYkQ@z> (raw)
In-Reply-To: <1502280338-23002-2-git-send-email-Dave.Martin@arm.com>
Dave Martin <Dave.Martin@arm.com> writes:
> Currently the regset API doesn't allow for the possibility that
> regsets (or at least, the amount of meaningful data in a regset)
> may change in size.
>
> In particular, this results in useless padding being added to
> coredumps in a regset's current size is smaller than its
> theoretical maximum size.
>
> This patch adds a get_size() function to struct user_regset.
> Individual regset implementations can implement this function to
> return the current size of the regset data. A regset_size()
> function is added to provide callers with an abstract interface for
> determining the size of a regset without needing to know whether
> the regset is dynamically sized or not.
>
> The only affected user of this interface is the ELF coredump code:
> This patch ports ELF coredump to dump regsets with their actual
> size in the coredump. This has no effect except for new regsets
> that are dynamically sized and provide a get_size() implementation.
>
> Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> fs/binfmt_elf.c | 6 ++---
> include/linux/regset.h | 67 ++++++++++++++++++++++++++++++++++++++++++++------
> 2 files changed, 63 insertions(+), 10 deletions(-)
>
> diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
> index 879ff9c..16d2403 100644
> --- a/fs/binfmt_elf.c
> +++ b/fs/binfmt_elf.c
> @@ -1697,7 +1697,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
> long signr, size_t *total)
> {
> unsigned int i;
> - unsigned int regset_size = view->regsets[0].n * view->regsets[0].size;
> + unsigned int size = regset_size(t->task, &view->regsets[0]);
>
> /*
> * NT_PRSTATUS is the one special case, because the regset data
> @@ -1706,7 +1706,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
> * We assume that regset 0 is NT_PRSTATUS.
> */
> fill_prstatus(&t->prstatus, t->task, signr);
> - (void) view->regsets[0].get(t->task, &view->regsets[0], 0, regset_size,
> + (void) view->regsets[0].get(t->task, &view->regsets[0], 0, size,
> &t->prstatus.pr_reg, NULL);
>
> fill_note(&t->notes[0], "CORE", NT_PRSTATUS,
> @@ -1726,7 +1726,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
> if (regset->core_note_type && regset->get &&
> (!regset->active || regset->active(t->task, regset))) {
> int ret;
> - size_t size = regset->n * regset->size;
> + size_t size = regset_size(t->task, regset);
> void *data = kmalloc(size, GFP_KERNEL);
> if (unlikely(!data))
> return 0;
> diff --git a/include/linux/regset.h b/include/linux/regset.h
> index 8e0c9fe..494ceda 100644
> --- a/include/linux/regset.h
> +++ b/include/linux/regset.h
> @@ -107,6 +107,28 @@ typedef int user_regset_writeback_fn(struct task_struct *target,
> int immediate);
>
> /**
> + * user_regset_get_size_fn - type of @get_size function in &struct user_regset
> + * @target: thread being examined
> + * @regset: regset being examined
> + *
> + * This call is optional; usually the pointer is %NULL.
> + *
> + * When provided, this function must return the current size of regset
> + * data, as observed by the @get function in &struct user_regset. The
> + * value returned must be a multiple of @size. The returned size is
> + * required to be valid only until the next time (if any) @regset is
> + * modified for @target.
> + *
> + * This function is intended for dynamically sized regsets. A regset
> + * that is statically sized does not need to implement it.
> + *
> + * This function should not be called directly: instead, callers should
> + * call regset_size() to determine the current size of a regset.
> + */
> +typedef unsigned int user_regset_get_size_fn(struct task_struct *target,
> + const struct user_regset *regset);
> +
> +/**
> * struct user_regset - accessible thread CPU state
> * @n: Number of slots (registers).
> * @size: Size in bytes of a slot (register).
> @@ -117,19 +139,33 @@ typedef int user_regset_writeback_fn(struct task_struct *target,
> * @set: Function to store values.
> * @active: Function to report if regset is active, or %NULL.
> * @writeback: Function to write data back to user memory, or %NULL.
> + * @get_size: Function to return the regset's size, or %NULL.
> *
> * This data structure describes a machine resource we call a register set.
> * This is part of the state of an individual thread, not necessarily
> * actual CPU registers per se. A register set consists of a number of
> * similar slots, given by @n. Each slot is @size bytes, and aligned to
> - * @align bytes (which is at least @size).
> + * @align bytes (which is at least @size). For dynamically-sized
> + * regsets, @n must contain the maximum possible number of slots for the
> + * regset, and @get_size must point to a function that returns the
> + * current regset size.
> *
> - * These functions must be called only on the current thread or on a
> - * thread that is in %TASK_STOPPED or %TASK_TRACED state, that we are
> - * guaranteed will not be woken up and return to user mode, and that we
> - * have called wait_task_inactive() on. (The target thread always might
> - * wake up for SIGKILL while these functions are working, in which case
> - * that thread's user_regset state might be scrambled.)
> + * Callers that need to know only the current size of the regset and do
> + * not care about its internal structure should call regset_size()
> + * instead of inspecting @n or calling @get_size.
> + *
> + * For backward compatibility, the @get and @set methods must pad to, or
> + * accept, @n * @size bytes, even if the current regset size is smaller.
> + * The precise semantics of these operations depend on the regset being
> + * accessed.
> + *
> + * The functions to which &struct user_regset members point must be
> + * called only on the current thread or on a thread that is in
> + * %TASK_STOPPED or %TASK_TRACED state, that we are guaranteed will not
> + * be woken up and return to user mode, and that we have called
> + * wait_task_inactive() on. (The target thread always might wake up for
> + * SIGKILL while these functions are working, in which case that
> + * thread's user_regset state might be scrambled.)
> *
> * The @pos argument must be aligned according to @align; the @count
> * argument must be a multiple of @size. These functions are not
> @@ -156,6 +192,7 @@ struct user_regset {
> user_regset_set_fn *set;
> user_regset_active_fn *active;
> user_regset_writeback_fn *writeback;
> + user_regset_get_size_fn *get_size;
> unsigned int n;
> unsigned int size;
> unsigned int align;
> @@ -371,5 +408,21 @@ static inline int copy_regset_from_user(struct task_struct *target,
> return regset->set(target, regset, offset, size, NULL, data);
> }
>
> +/**
> + * regset_size - determine the current size of a regset
> + * @target: thread to be examined
> + * @regset: regset to be examined
> + *
> + * Note that the returned size is valid only until the next time
> + * (if any) @regset is modified for @target.
> + */
> +static inline unsigned int regset_size(struct task_struct *target,
> + const struct user_regset *regset)
> +{
> + if (!regset->get_size)
> + return regset->n * regset->size;
> + else
> + return regset->get_size(target, regset);
> +}
>
> #endif /* <linux/regset.h> */
--
Alex Bennée
WARNING: multiple messages have this Message-ID (diff)
From: alex.bennee@linaro.org (Alex Bennée)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 01/27] regset: Add support for dynamically sized regsets
Date: Fri, 18 Aug 2017 12:52:11 +0100 [thread overview]
Message-ID: <87pobthz4k.fsf@linaro.org> (raw)
In-Reply-To: <1502280338-23002-2-git-send-email-Dave.Martin@arm.com>
Dave Martin <Dave.Martin@arm.com> writes:
> Currently the regset API doesn't allow for the possibility that
> regsets (or at least, the amount of meaningful data in a regset)
> may change in size.
>
> In particular, this results in useless padding being added to
> coredumps in a regset's current size is smaller than its
> theoretical maximum size.
>
> This patch adds a get_size() function to struct user_regset.
> Individual regset implementations can implement this function to
> return the current size of the regset data. A regset_size()
> function is added to provide callers with an abstract interface for
> determining the size of a regset without needing to know whether
> the regset is dynamically sized or not.
>
> The only affected user of this interface is the ELF coredump code:
> This patch ports ELF coredump to dump regsets with their actual
> size in the coredump. This has no effect except for new regsets
> that are dynamically sized and provide a get_size() implementation.
>
> Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Reviewed-by: Alex Benn?e <alex.bennee@linaro.org>
> ---
> fs/binfmt_elf.c | 6 ++---
> include/linux/regset.h | 67 ++++++++++++++++++++++++++++++++++++++++++++------
> 2 files changed, 63 insertions(+), 10 deletions(-)
>
> diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
> index 879ff9c..16d2403 100644
> --- a/fs/binfmt_elf.c
> +++ b/fs/binfmt_elf.c
> @@ -1697,7 +1697,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
> long signr, size_t *total)
> {
> unsigned int i;
> - unsigned int regset_size = view->regsets[0].n * view->regsets[0].size;
> + unsigned int size = regset_size(t->task, &view->regsets[0]);
>
> /*
> * NT_PRSTATUS is the one special case, because the regset data
> @@ -1706,7 +1706,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
> * We assume that regset 0 is NT_PRSTATUS.
> */
> fill_prstatus(&t->prstatus, t->task, signr);
> - (void) view->regsets[0].get(t->task, &view->regsets[0], 0, regset_size,
> + (void) view->regsets[0].get(t->task, &view->regsets[0], 0, size,
> &t->prstatus.pr_reg, NULL);
>
> fill_note(&t->notes[0], "CORE", NT_PRSTATUS,
> @@ -1726,7 +1726,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
> if (regset->core_note_type && regset->get &&
> (!regset->active || regset->active(t->task, regset))) {
> int ret;
> - size_t size = regset->n * regset->size;
> + size_t size = regset_size(t->task, regset);
> void *data = kmalloc(size, GFP_KERNEL);
> if (unlikely(!data))
> return 0;
> diff --git a/include/linux/regset.h b/include/linux/regset.h
> index 8e0c9fe..494ceda 100644
> --- a/include/linux/regset.h
> +++ b/include/linux/regset.h
> @@ -107,6 +107,28 @@ typedef int user_regset_writeback_fn(struct task_struct *target,
> int immediate);
>
> /**
> + * user_regset_get_size_fn - type of @get_size function in &struct user_regset
> + * @target: thread being examined
> + * @regset: regset being examined
> + *
> + * This call is optional; usually the pointer is %NULL.
> + *
> + * When provided, this function must return the current size of regset
> + * data, as observed by the @get function in &struct user_regset. The
> + * value returned must be a multiple of @size. The returned size is
> + * required to be valid only until the next time (if any) @regset is
> + * modified for @target.
> + *
> + * This function is intended for dynamically sized regsets. A regset
> + * that is statically sized does not need to implement it.
> + *
> + * This function should not be called directly: instead, callers should
> + * call regset_size() to determine the current size of a regset.
> + */
> +typedef unsigned int user_regset_get_size_fn(struct task_struct *target,
> + const struct user_regset *regset);
> +
> +/**
> * struct user_regset - accessible thread CPU state
> * @n: Number of slots (registers).
> * @size: Size in bytes of a slot (register).
> @@ -117,19 +139,33 @@ typedef int user_regset_writeback_fn(struct task_struct *target,
> * @set: Function to store values.
> * @active: Function to report if regset is active, or %NULL.
> * @writeback: Function to write data back to user memory, or %NULL.
> + * @get_size: Function to return the regset's size, or %NULL.
> *
> * This data structure describes a machine resource we call a register set.
> * This is part of the state of an individual thread, not necessarily
> * actual CPU registers per se. A register set consists of a number of
> * similar slots, given by @n. Each slot is @size bytes, and aligned to
> - * @align bytes (which is at least @size).
> + * @align bytes (which is at least @size). For dynamically-sized
> + * regsets, @n must contain the maximum possible number of slots for the
> + * regset, and @get_size must point to a function that returns the
> + * current regset size.
> *
> - * These functions must be called only on the current thread or on a
> - * thread that is in %TASK_STOPPED or %TASK_TRACED state, that we are
> - * guaranteed will not be woken up and return to user mode, and that we
> - * have called wait_task_inactive() on. (The target thread always might
> - * wake up for SIGKILL while these functions are working, in which case
> - * that thread's user_regset state might be scrambled.)
> + * Callers that need to know only the current size of the regset and do
> + * not care about its internal structure should call regset_size()
> + * instead of inspecting @n or calling @get_size.
> + *
> + * For backward compatibility, the @get and @set methods must pad to, or
> + * accept, @n * @size bytes, even if the current regset size is smaller.
> + * The precise semantics of these operations depend on the regset being
> + * accessed.
> + *
> + * The functions to which &struct user_regset members point must be
> + * called only on the current thread or on a thread that is in
> + * %TASK_STOPPED or %TASK_TRACED state, that we are guaranteed will not
> + * be woken up and return to user mode, and that we have called
> + * wait_task_inactive() on. (The target thread always might wake up for
> + * SIGKILL while these functions are working, in which case that
> + * thread's user_regset state might be scrambled.)
> *
> * The @pos argument must be aligned according to @align; the @count
> * argument must be a multiple of @size. These functions are not
> @@ -156,6 +192,7 @@ struct user_regset {
> user_regset_set_fn *set;
> user_regset_active_fn *active;
> user_regset_writeback_fn *writeback;
> + user_regset_get_size_fn *get_size;
> unsigned int n;
> unsigned int size;
> unsigned int align;
> @@ -371,5 +408,21 @@ static inline int copy_regset_from_user(struct task_struct *target,
> return regset->set(target, regset, offset, size, NULL, data);
> }
>
> +/**
> + * regset_size - determine the current size of a regset
> + * @target: thread to be examined
> + * @regset: regset to be examined
> + *
> + * Note that the returned size is valid only until the next time
> + * (if any) @regset is modified for @target.
> + */
> +static inline unsigned int regset_size(struct task_struct *target,
> + const struct user_regset *regset)
> +{
> + if (!regset->get_size)
> + return regset->n * regset->size;
> + else
> + return regset->get_size(target, regset);
> +}
>
> #endif /* <linux/regset.h> */
--
Alex Benn?e
next prev parent reply other threads:[~2017-08-18 11:52 UTC|newest]
Thread overview: 204+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-09 12:05 [PATCH 00/27] ARM Scalable Vector Extension (SVE) Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` [PATCH 01/27] regset: Add support for dynamically sized regsets Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-18 11:52 ` Alex Bennée [this message]
2017-08-18 11:52 ` Alex Bennée
2017-08-18 11:52 ` Alex Bennée
2017-08-09 12:05 ` [PATCH 02/27] arm64: KVM: Hide unsupported AArch64 CPU features from guests Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-16 11:10 ` Marc Zyngier
2017-08-16 11:10 ` Marc Zyngier
2017-08-16 20:32 ` Dave Martin
2017-08-16 20:32 ` Dave Martin
2017-08-17 8:45 ` Marc Zyngier
2017-08-17 8:45 ` Marc Zyngier
2017-08-17 9:57 ` Dave Martin
2017-08-17 9:57 ` Dave Martin
2017-08-17 9:57 ` Dave Martin
2017-08-09 12:05 ` [PATCH 03/27] arm64: efi: Add missing Kconfig dependency on KERNEL_MODE_NEON Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-18 12:02 ` Alex Bennée
2017-08-18 12:02 ` Alex Bennée
2017-08-18 12:02 ` Alex Bennée
2017-08-09 12:05 ` [PATCH 04/27] arm64: Port deprecated instruction emulation to new sysctl interface Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-18 12:09 ` Alex Bennée
2017-08-18 12:09 ` Alex Bennée
2017-08-18 12:09 ` Alex Bennée
2017-08-09 12:05 ` [PATCH 05/27] arm64: fpsimd: Simplify uses of {set,clear}_ti_thread_flag() Dave Martin
2017-08-09 12:05 ` [PATCH 05/27] arm64: fpsimd: Simplify uses of {set, clear}_ti_thread_flag() Dave Martin
2017-08-15 17:11 ` [PATCH 05/27] arm64: fpsimd: Simplify uses of {set,clear}_ti_thread_flag() Ard Biesheuvel
2017-08-15 17:11 ` [PATCH 05/27] arm64: fpsimd: Simplify uses of {set, clear}_ti_thread_flag() Ard Biesheuvel
2017-08-18 16:36 ` Alex Bennée
2017-08-18 16:36 ` Alex Bennée
2017-08-18 16:36 ` Alex Bennée
2017-08-09 12:05 ` [PATCH 06/27] arm64/sve: System register and exception syndrome definitions Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-21 9:33 ` Alex Bennée
2017-08-21 9:33 ` Alex Bennée
2017-08-21 12:34 ` Alex Bennée
2017-08-21 12:34 ` Alex Bennée
2017-08-21 12:34 ` Alex Bennée
2017-08-21 14:26 ` Dave Martin
2017-08-21 14:26 ` Dave Martin
2017-08-21 14:50 ` Alex Bennée
2017-08-21 14:50 ` Alex Bennée
2017-08-21 14:50 ` Alex Bennée
2017-08-21 15:19 ` Dave Martin
2017-08-21 15:19 ` Dave Martin
2017-08-21 15:34 ` Alex Bennée
2017-08-21 15:34 ` Alex Bennée
2017-08-21 15:34 ` Alex Bennée
2017-08-21 13:56 ` Dave Martin
2017-08-21 13:56 ` Dave Martin
2017-08-21 14:36 ` Alex Bennée
2017-08-21 14:36 ` Alex Bennée
2017-08-21 14:36 ` Alex Bennée
2017-08-09 12:05 ` [PATCH 07/27] arm64/sve: Low-level SVE architectural state manipulation functions Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-21 10:11 ` Alex Bennée
2017-08-21 10:11 ` Alex Bennée
2017-08-21 10:11 ` Alex Bennée
2017-08-21 14:38 ` Dave Martin
2017-08-21 14:38 ` Dave Martin
2017-08-09 12:05 ` [PATCH 08/27] arm64/sve: Kconfig update and conditional compilation support Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-21 10:12 ` Alex Bennée
2017-08-21 10:12 ` Alex Bennée
2017-08-21 10:12 ` Alex Bennée
2017-08-09 12:05 ` [PATCH 09/27] arm64/sve: Signal frame and context structure definition Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-22 10:22 ` Alex Bennée
2017-08-22 10:22 ` Alex Bennée
2017-08-22 11:17 ` Dave Martin
2017-08-22 11:17 ` Dave Martin
2017-08-22 13:53 ` Alex Bennée
2017-08-22 13:53 ` Alex Bennée
2017-08-22 13:53 ` Alex Bennée
2017-08-22 14:21 ` Dave Martin
2017-08-22 14:21 ` Dave Martin
2017-08-22 14:21 ` Dave Martin
2017-08-22 15:03 ` Alex Bennée
2017-08-22 15:03 ` Alex Bennée
2017-08-22 15:03 ` Alex Bennée
2017-08-22 15:41 ` Dave Martin
2017-08-22 15:41 ` Dave Martin
2017-08-09 12:05 ` [PATCH 10/27] arm64/sve: Low-level CPU setup Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-22 15:04 ` Alex Bennée
2017-08-22 15:04 ` Alex Bennée
2017-08-22 15:04 ` Alex Bennée
2017-08-22 15:33 ` Dave Martin
2017-08-22 15:33 ` Dave Martin
2017-08-09 12:05 ` [PATCH 11/27] arm64/sve: Core task context handling Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-15 17:31 ` Ard Biesheuvel
2017-08-15 17:31 ` Ard Biesheuvel
2017-08-16 10:40 ` Dave Martin
2017-08-16 10:40 ` Dave Martin
2017-08-17 16:42 ` Dave Martin
2017-08-17 16:42 ` Dave Martin
2017-08-17 16:46 ` Ard Biesheuvel
2017-08-17 16:46 ` Ard Biesheuvel
2017-08-22 16:21 ` Alex Bennée
2017-08-22 16:21 ` Alex Bennée
2017-08-22 16:21 ` Alex Bennée
2017-08-22 17:19 ` Dave Martin
2017-08-22 17:19 ` Dave Martin
2017-08-22 18:39 ` Alex Bennée
2017-08-22 18:39 ` Alex Bennée
2017-08-22 18:39 ` Alex Bennée
2017-08-09 12:05 ` [PATCH 12/27] arm64/sve: Support vector length resetting for new processes Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-22 16:22 ` Alex Bennée
2017-08-22 16:22 ` Alex Bennée
2017-08-22 17:22 ` Dave Martin
2017-08-22 17:22 ` Dave Martin
2017-08-09 12:05 ` [PATCH 13/27] arm64/sve: Signal handling support Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-23 9:38 ` Alex Bennée
2017-08-23 9:38 ` Alex Bennée
2017-08-23 9:38 ` Alex Bennée
2017-08-23 11:30 ` Dave Martin
2017-08-23 11:30 ` Dave Martin
2017-08-09 12:05 ` [PATCH 14/27] arm64/sve: Backend logic for setting the vector length Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-23 15:33 ` Alex Bennée
2017-08-23 15:33 ` Alex Bennée
2017-08-23 15:33 ` Alex Bennée
2017-08-23 17:29 ` Dave Martin
2017-08-23 17:29 ` Dave Martin
2017-08-09 12:05 ` [PATCH 15/27] arm64/sve: Probe SVE capabilities and usable vector lengths Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-16 17:48 ` Suzuki K Poulose
2017-08-16 17:48 ` Suzuki K Poulose
2017-08-17 10:04 ` Dave Martin
2017-08-17 10:04 ` Dave Martin
2017-08-17 10:04 ` Dave Martin
2017-08-17 10:46 ` Suzuki K Poulose
2017-08-17 10:46 ` Suzuki K Poulose
2017-08-17 10:46 ` Suzuki K Poulose
2017-08-09 12:05 ` [PATCH 16/27] arm64/sve: Preserve SVE registers around kernel-mode NEON use Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-15 17:37 ` Ard Biesheuvel
2017-08-15 17:37 ` Ard Biesheuvel
2017-08-15 17:37 ` Ard Biesheuvel
2017-08-09 12:05 ` [PATCH 17/27] arm64/sve: Preserve SVE registers around EFI runtime service calls Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-15 17:44 ` Ard Biesheuvel
2017-08-15 17:44 ` Ard Biesheuvel
2017-08-16 9:13 ` Dave Martin
2017-08-16 9:13 ` Dave Martin
2017-08-09 12:05 ` [PATCH 18/27] arm64/sve: ptrace and ELF coredump support Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` [PATCH 19/27] arm64/sve: Add prctl controls for userspace vector length management Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` [PATCH 20/27] arm64/sve: Add sysctl to set the default vector length for new processes Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` [PATCH 21/27] arm64/sve: KVM: Prevent guests from using SVE Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-15 16:33 ` Marc Zyngier
2017-08-15 16:33 ` Marc Zyngier
2017-08-15 16:33 ` Marc Zyngier
2017-08-16 10:50 ` Dave Martin
2017-08-16 10:50 ` Dave Martin
2017-08-16 11:20 ` Marc Zyngier
2017-08-16 11:20 ` Marc Zyngier
2017-08-16 11:22 ` Marc Zyngier
2017-08-16 11:22 ` Marc Zyngier
2017-08-16 11:35 ` Dave Martin
2017-08-16 11:35 ` Dave Martin
2017-08-09 12:05 ` [PATCH 22/27] arm64/sve: KVM: Treat guest SVE use as undefined instruction execution Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` [PATCH 23/27] arm64/sve: KVM: Hide SVE from CPU features exposed to guests Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-15 16:37 ` Marc Zyngier
2017-08-15 16:37 ` Marc Zyngier
2017-08-16 10:54 ` Dave Martin
2017-08-16 10:54 ` Dave Martin
2017-08-16 11:10 ` Marc Zyngier
2017-08-16 11:10 ` Marc Zyngier
2017-08-16 11:22 ` Dave Martin
2017-08-16 11:22 ` Dave Martin
2017-08-09 12:05 ` [PATCH 24/27] arm64/sve: Detect SVE and activate runtime support Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-16 17:53 ` Suzuki K Poulose
2017-08-16 17:53 ` Suzuki K Poulose
2017-08-17 10:00 ` Dave Martin
2017-08-17 10:00 ` Dave Martin
2017-08-17 10:00 ` Dave Martin
2017-08-09 12:05 ` [PATCH 25/27] arm64/sve: Add documentation Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` [RFC PATCH 26/27] arm64: signal: Report signal frame size to userspace via auxv Dave Martin
2017-08-09 12:05 ` Dave Martin
2017-08-09 12:05 ` [RFC PATCH 27/27] arm64/sve: signal: Include SVE when computing AT_MINSIGSTKSZ Dave Martin
2017-08-09 12:05 ` 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=87pobthz4k.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=Dave.Martin@arm.com \
--cc=ard.biesheuvel@linaro.org \
--cc=catalin.marinas@arm.com \
--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=oleg@redhat.com \
--cc=richard.sandiford@arm.com \
--cc=szabolcs.nagy@arm.com \
--cc=viro@zeniv.linux.org.uk \
--cc=will.deacon@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.