Re: [PATCHV2 3/3] x86, ras: Add mcsafe_memcpy() function to recover from machine checks

From: Andy Lutomirski
Date: Mon Dec 14 2015 - 15:12:28 EST


On Mon, Dec 14, 2015 at 11:46 AM, Luck, Tony <tony.luck@xxxxxxxxx> wrote:
> On Mon, Dec 14, 2015 at 09:36:25AM +0100, Ingo Molnar wrote:
>> > /* deal with it */
>> >
>> > That way the magic is isolated to the function that needs the magic.
>>
>> Seconded - this is the usual pattern we use in all assembly functions.
>
> Ok - you want me to write some x86 assembly code (you may regret that).
>

All you have to do is erase all of the ia64 asm knowledge from your
brain and repurpose 1% of that space for x86 asm. You'll be a
world-class expert!

> Initial question ... here's the fixup for __copy_user_nocache()
>
> .section .fixup,"ax"
> 30: shll $6,%ecx
> addl %ecx,%edx
> jmp 60f
> 40: lea (%rdx,%rcx,8),%rdx
> jmp 60f
> 50: movl %ecx,%edx
> 60: sfence
> jmp copy_user_handle_tail
> .previous
>
> Are %ecx and %rcx synonyms for the same register? Is there some
> super subtle reason we use the 'r' names in the "40" fixup, but
> the 'e' names everywhere else in this code (and the 'e' names in
> the body of the original function)?

rcx is a 64-bit register. ecx is the low 32 bits of it. If you read
from ecx, you get the low 32 bits, but if you write to ecx, you zero
the high bits as a side-effect.

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