diff options
Diffstat (limited to 'kernel/trace/ring_buffer.c')
| -rw-r--r-- | kernel/trace/ring_buffer.c | 24 | 
1 files changed, 21 insertions, 3 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index bd1c35a4fbc..db7b439d23e 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -5,7 +5,6 @@   */  #include <linux/ring_buffer.h>  #include <linux/trace_clock.h> -#include <linux/ftrace_irq.h>  #include <linux/spinlock.h>  #include <linux/debugfs.h>  #include <linux/uaccess.h> @@ -1429,6 +1428,17 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size)  }  EXPORT_SYMBOL_GPL(ring_buffer_resize); +void ring_buffer_change_overwrite(struct ring_buffer *buffer, int val) +{ +	mutex_lock(&buffer->mutex); +	if (val) +		buffer->flags |= RB_FL_OVERWRITE; +	else +		buffer->flags &= ~RB_FL_OVERWRITE; +	mutex_unlock(&buffer->mutex); +} +EXPORT_SYMBOL_GPL(ring_buffer_change_overwrite); +  static inline void *  __rb_data_page_index(struct buffer_data_page *bpage, unsigned index)  { @@ -2162,11 +2172,19 @@ rb_reserve_next_event(struct ring_buffer *buffer,  	if (likely(ts >= cpu_buffer->write_stamp)) {  		delta = diff;  		if (unlikely(test_time_stamp(delta))) { +			int local_clock_stable = 1; +#ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK +			local_clock_stable = sched_clock_stable; +#endif  			WARN_ONCE(delta > (1ULL << 59), -				  KERN_WARNING "Delta way too big! %llu ts=%llu write stamp = %llu\n", +				  KERN_WARNING "Delta way too big! %llu ts=%llu write stamp = %llu\n%s",  				  (unsigned long long)delta,  				  (unsigned long long)ts, -				  (unsigned long long)cpu_buffer->write_stamp); +				  (unsigned long long)cpu_buffer->write_stamp, +				  local_clock_stable ? "" : +				  "If you just came from a suspend/resume,\n" +				  "please switch to the trace global clock:\n" +				  "  echo global > /sys/kernel/debug/tracing/trace_clock\n");  			add_timestamp = 1;  		}  	}  | 
