|
|
@@ -39,13 +39,18 @@ static u64 notrace gic_read_count(void)
|
|
|
|
|
|
static int gic_next_event(unsigned long delta, struct clock_event_device *evt)
|
|
|
{
|
|
|
+ int cpu = cpumask_first(evt->cpumask);
|
|
|
u64 cnt;
|
|
|
int res;
|
|
|
|
|
|
cnt = gic_read_count();
|
|
|
cnt += (u64)delta;
|
|
|
- write_gic_vl_other(mips_cm_vp_id(cpumask_first(evt->cpumask)));
|
|
|
- write_gic_vo_compare(cnt);
|
|
|
+ if (cpu == raw_smp_processor_id()) {
|
|
|
+ write_gic_vl_compare(cnt);
|
|
|
+ } else {
|
|
|
+ write_gic_vl_other(mips_cm_vp_id(cpu));
|
|
|
+ write_gic_vo_compare(cnt);
|
|
|
+ }
|
|
|
res = ((int)(gic_read_count() - cnt) >= 0) ? -ETIME : 0;
|
|
|
return res;
|
|
|
}
|