Messages in this thread | | | Date | Mon, 18 May 2015 21:42:27 +0200 (CEST) | From | Thomas Gleixner <> | Subject | Re: [PATCH 02/19] x86, fpu: wrap get_xsave_addr() to make it safer |
| |
On Mon, 18 May 2015, Thomas Gleixner wrote:
> On Fri, 8 May 2015, Dave Hansen wrote: > > The MPX code appears to be saving off the FPU in an unsafe > > way. It does not disable preemption or ensure that the > > FPU state has been allocated. > > > > This patch introduces a new helper which will do both of > > those things internally. > > This changelog does not really match the implementation. Unless I'm > missing something I can't find anything preemption related.
Gah. Hit send before finishing the mail.
It's unlazy_fpu (which I agree is a horrible name) which does the right thing.
> > + > > +/* > > + * This wraps up the common operations that need to occur when retrieving > > + * data from xsave state. It first ensures that the current task was > > + * using the FPU and retrieves the data in to a buffer. It then calculates > > + * the offset of the requested field in the buffer. > > + * > > + * This function is safe to call whether the FPU is in use or not. > > + * > > + * Note that this only works on the current task. > > + * > > + * Inputs: > > + * @xsave_field: state which is defined in xsave.h (e.g. XSTATE_FP, > > + * XSTATE_SSE, etc...) > > + * Output: > > + * address of the state in the xsave area. > > or NULL in case of ..... > > > + */ > > +void *get_xsave_field(int xsave_field) > > +{ > > + union thread_xstate *xstate; > > + > > + if (!tsk_used_math(current)) > > + return NULL; > > + /* > > + * unlazy_fpu() is poorly named and will actually > > + * save the xstate off in to the memory buffer. > > + */ > > + unlazy_fpu(current); > > + xstate = current->thread.fpu.state; > > + > > + return get_xsave_addr(&xstate->xsave, xsave_field); > > +} > > Thanks, > > tglx >
| |