Merge branch 'sparc64-early-boot-timestamp'
Pavel Tatashin says:
====================
sparc64: Early boot timestamp
Changelog:
v2 - v3:
- __aligned(64) -> __cacheline_aligned
- Replaced in sched_clock() wmb() with barrier()
v1 - v2:
- Early boot timestamps are now available on all 64-bit
sparc processors
- New hot-patched get_tick() function.
This patch set:
- enables early boot timestamps on SPARC,
- adds offset so we count time from zero, the same as it is done on other
platforms
- improves the performance by inling, hot patching, and combining loads
into the same cacheline. (and few other optimizations).
So, the final performance of sched_clock() is faster than now: the fewer
number of loads, and all of them are coming from the same cacheline. Loads
can run while we are reading tick value, and we do not do function call.
Current sched_clock():
sethi %hi(0xb9b400), %g1
ldx [ %g1 + 0x250 ], %g1
ldx [ %g1 ], %g1
call %g1
nop
sethi %hi(0xb9b400), %g1
ldx [ %g1 + 0x300 ], %g1
mulx %o0, %g1, %g1
rett %i7 + 8
srlx %g1, 0xa, %o0
Final sched_clock():
sethi %hi(0xb9b400), %g1
ldx [ %g1 + 0x2c8 ], %g2
ldx [ %g1 + 0x2c0 ], %g1
b 42f638 <sched_clock+0x44>
rd %asr24, %i0
...
sllx %i0, 1, %i0
srlx %i0, 1, %i0
mulx %i0, %g1, %i0
srlx %i0, 0xa, %i0
rett %i7 + 8
sub %o0, %g2, %o0
====================
Signed-off-by: David S. Miller <davem@davemloft.net>