Skip to content

Commit

Permalink
xen: use non-tracing preempt in xen_clocksource_read()
Browse files Browse the repository at this point in the history
The tracing code used sched_clock() to get tracing timestamps, which
ends up calling xen_clocksource_read().  xen_clocksource_read() must
disable preemption, but if preemption tracing is enabled, this results
in infinite recursion.

I've only noticed this when boot-time tracing tests are enabled, but it
seems like a generic bug.  It looks like it would also affect
kvm_clocksource_read().

Reported-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Cc: Avi Kivity <avi@redhat.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
  • Loading branch information
Jeremy Fitzhardinge committed Aug 24, 2011
1 parent fcb8ce5 commit f1c3962
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions arch/x86/xen/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,10 @@ cycle_t xen_clocksource_read(void)
struct pvclock_vcpu_time_info *src;
cycle_t ret;

src = &get_cpu_var(xen_vcpu)->time;
preempt_disable_notrace();
src = &__get_cpu_var(xen_vcpu)->time;
ret = pvclock_clocksource_read(src);
put_cpu_var(xen_vcpu);
preempt_enable_notrace();
return ret;
}

Expand Down

0 comments on commit f1c3962

Please sign in to comment.