diff -r 2c5b7da4b914 xen/common/trace.c --- a/xen/common/trace.c Wed Jan 06 16:22:18 2010 +0000 +++ b/xen/common/trace.c Thu Jan 07 15:24:15 2010 +0000 @@ -230,11 +230,26 @@ tb_init_done = 1; break; case XEN_SYSCTL_TBUFOP_disable: + { /* * Disable trace buffers. Just stops new records from being written, * does not deallocate any memory. */ + int i; + tb_init_done = 0; + wmb(); + /* Clear any lost-record info so we don't get phantom lost records next time we + * start tracing. Grab the lock to make sure we're not racing anyone. After this + * hypercall returns, no more records should be placed into the buffers. */ + for_each_online_cpu(i) + { + int flags; + spin_lock_irqsave(&per_cpu(t_lock, i), flags); + per_cpu(lost_records, i)=0; + spin_unlock_irqrestore(&per_cpu(t_lock, i), flags); + } + } break; default: rc = -EINVAL;