x86, UV: Fix RTC latency bug by reading replicated cachelines
For SGI UV node controllers (HUB) rev 2.0 or greater, use replicated cachelines to read the RTC timer. This optimization allows faster simulataneous reads from a given socket. Signed-off-by: Dimitri Sivanich <sivanich@sgi.com> Cc: Jack Steiner <steiner@sgi.com> LKML-Reference: <20100122154140.GB4975@sgi.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
committed by
Ingo Molnar
parent
e0b5f80dd4
commit
aca3bb5910
@@ -282,10 +282,21 @@ static int uv_rtc_unset_timer(int cpu, int force)
|
||||
|
||||
/*
|
||||
* Read the RTC.
|
||||
*
|
||||
* Starting with HUB rev 2.0, the UV RTC register is replicated across all
|
||||
* cachelines of it's own page. This allows faster simultaneous reads
|
||||
* from a given socket.
|
||||
*/
|
||||
static cycle_t uv_read_rtc(struct clocksource *cs)
|
||||
{
|
||||
return (cycle_t)uv_read_local_mmr(UVH_RTC);
|
||||
unsigned long offset;
|
||||
|
||||
if (uv_get_min_hub_revision_id() == 1)
|
||||
offset = 0;
|
||||
else
|
||||
offset = (uv_blade_processor_id() * L1_CACHE_BYTES) % PAGE_SIZE;
|
||||
|
||||
return (cycle_t)uv_read_local_mmr(UVH_RTC | offset);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user