[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 3/4] x86/uaccess: rework user access speculative harden guards
On 19.11.2024 16:31, Andrew Cooper wrote: > On 19/11/2024 10:34 am, Roger Pau Monne wrote: > Overall this is far more legible, and I'm tempted to take it on that > justification alone. But this is Jan's pile of magic. > > There is a weird effect from this change: > > add/remove: 2/0 grow/shrink: 2/2 up/down: 740/-739 (1) > Function old new delta > build_symbol_table - 686 +686 > build_symbol_table.cold - 48 +48 > pv_map_ldt_shadow_page 641 644 +3 > pv_emulate_gate_op 2919 2922 +3 > livepatch_op.cold 557 509 -48 > livepatch_op 5952 5261 -691 > > which is clearly changing inlining decisions. I suspect it's related to... > >> --- a/xen/arch/x86/usercopy.c >> +++ b/xen/arch/x86/usercopy.c >> @@ -11,23 +11,23 @@ >> #include <asm/uaccess.h> >> >> #ifndef GUARD >> -# define GUARD UA_KEEP >> +# define GUARD 1 >> #endif >> >> unsigned int copy_to_guest_ll(void __user *to, const void *from, unsigned >> int n) >> { >> - GUARD(unsigned dummy); >> + unsigned __maybe_unused dummy; > > ... this. This doesn't need to be __maybe_unused, because ... > >> >> stac(); >> asm volatile ( >> - GUARD( >> + ".if " STR(GUARD) "\n" >> " guest_access_mask_ptr %[to], %q[scratch1], %q[scratch2]\n" >> - ) >> + ".endif\n" >> "1: rep movsb\n" >> "2:\n" >> _ASM_EXTABLE(1b, 2b) >> - : [cnt] "+c" (n), [to] "+D" (to), [from] "+S" (from) >> - GUARD(, [scratch1] "=&r" (dummy), [scratch2] "=&r" (dummy)) >> + : [cnt] "+c" (n), [to] "+D" (to), [from] "+S" (from), >> + [scratch1] "=&r" (dummy), [scratch2] "=&r" (dummy) > > ... these parameters are referenced unconditionally. > > However, it does mean the compiler is spilling the scratch registers > even when guard is 0. I expect this is what is affecting the inlining > decisions. Or the increased number of newlines that the asm() expands to (or the combination of both). Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |