1
2
3
4
5
6#include <linux/ftrace_event.h>
7#include <linux/ring_buffer.h>
8#include <linux/trace_clock.h>
9#include <linux/trace_seq.h>
10#include <linux/spinlock.h>
11#include <linux/irq_work.h>
12#include <linux/debugfs.h>
13#include <linux/uaccess.h>
14#include <linux/hardirq.h>
15#include <linux/kthread.h>
16#include <linux/kmemcheck.h>
17#include <linux/module.h>
18#include <linux/percpu.h>
19#include <linux/mutex.h>
20#include <linux/delay.h>
21#include <linux/slab.h>
22#include <linux/init.h>
23#include <linux/hash.h>
24#include <linux/list.h>
25#include <linux/cpu.h>
26#include <linux/fs.h>
27
28#include <asm/local.h>
29
30static void update_pages_handler(struct work_struct *work);
31
32
33
34
35int ring_buffer_print_entry_header(struct trace_seq *s)
36{
37 int ret;
38
39 ret = trace_seq_puts(s, "# compressed entry header\n");
40 ret = trace_seq_puts(s, "\ttype_len : 5 bits\n");
41 ret = trace_seq_puts(s, "\ttime_delta : 27 bits\n");
42 ret = trace_seq_puts(s, "\tarray : 32 bits\n");
43 ret = trace_seq_putc(s, '\n');
44 ret = trace_seq_printf(s, "\tpadding : type == %d\n",
45 RINGBUF_TYPE_PADDING);
46 ret = trace_seq_printf(s, "\ttime_extend : type == %d\n",
47 RINGBUF_TYPE_TIME_EXTEND);
48 ret = trace_seq_printf(s, "\tdata max type_len == %d\n",
49 RINGBUF_TYPE_DATA_TYPE_LEN_MAX);
50
51 return ret;
52}
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151enum {
152 RB_BUFFERS_ON_BIT = 0,
153 RB_BUFFERS_DISABLED_BIT = 1,
154};
155
156enum {
157 RB_BUFFERS_ON = 1 << RB_BUFFERS_ON_BIT,
158 RB_BUFFERS_DISABLED = 1 << RB_BUFFERS_DISABLED_BIT,
159};
160
161static unsigned long ring_buffer_flags __read_mostly = RB_BUFFERS_ON;
162
163
164#define RB_BUFFER_OFF (1 << 20)
165
166#define BUF_PAGE_HDR_SIZE offsetof(struct buffer_data_page, data)
167
168
169
170
171
172
173
174void tracing_off_permanent(void)
175{
176 set_bit(RB_BUFFERS_DISABLED_BIT, &ring_buffer_flags);
177}
178
179#define RB_EVNT_HDR_SIZE (offsetof(struct ring_buffer_event, array))
180#define RB_ALIGNMENT 4U
181#define RB_MAX_SMALL_DATA (RB_ALIGNMENT * RINGBUF_TYPE_DATA_TYPE_LEN_MAX)
182#define RB_EVNT_MIN_SIZE 8U
183
184#ifndef CONFIG_HAVE_64BIT_ALIGNED_ACCESS
185# define RB_FORCE_8BYTE_ALIGNMENT 0
186# define RB_ARCH_ALIGNMENT RB_ALIGNMENT
187#else
188# define RB_FORCE_8BYTE_ALIGNMENT 1
189# define RB_ARCH_ALIGNMENT 8U
190#endif
191
192#define RB_ALIGN_DATA __aligned(RB_ARCH_ALIGNMENT)
193
194
195#define RINGBUF_TYPE_DATA 0 ... RINGBUF_TYPE_DATA_TYPE_LEN_MAX
196
197enum {
198 RB_LEN_TIME_EXTEND = 8,
199 RB_LEN_TIME_STAMP = 16,
200};
201
202#define skip_time_extend(event) \
203 ((struct ring_buffer_event *)((char *)event + RB_LEN_TIME_EXTEND))
204
205static inline int rb_null_event(struct ring_buffer_event *event)
206{
207 return event->type_len == RINGBUF_TYPE_PADDING && !event->time_delta;
208}
209
210static void rb_event_set_padding(struct ring_buffer_event *event)
211{
212
213 event->type_len = RINGBUF_TYPE_PADDING;
214 event->time_delta = 0;
215}
216
217static unsigned
218rb_event_data_length(struct ring_buffer_event *event)
219{
220 unsigned length;
221
222 if (event->type_len)
223 length = event->type_len * RB_ALIGNMENT;
224 else
225 length = event->array[0];
226 return length + RB_EVNT_HDR_SIZE;
227}
228
229
230
231
232
233
234static inline unsigned
235rb_event_length(struct ring_buffer_event *event)
236{
237 switch (event->type_len) {
238 case RINGBUF_TYPE_PADDING:
239 if (rb_null_event(event))
240
241 return -1;
242 return event->array[0] + RB_EVNT_HDR_SIZE;
243
244 case RINGBUF_TYPE_TIME_EXTEND:
245 return RB_LEN_TIME_EXTEND;
246
247 case RINGBUF_TYPE_TIME_STAMP:
248 return RB_LEN_TIME_STAMP;
249
250 case RINGBUF_TYPE_DATA:
251 return rb_event_data_length(event);
252 default:
253 BUG();
254 }
255
256 return 0;
257}
258
259
260
261
262
263static inline unsigned
264rb_event_ts_length(struct ring_buffer_event *event)
265{
266 unsigned len = 0;
267
268 if (event->type_len == RINGBUF_TYPE_TIME_EXTEND) {
269
270 len = RB_LEN_TIME_EXTEND;
271 event = skip_time_extend(event);
272 }
273 return len + rb_event_length(event);
274}
275
276
277
278
279
280
281
282
283
284
285
286unsigned ring_buffer_event_length(struct ring_buffer_event *event)
287{
288 unsigned length;
289
290 if (event->type_len == RINGBUF_TYPE_TIME_EXTEND)
291 event = skip_time_extend(event);
292
293 length = rb_event_length(event);
294 if (event->type_len > RINGBUF_TYPE_DATA_TYPE_LEN_MAX)
295 return length;
296 length -= RB_EVNT_HDR_SIZE;
297 if (length > RB_MAX_SMALL_DATA + sizeof(event->array[0]))
298 length -= sizeof(event->array[0]);
299 return length;
300}
301EXPORT_SYMBOL_GPL(ring_buffer_event_length);
302
303
304static void *
305rb_event_data(struct ring_buffer_event *event)
306{
307 if (event->type_len == RINGBUF_TYPE_TIME_EXTEND)
308 event = skip_time_extend(event);
309 BUG_ON(event->type_len > RINGBUF_TYPE_DATA_TYPE_LEN_MAX);
310
311 if (event->type_len)
312 return (void *)&event->array[0];
313
314 return (void *)&event->array[1];
315}
316
317
318
319
320
321void *ring_buffer_event_data(struct ring_buffer_event *event)
322{
323 return rb_event_data(event);
324}
325EXPORT_SYMBOL_GPL(ring_buffer_event_data);
326
327#define for_each_buffer_cpu(buffer, cpu) \
328 for_each_cpu(cpu, buffer->cpumask)
329
330#define TS_SHIFT 27
331#define TS_MASK ((1ULL << TS_SHIFT) - 1)
332#define TS_DELTA_TEST (~TS_MASK)
333
334
335#define RB_MISSED_EVENTS (1 << 31)
336
337#define RB_MISSED_STORED (1 << 30)
338
339struct buffer_data_page {
340 u64 time_stamp;
341 local_t commit;
342 unsigned char data[] RB_ALIGN_DATA;
343};
344
345
346
347
348
349
350
351
352
353struct buffer_page {
354 struct list_head list;
355 local_t write;
356 unsigned read;
357 local_t entries;
358 unsigned long real_end;
359 struct buffer_data_page *page;
360};
361
362
363
364
365
366
367
368
369
370
371
372
373
374#define RB_WRITE_MASK 0xfffff
375#define RB_WRITE_INTCNT (1 << 20)
376
377static void rb_init_page(struct buffer_data_page *bpage)
378{
379 local_set(&bpage->commit, 0);
380}
381
382
383
384
385
386
387
388size_t ring_buffer_page_len(void *page)
389{
390 return local_read(&((struct buffer_data_page *)page)->commit)
391 + BUF_PAGE_HDR_SIZE;
392}
393
394
395
396
397
398static void free_buffer_page(struct buffer_page *bpage)
399{
400 free_page((unsigned long)bpage->page);
401 kfree(bpage);
402}
403
404
405
406
407static inline int test_time_stamp(u64 delta)
408{
409 if (delta & TS_DELTA_TEST)
410 return 1;
411 return 0;
412}
413
414#define BUF_PAGE_SIZE (PAGE_SIZE - BUF_PAGE_HDR_SIZE)
415
416
417#define BUF_MAX_DATA_SIZE (BUF_PAGE_SIZE - (sizeof(u32) * 2))
418
419int ring_buffer_print_page_header(struct trace_seq *s)
420{
421 struct buffer_data_page field;
422 int ret;
423
424 ret = trace_seq_printf(s, "\tfield: u64 timestamp;\t"
425 "offset:0;\tsize:%u;\tsigned:%u;\n",
426 (unsigned int)sizeof(field.time_stamp),
427 (unsigned int)is_signed_type(u64));
428
429 ret = trace_seq_printf(s, "\tfield: local_t commit;\t"
430 "offset:%u;\tsize:%u;\tsigned:%u;\n",
431 (unsigned int)offsetof(typeof(field), commit),
432 (unsigned int)sizeof(field.commit),
433 (unsigned int)is_signed_type(long));
434
435 ret = trace_seq_printf(s, "\tfield: int overwrite;\t"
436 "offset:%u;\tsize:%u;\tsigned:%u;\n",
437 (unsigned int)offsetof(typeof(field), commit),
438 1,
439 (unsigned int)is_signed_type(long));
440
441 ret = trace_seq_printf(s, "\tfield: char data;\t"
442 "offset:%u;\tsize:%u;\tsigned:%u;\n",
443 (unsigned int)offsetof(typeof(field), data),
444 (unsigned int)BUF_PAGE_SIZE,
445 (unsigned int)is_signed_type(char));
446
447 return ret;
448}
449
450struct rb_irq_work {
451 struct irq_work work;
452 wait_queue_head_t waiters;
453 bool waiters_pending;
454};
455
456
457
458
459struct ring_buffer_per_cpu {
460 int cpu;
461 atomic_t record_disabled;
462 struct ring_buffer *buffer;
463 raw_spinlock_t reader_lock;
464 arch_spinlock_t lock;
465 struct lock_class_key lock_key;
466 unsigned int nr_pages;
467 struct list_head *pages;
468 struct buffer_page *head_page;
469 struct buffer_page *tail_page;
470 struct buffer_page *commit_page;
471 struct buffer_page *reader_page;
472 unsigned long lost_events;
473 unsigned long last_overrun;
474 local_t entries_bytes;
475 local_t entries;
476 local_t overrun;
477 local_t commit_overrun;
478 local_t dropped_events;
479 local_t committing;
480 local_t commits;
481 unsigned long read;
482 unsigned long read_bytes;
483 u64 write_stamp;
484 u64 read_stamp;
485
486 int nr_pages_to_update;
487 struct list_head new_pages;
488 struct work_struct update_pages_work;
489 struct completion update_done;
490
491 struct rb_irq_work irq_work;
492};
493
494struct ring_buffer {
495 unsigned flags;
496 int cpus;
497 atomic_t record_disabled;
498 atomic_t resize_disabled;
499 cpumask_var_t cpumask;
500
501 struct lock_class_key *reader_lock_key;
502
503 struct mutex mutex;
504
505 struct ring_buffer_per_cpu **buffers;
506
507#ifdef CONFIG_HOTPLUG_CPU
508 struct notifier_block cpu_notify;
509#endif
510 u64 (*clock)(void);
511
512 struct rb_irq_work irq_work;
513};
514
515struct ring_buffer_iter {
516 struct ring_buffer_per_cpu *cpu_buffer;
517 unsigned long head;
518 struct buffer_page *head_page;
519 struct buffer_page *cache_reader_page;
520 unsigned long cache_read;
521 u64 read_stamp;
522};
523
524
525
526
527
528
529
530static void rb_wake_up_waiters(struct irq_work *work)
531{
532 struct rb_irq_work *rbwork = container_of(work, struct rb_irq_work, work);
533
534 wake_up_all(&rbwork->waiters);
535}
536
537
538
539
540
541
542
543
544
545
546int ring_buffer_wait(struct ring_buffer *buffer, int cpu)
547{
548 struct ring_buffer_per_cpu *cpu_buffer;
549 DEFINE_WAIT(wait);
550 struct rb_irq_work *work;
551
552
553
554
555
556
557 if (cpu == RING_BUFFER_ALL_CPUS)
558 work = &buffer->irq_work;
559 else {
560 if (!cpumask_test_cpu(cpu, buffer->cpumask))
561 return -ENODEV;
562 cpu_buffer = buffer->buffers[cpu];
563 work = &cpu_buffer->irq_work;
564 }
565
566
567 prepare_to_wait(&work->waiters, &wait, TASK_INTERRUPTIBLE);
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589 work->waiters_pending = true;
590
591 if ((cpu == RING_BUFFER_ALL_CPUS && ring_buffer_empty(buffer)) ||
592 (cpu != RING_BUFFER_ALL_CPUS && ring_buffer_empty_cpu(buffer, cpu)))
593 schedule();
594
595 finish_wait(&work->waiters, &wait);
596 return 0;
597}
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613int ring_buffer_poll_wait(struct ring_buffer *buffer, int cpu,
614 struct file *filp, poll_table *poll_table)
615{
616 struct ring_buffer_per_cpu *cpu_buffer;
617 struct rb_irq_work *work;
618
619 if (cpu == RING_BUFFER_ALL_CPUS)
620 work = &buffer->irq_work;
621 else {
622 if (!cpumask_test_cpu(cpu, buffer->cpumask))
623 return -EINVAL;
624
625 cpu_buffer = buffer->buffers[cpu];
626 work = &cpu_buffer->irq_work;
627 }
628
629 work->waiters_pending = true;
630 poll_wait(filp, &work->waiters, poll_table);
631
632 if ((cpu == RING_BUFFER_ALL_CPUS && !ring_buffer_empty(buffer)) ||
633 (cpu != RING_BUFFER_ALL_CPUS && !ring_buffer_empty_cpu(buffer, cpu)))
634 return POLLIN | POLLRDNORM;
635 return 0;
636}
637
638
639#define RB_WARN_ON(b, cond) \
640 ({ \
641 int _____ret = unlikely(cond); \
642 if (_____ret) { \
643 if (__same_type(*(b), struct ring_buffer_per_cpu)) { \
644 struct ring_buffer_per_cpu *__b = \
645 (void *)b; \
646 atomic_inc(&__b->buffer->record_disabled); \
647 } else \
648 atomic_inc(&b->record_disabled); \
649 WARN_ON(1); \
650 } \
651 _____ret; \
652 })
653
654
655#define DEBUG_SHIFT 0
656
657static inline u64 rb_time_stamp(struct ring_buffer *buffer)
658{
659
660 return buffer->clock() << DEBUG_SHIFT;
661}
662
663u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu)
664{
665 u64 time;
666
667 preempt_disable_notrace();
668 time = rb_time_stamp(buffer);
669 preempt_enable_no_resched_notrace();
670
671 return time;
672}
673EXPORT_SYMBOL_GPL(ring_buffer_time_stamp);
674
675void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer,
676 int cpu, u64 *ts)
677{
678
679 *ts >>= DEBUG_SHIFT;
680}
681EXPORT_SYMBOL_GPL(ring_buffer_normalize_time_stamp);
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752#define RB_PAGE_NORMAL 0UL
753#define RB_PAGE_HEAD 1UL
754#define RB_PAGE_UPDATE 2UL
755
756
757#define RB_FLAG_MASK 3UL
758
759
760#define RB_PAGE_MOVED 4UL
761
762
763
764
765static struct list_head *rb_list_head(struct list_head *list)
766{
767 unsigned long val = (unsigned long)list;
768
769 return (struct list_head *)(val & ~RB_FLAG_MASK);
770}
771
772
773
774
775
776
777
778
779
780static inline int
781rb_is_head_page(struct ring_buffer_per_cpu *cpu_buffer,
782 struct buffer_page *page, struct list_head *list)
783{
784 unsigned long val;
785
786 val = (unsigned long)list->next;
787
788 if ((val & ~RB_FLAG_MASK) != (unsigned long)&page->list)
789 return RB_PAGE_MOVED;
790
791 return val & RB_FLAG_MASK;
792}
793
794
795
796
797
798
799
800
801static int rb_is_reader_page(struct buffer_page *page)
802{
803 struct list_head *list = page->list.prev;
804
805 return rb_list_head(list->next) != &page->list;
806}
807
808
809
810
811static void rb_set_list_to_head(struct ring_buffer_per_cpu *cpu_buffer,
812 struct list_head *list)
813{
814 unsigned long *ptr;
815
816 ptr = (unsigned long *)&list->next;
817 *ptr |= RB_PAGE_HEAD;
818 *ptr &= ~RB_PAGE_UPDATE;
819}
820
821
822
823
824static void rb_head_page_activate(struct ring_buffer_per_cpu *cpu_buffer)
825{
826 struct buffer_page *head;
827
828 head = cpu_buffer->head_page;
829 if (!head)
830 return;
831
832
833
834
835 rb_set_list_to_head(cpu_buffer, head->list.prev);
836}
837
838static void rb_list_head_clear(struct list_head *list)
839{
840 unsigned long *ptr = (unsigned long *)&list->next;
841
842 *ptr &= ~RB_FLAG_MASK;
843}
844
845
846
847
848static void
849rb_head_page_deactivate(struct ring_buffer_per_cpu *cpu_buffer)
850{
851 struct list_head *hd;
852
853
854 rb_list_head_clear(cpu_buffer->pages);
855
856 list_for_each(hd, cpu_buffer->pages)
857 rb_list_head_clear(hd);
858}
859
860static int rb_head_page_set(struct ring_buffer_per_cpu *cpu_buffer,
861 struct buffer_page *head,
862 struct buffer_page *prev,
863 int old_flag, int new_flag)
864{
865 struct list_head *list;
866 unsigned long val = (unsigned long)&head->list;
867 unsigned long ret;
868
869 list = &prev->list;
870
871 val &= ~RB_FLAG_MASK;
872
873 ret = cmpxchg((unsigned long *)&list->next,
874 val | old_flag, val | new_flag);
875
876
877 if ((ret & ~RB_FLAG_MASK) != val)
878 return RB_PAGE_MOVED;
879
880 return ret & RB_FLAG_MASK;
881}
882
883static int rb_head_page_set_update(struct ring_buffer_per_cpu *cpu_buffer,
884 struct buffer_page *head,
885 struct buffer_page *prev,
886 int old_flag)
887{
888 return rb_head_page_set(cpu_buffer, head, prev,
889 old_flag, RB_PAGE_UPDATE);
890}
891
892static int rb_head_page_set_head(struct ring_buffer_per_cpu *cpu_buffer,
893 struct buffer_page *head,
894 struct buffer_page *prev,
895 int old_flag)
896{
897 return rb_head_page_set(cpu_buffer, head, prev,
898 old_flag, RB_PAGE_HEAD);
899}
900
901static int rb_head_page_set_normal(struct ring_buffer_per_cpu *cpu_buffer,
902 struct buffer_page *head,
903 struct buffer_page *prev,
904 int old_flag)
905{
906 return rb_head_page_set(cpu_buffer, head, prev,
907 old_flag, RB_PAGE_NORMAL);
908}
909
910static inline void rb_inc_page(struct ring_buffer_per_cpu *cpu_buffer,
911 struct buffer_page **bpage)
912{
913 struct list_head *p = rb_list_head((*bpage)->list.next);
914
915 *bpage = list_entry(p, struct buffer_page, list);
916}
917
918static struct buffer_page *
919rb_set_head_page(struct ring_buffer_per_cpu *cpu_buffer)
920{
921 struct buffer_page *head;
922 struct buffer_page *page;
923 struct list_head *list;
924 int i;
925
926 if (RB_WARN_ON(cpu_buffer, !cpu_buffer->head_page))
927 return NULL;
928
929
930 list = cpu_buffer->pages;
931 if (RB_WARN_ON(cpu_buffer, rb_list_head(list->prev->next) != list))
932 return NULL;
933
934 page = head = cpu_buffer->head_page;
935
936
937
938
939
940
941 for (i = 0; i < 3; i++) {
942 do {
943 if (rb_is_head_page(cpu_buffer, page, page->list.prev)) {
944 cpu_buffer->head_page = page;
945 return page;
946 }
947 rb_inc_page(cpu_buffer, &page);
948 } while (page != head);
949 }
950
951 RB_WARN_ON(cpu_buffer, 1);
952
953 return NULL;
954}
955
956static int rb_head_page_replace(struct buffer_page *old,
957 struct buffer_page *new)
958{
959 unsigned long *ptr = (unsigned long *)&old->list.prev->next;
960 unsigned long val;
961 unsigned long ret;
962
963 val = *ptr & ~RB_FLAG_MASK;
964 val |= RB_PAGE_HEAD;
965
966 ret = cmpxchg(ptr, val, (unsigned long)&new->list);
967
968 return ret == val;
969}
970
971
972
973
974
975
976static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer,
977 struct buffer_page *tail_page,
978 struct buffer_page *next_page)
979{
980 struct buffer_page *old_tail;
981 unsigned long old_entries;
982 unsigned long old_write;
983 int ret = 0;
984
985
986
987
988
989
990
991
992
993
994 old_write = local_add_return(RB_WRITE_INTCNT, &next_page->write);
995 old_entries = local_add_return(RB_WRITE_INTCNT, &next_page->entries);
996
997
998
999
1000
1001 barrier();
1002
1003
1004
1005
1006
1007
1008 if (tail_page == cpu_buffer->tail_page) {
1009
1010 unsigned long val = old_write & ~RB_WRITE_MASK;
1011 unsigned long eval = old_entries & ~RB_WRITE_MASK;
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023 (void)local_cmpxchg(&next_page->write, old_write, val);
1024 (void)local_cmpxchg(&next_page->entries, old_entries, eval);
1025
1026
1027
1028
1029
1030
1031 local_set(&next_page->page->commit, 0);
1032
1033 old_tail = cmpxchg(&cpu_buffer->tail_page,
1034 tail_page, next_page);
1035
1036 if (old_tail == tail_page)
1037 ret = 1;
1038 }
1039
1040 return ret;
1041}
1042
1043static int rb_check_bpage(struct ring_buffer_per_cpu *cpu_buffer,
1044 struct buffer_page *bpage)
1045{
1046 unsigned long val = (unsigned long)bpage;
1047
1048 if (RB_WARN_ON(cpu_buffer, val & RB_FLAG_MASK))
1049 return 1;
1050
1051 return 0;
1052}
1053
1054
1055
1056
1057static int rb_check_list(struct ring_buffer_per_cpu *cpu_buffer,
1058 struct list_head *list)
1059{
1060 if (RB_WARN_ON(cpu_buffer, rb_list_head(list->prev) != list->prev))
1061 return 1;
1062 if (RB_WARN_ON(cpu_buffer, rb_list_head(list->next) != list->next))
1063 return 1;
1064 return 0;
1065}
1066
1067
1068
1069
1070
1071
1072
1073
1074static int rb_check_pages(struct ring_buffer_per_cpu *cpu_buffer)
1075{
1076 struct list_head *head = cpu_buffer->pages;
1077 struct buffer_page *bpage, *tmp;
1078
1079
1080 if (cpu_buffer->head_page)
1081 rb_set_head_page(cpu_buffer);
1082
1083 rb_head_page_deactivate(cpu_buffer);
1084
1085 if (RB_WARN_ON(cpu_buffer, head->next->prev != head))
1086 return -1;
1087 if (RB_WARN_ON(cpu_buffer, head->prev->next != head))
1088 return -1;
1089
1090 if (rb_check_list(cpu_buffer, head))
1091 return -1;
1092
1093 list_for_each_entry_safe(bpage, tmp, head, list) {
1094 if (RB_WARN_ON(cpu_buffer,
1095 bpage->list.next->prev != &bpage->list))
1096 return -1;
1097 if (RB_WARN_ON(cpu_buffer,
1098 bpage->list.prev->next != &bpage->list))
1099 return -1;
1100 if (rb_check_list(cpu_buffer, &bpage->list))
1101 return -1;
1102 }
1103
1104 rb_head_page_activate(cpu_buffer);
1105
1106 return 0;
1107}
1108
1109static int __rb_allocate_pages(int nr_pages, struct list_head *pages, int cpu)
1110{
1111 int i;
1112 struct buffer_page *bpage, *tmp;
1113
1114 for (i = 0; i < nr_pages; i++) {
1115 struct page *page;
1116
1117
1118
1119
1120
1121 bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()),
1122 GFP_KERNEL | __GFP_NORETRY,
1123 cpu_to_node(cpu));
1124 if (!bpage)
1125 goto free_pages;
1126
1127 list_add(&bpage->list, pages);
1128
1129 page = alloc_pages_node(cpu_to_node(cpu),
1130 GFP_KERNEL | __GFP_NORETRY, 0);
1131 if (!page)
1132 goto free_pages;
1133 bpage->page = page_address(page);
1134 rb_init_page(bpage->page);
1135 }
1136
1137 return 0;
1138
1139free_pages:
1140 list_for_each_entry_safe(bpage, tmp, pages, list) {
1141 list_del_init(&bpage->list);
1142 free_buffer_page(bpage);
1143 }
1144
1145 return -ENOMEM;
1146}
1147
1148static int rb_allocate_pages(struct ring_buffer_per_cpu *cpu_buffer,
1149 unsigned nr_pages)
1150{
1151 LIST_HEAD(pages);
1152
1153 WARN_ON(!nr_pages);
1154
1155 if (__rb_allocate_pages(nr_pages, &pages, cpu_buffer->cpu))
1156 return -ENOMEM;
1157
1158
1159
1160
1161
1162
1163 cpu_buffer->pages = pages.next;
1164 list_del(&pages);
1165
1166 cpu_buffer->nr_pages = nr_pages;
1167
1168 rb_check_pages(cpu_buffer);
1169
1170 return 0;
1171}
1172
1173static struct ring_buffer_per_cpu *
1174rb_allocate_cpu_buffer(struct ring_buffer *buffer, int nr_pages, int cpu)
1175{
1176 struct ring_buffer_per_cpu *cpu_buffer;
1177 struct buffer_page *bpage;
1178 struct page *page;
1179 int ret;
1180
1181 cpu_buffer = kzalloc_node(ALIGN(sizeof(*cpu_buffer), cache_line_size()),
1182 GFP_KERNEL, cpu_to_node(cpu));
1183 if (!cpu_buffer)
1184 return NULL;
1185
1186 cpu_buffer->cpu = cpu;
1187 cpu_buffer->buffer = buffer;
1188 raw_spin_lock_init(&cpu_buffer->reader_lock);
1189 lockdep_set_class(&cpu_buffer->reader_lock, buffer->reader_lock_key);
1190 cpu_buffer->lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
1191 INIT_WORK(&cpu_buffer->update_pages_work, update_pages_handler);
1192 init_completion(&cpu_buffer->update_done);
1193 init_irq_work(&cpu_buffer->irq_work.work, rb_wake_up_waiters);
1194 init_waitqueue_head(&cpu_buffer->irq_work.waiters);
1195
1196 bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()),
1197 GFP_KERNEL, cpu_to_node(cpu));
1198 if (!bpage)
1199 goto fail_free_buffer;
1200
1201 rb_check_bpage(cpu_buffer, bpage);
1202
1203 cpu_buffer->reader_page = bpage;
1204 page = alloc_pages_node(cpu_to_node(cpu), GFP_KERNEL, 0);
1205 if (!page)
1206 goto fail_free_reader;
1207 bpage->page = page_address(page);
1208 rb_init_page(bpage->page);
1209
1210 INIT_LIST_HEAD(&cpu_buffer->reader_page->list);
1211 INIT_LIST_HEAD(&cpu_buffer->new_pages);
1212
1213 ret = rb_allocate_pages(cpu_buffer, nr_pages);
1214 if (ret < 0)
1215 goto fail_free_reader;
1216
1217 cpu_buffer->head_page
1218 = list_entry(cpu_buffer->pages, struct buffer_page, list);
1219 cpu_buffer->tail_page = cpu_buffer->commit_page = cpu_buffer->head_page;
1220
1221 rb_head_page_activate(cpu_buffer);
1222
1223 return cpu_buffer;
1224
1225 fail_free_reader:
1226 free_buffer_page(cpu_buffer->reader_page);
1227
1228 fail_free_buffer:
1229 kfree(cpu_buffer);
1230 return NULL;
1231}
1232
1233static void rb_free_cpu_buffer(struct ring_buffer_per_cpu *cpu_buffer)
1234{
1235 struct list_head *head = cpu_buffer->pages;
1236 struct buffer_page *bpage, *tmp;
1237
1238 free_buffer_page(cpu_buffer->reader_page);
1239
1240 rb_head_page_deactivate(cpu_buffer);
1241
1242 if (head) {
1243 list_for_each_entry_safe(bpage, tmp, head, list) {
1244 list_del_init(&bpage->list);
1245 free_buffer_page(bpage);
1246 }
1247 bpage = list_entry(head, struct buffer_page, list);
1248 free_buffer_page(bpage);
1249 }
1250
1251 kfree(cpu_buffer);
1252}
1253
1254#ifdef CONFIG_HOTPLUG_CPU
1255static int rb_cpu_notify(struct notifier_block *self,
1256 unsigned long action, void *hcpu);
1257#endif
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269struct ring_buffer *__ring_buffer_alloc(unsigned long size, unsigned flags,
1270 struct lock_class_key *key)
1271{
1272 struct ring_buffer *buffer;
1273 int bsize;
1274 int cpu, nr_pages;
1275
1276
1277 buffer = kzalloc(ALIGN(sizeof(*buffer), cache_line_size()),
1278 GFP_KERNEL);
1279 if (!buffer)
1280 return NULL;
1281
1282 if (!alloc_cpumask_var(&buffer->cpumask, GFP_KERNEL))
1283 goto fail_free_buffer;
1284
1285 nr_pages = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
1286 buffer->flags = flags;
1287 buffer->clock = trace_clock_local;
1288 buffer->reader_lock_key = key;
1289
1290 init_irq_work(&buffer->irq_work.work, rb_wake_up_waiters);
1291 init_waitqueue_head(&buffer->irq_work.waiters);
1292
1293
1294 if (nr_pages < 2)
1295 nr_pages = 2;
1296
1297
1298
1299
1300
1301
1302#ifdef CONFIG_HOTPLUG_CPU
1303 cpu_notifier_register_begin();
1304 cpumask_copy(buffer->cpumask, cpu_online_mask);
1305#else
1306 cpumask_copy(buffer->cpumask, cpu_possible_mask);
1307#endif
1308 buffer->cpus = nr_cpu_ids;
1309
1310 bsize = sizeof(void *) * nr_cpu_ids;
1311 buffer->buffers = kzalloc(ALIGN(bsize, cache_line_size()),
1312 GFP_KERNEL);
1313 if (!buffer->buffers)
1314 goto fail_free_cpumask;
1315
1316 for_each_buffer_cpu(buffer, cpu) {
1317 buffer->buffers[cpu] =
1318 rb_allocate_cpu_buffer(buffer, nr_pages, cpu);
1319 if (!buffer->buffers[cpu])
1320 goto fail_free_buffers;
1321 }
1322
1323#ifdef CONFIG_HOTPLUG_CPU
1324 buffer->cpu_notify.notifier_call = rb_cpu_notify;
1325 buffer->cpu_notify.priority = 0;
1326 __register_cpu_notifier(&buffer->cpu_notify);
1327 cpu_notifier_register_done();
1328#endif
1329
1330 mutex_init(&buffer->mutex);
1331
1332 return buffer;
1333
1334 fail_free_buffers:
1335 for_each_buffer_cpu(buffer, cpu) {
1336 if (buffer->buffers[cpu])
1337 rb_free_cpu_buffer(buffer->buffers[cpu]);
1338 }
1339 kfree(buffer->buffers);
1340
1341 fail_free_cpumask:
1342 free_cpumask_var(buffer->cpumask);
1343#ifdef CONFIG_HOTPLUG_CPU
1344 cpu_notifier_register_done();
1345#endif
1346
1347 fail_free_buffer:
1348 kfree(buffer);
1349 return NULL;
1350}
1351EXPORT_SYMBOL_GPL(__ring_buffer_alloc);
1352
1353
1354
1355
1356
1357void
1358ring_buffer_free(struct ring_buffer *buffer)
1359{
1360 int cpu;
1361
1362#ifdef CONFIG_HOTPLUG_CPU
1363 cpu_notifier_register_begin();
1364 __unregister_cpu_notifier(&buffer->cpu_notify);
1365#endif
1366
1367 for_each_buffer_cpu(buffer, cpu)
1368 rb_free_cpu_buffer(buffer->buffers[cpu]);
1369
1370#ifdef CONFIG_HOTPLUG_CPU
1371 cpu_notifier_register_done();
1372#endif
1373
1374 kfree(buffer->buffers);
1375 free_cpumask_var(buffer->cpumask);
1376
1377 kfree(buffer);
1378}
1379EXPORT_SYMBOL_GPL(ring_buffer_free);
1380
1381void ring_buffer_set_clock(struct ring_buffer *buffer,
1382 u64 (*clock)(void))
1383{
1384 buffer->clock = clock;
1385}
1386
1387static void rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer);
1388
1389static inline unsigned long rb_page_entries(struct buffer_page *bpage)
1390{
1391 return local_read(&bpage->entries) & RB_WRITE_MASK;
1392}
1393
1394static inline unsigned long rb_page_write(struct buffer_page *bpage)
1395{
1396 return local_read(&bpage->write) & RB_WRITE_MASK;
1397}
1398
1399static int
1400rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned int nr_pages)
1401{
1402 struct list_head *tail_page, *to_remove, *next_page;
1403 struct buffer_page *to_remove_page, *tmp_iter_page;
1404 struct buffer_page *last_page, *first_page;
1405 unsigned int nr_removed;
1406 unsigned long head_bit;
1407 int page_entries;
1408
1409 head_bit = 0;
1410
1411 raw_spin_lock_irq(&cpu_buffer->reader_lock);
1412 atomic_inc(&cpu_buffer->record_disabled);
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422 tail_page = &cpu_buffer->tail_page->list;
1423
1424
1425
1426
1427
1428 if (cpu_buffer->tail_page == cpu_buffer->reader_page)
1429 tail_page = rb_list_head(tail_page->next);
1430 to_remove = tail_page;
1431
1432
1433 first_page = list_entry(rb_list_head(to_remove->next),
1434 struct buffer_page, list);
1435
1436 for (nr_removed = 0; nr_removed < nr_pages; nr_removed++) {
1437 to_remove = rb_list_head(to_remove)->next;
1438 head_bit |= (unsigned long)to_remove & RB_PAGE_HEAD;
1439 }
1440
1441 next_page = rb_list_head(to_remove)->next;
1442
1443
1444
1445
1446
1447
1448 tail_page->next = (struct list_head *)((unsigned long)next_page |
1449 head_bit);
1450 next_page = rb_list_head(next_page);
1451 next_page->prev = tail_page;
1452
1453
1454 cpu_buffer->pages = next_page;
1455
1456
1457 if (head_bit)
1458 cpu_buffer->head_page = list_entry(next_page,
1459 struct buffer_page, list);
1460
1461
1462
1463
1464
1465 cpu_buffer->read = 0;
1466
1467
1468 atomic_dec(&cpu_buffer->record_disabled);
1469 raw_spin_unlock_irq(&cpu_buffer->reader_lock);
1470
1471 RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages));
1472
1473
1474 last_page = list_entry(rb_list_head(to_remove), struct buffer_page,
1475 list);
1476 tmp_iter_page = first_page;
1477
1478 do {
1479 to_remove_page = tmp_iter_page;
1480 rb_inc_page(cpu_buffer, &tmp_iter_page);
1481
1482
1483 page_entries = rb_page_entries(to_remove_page);
1484 if (page_entries) {
1485
1486
1487
1488
1489
1490
1491 local_add(page_entries, &cpu_buffer->overrun);
1492 local_sub(BUF_PAGE_SIZE, &cpu_buffer->entries_bytes);
1493 }
1494
1495
1496
1497
1498
1499 free_buffer_page(to_remove_page);
1500 nr_removed--;
1501
1502 } while (to_remove_page != last_page);
1503
1504 RB_WARN_ON(cpu_buffer, nr_removed);
1505
1506 return nr_removed == 0;
1507}
1508
1509static int
1510rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer)
1511{
1512 struct list_head *pages = &cpu_buffer->new_pages;
1513 int retries, success;
1514
1515 raw_spin_lock_irq(&cpu_buffer->reader_lock);
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530 retries = 10;
1531 success = 0;
1532 while (retries--) {
1533 struct list_head *head_page, *prev_page, *r;
1534 struct list_head *last_page, *first_page;
1535 struct list_head *head_page_with_bit;
1536
1537 head_page = &rb_set_head_page(cpu_buffer)->list;
1538 if (!head_page)
1539 break;
1540 prev_page = head_page->prev;
1541
1542 first_page = pages->next;
1543 last_page = pages->prev;
1544
1545 head_page_with_bit = (struct list_head *)
1546 ((unsigned long)head_page | RB_PAGE_HEAD);
1547
1548 last_page->next = head_page_with_bit;
1549 first_page->prev = prev_page;
1550
1551 r = cmpxchg(&prev_page->next, head_page_with_bit, first_page);
1552
1553 if (r == head_page_with_bit) {
1554
1555
1556
1557
1558
1559 head_page->prev = last_page;
1560 success = 1;
1561 break;
1562 }
1563 }
1564
1565 if (success)
1566 INIT_LIST_HEAD(pages);
1567
1568
1569
1570
1571 RB_WARN_ON(cpu_buffer, !success);
1572 raw_spin_unlock_irq(&cpu_buffer->reader_lock);
1573
1574
1575 if (!success) {
1576 struct buffer_page *bpage, *tmp;
1577 list_for_each_entry_safe(bpage, tmp, &cpu_buffer->new_pages,
1578 list) {
1579 list_del_init(&bpage->list);
1580 free_buffer_page(bpage);
1581 }
1582 }
1583 return success;
1584}
1585
1586static void rb_update_pages(struct ring_buffer_per_cpu *cpu_buffer)
1587{
1588 int success;
1589
1590 if (cpu_buffer->nr_pages_to_update > 0)
1591 success = rb_insert_pages(cpu_buffer);
1592 else
1593 success = rb_remove_pages(cpu_buffer,
1594 -cpu_buffer->nr_pages_to_update);
1595
1596 if (success)
1597 cpu_buffer->nr_pages += cpu_buffer->nr_pages_to_update;
1598}
1599
1600static void update_pages_handler(struct work_struct *work)
1601{
1602 struct ring_buffer_per_cpu *cpu_buffer = container_of(work,
1603 struct ring_buffer_per_cpu, update_pages_work);
1604 rb_update_pages(cpu_buffer);
1605 complete(&cpu_buffer->update_done);
1606}
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size,
1619 int cpu_id)
1620{
1621 struct ring_buffer_per_cpu *cpu_buffer;
1622 unsigned nr_pages;
1623 int cpu, err = 0;
1624
1625
1626
1627
1628 if (!buffer)
1629 return size;
1630
1631
1632 if (cpu_id != RING_BUFFER_ALL_CPUS &&
1633 !cpumask_test_cpu(cpu_id, buffer->cpumask))
1634 return size;
1635
1636 size = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
1637 size *= BUF_PAGE_SIZE;
1638
1639
1640 if (size < BUF_PAGE_SIZE * 2)
1641 size = BUF_PAGE_SIZE * 2;
1642
1643 nr_pages = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
1644
1645
1646
1647
1648
1649
1650 if (atomic_read(&buffer->resize_disabled))
1651 return -EBUSY;
1652
1653
1654 mutex_lock(&buffer->mutex);
1655
1656 if (cpu_id == RING_BUFFER_ALL_CPUS) {
1657
1658 for_each_buffer_cpu(buffer, cpu) {
1659 cpu_buffer = buffer->buffers[cpu];
1660
1661 cpu_buffer->nr_pages_to_update = nr_pages -
1662 cpu_buffer->nr_pages;
1663
1664
1665
1666 if (cpu_buffer->nr_pages_to_update <= 0)
1667 continue;
1668
1669
1670
1671
1672 INIT_LIST_HEAD(&cpu_buffer->new_pages);
1673 if (__rb_allocate_pages(cpu_buffer->nr_pages_to_update,
1674 &cpu_buffer->new_pages, cpu)) {
1675
1676 err = -ENOMEM;
1677 goto out_err;
1678 }
1679 }
1680
1681 get_online_cpus();
1682
1683
1684
1685
1686
1687 for_each_buffer_cpu(buffer, cpu) {
1688 cpu_buffer = buffer->buffers[cpu];
1689 if (!cpu_buffer->nr_pages_to_update)
1690 continue;
1691
1692
1693 preempt_disable();
1694 if (cpu == smp_processor_id() || !cpu_online(cpu)) {
1695 rb_update_pages(cpu_buffer);
1696 cpu_buffer->nr_pages_to_update = 0;
1697 } else {
1698
1699
1700
1701
1702 preempt_enable();
1703 schedule_work_on(cpu,
1704 &cpu_buffer->update_pages_work);
1705 preempt_disable();
1706 }
1707 preempt_enable();
1708 }
1709
1710
1711 for_each_buffer_cpu(buffer, cpu) {
1712 cpu_buffer = buffer->buffers[cpu];
1713 if (!cpu_buffer->nr_pages_to_update)
1714 continue;
1715
1716 if (cpu_online(cpu))
1717 wait_for_completion(&cpu_buffer->update_done);
1718 cpu_buffer->nr_pages_to_update = 0;
1719 }
1720
1721 put_online_cpus();
1722 } else {
1723
1724 if (!cpumask_test_cpu(cpu_id, buffer->cpumask))
1725 goto out;
1726
1727 cpu_buffer = buffer->buffers[cpu_id];
1728
1729 if (nr_pages == cpu_buffer->nr_pages)
1730 goto out;
1731
1732 cpu_buffer->nr_pages_to_update = nr_pages -
1733 cpu_buffer->nr_pages;
1734
1735 INIT_LIST_HEAD(&cpu_buffer->new_pages);
1736 if (cpu_buffer->nr_pages_to_update > 0 &&
1737 __rb_allocate_pages(cpu_buffer->nr_pages_to_update,
1738 &cpu_buffer->new_pages, cpu_id)) {
1739 err = -ENOMEM;
1740 goto out_err;
1741 }
1742
1743 get_online_cpus();
1744
1745 preempt_disable();
1746
1747 if (cpu_id == smp_processor_id() || !cpu_online(cpu_id))
1748 rb_update_pages(cpu_buffer);
1749 else {
1750
1751
1752
1753
1754 preempt_enable();
1755 schedule_work_on(cpu_id,
1756 &cpu_buffer->update_pages_work);
1757 wait_for_completion(&cpu_buffer->update_done);
1758 preempt_disable();
1759 }
1760 preempt_enable();
1761
1762 cpu_buffer->nr_pages_to_update = 0;
1763 put_online_cpus();
1764 }
1765
1766 out:
1767
1768
1769
1770
1771
1772
1773
1774 if (atomic_read(&buffer->record_disabled)) {
1775 atomic_inc(&buffer->record_disabled);
1776
1777
1778
1779
1780
1781
1782 synchronize_sched();
1783 for_each_buffer_cpu(buffer, cpu) {
1784 cpu_buffer = buffer->buffers[cpu];
1785 rb_check_pages(cpu_buffer);
1786 }
1787 atomic_dec(&buffer->record_disabled);
1788 }
1789
1790 mutex_unlock(&buffer->mutex);
1791 return size;
1792
1793 out_err:
1794 for_each_buffer_cpu(buffer, cpu) {
1795 struct buffer_page *bpage, *tmp;
1796
1797 cpu_buffer = buffer->buffers[cpu];
1798 cpu_buffer->nr_pages_to_update = 0;
1799
1800 if (list_empty(&cpu_buffer->new_pages))
1801 continue;
1802
1803 list_for_each_entry_safe(bpage, tmp, &cpu_buffer->new_pages,
1804 list) {
1805 list_del_init(&bpage->list);
1806 free_buffer_page(bpage);
1807 }
1808 }
1809 mutex_unlock(&buffer->mutex);
1810 return err;
1811}
1812EXPORT_SYMBOL_GPL(ring_buffer_resize);
1813
1814void ring_buffer_change_overwrite(struct ring_buffer *buffer, int val)
1815{
1816 mutex_lock(&buffer->mutex);
1817 if (val)
1818 buffer->flags |= RB_FL_OVERWRITE;
1819 else
1820 buffer->flags &= ~RB_FL_OVERWRITE;
1821 mutex_unlock(&buffer->mutex);
1822}
1823EXPORT_SYMBOL_GPL(ring_buffer_change_overwrite);
1824
1825static inline void *
1826__rb_data_page_index(struct buffer_data_page *bpage, unsigned index)
1827{
1828 return bpage->data + index;
1829}
1830
1831static inline void *__rb_page_index(struct buffer_page *bpage, unsigned index)
1832{
1833 return bpage->page->data + index;
1834}
1835
1836static inline struct ring_buffer_event *
1837rb_reader_event(struct ring_buffer_per_cpu *cpu_buffer)
1838{
1839 return __rb_page_index(cpu_buffer->reader_page,
1840 cpu_buffer->reader_page->read);
1841}
1842
1843static inline struct ring_buffer_event *
1844rb_iter_head_event(struct ring_buffer_iter *iter)
1845{
1846 return __rb_page_index(iter->head_page, iter->head);
1847}
1848
1849static inline unsigned rb_page_commit(struct buffer_page *bpage)
1850{
1851 return local_read(&bpage->page->commit);
1852}
1853
1854
1855static inline unsigned rb_page_size(struct buffer_page *bpage)
1856{
1857 return rb_page_commit(bpage);
1858}
1859
1860static inline unsigned
1861rb_commit_index(struct ring_buffer_per_cpu *cpu_buffer)
1862{
1863 return rb_page_commit(cpu_buffer->commit_page);
1864}
1865
1866static inline unsigned
1867rb_event_index(struct ring_buffer_event *event)
1868{
1869 unsigned long addr = (unsigned long)event;
1870
1871 return (addr & ~PAGE_MASK) - BUF_PAGE_HDR_SIZE;
1872}
1873
1874static inline int
1875rb_event_is_commit(struct ring_buffer_per_cpu *cpu_buffer,
1876 struct ring_buffer_event *event)
1877{
1878 unsigned long addr = (unsigned long)event;
1879 unsigned long index;
1880
1881 index = rb_event_index(event);
1882 addr &= PAGE_MASK;
1883
1884 return cpu_buffer->commit_page->page == (void *)addr &&
1885 rb_commit_index(cpu_buffer) == index;
1886}
1887
1888static void
1889rb_set_commit_to_write(struct ring_buffer_per_cpu *cpu_buffer)
1890{
1891 unsigned long max_count;
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901 again:
1902 max_count = cpu_buffer->nr_pages * 100;
1903
1904 while (cpu_buffer->commit_page != cpu_buffer->tail_page) {
1905 if (RB_WARN_ON(cpu_buffer, !(--max_count)))
1906 return;
1907 if (RB_WARN_ON(cpu_buffer,
1908 rb_is_reader_page(cpu_buffer->tail_page)))
1909 return;
1910 local_set(&cpu_buffer->commit_page->page->commit,
1911 rb_page_write(cpu_buffer->commit_page));
1912 rb_inc_page(cpu_buffer, &cpu_buffer->commit_page);
1913 cpu_buffer->write_stamp =
1914 cpu_buffer->commit_page->page->time_stamp;
1915
1916 barrier();
1917 }
1918 while (rb_commit_index(cpu_buffer) !=
1919 rb_page_write(cpu_buffer->commit_page)) {
1920
1921 local_set(&cpu_buffer->commit_page->page->commit,
1922 rb_page_write(cpu_buffer->commit_page));
1923 RB_WARN_ON(cpu_buffer,
1924 local_read(&cpu_buffer->commit_page->page->commit) &
1925 ~RB_WRITE_MASK);
1926 barrier();
1927 }
1928
1929
1930 barrier();
1931
1932
1933
1934
1935
1936
1937 if (unlikely(cpu_buffer->commit_page != cpu_buffer->tail_page))
1938 goto again;
1939}
1940
1941static void rb_reset_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
1942{
1943 cpu_buffer->read_stamp = cpu_buffer->reader_page->page->time_stamp;
1944 cpu_buffer->reader_page->read = 0;
1945}
1946
1947static void rb_inc_iter(struct ring_buffer_iter *iter)
1948{
1949 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
1950
1951
1952
1953
1954
1955
1956
1957 if (iter->head_page == cpu_buffer->reader_page)
1958 iter->head_page = rb_set_head_page(cpu_buffer);
1959 else
1960 rb_inc_page(cpu_buffer, &iter->head_page);
1961
1962 iter->read_stamp = iter->head_page->page->time_stamp;
1963 iter->head = 0;
1964}
1965
1966
1967static noinline struct ring_buffer_event *
1968rb_add_time_stamp(struct ring_buffer_event *event, u64 delta)
1969{
1970 event->type_len = RINGBUF_TYPE_TIME_EXTEND;
1971
1972
1973 if (rb_event_index(event)) {
1974 event->time_delta = delta & TS_MASK;
1975 event->array[0] = delta >> TS_SHIFT;
1976 } else {
1977
1978 event->time_delta = 0;
1979 event->array[0] = 0;
1980 }
1981
1982 return skip_time_extend(event);
1983}
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996static void
1997rb_update_event(struct ring_buffer_per_cpu *cpu_buffer,
1998 struct ring_buffer_event *event, unsigned length,
1999 int add_timestamp, u64 delta)
2000{
2001
2002 if (unlikely(!rb_event_is_commit(cpu_buffer, event)))
2003 delta = 0;
2004
2005
2006
2007
2008
2009 if (unlikely(add_timestamp)) {
2010 event = rb_add_time_stamp(event, delta);
2011 length -= RB_LEN_TIME_EXTEND;
2012 delta = 0;
2013 }
2014
2015 event->time_delta = delta;
2016 length -= RB_EVNT_HDR_SIZE;
2017 if (length > RB_MAX_SMALL_DATA || RB_FORCE_8BYTE_ALIGNMENT) {
2018 event->type_len = 0;
2019 event->array[0] = length;
2020 } else
2021 event->type_len = DIV_ROUND_UP(length, RB_ALIGNMENT);
2022}
2023
2024
2025
2026
2027
2028
2029
2030
2031static int
2032rb_handle_head_page(struct ring_buffer_per_cpu *cpu_buffer,
2033 struct buffer_page *tail_page,
2034 struct buffer_page *next_page)
2035{
2036 struct buffer_page *new_head;
2037 int entries;
2038 int type;
2039 int ret;
2040
2041 entries = rb_page_entries(next_page);
2042
2043
2044
2045
2046
2047
2048 type = rb_head_page_set_update(cpu_buffer, next_page, tail_page,
2049 RB_PAGE_HEAD);
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062 switch (type) {
2063 case RB_PAGE_HEAD:
2064
2065
2066
2067
2068
2069 local_add(entries, &cpu_buffer->overrun);
2070 local_sub(BUF_PAGE_SIZE, &cpu_buffer->entries_bytes);
2071
2072
2073
2074
2075
2076
2077
2078 break;
2079
2080 case RB_PAGE_UPDATE:
2081
2082
2083
2084
2085 break;
2086 case RB_PAGE_NORMAL:
2087
2088
2089
2090
2091
2092 return 1;
2093 case RB_PAGE_MOVED:
2094
2095
2096
2097
2098
2099 return 1;
2100 default:
2101 RB_WARN_ON(cpu_buffer, 1);
2102 return -1;
2103 }
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119 new_head = next_page;
2120 rb_inc_page(cpu_buffer, &new_head);
2121
2122 ret = rb_head_page_set_head(cpu_buffer, new_head, next_page,
2123 RB_PAGE_NORMAL);
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133 switch (ret) {
2134 case RB_PAGE_HEAD:
2135 case RB_PAGE_NORMAL:
2136
2137 break;
2138 default:
2139 RB_WARN_ON(cpu_buffer, 1);
2140 return -1;
2141 }
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153 if (ret == RB_PAGE_NORMAL) {
2154
2155
2156
2157
2158 if (cpu_buffer->tail_page != tail_page &&
2159 cpu_buffer->tail_page != next_page)
2160 rb_head_page_set_normal(cpu_buffer, new_head,
2161 next_page,
2162 RB_PAGE_HEAD);
2163 }
2164
2165
2166
2167
2168
2169
2170 if (type == RB_PAGE_HEAD) {
2171 ret = rb_head_page_set_normal(cpu_buffer, next_page,
2172 tail_page,
2173 RB_PAGE_UPDATE);
2174 if (RB_WARN_ON(cpu_buffer,
2175 ret != RB_PAGE_UPDATE))
2176 return -1;
2177 }
2178
2179 return 0;
2180}
2181
2182static unsigned rb_calculate_event_length(unsigned length)
2183{
2184 struct ring_buffer_event event;
2185
2186
2187 if (!length)
2188 length = 1;
2189
2190 if (length > RB_MAX_SMALL_DATA || RB_FORCE_8BYTE_ALIGNMENT)
2191 length += sizeof(event.array[0]);
2192
2193 length += RB_EVNT_HDR_SIZE;
2194 length = ALIGN(length, RB_ARCH_ALIGNMENT);
2195
2196 return length;
2197}
2198
2199static inline void
2200rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
2201 struct buffer_page *tail_page,
2202 unsigned long tail, unsigned long length)
2203{
2204 struct ring_buffer_event *event;
2205
2206
2207
2208
2209
2210 if (tail >= BUF_PAGE_SIZE) {
2211
2212
2213
2214
2215
2216 if (tail == BUF_PAGE_SIZE)
2217 tail_page->real_end = 0;
2218
2219 local_sub(length, &tail_page->write);
2220 return;
2221 }
2222
2223 event = __rb_page_index(tail_page, tail);
2224 kmemcheck_annotate_bitfield(event, bitfield);
2225
2226
2227 local_add(BUF_PAGE_SIZE - tail, &cpu_buffer->entries_bytes);
2228
2229
2230
2231
2232
2233
2234 tail_page->real_end = tail;
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247 if (tail > (BUF_PAGE_SIZE - RB_EVNT_MIN_SIZE)) {
2248
2249
2250
2251 rb_event_set_padding(event);
2252
2253
2254 local_sub(length, &tail_page->write);
2255 return;
2256 }
2257
2258
2259 event->array[0] = (BUF_PAGE_SIZE - tail) - RB_EVNT_HDR_SIZE;
2260 event->type_len = RINGBUF_TYPE_PADDING;
2261
2262 event->time_delta = 1;
2263
2264
2265 length = (tail + length) - BUF_PAGE_SIZE;
2266 local_sub(length, &tail_page->write);
2267}
2268
2269
2270
2271
2272static noinline struct ring_buffer_event *
2273rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
2274 unsigned long length, unsigned long tail,
2275 struct buffer_page *tail_page, u64 ts)
2276{
2277 struct buffer_page *commit_page = cpu_buffer->commit_page;
2278 struct ring_buffer *buffer = cpu_buffer->buffer;
2279 struct buffer_page *next_page;
2280 int ret;
2281
2282 next_page = tail_page;
2283
2284 rb_inc_page(cpu_buffer, &next_page);
2285
2286
2287
2288
2289
2290
2291 if (unlikely(next_page == commit_page)) {
2292 local_inc(&cpu_buffer->commit_overrun);
2293 goto out_reset;
2294 }
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310 if (rb_is_head_page(cpu_buffer, next_page, &tail_page->list)) {
2311
2312
2313
2314
2315
2316 if (!rb_is_reader_page(cpu_buffer->commit_page)) {
2317
2318
2319
2320
2321 if (!(buffer->flags & RB_FL_OVERWRITE)) {
2322 local_inc(&cpu_buffer->dropped_events);
2323 goto out_reset;
2324 }
2325
2326 ret = rb_handle_head_page(cpu_buffer,
2327 tail_page,
2328 next_page);
2329 if (ret < 0)
2330 goto out_reset;
2331 if (ret)
2332 goto out_again;
2333 } else {
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344 if (unlikely((cpu_buffer->commit_page !=
2345 cpu_buffer->tail_page) &&
2346 (cpu_buffer->commit_page ==
2347 cpu_buffer->reader_page))) {
2348 local_inc(&cpu_buffer->commit_overrun);
2349 goto out_reset;
2350 }
2351 }
2352 }
2353
2354 ret = rb_tail_page_update(cpu_buffer, tail_page, next_page);
2355 if (ret) {
2356
2357
2358
2359
2360 ts = rb_time_stamp(buffer);
2361 next_page->page->time_stamp = ts;
2362 }
2363
2364 out_again:
2365
2366 rb_reset_tail(cpu_buffer, tail_page, tail, length);
2367
2368
2369 return ERR_PTR(-EAGAIN);
2370
2371 out_reset:
2372
2373 rb_reset_tail(cpu_buffer, tail_page, tail, length);
2374
2375 return NULL;
2376}
2377
2378static struct ring_buffer_event *
2379__rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
2380 unsigned long length, u64 ts,
2381 u64 delta, int add_timestamp)
2382{
2383 struct buffer_page *tail_page;
2384 struct ring_buffer_event *event;
2385 unsigned long tail, write;
2386
2387
2388
2389
2390
2391
2392 if (unlikely(add_timestamp))
2393 length += RB_LEN_TIME_EXTEND;
2394
2395 tail_page = cpu_buffer->tail_page;
2396 write = local_add_return(length, &tail_page->write);
2397
2398
2399 write &= RB_WRITE_MASK;
2400 tail = write - length;
2401
2402
2403
2404
2405
2406 if (!tail)
2407 delta = 0;
2408
2409
2410 if (unlikely(write > BUF_PAGE_SIZE))
2411 return rb_move_tail(cpu_buffer, length, tail,
2412 tail_page, ts);
2413
2414
2415
2416 event = __rb_page_index(tail_page, tail);
2417 kmemcheck_annotate_bitfield(event, bitfield);
2418 rb_update_event(cpu_buffer, event, length, add_timestamp, delta);
2419
2420 local_inc(&tail_page->entries);
2421
2422
2423
2424
2425
2426 if (!tail)
2427 tail_page->page->time_stamp = ts;
2428
2429
2430 local_add(length, &cpu_buffer->entries_bytes);
2431
2432 return event;
2433}
2434
2435static inline int
2436rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer,
2437 struct ring_buffer_event *event)
2438{
2439 unsigned long new_index, old_index;
2440 struct buffer_page *bpage;
2441 unsigned long index;
2442 unsigned long addr;
2443
2444 new_index = rb_event_index(event);
2445 old_index = new_index + rb_event_ts_length(event);
2446 addr = (unsigned long)event;
2447 addr &= PAGE_MASK;
2448
2449 bpage = cpu_buffer->tail_page;
2450
2451 if (bpage->page == (void *)addr && rb_page_write(bpage) == old_index) {
2452 unsigned long write_mask =
2453 local_read(&bpage->write) & ~RB_WRITE_MASK;
2454 unsigned long event_length = rb_event_length(event);
2455
2456
2457
2458
2459
2460
2461 old_index += write_mask;
2462 new_index += write_mask;
2463 index = local_cmpxchg(&bpage->write, old_index, new_index);
2464 if (index == old_index) {
2465
2466 local_sub(event_length, &cpu_buffer->entries_bytes);
2467 return 1;
2468 }
2469 }
2470
2471
2472 return 0;
2473}
2474
2475static void rb_start_commit(struct ring_buffer_per_cpu *cpu_buffer)
2476{
2477 local_inc(&cpu_buffer->committing);
2478 local_inc(&cpu_buffer->commits);
2479}
2480
2481static inline void rb_end_commit(struct ring_buffer_per_cpu *cpu_buffer)
2482{
2483 unsigned long commits;
2484
2485 if (RB_WARN_ON(cpu_buffer,
2486 !local_read(&cpu_buffer->committing)))
2487 return;
2488
2489 again:
2490 commits = local_read(&cpu_buffer->commits);
2491
2492 barrier();
2493 if (local_read(&cpu_buffer->committing) == 1)
2494 rb_set_commit_to_write(cpu_buffer);
2495
2496 local_dec(&cpu_buffer->committing);
2497
2498
2499 barrier();
2500
2501
2502
2503
2504
2505
2506 if (unlikely(local_read(&cpu_buffer->commits) != commits) &&
2507 !local_read(&cpu_buffer->committing)) {
2508 local_inc(&cpu_buffer->committing);
2509 goto again;
2510 }
2511}
2512
2513static struct ring_buffer_event *
2514rb_reserve_next_event(struct ring_buffer *buffer,
2515 struct ring_buffer_per_cpu *cpu_buffer,
2516 unsigned long length)
2517{
2518 struct ring_buffer_event *event;
2519 u64 ts, delta;
2520 int nr_loops = 0;
2521 int add_timestamp;
2522 u64 diff;
2523
2524 rb_start_commit(cpu_buffer);
2525
2526#ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
2527
2528
2529
2530
2531
2532
2533 barrier();
2534 if (unlikely(ACCESS_ONCE(cpu_buffer->buffer) != buffer)) {
2535 local_dec(&cpu_buffer->committing);
2536 local_dec(&cpu_buffer->commits);
2537 return NULL;
2538 }
2539#endif
2540
2541 length = rb_calculate_event_length(length);
2542 again:
2543 add_timestamp = 0;
2544 delta = 0;
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555 if (RB_WARN_ON(cpu_buffer, ++nr_loops > 1000))
2556 goto out_fail;
2557
2558 ts = rb_time_stamp(cpu_buffer->buffer);
2559 diff = ts - cpu_buffer->write_stamp;
2560
2561
2562 barrier();
2563
2564
2565 if (likely(ts >= cpu_buffer->write_stamp)) {
2566 delta = diff;
2567 if (unlikely(test_time_stamp(delta))) {
2568 int local_clock_stable = 1;
2569#ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
2570 local_clock_stable = sched_clock_stable();
2571#endif
2572 WARN_ONCE(delta > (1ULL << 59),
2573 KERN_WARNING "Delta way too big! %llu ts=%llu write stamp = %llu\n%s",
2574 (unsigned long long)delta,
2575 (unsigned long long)ts,
2576 (unsigned long long)cpu_buffer->write_stamp,
2577 local_clock_stable ? "" :
2578 "If you just came from a suspend/resume,\n"
2579 "please switch to the trace global clock:\n"
2580 " echo global > /sys/kernel/debug/tracing/trace_clock\n");
2581 add_timestamp = 1;
2582 }
2583 }
2584
2585 event = __rb_reserve_next(cpu_buffer, length, ts,
2586 delta, add_timestamp);
2587 if (unlikely(PTR_ERR(event) == -EAGAIN))
2588 goto again;
2589
2590 if (!event)
2591 goto out_fail;
2592
2593 return event;
2594
2595 out_fail:
2596 rb_end_commit(cpu_buffer);
2597 return NULL;
2598}
2599
2600#ifdef CONFIG_TRACING
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639static DEFINE_PER_CPU(unsigned int, current_context);
2640
2641static __always_inline int trace_recursive_lock(void)
2642{
2643 unsigned int val = this_cpu_read(current_context);
2644 int bit;
2645
2646 if (in_interrupt()) {
2647 if (in_nmi())
2648 bit = 0;
2649 else if (in_irq())
2650 bit = 1;
2651 else
2652 bit = 2;
2653 } else
2654 bit = 3;
2655
2656 if (unlikely(val & (1 << bit)))
2657 return 1;
2658
2659 val |= (1 << bit);
2660 this_cpu_write(current_context, val);
2661
2662 return 0;
2663}
2664
2665static __always_inline void trace_recursive_unlock(void)
2666{
2667 unsigned int val = this_cpu_read(current_context);
2668
2669 val--;
2670 val &= this_cpu_read(current_context);
2671 this_cpu_write(current_context, val);
2672}
2673
2674#else
2675
2676#define trace_recursive_lock() (0)
2677#define trace_recursive_unlock() do { } while (0)
2678
2679#endif
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696struct ring_buffer_event *
2697ring_buffer_lock_reserve(struct ring_buffer *buffer, unsigned long length)
2698{
2699 struct ring_buffer_per_cpu *cpu_buffer;
2700 struct ring_buffer_event *event;
2701 int cpu;
2702
2703 if (ring_buffer_flags != RB_BUFFERS_ON)
2704 return NULL;
2705
2706
2707 preempt_disable_notrace();
2708
2709 if (atomic_read(&buffer->record_disabled))
2710 goto out_nocheck;
2711
2712 if (trace_recursive_lock())
2713 goto out_nocheck;
2714
2715 cpu = raw_smp_processor_id();
2716
2717 if (!cpumask_test_cpu(cpu, buffer->cpumask))
2718 goto out;
2719
2720 cpu_buffer = buffer->buffers[cpu];
2721
2722 if (atomic_read(&cpu_buffer->record_disabled))
2723 goto out;
2724
2725 if (length > BUF_MAX_DATA_SIZE)
2726 goto out;
2727
2728 event = rb_reserve_next_event(buffer, cpu_buffer, length);
2729 if (!event)
2730 goto out;
2731
2732 return event;
2733
2734 out:
2735 trace_recursive_unlock();
2736
2737 out_nocheck:
2738 preempt_enable_notrace();
2739 return NULL;
2740}
2741EXPORT_SYMBOL_GPL(ring_buffer_lock_reserve);
2742
2743static void
2744rb_update_write_stamp(struct ring_buffer_per_cpu *cpu_buffer,
2745 struct ring_buffer_event *event)
2746{
2747 u64 delta;
2748
2749
2750
2751
2752
2753 if (rb_event_is_commit(cpu_buffer, event)) {
2754
2755
2756
2757
2758 if (!rb_event_index(event))
2759 cpu_buffer->write_stamp =
2760 cpu_buffer->commit_page->page->time_stamp;
2761 else if (event->type_len == RINGBUF_TYPE_TIME_EXTEND) {
2762 delta = event->array[0];
2763 delta <<= TS_SHIFT;
2764 delta += event->time_delta;
2765 cpu_buffer->write_stamp += delta;
2766 } else
2767 cpu_buffer->write_stamp += event->time_delta;
2768 }
2769}
2770
2771static void rb_commit(struct ring_buffer_per_cpu *cpu_buffer,
2772 struct ring_buffer_event *event)
2773{
2774 local_inc(&cpu_buffer->entries);
2775 rb_update_write_stamp(cpu_buffer, event);
2776 rb_end_commit(cpu_buffer);
2777}
2778
2779static __always_inline void
2780rb_wakeups(struct ring_buffer *buffer, struct ring_buffer_per_cpu *cpu_buffer)
2781{
2782 if (buffer->irq_work.waiters_pending) {
2783 buffer->irq_work.waiters_pending = false;
2784
2785 irq_work_queue(&buffer->irq_work.work);
2786 }
2787
2788 if (cpu_buffer->irq_work.waiters_pending) {
2789 cpu_buffer->irq_work.waiters_pending = false;
2790
2791 irq_work_queue(&cpu_buffer->irq_work.work);
2792 }
2793}
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804int ring_buffer_unlock_commit(struct ring_buffer *buffer,
2805 struct ring_buffer_event *event)
2806{
2807 struct ring_buffer_per_cpu *cpu_buffer;
2808 int cpu = raw_smp_processor_id();
2809
2810 cpu_buffer = buffer->buffers[cpu];
2811
2812 rb_commit(cpu_buffer, event);
2813
2814 rb_wakeups(buffer, cpu_buffer);
2815
2816 trace_recursive_unlock();
2817
2818 preempt_enable_notrace();
2819
2820 return 0;
2821}
2822EXPORT_SYMBOL_GPL(ring_buffer_unlock_commit);
2823
2824static inline void rb_event_discard(struct ring_buffer_event *event)
2825{
2826 if (event->type_len == RINGBUF_TYPE_TIME_EXTEND)
2827 event = skip_time_extend(event);
2828
2829
2830 event->array[0] = rb_event_data_length(event) - RB_EVNT_HDR_SIZE;
2831 event->type_len = RINGBUF_TYPE_PADDING;
2832
2833 if (!event->time_delta)
2834 event->time_delta = 1;
2835}
2836
2837
2838
2839
2840
2841
2842
2843static inline void
2844rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer,
2845 struct ring_buffer_event *event)
2846{
2847 unsigned long addr = (unsigned long)event;
2848 struct buffer_page *bpage = cpu_buffer->commit_page;
2849 struct buffer_page *start;
2850
2851 addr &= PAGE_MASK;
2852
2853
2854 if (likely(bpage->page == (void *)addr)) {
2855 local_dec(&bpage->entries);
2856 return;
2857 }
2858
2859
2860
2861
2862
2863 rb_inc_page(cpu_buffer, &bpage);
2864 start = bpage;
2865 do {
2866 if (bpage->page == (void *)addr) {
2867 local_dec(&bpage->entries);
2868 return;
2869 }
2870 rb_inc_page(cpu_buffer, &bpage);
2871 } while (bpage != start);
2872
2873
2874 RB_WARN_ON(cpu_buffer, 1);
2875}
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896void ring_buffer_discard_commit(struct ring_buffer *buffer,
2897 struct ring_buffer_event *event)
2898{
2899 struct ring_buffer_per_cpu *cpu_buffer;
2900 int cpu;
2901
2902
2903 rb_event_discard(event);
2904
2905 cpu = smp_processor_id();
2906 cpu_buffer = buffer->buffers[cpu];
2907
2908
2909
2910
2911
2912
2913 RB_WARN_ON(buffer, !local_read(&cpu_buffer->committing));
2914
2915 rb_decrement_entry(cpu_buffer, event);
2916 if (rb_try_to_discard(cpu_buffer, event))
2917 goto out;
2918
2919
2920
2921
2922
2923 rb_update_write_stamp(cpu_buffer, event);
2924 out:
2925 rb_end_commit(cpu_buffer);
2926
2927 trace_recursive_unlock();
2928
2929 preempt_enable_notrace();
2930
2931}
2932EXPORT_SYMBOL_GPL(ring_buffer_discard_commit);
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947int ring_buffer_write(struct ring_buffer *buffer,
2948 unsigned long length,
2949 void *data)
2950{
2951 struct ring_buffer_per_cpu *cpu_buffer;
2952 struct ring_buffer_event *event;
2953 void *body;
2954 int ret = -EBUSY;
2955 int cpu;
2956
2957 if (ring_buffer_flags != RB_BUFFERS_ON)
2958 return -EBUSY;
2959
2960 preempt_disable_notrace();
2961
2962 if (atomic_read(&buffer->record_disabled))
2963 goto out;
2964
2965 cpu = raw_smp_processor_id();
2966
2967 if (!cpumask_test_cpu(cpu, buffer->cpumask))
2968 goto out;
2969
2970 cpu_buffer = buffer->buffers[cpu];
2971
2972 if (atomic_read(&cpu_buffer->record_disabled))
2973 goto out;
2974
2975 if (length > BUF_MAX_DATA_SIZE)
2976 goto out;
2977
2978 event = rb_reserve_next_event(buffer, cpu_buffer, length);
2979 if (!event)
2980 goto out;
2981
2982 body = rb_event_data(event);
2983
2984 memcpy(body, data, length);
2985
2986 rb_commit(cpu_buffer, event);
2987
2988 rb_wakeups(buffer, cpu_buffer);
2989
2990 ret = 0;
2991 out:
2992 preempt_enable_notrace();
2993
2994 return ret;
2995}
2996EXPORT_SYMBOL_GPL(ring_buffer_write);
2997
2998static int rb_per_cpu_empty(struct ring_buffer_per_cpu *cpu_buffer)
2999{
3000 struct buffer_page *reader = cpu_buffer->reader_page;
3001 struct buffer_page *head = rb_set_head_page(cpu_buffer);
3002 struct buffer_page *commit = cpu_buffer->commit_page;
3003
3004
3005 if (unlikely(!head))
3006 return 1;
3007
3008 return reader->read == rb_page_commit(reader) &&
3009 (commit == reader ||
3010 (commit == head &&
3011 head->read == rb_page_commit(commit)));
3012}
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023void ring_buffer_record_disable(struct ring_buffer *buffer)
3024{
3025 atomic_inc(&buffer->record_disabled);
3026}
3027EXPORT_SYMBOL_GPL(ring_buffer_record_disable);
3028
3029
3030
3031
3032
3033
3034
3035
3036void ring_buffer_record_enable(struct ring_buffer *buffer)
3037{
3038 atomic_dec(&buffer->record_disabled);
3039}
3040EXPORT_SYMBOL_GPL(ring_buffer_record_enable);
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053void ring_buffer_record_off(struct ring_buffer *buffer)
3054{
3055 unsigned int rd;
3056 unsigned int new_rd;
3057
3058 do {
3059 rd = atomic_read(&buffer->record_disabled);
3060 new_rd = rd | RB_BUFFER_OFF;
3061 } while (atomic_cmpxchg(&buffer->record_disabled, rd, new_rd) != rd);
3062}
3063EXPORT_SYMBOL_GPL(ring_buffer_record_off);
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076void ring_buffer_record_on(struct ring_buffer *buffer)
3077{
3078 unsigned int rd;
3079 unsigned int new_rd;
3080
3081 do {
3082 rd = atomic_read(&buffer->record_disabled);
3083 new_rd = rd & ~RB_BUFFER_OFF;
3084 } while (atomic_cmpxchg(&buffer->record_disabled, rd, new_rd) != rd);
3085}
3086EXPORT_SYMBOL_GPL(ring_buffer_record_on);
3087
3088
3089
3090
3091
3092
3093
3094int ring_buffer_record_is_on(struct ring_buffer *buffer)
3095{
3096 return !atomic_read(&buffer->record_disabled);
3097}
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109void ring_buffer_record_disable_cpu(struct ring_buffer *buffer, int cpu)
3110{
3111 struct ring_buffer_per_cpu *cpu_buffer;
3112
3113 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3114 return;
3115
3116 cpu_buffer = buffer->buffers[cpu];
3117 atomic_inc(&cpu_buffer->record_disabled);
3118}
3119EXPORT_SYMBOL_GPL(ring_buffer_record_disable_cpu);
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129void ring_buffer_record_enable_cpu(struct ring_buffer *buffer, int cpu)
3130{
3131 struct ring_buffer_per_cpu *cpu_buffer;
3132
3133 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3134 return;
3135
3136 cpu_buffer = buffer->buffers[cpu];
3137 atomic_dec(&cpu_buffer->record_disabled);
3138}
3139EXPORT_SYMBOL_GPL(ring_buffer_record_enable_cpu);
3140
3141
3142
3143
3144
3145
3146
3147static inline unsigned long
3148rb_num_of_entries(struct ring_buffer_per_cpu *cpu_buffer)
3149{
3150 return local_read(&cpu_buffer->entries) -
3151 (local_read(&cpu_buffer->overrun) + cpu_buffer->read);
3152}
3153
3154
3155
3156
3157
3158
3159u64 ring_buffer_oldest_event_ts(struct ring_buffer *buffer, int cpu)
3160{
3161 unsigned long flags;
3162 struct ring_buffer_per_cpu *cpu_buffer;
3163 struct buffer_page *bpage;
3164 u64 ret = 0;
3165
3166 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3167 return 0;
3168
3169 cpu_buffer = buffer->buffers[cpu];
3170 raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
3171
3172
3173
3174
3175 if (cpu_buffer->tail_page == cpu_buffer->reader_page)
3176 bpage = cpu_buffer->reader_page;
3177 else
3178 bpage = rb_set_head_page(cpu_buffer);
3179 if (bpage)
3180 ret = bpage->page->time_stamp;
3181 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
3182
3183 return ret;
3184}
3185EXPORT_SYMBOL_GPL(ring_buffer_oldest_event_ts);
3186
3187
3188
3189
3190
3191
3192unsigned long ring_buffer_bytes_cpu(struct ring_buffer *buffer, int cpu)
3193{
3194 struct ring_buffer_per_cpu *cpu_buffer;
3195 unsigned long ret;
3196
3197 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3198 return 0;
3199
3200 cpu_buffer = buffer->buffers[cpu];
3201 ret = local_read(&cpu_buffer->entries_bytes) - cpu_buffer->read_bytes;
3202
3203 return ret;
3204}
3205EXPORT_SYMBOL_GPL(ring_buffer_bytes_cpu);
3206
3207
3208
3209
3210
3211
3212unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu)
3213{
3214 struct ring_buffer_per_cpu *cpu_buffer;
3215
3216 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3217 return 0;
3218
3219 cpu_buffer = buffer->buffers[cpu];
3220
3221 return rb_num_of_entries(cpu_buffer);
3222}
3223EXPORT_SYMBOL_GPL(ring_buffer_entries_cpu);
3224
3225
3226
3227
3228
3229
3230
3231unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu)
3232{
3233 struct ring_buffer_per_cpu *cpu_buffer;
3234 unsigned long ret;
3235
3236 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3237 return 0;
3238
3239 cpu_buffer = buffer->buffers[cpu];
3240 ret = local_read(&cpu_buffer->overrun);
3241
3242 return ret;
3243}
3244EXPORT_SYMBOL_GPL(ring_buffer_overrun_cpu);
3245
3246
3247
3248
3249
3250
3251
3252
3253unsigned long
3254ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu)
3255{
3256 struct ring_buffer_per_cpu *cpu_buffer;
3257 unsigned long ret;
3258
3259 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3260 return 0;
3261
3262 cpu_buffer = buffer->buffers[cpu];
3263 ret = local_read(&cpu_buffer->commit_overrun);
3264
3265 return ret;
3266}
3267EXPORT_SYMBOL_GPL(ring_buffer_commit_overrun_cpu);
3268
3269
3270
3271
3272
3273
3274
3275unsigned long
3276ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu)
3277{
3278 struct ring_buffer_per_cpu *cpu_buffer;
3279 unsigned long ret;
3280
3281 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3282 return 0;
3283
3284 cpu_buffer = buffer->buffers[cpu];
3285 ret = local_read(&cpu_buffer->dropped_events);
3286
3287 return ret;
3288}
3289EXPORT_SYMBOL_GPL(ring_buffer_dropped_events_cpu);
3290
3291
3292
3293
3294
3295
3296unsigned long
3297ring_buffer_read_events_cpu(struct ring_buffer *buffer, int cpu)
3298{
3299 struct ring_buffer_per_cpu *cpu_buffer;
3300
3301 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3302 return 0;
3303
3304 cpu_buffer = buffer->buffers[cpu];
3305 return cpu_buffer->read;
3306}
3307EXPORT_SYMBOL_GPL(ring_buffer_read_events_cpu);
3308
3309
3310
3311
3312
3313
3314
3315
3316unsigned long ring_buffer_entries(struct ring_buffer *buffer)
3317{
3318 struct ring_buffer_per_cpu *cpu_buffer;
3319 unsigned long entries = 0;
3320 int cpu;
3321
3322
3323 for_each_buffer_cpu(buffer, cpu) {
3324 cpu_buffer = buffer->buffers[cpu];
3325 entries += rb_num_of_entries(cpu_buffer);
3326 }
3327
3328 return entries;
3329}
3330EXPORT_SYMBOL_GPL(ring_buffer_entries);
3331
3332
3333
3334
3335
3336
3337
3338
3339unsigned long ring_buffer_overruns(struct ring_buffer *buffer)
3340{
3341 struct ring_buffer_per_cpu *cpu_buffer;
3342 unsigned long overruns = 0;
3343 int cpu;
3344
3345
3346 for_each_buffer_cpu(buffer, cpu) {
3347 cpu_buffer = buffer->buffers[cpu];
3348 overruns += local_read(&cpu_buffer->overrun);
3349 }
3350
3351 return overruns;
3352}
3353EXPORT_SYMBOL_GPL(ring_buffer_overruns);
3354
3355static void rb_iter_reset(struct ring_buffer_iter *iter)
3356{
3357 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
3358
3359
3360 if (list_empty(&cpu_buffer->reader_page->list)) {
3361 iter->head_page = rb_set_head_page(cpu_buffer);
3362 if (unlikely(!iter->head_page))
3363 return;
3364 iter->head = iter->head_page->read;
3365 } else {
3366 iter->head_page = cpu_buffer->reader_page;
3367 iter->head = cpu_buffer->reader_page->read;
3368 }
3369 if (iter->head)
3370 iter->read_stamp = cpu_buffer->read_stamp;
3371 else
3372 iter->read_stamp = iter->head_page->page->time_stamp;
3373 iter->cache_reader_page = cpu_buffer->reader_page;
3374 iter->cache_read = cpu_buffer->read;
3375}
3376
3377
3378
3379
3380
3381
3382
3383
3384void ring_buffer_iter_reset(struct ring_buffer_iter *iter)
3385{
3386 struct ring_buffer_per_cpu *cpu_buffer;
3387 unsigned long flags;
3388
3389 if (!iter)
3390 return;
3391
3392 cpu_buffer = iter->cpu_buffer;
3393
3394 raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
3395 rb_iter_reset(iter);
3396 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
3397}
3398EXPORT_SYMBOL_GPL(ring_buffer_iter_reset);
3399
3400
3401
3402
3403
3404int ring_buffer_iter_empty(struct ring_buffer_iter *iter)
3405{
3406 struct ring_buffer_per_cpu *cpu_buffer;
3407
3408 cpu_buffer = iter->cpu_buffer;
3409
3410 return iter->head_page == cpu_buffer->commit_page &&
3411 iter->head == rb_commit_index(cpu_buffer);
3412}
3413EXPORT_SYMBOL_GPL(ring_buffer_iter_empty);
3414
3415static void
3416rb_update_read_stamp(struct ring_buffer_per_cpu *cpu_buffer,
3417 struct ring_buffer_event *event)
3418{
3419 u64 delta;
3420
3421 switch (event->type_len) {
3422 case RINGBUF_TYPE_PADDING:
3423 return;
3424
3425 case RINGBUF_TYPE_TIME_EXTEND:
3426 delta = event->array[0];
3427 delta <<= TS_SHIFT;
3428 delta += event->time_delta;
3429 cpu_buffer->read_stamp += delta;
3430 return;
3431
3432 case RINGBUF_TYPE_TIME_STAMP:
3433
3434 return;
3435
3436 case RINGBUF_TYPE_DATA:
3437 cpu_buffer->read_stamp += event->time_delta;
3438 return;
3439
3440 default:
3441 BUG();
3442 }
3443 return;
3444}
3445
3446static void
3447rb_update_iter_read_stamp(struct ring_buffer_iter *iter,
3448 struct ring_buffer_event *event)
3449{
3450 u64 delta;
3451
3452 switch (event->type_len) {
3453 case RINGBUF_TYPE_PADDING:
3454 return;
3455
3456 case RINGBUF_TYPE_TIME_EXTEND:
3457 delta = event->array[0];
3458 delta <<= TS_SHIFT;
3459 delta += event->time_delta;
3460 iter->read_stamp += delta;
3461 return;
3462
3463 case RINGBUF_TYPE_TIME_STAMP:
3464
3465 return;
3466
3467 case RINGBUF_TYPE_DATA:
3468 iter->read_stamp += event->time_delta;
3469 return;
3470
3471 default:
3472 BUG();
3473 }
3474 return;
3475}
3476
3477static struct buffer_page *
3478rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
3479{
3480 struct buffer_page *reader = NULL;
3481 unsigned long overwrite;
3482 unsigned long flags;
3483 int nr_loops = 0;
3484 int ret;
3485
3486 local_irq_save(flags);
3487 arch_spin_lock(&cpu_buffer->lock);
3488
3489 again:
3490
3491
3492
3493
3494
3495
3496 if (RB_WARN_ON(cpu_buffer, ++nr_loops > 3)) {
3497 reader = NULL;
3498 goto out;
3499 }
3500
3501 reader = cpu_buffer->reader_page;
3502
3503
3504 if (cpu_buffer->reader_page->read < rb_page_size(reader))
3505 goto out;
3506
3507
3508 if (RB_WARN_ON(cpu_buffer,
3509 cpu_buffer->reader_page->read > rb_page_size(reader)))
3510 goto out;
3511
3512
3513 reader = NULL;
3514 if (cpu_buffer->commit_page == cpu_buffer->reader_page)
3515 goto out;
3516
3517
3518 if (rb_num_of_entries(cpu_buffer) == 0)
3519 goto out;
3520
3521
3522
3523
3524 local_set(&cpu_buffer->reader_page->write, 0);
3525 local_set(&cpu_buffer->reader_page->entries, 0);
3526 local_set(&cpu_buffer->reader_page->page->commit, 0);
3527 cpu_buffer->reader_page->real_end = 0;
3528
3529 spin:
3530
3531
3532
3533 reader = rb_set_head_page(cpu_buffer);
3534 if (!reader)
3535 goto out;
3536 cpu_buffer->reader_page->list.next = rb_list_head(reader->list.next);
3537 cpu_buffer->reader_page->list.prev = reader->list.prev;
3538
3539
3540
3541
3542
3543
3544 cpu_buffer->pages = reader->list.prev;
3545
3546
3547 rb_set_list_to_head(cpu_buffer, &cpu_buffer->reader_page->list);
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558 smp_mb();
3559 overwrite = local_read(&(cpu_buffer->overrun));
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572 ret = rb_head_page_replace(reader, cpu_buffer->reader_page);
3573
3574
3575
3576
3577 if (!ret)
3578 goto spin;
3579
3580
3581
3582
3583
3584
3585 rb_list_head(reader->list.next)->prev = &cpu_buffer->reader_page->list;
3586 rb_inc_page(cpu_buffer, &cpu_buffer->head_page);
3587
3588
3589 cpu_buffer->reader_page = reader;
3590 rb_reset_reader_page(cpu_buffer);
3591
3592 if (overwrite != cpu_buffer->last_overrun) {
3593 cpu_buffer->lost_events = overwrite - cpu_buffer->last_overrun;
3594 cpu_buffer->last_overrun = overwrite;
3595 }
3596
3597 goto again;
3598
3599 out:
3600 arch_spin_unlock(&cpu_buffer->lock);
3601 local_irq_restore(flags);
3602
3603 return reader;
3604}
3605
3606static void rb_advance_reader(struct ring_buffer_per_cpu *cpu_buffer)
3607{
3608 struct ring_buffer_event *event;
3609 struct buffer_page *reader;
3610 unsigned length;
3611
3612 reader = rb_get_reader_page(cpu_buffer);
3613
3614
3615 if (RB_WARN_ON(cpu_buffer, !reader))
3616 return;
3617
3618 event = rb_reader_event(cpu_buffer);
3619
3620 if (event->type_len <= RINGBUF_TYPE_DATA_TYPE_LEN_MAX)
3621 cpu_buffer->read++;
3622
3623 rb_update_read_stamp(cpu_buffer, event);
3624
3625 length = rb_event_length(event);
3626 cpu_buffer->reader_page->read += length;
3627}
3628
3629static void rb_advance_iter(struct ring_buffer_iter *iter)
3630{
3631 struct ring_buffer_per_cpu *cpu_buffer;
3632 struct ring_buffer_event *event;
3633 unsigned length;
3634
3635 cpu_buffer = iter->cpu_buffer;
3636
3637
3638
3639
3640 if (iter->head >= rb_page_size(iter->head_page)) {
3641
3642 if (iter->head_page == cpu_buffer->commit_page)
3643 return;
3644 rb_inc_iter(iter);
3645 return;
3646 }
3647
3648 event = rb_iter_head_event(iter);
3649
3650 length = rb_event_length(event);
3651
3652
3653
3654
3655
3656 if (RB_WARN_ON(cpu_buffer,
3657 (iter->head_page == cpu_buffer->commit_page) &&
3658 (iter->head + length > rb_commit_index(cpu_buffer))))
3659 return;
3660
3661 rb_update_iter_read_stamp(iter, event);
3662
3663 iter->head += length;
3664
3665
3666 if ((iter->head >= rb_page_size(iter->head_page)) &&
3667 (iter->head_page != cpu_buffer->commit_page))
3668 rb_inc_iter(iter);
3669}
3670
3671static int rb_lost_events(struct ring_buffer_per_cpu *cpu_buffer)
3672{
3673 return cpu_buffer->lost_events;
3674}
3675
3676static struct ring_buffer_event *
3677rb_buffer_peek(struct ring_buffer_per_cpu *cpu_buffer, u64 *ts,
3678 unsigned long *lost_events)
3679{
3680 struct ring_buffer_event *event;
3681 struct buffer_page *reader;
3682 int nr_loops = 0;
3683
3684 again:
3685
3686
3687
3688
3689
3690
3691 if (RB_WARN_ON(cpu_buffer, ++nr_loops > 2))
3692 return NULL;
3693
3694 reader = rb_get_reader_page(cpu_buffer);
3695 if (!reader)
3696 return NULL;
3697
3698 event = rb_reader_event(cpu_buffer);
3699
3700 switch (event->type_len) {
3701 case RINGBUF_TYPE_PADDING:
3702 if (rb_null_event(event))
3703 RB_WARN_ON(cpu_buffer, 1);
3704
3705
3706
3707
3708
3709
3710
3711
3712 return event;
3713
3714 case RINGBUF_TYPE_TIME_EXTEND:
3715
3716 rb_advance_reader(cpu_buffer);
3717 goto again;
3718
3719 case RINGBUF_TYPE_TIME_STAMP:
3720
3721 rb_advance_reader(cpu_buffer);
3722 goto again;
3723
3724 case RINGBUF_TYPE_DATA:
3725 if (ts) {
3726 *ts = cpu_buffer->read_stamp + event->time_delta;
3727 ring_buffer_normalize_time_stamp(cpu_buffer->buffer,
3728 cpu_buffer->cpu, ts);
3729 }
3730 if (lost_events)
3731 *lost_events = rb_lost_events(cpu_buffer);
3732 return event;
3733
3734 default:
3735 BUG();
3736 }
3737
3738 return NULL;
3739}
3740EXPORT_SYMBOL_GPL(ring_buffer_peek);
3741
3742static struct ring_buffer_event *
3743rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts)
3744{
3745 struct ring_buffer *buffer;
3746 struct ring_buffer_per_cpu *cpu_buffer;
3747 struct ring_buffer_event *event;
3748 int nr_loops = 0;
3749
3750 cpu_buffer = iter->cpu_buffer;
3751 buffer = cpu_buffer->buffer;
3752
3753
3754
3755
3756
3757
3758 if (unlikely(iter->cache_read != cpu_buffer->read ||
3759 iter->cache_reader_page != cpu_buffer->reader_page))
3760 rb_iter_reset(iter);
3761
3762 again:
3763 if (ring_buffer_iter_empty(iter))
3764 return NULL;
3765
3766
3767
3768
3769
3770
3771
3772 if (RB_WARN_ON(cpu_buffer, ++nr_loops > 2))
3773 return NULL;
3774
3775 if (rb_per_cpu_empty(cpu_buffer))
3776 return NULL;
3777
3778 if (iter->head >= local_read(&iter->head_page->page->commit)) {
3779 rb_inc_iter(iter);
3780 goto again;
3781 }
3782
3783 event = rb_iter_head_event(iter);
3784
3785 switch (event->type_len) {
3786 case RINGBUF_TYPE_PADDING:
3787 if (rb_null_event(event)) {
3788 rb_inc_iter(iter);
3789 goto again;
3790 }
3791 rb_advance_iter(iter);
3792 return event;
3793
3794 case RINGBUF_TYPE_TIME_EXTEND:
3795
3796 rb_advance_iter(iter);
3797 goto again;
3798
3799 case RINGBUF_TYPE_TIME_STAMP:
3800
3801 rb_advance_iter(iter);
3802 goto again;
3803
3804 case RINGBUF_TYPE_DATA:
3805 if (ts) {
3806 *ts = iter->read_stamp + event->time_delta;
3807 ring_buffer_normalize_time_stamp(buffer,
3808 cpu_buffer->cpu, ts);
3809 }
3810 return event;
3811
3812 default:
3813 BUG();
3814 }
3815
3816 return NULL;
3817}
3818EXPORT_SYMBOL_GPL(ring_buffer_iter_peek);
3819
3820static inline int rb_ok_to_lock(void)
3821{
3822
3823
3824
3825
3826
3827
3828 if (likely(!in_nmi()))
3829 return 1;
3830
3831 tracing_off_permanent();
3832 return 0;
3833}
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845struct ring_buffer_event *
3846ring_buffer_peek(struct ring_buffer *buffer, int cpu, u64 *ts,
3847 unsigned long *lost_events)
3848{
3849 struct ring_buffer_per_cpu *cpu_buffer = buffer->buffers[cpu];
3850 struct ring_buffer_event *event;
3851 unsigned long flags;
3852 int dolock;
3853
3854 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3855 return NULL;
3856
3857 dolock = rb_ok_to_lock();
3858 again:
3859 local_irq_save(flags);
3860 if (dolock)
3861 raw_spin_lock(&cpu_buffer->reader_lock);
3862 event = rb_buffer_peek(cpu_buffer, ts, lost_events);
3863 if (event && event->type_len == RINGBUF_TYPE_PADDING)
3864 rb_advance_reader(cpu_buffer);
3865 if (dolock)
3866 raw_spin_unlock(&cpu_buffer->reader_lock);
3867 local_irq_restore(flags);
3868
3869 if (event && event->type_len == RINGBUF_TYPE_PADDING)
3870 goto again;
3871
3872 return event;
3873}
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883struct ring_buffer_event *
3884ring_buffer_iter_peek(struct ring_buffer_iter *iter, u64 *ts)
3885{
3886 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
3887 struct ring_buffer_event *event;
3888 unsigned long flags;
3889
3890 again:
3891 raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
3892 event = rb_iter_peek(iter, ts);
3893 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
3894
3895 if (event && event->type_len == RINGBUF_TYPE_PADDING)
3896 goto again;
3897
3898 return event;
3899}
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912struct ring_buffer_event *
3913ring_buffer_consume(struct ring_buffer *buffer, int cpu, u64 *ts,
3914 unsigned long *lost_events)
3915{
3916 struct ring_buffer_per_cpu *cpu_buffer;
3917 struct ring_buffer_event *event = NULL;
3918 unsigned long flags;
3919 int dolock;
3920
3921 dolock = rb_ok_to_lock();
3922
3923 again:
3924
3925 preempt_disable();
3926
3927 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3928 goto out;
3929
3930 cpu_buffer = buffer->buffers[cpu];
3931 local_irq_save(flags);
3932 if (dolock)
3933 raw_spin_lock(&cpu_buffer->reader_lock);
3934
3935 event = rb_buffer_peek(cpu_buffer, ts, lost_events);
3936 if (event) {
3937 cpu_buffer->lost_events = 0;
3938 rb_advance_reader(cpu_buffer);
3939 }
3940
3941 if (dolock)
3942 raw_spin_unlock(&cpu_buffer->reader_lock);
3943 local_irq_restore(flags);
3944
3945 out:
3946 preempt_enable();
3947
3948 if (event && event->type_len == RINGBUF_TYPE_PADDING)
3949 goto again;
3950
3951 return event;
3952}
3953EXPORT_SYMBOL_GPL(ring_buffer_consume);
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975struct ring_buffer_iter *
3976ring_buffer_read_prepare(struct ring_buffer *buffer, int cpu)
3977{
3978 struct ring_buffer_per_cpu *cpu_buffer;
3979 struct ring_buffer_iter *iter;
3980
3981 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3982 return NULL;
3983
3984 iter = kmalloc(sizeof(*iter), GFP_KERNEL);
3985 if (!iter)
3986 return NULL;
3987
3988 cpu_buffer = buffer->buffers[cpu];
3989
3990 iter->cpu_buffer = cpu_buffer;
3991
3992 atomic_inc(&buffer->resize_disabled);
3993 atomic_inc(&cpu_buffer->record_disabled);
3994
3995 return iter;
3996}
3997EXPORT_SYMBOL_GPL(ring_buffer_read_prepare);
3998
3999
4000
4001
4002
4003
4004
4005
4006void
4007ring_buffer_read_prepare_sync(void)
4008{
4009 synchronize_sched();
4010}
4011EXPORT_SYMBOL_GPL(ring_buffer_read_prepare_sync);
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024void
4025ring_buffer_read_start(struct ring_buffer_iter *iter)
4026{
4027 struct ring_buffer_per_cpu *cpu_buffer;
4028 unsigned long flags;
4029
4030 if (!iter)
4031 return;
4032
4033 cpu_buffer = iter->cpu_buffer;
4034
4035 raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
4036 arch_spin_lock(&cpu_buffer->lock);
4037 rb_iter_reset(iter);
4038 arch_spin_unlock(&cpu_buffer->lock);
4039 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
4040}
4041EXPORT_SYMBOL_GPL(ring_buffer_read_start);
4042
4043
4044
4045
4046
4047
4048
4049
4050void
4051ring_buffer_read_finish(struct ring_buffer_iter *iter)
4052{
4053 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
4054 unsigned long flags;
4055
4056
4057
4058
4059
4060
4061
4062 raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
4063 rb_check_pages(cpu_buffer);
4064 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
4065
4066 atomic_dec(&cpu_buffer->record_disabled);
4067 atomic_dec(&cpu_buffer->buffer->resize_disabled);
4068 kfree(iter);
4069}
4070EXPORT_SYMBOL_GPL(ring_buffer_read_finish);
4071
4072
4073
4074
4075
4076
4077
4078
4079struct ring_buffer_event *
4080ring_buffer_read(struct ring_buffer_iter *iter, u64 *ts)
4081{
4082 struct ring_buffer_event *event;
4083 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
4084 unsigned long flags;
4085
4086 raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
4087 again:
4088 event = rb_iter_peek(iter, ts);
4089 if (!event)
4090 goto out;
4091
4092 if (event->type_len == RINGBUF_TYPE_PADDING)
4093 goto again;
4094
4095 rb_advance_iter(iter);
4096 out:
4097 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
4098
4099 return event;
4100}
4101EXPORT_SYMBOL_GPL(ring_buffer_read);
4102
4103
4104
4105
4106
4107unsigned long ring_buffer_size(struct ring_buffer *buffer, int cpu)
4108{
4109
4110
4111
4112
4113
4114
4115 if (!cpumask_test_cpu(cpu, buffer->cpumask))
4116 return 0;
4117
4118 return BUF_PAGE_SIZE * buffer->buffers[cpu]->nr_pages;
4119}
4120EXPORT_SYMBOL_GPL(ring_buffer_size);
4121
4122static void
4123rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
4124{
4125 rb_head_page_deactivate(cpu_buffer);
4126
4127 cpu_buffer->head_page
4128 = list_entry(cpu_buffer->pages, struct buffer_page, list);
4129 local_set(&cpu_buffer->head_page->write, 0);
4130 local_set(&cpu_buffer->head_page->entries, 0);
4131 local_set(&cpu_buffer->head_page->page->commit, 0);
4132
4133 cpu_buffer->head_page->read = 0;
4134
4135 cpu_buffer->tail_page = cpu_buffer->head_page;
4136 cpu_buffer->commit_page = cpu_buffer->head_page;
4137
4138 INIT_LIST_HEAD(&cpu_buffer->reader_page->list);
4139 INIT_LIST_HEAD(&cpu_buffer->new_pages);
4140 local_set(&cpu_buffer->reader_page->write, 0);
4141 local_set(&cpu_buffer->reader_page->entries, 0);
4142 local_set(&cpu_buffer->reader_page->page->commit, 0);
4143 cpu_buffer->reader_page->read = 0;
4144
4145 local_set(&cpu_buffer->entries_bytes, 0);
4146 local_set(&cpu_buffer->overrun, 0);
4147 local_set(&cpu_buffer->commit_overrun, 0);
4148 local_set(&cpu_buffer->dropped_events, 0);
4149 local_set(&cpu_buffer->entries, 0);
4150 local_set(&cpu_buffer->committing, 0);
4151 local_set(&cpu_buffer->commits, 0);
4152 cpu_buffer->read = 0;
4153 cpu_buffer->read_bytes = 0;
4154
4155 cpu_buffer->write_stamp = 0;
4156 cpu_buffer->read_stamp = 0;
4157
4158 cpu_buffer->lost_events = 0;
4159 cpu_buffer->last_overrun = 0;
4160
4161 rb_head_page_activate(cpu_buffer);
4162}
4163
4164
4165
4166
4167
4168
4169void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu)
4170{
4171 struct ring_buffer_per_cpu *cpu_buffer = buffer->buffers[cpu];
4172 unsigned long flags;
4173
4174 if (!cpumask_test_cpu(cpu, buffer->cpumask))
4175 return;
4176
4177 atomic_inc(&buffer->resize_disabled);
4178 atomic_inc(&cpu_buffer->record_disabled);
4179
4180
4181 synchronize_sched();
4182
4183 raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
4184
4185 if (RB_WARN_ON(cpu_buffer, local_read(&cpu_buffer->committing)))
4186 goto out;
4187
4188 arch_spin_lock(&cpu_buffer->lock);
4189
4190 rb_reset_cpu(cpu_buffer);
4191
4192 arch_spin_unlock(&cpu_buffer->lock);
4193
4194 out:
4195 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
4196
4197 atomic_dec(&cpu_buffer->record_disabled);
4198 atomic_dec(&buffer->resize_disabled);
4199}
4200EXPORT_SYMBOL_GPL(ring_buffer_reset_cpu);
4201
4202
4203
4204
4205
4206void ring_buffer_reset(struct ring_buffer *buffer)
4207{
4208 int cpu;
4209
4210 for_each_buffer_cpu(buffer, cpu)
4211 ring_buffer_reset_cpu(buffer, cpu);
4212}
4213EXPORT_SYMBOL_GPL(ring_buffer_reset);
4214
4215
4216
4217
4218
4219int ring_buffer_empty(struct ring_buffer *buffer)
4220{
4221 struct ring_buffer_per_cpu *cpu_buffer;
4222 unsigned long flags;
4223 int dolock;
4224 int cpu;
4225 int ret;
4226
4227 dolock = rb_ok_to_lock();
4228
4229
4230 for_each_buffer_cpu(buffer, cpu) {
4231 cpu_buffer = buffer->buffers[cpu];
4232 local_irq_save(flags);
4233 if (dolock)
4234 raw_spin_lock(&cpu_buffer->reader_lock);
4235 ret = rb_per_cpu_empty(cpu_buffer);
4236 if (dolock)
4237 raw_spin_unlock(&cpu_buffer->reader_lock);
4238 local_irq_restore(flags);
4239
4240 if (!ret)
4241 return 0;
4242 }
4243
4244 return 1;
4245}
4246EXPORT_SYMBOL_GPL(ring_buffer_empty);
4247
4248
4249
4250
4251
4252
4253int ring_buffer_empty_cpu(struct ring_buffer *buffer, int cpu)
4254{
4255 struct ring_buffer_per_cpu *cpu_buffer;
4256 unsigned long flags;
4257 int dolock;
4258 int ret;
4259
4260 if (!cpumask_test_cpu(cpu, buffer->cpumask))
4261 return 1;
4262
4263 dolock = rb_ok_to_lock();
4264
4265 cpu_buffer = buffer->buffers[cpu];
4266 local_irq_save(flags);
4267 if (dolock)
4268 raw_spin_lock(&cpu_buffer->reader_lock);
4269 ret = rb_per_cpu_empty(cpu_buffer);
4270 if (dolock)
4271 raw_spin_unlock(&cpu_buffer->reader_lock);
4272 local_irq_restore(flags);
4273
4274 return ret;
4275}
4276EXPORT_SYMBOL_GPL(ring_buffer_empty_cpu);
4277
4278#ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289int ring_buffer_swap_cpu(struct ring_buffer *buffer_a,
4290 struct ring_buffer *buffer_b, int cpu)
4291{
4292 struct ring_buffer_per_cpu *cpu_buffer_a;
4293 struct ring_buffer_per_cpu *cpu_buffer_b;
4294 int ret = -EINVAL;
4295
4296 if (!cpumask_test_cpu(cpu, buffer_a->cpumask) ||
4297 !cpumask_test_cpu(cpu, buffer_b->cpumask))
4298 goto out;
4299
4300 cpu_buffer_a = buffer_a->buffers[cpu];
4301 cpu_buffer_b = buffer_b->buffers[cpu];
4302
4303
4304 if (cpu_buffer_a->nr_pages != cpu_buffer_b->nr_pages)
4305 goto out;
4306
4307 ret = -EAGAIN;
4308
4309 if (ring_buffer_flags != RB_BUFFERS_ON)
4310 goto out;
4311
4312 if (atomic_read(&buffer_a->record_disabled))
4313 goto out;
4314
4315 if (atomic_read(&buffer_b->record_disabled))
4316 goto out;
4317
4318 if (atomic_read(&cpu_buffer_a->record_disabled))
4319 goto out;
4320
4321 if (atomic_read(&cpu_buffer_b->record_disabled))
4322 goto out;
4323
4324
4325
4326
4327
4328
4329
4330 atomic_inc(&cpu_buffer_a->record_disabled);
4331 atomic_inc(&cpu_buffer_b->record_disabled);
4332
4333 ret = -EBUSY;
4334 if (local_read(&cpu_buffer_a->committing))
4335 goto out_dec;
4336 if (local_read(&cpu_buffer_b->committing))
4337 goto out_dec;
4338
4339 buffer_a->buffers[cpu] = cpu_buffer_b;
4340 buffer_b->buffers[cpu] = cpu_buffer_a;
4341
4342 cpu_buffer_b->buffer = buffer_a;
4343 cpu_buffer_a->buffer = buffer_b;
4344
4345 ret = 0;
4346
4347out_dec:
4348 atomic_dec(&cpu_buffer_a->record_disabled);
4349 atomic_dec(&cpu_buffer_b->record_disabled);
4350out:
4351 return ret;
4352}
4353EXPORT_SYMBOL_GPL(ring_buffer_swap_cpu);
4354#endif
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372void *ring_buffer_alloc_read_page(struct ring_buffer *buffer, int cpu)
4373{
4374 struct buffer_data_page *bpage;
4375 struct page *page;
4376
4377 page = alloc_pages_node(cpu_to_node(cpu),
4378 GFP_KERNEL | __GFP_NORETRY, 0);
4379 if (!page)
4380 return NULL;
4381
4382 bpage = page_address(page);
4383
4384 rb_init_page(bpage);
4385
4386 return bpage;
4387}
4388EXPORT_SYMBOL_GPL(ring_buffer_alloc_read_page);
4389
4390
4391
4392
4393
4394
4395
4396
4397void ring_buffer_free_read_page(struct ring_buffer *buffer, void *data)
4398{
4399 free_page((unsigned long)data);
4400}
4401EXPORT_SYMBOL_GPL(ring_buffer_free_read_page);
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436int ring_buffer_read_page(struct ring_buffer *buffer,
4437 void **data_page, size_t len, int cpu, int full)
4438{
4439 struct ring_buffer_per_cpu *cpu_buffer = buffer->buffers[cpu];
4440 struct ring_buffer_event *event;
4441 struct buffer_data_page *bpage;
4442 struct buffer_page *reader;
4443 unsigned long missed_events;
4444 unsigned long flags;
4445 unsigned int commit;
4446 unsigned int read;
4447 u64 save_timestamp;
4448 int ret = -1;
4449
4450 if (!cpumask_test_cpu(cpu, buffer->cpumask))
4451 goto out;
4452
4453
4454
4455
4456
4457 if (len <= BUF_PAGE_HDR_SIZE)
4458 goto out;
4459
4460 len -= BUF_PAGE_HDR_SIZE;
4461
4462 if (!data_page)
4463 goto out;
4464
4465 bpage = *data_page;
4466 if (!bpage)
4467 goto out;
4468
4469 raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
4470
4471 reader = rb_get_reader_page(cpu_buffer);
4472 if (!reader)
4473 goto out_unlock;
4474
4475 event = rb_reader_event(cpu_buffer);
4476
4477 read = reader->read;
4478 commit = rb_page_commit(reader);
4479
4480
4481 missed_events = cpu_buffer->lost_events;
4482
4483
4484
4485
4486
4487
4488
4489
4490 if (read || (len < (commit - read)) ||
4491 cpu_buffer->reader_page == cpu_buffer->commit_page) {
4492 struct buffer_data_page *rpage = cpu_buffer->reader_page->page;
4493 unsigned int rpos = read;
4494 unsigned int pos = 0;
4495 unsigned int size;
4496
4497 if (full)
4498 goto out_unlock;
4499
4500 if (len > (commit - read))
4501 len = (commit - read);
4502
4503
4504 size = rb_event_ts_length(event);
4505
4506 if (len < size)
4507 goto out_unlock;
4508
4509
4510 save_timestamp = cpu_buffer->read_stamp;
4511
4512
4513 do {
4514
4515
4516
4517
4518
4519
4520 size = rb_event_length(event);
4521 memcpy(bpage->data + pos, rpage->data + rpos, size);
4522
4523 len -= size;
4524
4525 rb_advance_reader(cpu_buffer);
4526 rpos = reader->read;
4527 pos += size;
4528
4529 if (rpos >= commit)
4530 break;
4531
4532 event = rb_reader_event(cpu_buffer);
4533
4534 size = rb_event_ts_length(event);
4535 } while (len >= size);
4536
4537
4538 local_set(&bpage->commit, pos);
4539 bpage->time_stamp = save_timestamp;
4540
4541
4542 read = 0;
4543 } else {
4544
4545 cpu_buffer->read += rb_page_entries(reader);
4546 cpu_buffer->read_bytes += BUF_PAGE_SIZE;
4547
4548
4549 rb_init_page(bpage);
4550 bpage = reader->page;
4551 reader->page = *data_page;
4552 local_set(&reader->write, 0);
4553 local_set(&reader->entries, 0);
4554 reader->read = 0;
4555 *data_page = bpage;
4556
4557
4558
4559
4560
4561
4562 if (reader->real_end)
4563 local_set(&bpage->commit, reader->real_end);
4564 }
4565 ret = read;
4566
4567 cpu_buffer->lost_events = 0;
4568
4569 commit = local_read(&bpage->commit);
4570
4571
4572
4573 if (missed_events) {
4574
4575
4576
4577 if (BUF_PAGE_SIZE - commit >= sizeof(missed_events)) {
4578 memcpy(&bpage->data[commit], &missed_events,
4579 sizeof(missed_events));
4580 local_add(RB_MISSED_STORED, &bpage->commit);
4581 commit += sizeof(missed_events);
4582 }
4583 local_add(RB_MISSED_EVENTS, &bpage->commit);
4584 }
4585
4586
4587
4588
4589 if (commit < BUF_PAGE_SIZE)
4590 memset(&bpage->data[commit], 0, BUF_PAGE_SIZE - commit);
4591
4592 out_unlock:
4593 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
4594
4595 out:
4596 return ret;
4597}
4598EXPORT_SYMBOL_GPL(ring_buffer_read_page);
4599
4600#ifdef CONFIG_HOTPLUG_CPU
4601static int rb_cpu_notify(struct notifier_block *self,
4602 unsigned long action, void *hcpu)
4603{
4604 struct ring_buffer *buffer =
4605 container_of(self, struct ring_buffer, cpu_notify);
4606 long cpu = (long)hcpu;
4607 int cpu_i, nr_pages_same;
4608 unsigned int nr_pages;
4609
4610 switch (action) {
4611 case CPU_UP_PREPARE:
4612 case CPU_UP_PREPARE_FROZEN:
4613 if (cpumask_test_cpu(cpu, buffer->cpumask))
4614 return NOTIFY_OK;
4615
4616 nr_pages = 0;
4617 nr_pages_same = 1;
4618
4619 for_each_buffer_cpu(buffer, cpu_i) {
4620
4621 if (nr_pages == 0)
4622 nr_pages = buffer->buffers[cpu_i]->nr_pages;
4623 if (nr_pages != buffer->buffers[cpu_i]->nr_pages) {
4624 nr_pages_same = 0;
4625 break;
4626 }
4627 }
4628
4629 if (!nr_pages_same)
4630 nr_pages = 2;
4631 buffer->buffers[cpu] =
4632 rb_allocate_cpu_buffer(buffer, nr_pages, cpu);
4633 if (!buffer->buffers[cpu]) {
4634 WARN(1, "failed to allocate ring buffer on CPU %ld\n",
4635 cpu);
4636 return NOTIFY_OK;
4637 }
4638 smp_wmb();
4639 cpumask_set_cpu(cpu, buffer->cpumask);
4640 break;
4641 case CPU_DOWN_PREPARE:
4642 case CPU_DOWN_PREPARE_FROZEN:
4643
4644
4645
4646
4647
4648 break;
4649 default:
4650 break;
4651 }
4652 return NOTIFY_OK;
4653}
4654#endif
4655
4656#ifdef CONFIG_RING_BUFFER_STARTUP_TEST
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672static struct task_struct *rb_threads[NR_CPUS] __initdata;
4673
4674struct rb_test_data {
4675 struct ring_buffer *buffer;
4676 unsigned long events;
4677 unsigned long bytes_written;
4678 unsigned long bytes_alloc;
4679 unsigned long bytes_dropped;
4680 unsigned long events_nested;
4681 unsigned long bytes_written_nested;
4682 unsigned long bytes_alloc_nested;
4683 unsigned long bytes_dropped_nested;
4684 int min_size_nested;
4685 int max_size_nested;
4686 int max_size;
4687 int min_size;
4688 int cpu;
4689 int cnt;
4690};
4691
4692static struct rb_test_data rb_data[NR_CPUS] __initdata;
4693
4694
4695#define RB_TEST_BUFFER_SIZE 1048576
4696
4697static char rb_string[] __initdata =
4698 "abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()?+\\"
4699 "?+|:';\",.<>/?abcdefghijklmnopqrstuvwxyz1234567890"
4700 "!@#$%^&*()?+\\?+|:';\",.<>/?abcdefghijklmnopqrstuv";
4701
4702static bool rb_test_started __initdata;
4703
4704struct rb_item {
4705 int size;
4706 char str[];
4707};
4708
4709static __init int rb_write_something(struct rb_test_data *data, bool nested)
4710{
4711 struct ring_buffer_event *event;
4712 struct rb_item *item;
4713 bool started;
4714 int event_len;
4715 int size;
4716 int len;
4717 int cnt;
4718
4719
4720 cnt = data->cnt + (nested ? 27 : 0);
4721
4722
4723 size = (data->cnt * 68 / 25) % (sizeof(rb_string) - 1);
4724
4725 len = size + sizeof(struct rb_item);
4726
4727 started = rb_test_started;
4728
4729 smp_rmb();
4730
4731 event = ring_buffer_lock_reserve(data->buffer, len);
4732 if (!event) {
4733
4734 if (started) {
4735 if (nested)
4736 data->bytes_dropped += len;
4737 else
4738 data->bytes_dropped_nested += len;
4739 }
4740 return len;
4741 }
4742
4743 event_len = ring_buffer_event_length(event);
4744
4745 if (RB_WARN_ON(data->buffer, event_len < len))
4746 goto out;
4747
4748 item = ring_buffer_event_data(event);
4749 item->size = size;
4750 memcpy(item->str, rb_string, size);
4751
4752 if (nested) {
4753 data->bytes_alloc_nested += event_len;
4754 data->bytes_written_nested += len;
4755 data->events_nested++;
4756 if (!data->min_size_nested || len < data->min_size_nested)
4757 data->min_size_nested = len;
4758 if (len > data->max_size_nested)
4759 data->max_size_nested = len;
4760 } else {
4761 data->bytes_alloc += event_len;
4762 data->bytes_written += len;
4763 data->events++;
4764 if (!data->min_size || len < data->min_size)
4765 data->max_size = len;
4766 if (len > data->max_size)
4767 data->max_size = len;
4768 }
4769
4770 out:
4771 ring_buffer_unlock_commit(data->buffer, event);
4772
4773 return 0;
4774}
4775
4776static __init int rb_test(void *arg)
4777{
4778 struct rb_test_data *data = arg;
4779
4780 while (!kthread_should_stop()) {
4781 rb_write_something(data, false);
4782 data->cnt++;
4783
4784 set_current_state(TASK_INTERRUPTIBLE);
4785
4786 usleep_range(((data->cnt % 3) + 1) * 100, 1000);
4787 }
4788
4789 return 0;
4790}
4791
4792static __init void rb_ipi(void *ignore)
4793{
4794 struct rb_test_data *data;
4795 int cpu = smp_processor_id();
4796
4797 data = &rb_data[cpu];
4798 rb_write_something(data, true);
4799}
4800
4801static __init int rb_hammer_test(void *arg)
4802{
4803 while (!kthread_should_stop()) {
4804
4805
4806 smp_call_function(rb_ipi, NULL, 1);
4807
4808 schedule();
4809 }
4810
4811 return 0;
4812}
4813
4814static __init int test_ringbuffer(void)
4815{
4816 struct task_struct *rb_hammer;
4817 struct ring_buffer *buffer;
4818 int cpu;
4819 int ret = 0;
4820
4821 pr_info("Running ring buffer tests...\n");
4822
4823 buffer = ring_buffer_alloc(RB_TEST_BUFFER_SIZE, RB_FL_OVERWRITE);
4824 if (WARN_ON(!buffer))
4825 return 0;
4826
4827
4828 ring_buffer_record_off(buffer);
4829
4830 for_each_online_cpu(cpu) {
4831 rb_data[cpu].buffer = buffer;
4832 rb_data[cpu].cpu = cpu;
4833 rb_data[cpu].cnt = cpu;
4834 rb_threads[cpu] = kthread_create(rb_test, &rb_data[cpu],
4835 "rbtester/%d", cpu);
4836 if (WARN_ON(!rb_threads[cpu])) {
4837 pr_cont("FAILED\n");
4838 ret = -1;
4839 goto out_free;
4840 }
4841
4842 kthread_bind(rb_threads[cpu], cpu);
4843 wake_up_process(rb_threads[cpu]);
4844 }
4845
4846
4847 rb_hammer = kthread_run(rb_hammer_test, NULL, "rbhammer");
4848 if (WARN_ON(!rb_hammer)) {
4849 pr_cont("FAILED\n");
4850 ret = -1;
4851 goto out_free;
4852 }
4853
4854 ring_buffer_record_on(buffer);
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864 smp_wmb();
4865 rb_test_started = true;
4866
4867 set_current_state(TASK_INTERRUPTIBLE);
4868 ;
4869 schedule_timeout(10 * HZ);
4870
4871 kthread_stop(rb_hammer);
4872
4873 out_free:
4874 for_each_online_cpu(cpu) {
4875 if (!rb_threads[cpu])
4876 break;
4877 kthread_stop(rb_threads[cpu]);
4878 }
4879 if (ret) {
4880 ring_buffer_free(buffer);
4881 return ret;
4882 }
4883
4884
4885 pr_info("finished\n");
4886 for_each_online_cpu(cpu) {
4887 struct ring_buffer_event *event;
4888 struct rb_test_data *data = &rb_data[cpu];
4889 struct rb_item *item;
4890 unsigned long total_events;
4891 unsigned long total_dropped;
4892 unsigned long total_written;
4893 unsigned long total_alloc;
4894 unsigned long total_read = 0;
4895 unsigned long total_size = 0;
4896 unsigned long total_len = 0;
4897 unsigned long total_lost = 0;
4898 unsigned long lost;
4899 int big_event_size;
4900 int small_event_size;
4901
4902 ret = -1;
4903
4904 total_events = data->events + data->events_nested;
4905 total_written = data->bytes_written + data->bytes_written_nested;
4906 total_alloc = data->bytes_alloc + data->bytes_alloc_nested;
4907 total_dropped = data->bytes_dropped + data->bytes_dropped_nested;
4908
4909 big_event_size = data->max_size + data->max_size_nested;
4910 small_event_size = data->min_size + data->min_size_nested;
4911
4912 pr_info("CPU %d:\n", cpu);
4913 pr_info(" events: %ld\n", total_events);
4914 pr_info(" dropped bytes: %ld\n", total_dropped);
4915 pr_info(" alloced bytes: %ld\n", total_alloc);
4916 pr_info(" written bytes: %ld\n", total_written);
4917 pr_info(" biggest event: %d\n", big_event_size);
4918 pr_info(" smallest event: %d\n", small_event_size);
4919
4920 if (RB_WARN_ON(buffer, total_dropped))
4921 break;
4922
4923 ret = 0;
4924
4925 while ((event = ring_buffer_consume(buffer, cpu, NULL, &lost))) {
4926 total_lost += lost;
4927 item = ring_buffer_event_data(event);
4928 total_len += ring_buffer_event_length(event);
4929 total_size += item->size + sizeof(struct rb_item);
4930 if (memcmp(&item->str[0], rb_string, item->size) != 0) {
4931 pr_info("FAILED!\n");
4932 pr_info("buffer had: %.*s\n", item->size, item->str);
4933 pr_info("expected: %.*s\n", item->size, rb_string);
4934 RB_WARN_ON(buffer, 1);
4935 ret = -1;
4936 break;
4937 }
4938 total_read++;
4939 }
4940 if (ret)
4941 break;
4942
4943 ret = -1;
4944
4945 pr_info(" read events: %ld\n", total_read);
4946 pr_info(" lost events: %ld\n", total_lost);
4947 pr_info(" total events: %ld\n", total_lost + total_read);
4948 pr_info(" recorded len bytes: %ld\n", total_len);
4949 pr_info(" recorded size bytes: %ld\n", total_size);
4950 if (total_lost)
4951 pr_info(" With dropped events, record len and size may not match\n"
4952 " alloced and written from above\n");
4953 if (!total_lost) {
4954 if (RB_WARN_ON(buffer, total_len != total_alloc ||
4955 total_size != total_written))
4956 break;
4957 }
4958 if (RB_WARN_ON(buffer, total_lost + total_read != total_events))
4959 break;
4960
4961 ret = 0;
4962 }
4963 if (!ret)
4964 pr_info("Ring buffer PASSED!\n");
4965
4966 ring_buffer_free(buffer);
4967 return 0;
4968}
4969
4970late_initcall(test_ringbuffer);
4971#endif
4972