|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 22/25] x86/HVM: do actual CMPXCHG in hvmemul_cmpxchg()
>>> On 05.02.18 at 17:09, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 05/02/18 08:32, Jan Beulich wrote:
>>>>> On 02.02.18 at 17:36, <andrew.cooper3@xxxxxxxxxx> wrote:
>>> On 07/12/17 14:16, Jan Beulich wrote:
>>>> + case 16:
>>>> + if ( cpu_has_cx16 )
>>>> + {
>>>> + __uint128_t *old = p_old, cur;
>>>> +
>>>> + if ( lock )
>>>> + cur = __cmpxchg16b(mapping, old, p_new);
>>>> + else
>>>> + cur = cmpxchg16b_local_(mapping, old, p_new);
>>>> + if ( cur != *old )
>>>> + {
>>>> + *old = cur;
>>>> + rc = X86EMUL_CMPXCHG_FAILED;
>>>> + }
>>>> + break;
>>>> + }
>>>> + /* fall through */
>>>> + default:
>>> ASSERT_UNREACHABLE() ?
>>>
>>>> + rc = X86EMUL_UNHANDLEABLE;
>>>> + break;
>>>> + }
>> I'm not sure - from an abstract POV cpu_has_cx16 and the guest
>> seeing the feature available in its CPUID policy could differ. Granted
>> we're unlikely to want to try to emulate CMPXCHG16B without having
>> the instruction available ourselves, but it still wouldn't seem entirely
>> correct to assert here. I could remove the fall-through and _then_
>> assert in the default case only. Let me know.
>
> The point was to catch bad sizes from being passed in. There is only a
> single ancient range of 64bit processors which don't have CX16, but I'd
> still argue that it would be a bug for the emulator to pass 16 down in
> such cases.
So - are you fine then with my earlier suggestion towards an actual
change to make here?
>>>> --- a/xen/include/asm-x86/system.h
>>>> +++ b/xen/include/asm-x86/system.h
>>>> @@ -110,6 +110,38 @@ static always_inline unsigned long __cmp
>>>> return old;
>>>> }
>>>>
>>>> +static always_inline unsigned long cmpxchg_local_(
>>> unlocked_cmpxchg() ?
>> Not in line with our current naming scheme.
>
> Its rather more in line than introducing a local_ suffix. Trailing
> underscores are almost non-existant, and as far as I can tell, used
> exclusively in the internals of the compat code.
Well, the name choice started from Linux'es cmpxchg_local(), of
which the function introduced here would be a helper. I'd like to
stick to the Linux inherited naming scheme (read: I want to keep
the "cmpxchg_local" part), but I don't insist on the trailing
underscore (which I only use here [and elsewhere] in preference
of name space violating leading ones). I'd just need a suggestion
towards an alternative you could live with, and fitting the outlined
criteria.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |