On Tue, 2018-01-09 at 16:39 -0800, Linus Torvalds wrote: > On Tue, Jan 9, 2018 at 4:31 PM, Andi Kleen > wrote: > > > > > > The following patch fixes it for me. Something doesn't > > seem to work with ALTERNATIVE_2. It adds only a few bytes > > more code, so seems acceptable. > Ugh. It's kind of stupid, though. > > Why is the code sequence not simply: > >   ALTERNATIVE "", "lfence", X86_FEATURE_RETPOLINE_AMD >   ALTERNATIVE __stringify(jmp *\reg), __stringify(RETPOLINE_JMP > \reg), > X86_FEATURE_RETPOLINE > > ie make that X86_FEATURE_RETPOLINE_AMD _only_ emit the "lfence", and > simply fall through to what will be the "jmp *\reg" of the > non-RETPOLINE version. > > Then just make sure X86_FEATURE_RETPOLINE_AMD disables > X86_FEATURE_RETPOLINE. > > That is both simpler and smaller, no? Not smaller, as the lfence *could* have gone in all the space left by turning the whole retpoline thing into a single 'jmp'. But I'll certainly give you simpler. I'll retest and merge Andi's latest patches for that; thanks. I'd really like to know what went wrong though. Did we merge Borislav's attempt to peek at jumps inside alternatives, perchance? Will take a look...