Linus Torvalds 1aa7a5735a x86/nospec: Simplify alternative_msr_write()
The macro is not type safe and I did look for why that "g" constraint for
the asm doesn't work: it's because the asm is more fundamentally wrong.

It does

        movl %[val], %%eax

but "val" isn't a 32-bit value, so then gcc will pass it in a register, 
and generate code like

        movl %rsi, %eax

and gas will complain about a nonsensical 'mov' instruction (it's moving a 
64-bit register to a 32-bit one).

Passing it through memory will just hide the real bug - gcc still thinks 
the memory location is 64-bit, but the "movl" will only load the first 32 
bits and it all happens to work because x86 is little-endian.

Convert it to a type safe inline function with a little trick which hands
the feature into the ALTERNATIVE macro.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
2018-05-03 13:55:45 +02:00
..
2018-04-11 10:28:38 -07:00
2018-04-27 16:13:31 -07:00
2018-04-27 16:13:31 -07:00
2018-04-10 09:58:58 -04:00
2018-04-06 18:31:06 -07:00
2018-04-20 08:25:31 -07:00
2018-04-11 10:28:39 -07:00
2018-04-11 16:02:18 -07:00
2018-04-15 12:27:58 -07:00
2018-04-15 17:21:30 -07:00
2018-04-11 10:28:38 -07:00