Re: [PATCH 03 of 36] x86: add memory barriers to wrmsr

Jeremy Fitzhardinge
2008-06-25T23:38:33Z

H. Peter Anvin wrote:
> Arjan van de Ven wrote:
>>>>
>>> I suppose, though I would be inclined to put the barriers in the
>>> wrmsr macro itself to act as documentation.
>>
>>
>> yeah I meant like this:
>>
>> static inline void native_write_msr(unsigned int msr,
>> unsigned low, unsigned high)
>> {
>> barrier();
>> asm volatile("wrmsr" : : "c" (msr), "a"(low), "d" (high));
>> barrier();
>> }
>>
>> or in the same in the thing that calls this.
>>
>
> Actually, I believe the barrier(); before is actually incorrect, since
> it would affect the wrmsr() register arguments rather than the wrmsr
> instruction itself.

How so? What kind of failure do think might occur? Some effect on how
the wrmsr arguments are evaluated?

barrier() is specifically a compiler optimisation barrier, so the
barrier before would prevent the compiler from moving anything logically
before the wrmsr to afterwards.

That said, making the wrmsr itself a memory clobber may be simpler
understand with a comment, rather than separate barriers...

J