[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86/time: Adjust init-time handling of pit0_ticks



On 19/12/16 16:51, Jan Beulich wrote:
>>>> On 19.12.16 at 17:38, <andrew.cooper3@xxxxxxxxxx> wrote:
>> There is no need for the volatile cast in the timer interrupt.  pit0_ticks 
>> has
>> external linkage, preventing the compiler from eliding the update.  This
>> reduces the generated assembly from a read, local modify, write to a single
>> add instruction.
> I don't think external linkage is the reason here, considering the
> effects of whole-program-optimization.

In the case of whole-program-optimisation, the compiler would observe
that one function wrote to the variable, and one function read from it. 
I presume that is also sufficient to prevent the eliding?

>
>> --- a/xen/arch/x86/io_apic.c
>> +++ b/xen/arch/x86/io_apic.c
>> @@ -1485,8 +1485,7 @@ static int __init timer_irq_works(void)
>>  {
>>      unsigned long t1, flags;
>>  
>> -    t1 = pit0_ticks;
>> -    mb();
>> +    t1 = ACCESS_ONCE(pit0_ticks);
> Any reason not to use the available read_atomic() here?

ACCESS_ONCE() doesn't force an explicit reg/mem mov instruction,
although in practice it doesn't make any difference in this case.

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.