mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
x86/time: Adjust init-time handling of pit0_ticks
There is no need for the volatile cast in the timer interrupt; the compiler may not elide the update. This reduces the generated assembly from a read, local modify, write to a single add instruction. Drop the memory barriers from timer_irq_works(), as they are not needed. pit0_ticks is only modified by timer_interrupt() running on the same CPU, so all that is required is a volatile reference to prevent the compiler from eliding the second read. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
58b4db0832
commit
11c397c207
3 files changed
+5
-5
No files matched your search
@@ -1485,8 +1485,7 @@ static int __init timer_irq_works(void)
|
||||
{
|
||||
unsigned long t1, flags;
|
||||
|
||||
t1 = pit0_ticks;
|
||||
mb();
|
||||
t1 = ACCESS_ONCE(pit0_ticks);
|
||||
|
||||
local_save_flags(flags);
|
||||
local_irq_enable();
|
||||
@@ -1501,8 +1500,7 @@ static int __init timer_irq_works(void)
|
||||
* might have cached one ExtINT interrupt. Finally, at
|
||||
* least one tick may be lost due to delays.
|
||||
*/
|
||||
mb();
|
||||
if (pit0_ticks - t1 > 4)
|
||||
if ( (ACCESS_ONCE(pit0_ticks) - t1) > 4 )
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
|
||||
+1
-1
@@ -197,7 +197,7 @@ static void timer_interrupt(int irq, void *dev_id, struct cpu_user_regs *regs)
|
||||
return;
|
||||
|
||||
/* Only for start-of-day interruopt tests in io_apic.c. */
|
||||
(*(volatile unsigned long *)&pit0_ticks)++;
|
||||
pit0_ticks++;
|
||||
|
||||
/* Rough hack to allow accurate timers to sort-of-work with no APIC. */
|
||||
if ( !cpu_has_apic )
|
||||
|
||||
@@ -56,6 +56,8 @@
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]) + __must_be_array(x))
|
||||
|
||||
#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
|
||||
|
||||
#define MASK_EXTR(v, m) (((v) & (m)) / ((m) & -(m)))
|
||||
#define MASK_INSR(v, m) (((v) * ((m) & -(m))) & (m))
|
||||
|
||||
|
||||