@@ -275,14 +275,17 @@ static int uv_rtc_unset_timer(int cpu, int force)
*/
static u64 uv_read_rtc(struct clocksource *cs)
{
- unsigned long offset;
+ unsigned long offset, time;
+ unsigned int cpu = get_cpu();
if (uv_get_min_hub_revision_id() == 1)
offset = 0;
else
- offset = (uv_blade_processor_id() * L1_CACHE_BYTES) % PAGE_SIZE;
+ offset = (uv_cpu_blade_processor_id(cpu) * L1_CACHE_BYTES) % PAGE_SIZE;
- return (u64)uv_read_local_mmr(UVH_RTC | offset);
+ time = (u64)uv_read_local_mmr(UVH_RTC | offset);
+ put_cpu();
+ return time;
}
/*