Messages in this thread | | | Date | Mon, 27 Apr 2015 18:12:08 +0200 | From | Denys Vlasenko <> | Subject | Re: [PATCH] x86_64, asm: Work around AMD SYSRET SS descriptor attribute issue |
| |
On 04/27/2015 04:57 PM, Linus Torvalds wrote: > On Mon, Apr 27, 2015 at 4:35 AM, Borislav Petkov <bp@alien8.de> wrote: >> >> /* >> * Change top 16 bits to be the sign-extension of 47th bit, if this >> * changed %rcx, it was not canonical. >> */ >> ALTERNATIVE "", \ >> "shl $(64 - (47+1)), %rcx; \ >> sar $(64 - (47+1)), %rcx; \ >> cmpq %rcx, %r11; \ >> jne opportunistic_sysret_failed", X86_BUG_SYSRET_CANON_RCX > > Guys, if we're looking at cycles for this, then don't do the "exact > canonical test". and go back to just doing > > shr $__VIRTUAL_MASK_SHIFT, %rcx > jnz opportunistic_sysret_failed > > which is much smaller.
It is smaller, but not by much. It is two instructions smaller. On disassembly level, the changes are:
cmp %rcx,0x80(%rsp) -> mov 0x80(%rsp),%r11; cmp %rcx,%r11 shr $0x2f,%rcx -> shl $0x10,%rcx; sar $0x10,%rcx; cmp %rcx,%r11 mov 0x58(%rsp),%rcx -> (eliminated)
| |