Re: [PATCH 2/3] x86/fpu: Remove the thread::fpu pointer

From: Ingo Molnar
Date: Thu Jun 06 2024 - 04:56:17 EST



* Oleg Nesterov <oleg@xxxxxxxxxx> wrote:

> On 06/05, Ingo Molnar wrote:
> >
> > @@ -591,13 +591,11 @@ int fpu_clone(struct task_struct *dst, unsigned long clone_flags, bool minimal,
> > * This is safe because task_struct size is a multiple of cacheline size.
> > */
> > struct fpu *dst_fpu = (void *)dst + sizeof(*dst);
> > - struct fpu *src_fpu = current->thread.fpu;
> > + struct fpu *src_fpu = x86_task_fpu(current);
>
> I think this patch can also change
>
> struct fpu *dst_fpu = (void *)dst + sizeof(*dst);
>
> above to use x86_task_fpu(dst).

Yeah, so I'd prefer to keep it open coded, because of the comment and the
debug check makes a lot more sense if the pointer calculation is visible:

/*
* We allocate the new FPU structure right after the end of the task struct.
* task allocation size already took this into account.
*
* This is safe because task_struct size is a multiple of cacheline size.
*/
struct fpu *dst_fpu = (void *)dst + sizeof(*dst);

BUILD_BUG_ON(sizeof(*dst) % SMP_CACHE_BYTES != 0);

But yes, you are right, this is technically an open-coded x86_task_fpu().

Thanks,

Ingo