lkml.org 
[lkml]   [2011]   [Apr]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] x86, xsave: fix non-lazy allocation of the xsave area
On 04/13/2011 03:58 AM, Hans Rosenfeld wrote:
> A single static xsave area just for init is not enough, since there are
> more user processes that are directly executed by kernel threads. Use
> fpu_alloc(), and SIGKILL the process if that fails.
>
> Signed-off-by: Hans Rosenfeld <hans.rosenfeld@amd.com>
> ---
> arch/x86/include/asm/i387.h | 9 +++------
> 1 files changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/arch/x86/include/asm/i387.h b/arch/x86/include/asm/i387.h
> index 989c0ac..833b6f1 100644
> --- a/arch/x86/include/asm/i387.h
> +++ b/arch/x86/include/asm/i387.h
> @@ -329,15 +329,12 @@ static inline void fpu_copy(struct fpu *dst, struct fpu *src)
> }
>
> extern void fpu_finit(struct fpu *fpu);
> -static union thread_xstate __init_xstate, *init_xstate = &__init_xstate;
>
> static inline void fpu_clear(struct fpu *fpu)
> {
> - if (!fpu_allocated(fpu)) {
> - BUG_ON(init_xstate == NULL);
> - fpu->state = init_xstate;
> - init_xstate = NULL;
> - }
> + if (!fpu_allocated(fpu) && fpu_alloc(fpu))
> + do_group_exit(SIGKILL);
> +
> memset(fpu->state, 0, xstate_size);
> fpu_finit(fpu);
> set_used_math();

Ideally this should be done earlier, while it is still possible to
ENOMEM the exec. Specifically, it probably should be done from a new
arch hook at the top in flush_old_exec(). I'm not sure how much it
matters in practice, because if we are that memory-constrained we'll
probably die shortly anyway, and to a kernel thread it is probably not
that much of a difference if the exec'd process dies with SIGKILL or if
it gets ENOMEM from the exec() -- it will typically be visible only from
the parent thread anyway.

-hpa



\
 
 \ /
  Last update: 2011-04-14 01:25    [W:0.133 / U:0.552 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site