@@ -460,9 +460,10 @@ struct ring_buffer_per_cpu {
460460 unsigned long lost_events ;
461461 unsigned long last_overrun ;
462462 local_t entries_bytes ;
463- local_t commit_overrun ;
464- local_t overrun ;
465463 local_t entries ;
464+ local_t overrun ;
465+ local_t commit_overrun ;
466+ local_t dropped_events ;
466467 local_t committing ;
467468 local_t commits ;
468469 unsigned long read ;
@@ -1820,7 +1821,7 @@ rb_add_time_stamp(struct ring_buffer_event *event, u64 delta)
18201821}
18211822
18221823/**
1823- * ring_buffer_update_event - update event type and data
1824+ * rb_update_event - update event type and data
18241825 * @event: the even to update
18251826 * @type: the type of event
18261827 * @length: the size of the event field in the ring buffer
@@ -2155,8 +2156,10 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
21552156 * If we are not in overwrite mode,
21562157 * this is easy, just stop here.
21572158 */
2158- if (!(buffer -> flags & RB_FL_OVERWRITE ))
2159+ if (!(buffer -> flags & RB_FL_OVERWRITE )) {
2160+ local_inc (& cpu_buffer -> dropped_events );
21592161 goto out_reset ;
2162+ }
21602163
21612164 ret = rb_handle_head_page (cpu_buffer ,
21622165 tail_page ,
@@ -2720,8 +2723,8 @@ EXPORT_SYMBOL_GPL(ring_buffer_discard_commit);
27202723 * and not the length of the event which would hold the header.
27212724 */
27222725int ring_buffer_write (struct ring_buffer * buffer ,
2723- unsigned long length ,
2724- void * data )
2726+ unsigned long length ,
2727+ void * data )
27252728{
27262729 struct ring_buffer_per_cpu * cpu_buffer ;
27272730 struct ring_buffer_event * event ;
@@ -2929,12 +2932,12 @@ rb_num_of_entries(struct ring_buffer_per_cpu *cpu_buffer)
29292932 * @buffer: The ring buffer
29302933 * @cpu: The per CPU buffer to read from.
29312934 */
2932- unsigned long ring_buffer_oldest_event_ts (struct ring_buffer * buffer , int cpu )
2935+ u64 ring_buffer_oldest_event_ts (struct ring_buffer * buffer , int cpu )
29332936{
29342937 unsigned long flags ;
29352938 struct ring_buffer_per_cpu * cpu_buffer ;
29362939 struct buffer_page * bpage ;
2937- unsigned long ret ;
2940+ u64 ret ;
29382941
29392942 if (!cpumask_test_cpu (cpu , buffer -> cpumask ))
29402943 return 0 ;
@@ -2995,7 +2998,8 @@ unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu)
29952998EXPORT_SYMBOL_GPL (ring_buffer_entries_cpu );
29962999
29973000/**
2998- * ring_buffer_overrun_cpu - get the number of overruns in a cpu_buffer
3001+ * ring_buffer_overrun_cpu - get the number of overruns caused by the ring
3002+ * buffer wrapping around (only if RB_FL_OVERWRITE is on).
29993003 * @buffer: The ring buffer
30003004 * @cpu: The per CPU buffer to get the number of overruns from
30013005 */
@@ -3015,7 +3019,9 @@ unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu)
30153019EXPORT_SYMBOL_GPL (ring_buffer_overrun_cpu );
30163020
30173021/**
3018- * ring_buffer_commit_overrun_cpu - get the number of overruns caused by commits
3022+ * ring_buffer_commit_overrun_cpu - get the number of overruns caused by
3023+ * commits failing due to the buffer wrapping around while there are uncommitted
3024+ * events, such as during an interrupt storm.
30193025 * @buffer: The ring buffer
30203026 * @cpu: The per CPU buffer to get the number of overruns from
30213027 */
@@ -3035,6 +3041,28 @@ ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu)
30353041}
30363042EXPORT_SYMBOL_GPL (ring_buffer_commit_overrun_cpu );
30373043
3044+ /**
3045+ * ring_buffer_dropped_events_cpu - get the number of dropped events caused by
3046+ * the ring buffer filling up (only if RB_FL_OVERWRITE is off).
3047+ * @buffer: The ring buffer
3048+ * @cpu: The per CPU buffer to get the number of overruns from
3049+ */
3050+ unsigned long
3051+ ring_buffer_dropped_events_cpu (struct ring_buffer * buffer , int cpu )
3052+ {
3053+ struct ring_buffer_per_cpu * cpu_buffer ;
3054+ unsigned long ret ;
3055+
3056+ if (!cpumask_test_cpu (cpu , buffer -> cpumask ))
3057+ return 0 ;
3058+
3059+ cpu_buffer = buffer -> buffers [cpu ];
3060+ ret = local_read (& cpu_buffer -> dropped_events );
3061+
3062+ return ret ;
3063+ }
3064+ EXPORT_SYMBOL_GPL (ring_buffer_dropped_events_cpu );
3065+
30383066/**
30393067 * ring_buffer_entries - get the number of entries in a buffer
30403068 * @buffer: The ring buffer
@@ -3864,9 +3892,10 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
38643892 local_set (& cpu_buffer -> reader_page -> page -> commit , 0 );
38653893 cpu_buffer -> reader_page -> read = 0 ;
38663894
3867- local_set (& cpu_buffer -> commit_overrun , 0 );
38683895 local_set (& cpu_buffer -> entries_bytes , 0 );
38693896 local_set (& cpu_buffer -> overrun , 0 );
3897+ local_set (& cpu_buffer -> commit_overrun , 0 );
3898+ local_set (& cpu_buffer -> dropped_events , 0 );
38703899 local_set (& cpu_buffer -> entries , 0 );
38713900 local_set (& cpu_buffer -> committing , 0 );
38723901 local_set (& cpu_buffer -> commits , 0 );
0 commit comments