Re: [RFC][PATCH] x86, fpu: dynamically allocate 'struct fpu'

Dave Hansen
2015-07-16T21:29:06Z

On 07/16/2015 12:25 PM, Andy Lutomirski wrote:
> On Thu, Jul 16, 2015 at 12:14 PM, Dave Hansen <dave@sr71.net> wrote:
>> +#define CHECK_MEMBER_AT_END_OF(TYPE, MEMBER) \
>> + BUILD_BUG_ON((sizeof(TYPE) - \
>> + offsetof(TYPE, MEMBER) - \
>> + sizeof(((TYPE *)0)->MEMBER)) > \
>> + 0) \
>> +
>
> You could save a bit of typing by using offsetofend here. Something
> along the lines of BUILD_BUG_ON(sizeof(TYPE) != offsetofend(TYPE,
> MEMBER));

Good point.

>> #endif /* _ASM_X86_FPU_H */
>> diff -puN arch/x86/kernel/process.c~dynamically-allocate-struct-fpu arch/x86/kernel/process.c
>> --- a/arch/x86/kernel/process.c~dynamically-allocate-struct-fpu 2015-07-16 10:50:42.360571875 -0700
>> +++ b/arch/x86/kernel/process.c 2015-07-16 12:00:59.204808551 -0700
>> @@ -81,7 +81,7 @@ EXPORT_SYMBOL_GPL(idle_notifier_unregist
>> */
>> int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
>> {
>> - *dst = *src;
>> + memcpy(dst, src, arch_task_struct_size());
>
> This is actually vaguely performance-critical, which makes me thing
> that using some kind of inline or other real way (config macro, ifdef,
> etc) to detect whether there's an arch override would be better than a
> weak function.

Fair enough. I'll send out another version in a bit if there are no
more comments.