* Ingo Molnar <mi...@kernel.org> wrote:

> 
> * Borislav Petkov <b...@alien8.de> wrote:
> 
> > From: Borislav Petkov <b...@suse.de>
> > 
> > Use the asm macro and drop the locally grown version.
> 
> > @@ -73,9 +49,11 @@ ENTRY(_copy_to_user)
> >     jc bad_to_user
> >     cmpq TI_addr_limit(%rax),%rcx
> >     ja bad_to_user
> > +   ALTERNATIVE_2 "jmp copy_user_generic_unrolled",         \
> > +                 "jmp copy_user_generic_string",           \
> > +                 X86_FEATURE_REP_GOOD,                     \
> > +                 "jmp copy_user_enhanced_fast_string",     \
> > +                 X86_FEATURE_ERMS
> 
> Btw., as a future optimization, wouldn't it be useful to patch this 
> function at its first instruction, i.e. to have three fully functional 
> copy_user_generic_ variants and choose to jmp to one of them in the 
> first instruction of the original function?
> 
> The advantage would be two-fold:
> 
>  1) right now: smart microarchitectures that are able to optimize
>     jump-after-jump (and jump-after-call) targets in their branch
>     target cache can do so in this case, reducing the overhead of the
>     patching, possibly close to zero in the cached case.

Btw., the x86 memset() variants are using this today, and I think this 
is the most optimal jump-patching variant, even if it means a small 
amount of code duplication between the copy_user variants.

Thanks,

        Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to