1
2
3
4
5
6#include <linux/ring_buffer.h>
7#include <linux/trace_clock.h>
8#include <linux/ftrace_irq.h>
9#include <linux/spinlock.h>
10#include <linux/debugfs.h>
11#include <linux/uaccess.h>
12#include <linux/hardirq.h>
13#include <linux/kmemcheck.h>
14#include <linux/module.h>
15#include <linux/percpu.h>
16#include <linux/mutex.h>
17#include <linux/slab.h>
18#include <linux/init.h>
19#include <linux/hash.h>
20#include <linux/list.h>
21#include <linux/cpu.h>
22#include <linux/fs.h>
23
24#include <asm/local.h>
25#include "trace.h"
26
27
28
29
30int ring_buffer_print_entry_header(struct trace_seq *s)
31{
32 int ret;
33
34 ret = trace_seq_printf(s, "# compressed entry header\n");
35 ret = trace_seq_printf(s, "\ttype_len : 5 bits\n");
36 ret = trace_seq_printf(s, "\ttime_delta : 27 bits\n");
37 ret = trace_seq_printf(s, "\tarray : 32 bits\n");
38 ret = trace_seq_printf(s, "\n");
39 ret = trace_seq_printf(s, "\tpadding : type == %d\n",
40 RINGBUF_TYPE_PADDING);
41 ret = trace_seq_printf(s, "\ttime_extend : type == %d\n",
42 RINGBUF_TYPE_TIME_EXTEND);
43 ret = trace_seq_printf(s, "\tdata max type_len == %d\n",
44 RINGBUF_TYPE_DATA_TYPE_LEN_MAX);
45
46 return ret;
47}
48
49
50
51
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
146enum {
147 RB_BUFFERS_ON_BIT = 0,
148 RB_BUFFERS_DISABLED_BIT = 1,
149};
150
151enum {
152 RB_BUFFERS_ON = 1 << RB_BUFFERS_ON_BIT,
153 RB_BUFFERS_DISABLED = 1 << RB_BUFFERS_DISABLED_BIT,
154};
155
156static unsigned long ring_buffer_flags __read_mostly = RB_BUFFERS_ON;
157
158#define BUF_PAGE_HDR_SIZE offsetof(struct buffer_data_page, data)
159
160
161
162
163
164
165
166void tracing_on(void)
167{
168 set_bit(RB_BUFFERS_ON_BIT, &ring_buffer_flags);
169}
170EXPORT_SYMBOL_GPL(tracing_on);
171
172
173
174
175
176
177
178
179
180void tracing_off(void)
181{
182 clear_bit(RB_BUFFERS_ON_BIT, &ring_buffer_flags);
183}
184EXPORT_SYMBOL_GPL(tracing_off);
185
186
187
188
189
190
191
192void tracing_off_permanent(void)
193{
194 set_bit(RB_BUFFERS_DISABLED_BIT, &ring_buffer_flags);
195}
196
197
198
199
200int tracing_is_on(void)
201{
202 return ring_buffer_flags == RB_BUFFERS_ON;
203}
204EXPORT_SYMBOL_GPL(tracing_is_on);
205
206#define RB_EVNT_HDR_SIZE (offsetof(struct ring_buffer_event, array))
207#define RB_ALIGNMENT 4U
208#define RB_MAX_SMALL_DATA (RB_ALIGNMENT * RINGBUF_TYPE_DATA_TYPE_LEN_MAX)
209#define RB_EVNT_MIN_SIZE 8U
210
211#if !defined(CONFIG_64BIT) || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
212# define RB_FORCE_8BYTE_ALIGNMENT 0
213# define RB_ARCH_ALIGNMENT RB_ALIGNMENT
214#else
215# define RB_FORCE_8BYTE_ALIGNMENT 1
216# define RB_ARCH_ALIGNMENT 8U
217#endif
218
219
220#define RINGBUF_TYPE_DATA 0 ... RINGBUF_TYPE_DATA_TYPE_LEN_MAX
221
222enum {
223 RB_LEN_TIME_EXTEND = 8,
224 RB_LEN_TIME_STAMP = 16,
225};
226
227static inline int rb_null_event(struct ring_buffer_event *event)
228{
229 return event->type_len == RINGBUF_TYPE_PADDING && !event->time_delta;
230}
231
232static void rb_event_set_padding(struct ring_buffer_event *event)
233{
234
235 event->type_len = RINGBUF_TYPE_PADDING;
236 event->time_delta = 0;
237}
238
239static unsigned
240rb_event_data_length(struct ring_buffer_event *event)
241{
242 unsigned length;
243
244 if (event->type_len)
245 length = event->type_len * RB_ALIGNMENT;
246 else
247 length = event->array[0];
248 return length + RB_EVNT_HDR_SIZE;
249}
250
251
252static unsigned
253rb_event_length(struct ring_buffer_event *event)
254{
255 switch (event->type_len) {
256 case RINGBUF_TYPE_PADDING:
257 if (rb_null_event(event))
258
259 return -1;
260 return event->array[0] + RB_EVNT_HDR_SIZE;
261
262 case RINGBUF_TYPE_TIME_EXTEND:
263 return RB_LEN_TIME_EXTEND;
264
265 case RINGBUF_TYPE_TIME_STAMP:
266 return RB_LEN_TIME_STAMP;
267
268 case RINGBUF_TYPE_DATA:
269 return rb_event_data_length(event);
270 default:
271 BUG();
272 }
273
274 return 0;
275}
276
277
278
279
280
281unsigned ring_buffer_event_length(struct ring_buffer_event *event)
282{
283 unsigned length = rb_event_length(event);
284 if (event->type_len > RINGBUF_TYPE_DATA_TYPE_LEN_MAX)
285 return length;
286 length -= RB_EVNT_HDR_SIZE;
287 if (length > RB_MAX_SMALL_DATA + sizeof(event->array[0]))
288 length -= sizeof(event->array[0]);
289 return length;
290}
291EXPORT_SYMBOL_GPL(ring_buffer_event_length);
292
293
294static void *
295rb_event_data(struct ring_buffer_event *event)
296{
297 BUG_ON(event->type_len > RINGBUF_TYPE_DATA_TYPE_LEN_MAX);
298
299 if (event->type_len)
300 return (void *)&event->array[0];
301
302 return (void *)&event->array[1];
303}
304
305
306
307
308
309void *ring_buffer_event_data(struct ring_buffer_event *event)
310{
311 return rb_event_data(event);
312}
313EXPORT_SYMBOL_GPL(ring_buffer_event_data);
314
315#define for_each_buffer_cpu(buffer, cpu) \
316 for_each_cpu(cpu, buffer->cpumask)
317
318#define TS_SHIFT 27
319#define TS_MASK ((1ULL << TS_SHIFT) - 1)
320#define TS_DELTA_TEST (~TS_MASK)
321
322
323#define RB_MISSED_EVENTS (1 << 31)
324
325#define RB_MISSED_STORED (1 << 30)
326
327struct buffer_data_page {
328 u64 time_stamp;
329 local_t commit;
330 unsigned char data[];
331};
332
333
334
335
336
337
338
339
340
341struct buffer_page {
342 struct list_head list;
343 local_t write;
344 unsigned read;
345 local_t entries;
346 unsigned long real_end;
347 struct buffer_data_page *page;
348};
349
350
351
352
353
354
355
356
357
358
359
360
361
362#define RB_WRITE_MASK 0xfffff
363#define RB_WRITE_INTCNT (1 << 20)
364
365static void rb_init_page(struct buffer_data_page *bpage)
366{
367 local_set(&bpage->commit, 0);
368}
369
370
371
372
373
374
375
376size_t ring_buffer_page_len(void *page)
377{
378 return local_read(&((struct buffer_data_page *)page)->commit)
379 + BUF_PAGE_HDR_SIZE;
380}
381
382
383
384
385
386static void free_buffer_page(struct buffer_page *bpage)
387{
388 free_page((unsigned long)bpage->page);
389 kfree(bpage);
390}
391
392
393
394
395static inline int test_time_stamp(u64 delta)
396{
397 if (delta & TS_DELTA_TEST)
398 return 1;
399 return 0;
400}
401
402#define BUF_PAGE_SIZE (PAGE_SIZE - BUF_PAGE_HDR_SIZE)
403
404
405#define BUF_MAX_DATA_SIZE (BUF_PAGE_SIZE - (sizeof(u32) * 2))
406
407
408#define RB_TIMESTAMPS_PER_PAGE (BUF_PAGE_SIZE / RB_LEN_TIME_STAMP)
409
410int ring_buffer_print_page_header(struct trace_seq *s)
411{
412 struct buffer_data_page field;
413 int ret;
414
415 ret = trace_seq_printf(s, "\tfield: u64 timestamp;\t"
416 "offset:0;\tsize:%u;\tsigned:%u;\n",
417 (unsigned int)sizeof(field.time_stamp),
418 (unsigned int)is_signed_type(u64));
419
420 ret = trace_seq_printf(s, "\tfield: local_t commit;\t"
421 "offset:%u;\tsize:%u;\tsigned:%u;\n",
422 (unsigned int)offsetof(typeof(field), commit),
423 (unsigned int)sizeof(field.commit),
424 (unsigned int)is_signed_type(long));
425
426 ret = trace_seq_printf(s, "\tfield: int overwrite;\t"
427 "offset:%u;\tsize:%u;\tsigned:%u;\n",
428 (unsigned int)offsetof(typeof(field), commit),
429 1,
430 (unsigned int)is_signed_type(long));
431
432 ret = trace_seq_printf(s, "\tfield: char data;\t"
433 "offset:%u;\tsize:%u;\tsigned:%u;\n",
434 (unsigned int)offsetof(typeof(field), data),
435 (unsigned int)BUF_PAGE_SIZE,
436 (unsigned int)is_signed_type(char));
437
438 return ret;
439}
440
441
442
443
444struct ring_buffer_per_cpu {
445 int cpu;
446 struct ring_buffer *buffer;
447 spinlock_t reader_lock;
448 arch_spinlock_t lock;
449 struct lock_class_key lock_key;
450 struct list_head *pages;
451 struct buffer_page *head_page;
452 struct buffer_page *tail_page;
453 struct buffer_page *commit_page;
454 struct buffer_page *reader_page;
455 unsigned long lost_events;
456 unsigned long last_overrun;
457 local_t commit_overrun;
458 local_t overrun;
459 local_t entries;
460 local_t committing;
461 local_t commits;
462 unsigned long read;
463 u64 write_stamp;
464 u64 read_stamp;
465 atomic_t record_disabled;
466};
467
468struct ring_buffer {
469 unsigned pages;
470 unsigned flags;
471 int cpus;
472 atomic_t record_disabled;
473 cpumask_var_t cpumask;
474
475 struct lock_class_key *reader_lock_key;
476
477 struct mutex mutex;
478
479 struct ring_buffer_per_cpu **buffers;
480
481#ifdef CONFIG_HOTPLUG_CPU
482 struct notifier_block cpu_notify;
483#endif
484 u64 (*clock)(void);
485};
486
487struct ring_buffer_iter {
488 struct ring_buffer_per_cpu *cpu_buffer;
489 unsigned long head;
490 struct buffer_page *head_page;
491 struct buffer_page *cache_reader_page;
492 unsigned long cache_read;
493 u64 read_stamp;
494};
495
496
497#define RB_WARN_ON(b, cond) \
498 ({ \
499 int _____ret = unlikely(cond); \
500 if (_____ret) { \
501 if (__same_type(*(b), struct ring_buffer_per_cpu)) { \
502 struct ring_buffer_per_cpu *__b = \
503 (void *)b; \
504 atomic_inc(&__b->buffer->record_disabled); \
505 } else \
506 atomic_inc(&b->record_disabled); \
507 WARN_ON(1); \
508 } \
509 _____ret; \
510 })
511
512
513#define DEBUG_SHIFT 0
514
515static inline u64 rb_time_stamp(struct ring_buffer *buffer)
516{
517
518 return buffer->clock() << DEBUG_SHIFT;
519}
520
521u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu)
522{
523 u64 time;
524
525 preempt_disable_notrace();
526 time = rb_time_stamp(buffer);
527 preempt_enable_no_resched_notrace();
528
529 return time;
530}
531EXPORT_SYMBOL_GPL(ring_buffer_time_stamp);
532
533void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer,
534 int cpu, u64 *ts)
535{
536
537 *ts >>= DEBUG_SHIFT;
538}
539EXPORT_SYMBOL_GPL(ring_buffer_normalize_time_stamp);
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610#define RB_PAGE_NORMAL 0UL
611#define RB_PAGE_HEAD 1UL
612#define RB_PAGE_UPDATE 2UL
613
614
615#define RB_FLAG_MASK 3UL
616
617
618#define RB_PAGE_MOVED 4UL
619
620
621
622
623static struct list_head *rb_list_head(struct list_head *list)
624{
625 unsigned long val = (unsigned long)list;
626
627 return (struct list_head *)(val & ~RB_FLAG_MASK);
628}
629
630
631
632
633
634
635
636
637
638static int inline
639rb_is_head_page(struct ring_buffer_per_cpu *cpu_buffer,
640 struct buffer_page *page, struct list_head *list)
641{
642 unsigned long val;
643
644 val = (unsigned long)list->next;
645
646 if ((val & ~RB_FLAG_MASK) != (unsigned long)&page->list)
647 return RB_PAGE_MOVED;
648
649 return val & RB_FLAG_MASK;
650}
651
652
653
654
655
656
657
658
659static int rb_is_reader_page(struct buffer_page *page)
660{
661 struct list_head *list = page->list.prev;
662
663 return rb_list_head(list->next) != &page->list;
664}
665
666
667
668
669static void rb_set_list_to_head(struct ring_buffer_per_cpu *cpu_buffer,
670 struct list_head *list)
671{
672 unsigned long *ptr;
673
674 ptr = (unsigned long *)&list->next;
675 *ptr |= RB_PAGE_HEAD;
676 *ptr &= ~RB_PAGE_UPDATE;
677}
678
679
680
681
682static void rb_head_page_activate(struct ring_buffer_per_cpu *cpu_buffer)
683{
684 struct buffer_page *head;
685
686 head = cpu_buffer->head_page;
687 if (!head)
688 return;
689
690
691
692
693 rb_set_list_to_head(cpu_buffer, head->list.prev);
694}
695
696static void rb_list_head_clear(struct list_head *list)
697{
698 unsigned long *ptr = (unsigned long *)&list->next;
699
700 *ptr &= ~RB_FLAG_MASK;
701}
702
703
704
705
706static void
707rb_head_page_deactivate(struct ring_buffer_per_cpu *cpu_buffer)
708{
709 struct list_head *hd;
710
711
712 rb_list_head_clear(cpu_buffer->pages);
713
714 list_for_each(hd, cpu_buffer->pages)
715 rb_list_head_clear(hd);
716}
717
718static int rb_head_page_set(struct ring_buffer_per_cpu *cpu_buffer,
719 struct buffer_page *head,
720 struct buffer_page *prev,
721 int old_flag, int new_flag)
722{
723 struct list_head *list;
724 unsigned long val = (unsigned long)&head->list;
725 unsigned long ret;
726
727 list = &prev->list;
728
729 val &= ~RB_FLAG_MASK;
730
731 ret = cmpxchg((unsigned long *)&list->next,
732 val | old_flag, val | new_flag);
733
734
735 if ((ret & ~RB_FLAG_MASK) != val)
736 return RB_PAGE_MOVED;
737
738 return ret & RB_FLAG_MASK;
739}
740
741static int rb_head_page_set_update(struct ring_buffer_per_cpu *cpu_buffer,
742 struct buffer_page *head,
743 struct buffer_page *prev,
744 int old_flag)
745{
746 return rb_head_page_set(cpu_buffer, head, prev,
747 old_flag, RB_PAGE_UPDATE);
748}
749
750static int rb_head_page_set_head(struct ring_buffer_per_cpu *cpu_buffer,
751 struct buffer_page *head,
752 struct buffer_page *prev,
753 int old_flag)
754{
755 return rb_head_page_set(cpu_buffer, head, prev,
756 old_flag, RB_PAGE_HEAD);
757}
758
759static int rb_head_page_set_normal(struct ring_buffer_per_cpu *cpu_buffer,
760 struct buffer_page *head,
761 struct buffer_page *prev,
762 int old_flag)
763{
764 return rb_head_page_set(cpu_buffer, head, prev,
765 old_flag, RB_PAGE_NORMAL);
766}
767
768static inline void rb_inc_page(struct ring_buffer_per_cpu *cpu_buffer,
769 struct buffer_page **bpage)
770{
771 struct list_head *p = rb_list_head((*bpage)->list.next);
772
773 *bpage = list_entry(p, struct buffer_page, list);
774}
775
776static struct buffer_page *
777rb_set_head_page(struct ring_buffer_per_cpu *cpu_buffer)
778{
779 struct buffer_page *head;
780 struct buffer_page *page;
781 struct list_head *list;
782 int i;
783
784 if (RB_WARN_ON(cpu_buffer, !cpu_buffer->head_page))
785 return NULL;
786
787
788 list = cpu_buffer->pages;
789 if (RB_WARN_ON(cpu_buffer, rb_list_head(list->prev->next) != list))
790 return NULL;
791
792 page = head = cpu_buffer->head_page;
793
794
795
796
797
798
799 for (i = 0; i < 3; i++) {
800 do {
801 if (rb_is_head_page(cpu_buffer, page, page->list.prev)) {
802 cpu_buffer->head_page = page;
803 return page;
804 }
805 rb_inc_page(cpu_buffer, &page);
806 } while (page != head);
807 }
808
809 RB_WARN_ON(cpu_buffer, 1);
810
811 return NULL;
812}
813
814static int rb_head_page_replace(struct buffer_page *old,
815 struct buffer_page *new)
816{
817 unsigned long *ptr = (unsigned long *)&old->list.prev->next;
818 unsigned long val;
819 unsigned long ret;
820
821 val = *ptr & ~RB_FLAG_MASK;
822 val |= RB_PAGE_HEAD;
823
824 ret = cmpxchg(ptr, val, (unsigned long)&new->list);
825
826 return ret == val;
827}
828
829
830
831
832
833
834static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer,
835 struct buffer_page *tail_page,
836 struct buffer_page *next_page)
837{
838 struct buffer_page *old_tail;
839 unsigned long old_entries;
840 unsigned long old_write;
841 int ret = 0;
842
843
844
845
846
847
848
849
850
851
852 old_write = local_add_return(RB_WRITE_INTCNT, &next_page->write);
853 old_entries = local_add_return(RB_WRITE_INTCNT, &next_page->entries);
854
855
856
857
858
859 barrier();
860
861
862
863
864
865
866 if (tail_page == cpu_buffer->tail_page) {
867
868 unsigned long val = old_write & ~RB_WRITE_MASK;
869 unsigned long eval = old_entries & ~RB_WRITE_MASK;
870
871
872
873
874
875
876
877
878
879
880
881 (void)local_cmpxchg(&next_page->write, old_write, val);
882 (void)local_cmpxchg(&next_page->entries, old_entries, eval);
883
884
885
886
887
888
889 local_set(&next_page->page->commit, 0);
890
891 old_tail = cmpxchg(&cpu_buffer->tail_page,
892 tail_page, next_page);
893
894 if (old_tail == tail_page)
895 ret = 1;
896 }
897
898 return ret;
899}
900
901static int rb_check_bpage(struct ring_buffer_per_cpu *cpu_buffer,
902 struct buffer_page *bpage)
903{
904 unsigned long val = (unsigned long)bpage;
905
906 if (RB_WARN_ON(cpu_buffer, val & RB_FLAG_MASK))
907 return 1;
908
909 return 0;
910}
911
912
913
914
915static int rb_check_list(struct ring_buffer_per_cpu *cpu_buffer,
916 struct list_head *list)
917{
918 if (RB_WARN_ON(cpu_buffer, rb_list_head(list->prev) != list->prev))
919 return 1;
920 if (RB_WARN_ON(cpu_buffer, rb_list_head(list->next) != list->next))
921 return 1;
922 return 0;
923}
924
925
926
927
928
929
930
931
932static int rb_check_pages(struct ring_buffer_per_cpu *cpu_buffer)
933{
934 struct list_head *head = cpu_buffer->pages;
935 struct buffer_page *bpage, *tmp;
936
937 rb_head_page_deactivate(cpu_buffer);
938
939 if (RB_WARN_ON(cpu_buffer, head->next->prev != head))
940 return -1;
941 if (RB_WARN_ON(cpu_buffer, head->prev->next != head))
942 return -1;
943
944 if (rb_check_list(cpu_buffer, head))
945 return -1;
946
947 list_for_each_entry_safe(bpage, tmp, head, list) {
948 if (RB_WARN_ON(cpu_buffer,
949 bpage->list.next->prev != &bpage->list))
950 return -1;
951 if (RB_WARN_ON(cpu_buffer,
952 bpage->list.prev->next != &bpage->list))
953 return -1;
954 if (rb_check_list(cpu_buffer, &bpage->list))
955 return -1;
956 }
957
958 rb_head_page_activate(cpu_buffer);
959
960 return 0;
961}
962
963static int rb_allocate_pages(struct ring_buffer_per_cpu *cpu_buffer,
964 unsigned nr_pages)
965{
966 struct buffer_page *bpage, *tmp;
967 unsigned long addr;
968 LIST_HEAD(pages);
969 unsigned i;
970
971 WARN_ON(!nr_pages);
972
973 for (i = 0; i < nr_pages; i++) {
974 bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()),
975 GFP_KERNEL, cpu_to_node(cpu_buffer->cpu));
976 if (!bpage)
977 goto free_pages;
978
979 rb_check_bpage(cpu_buffer, bpage);
980
981 list_add(&bpage->list, &pages);
982
983 addr = __get_free_page(GFP_KERNEL);
984 if (!addr)
985 goto free_pages;
986 bpage->page = (void *)addr;
987 rb_init_page(bpage->page);
988 }
989
990
991
992
993
994
995 cpu_buffer->pages = pages.next;
996 list_del(&pages);
997
998 rb_check_pages(cpu_buffer);
999
1000 return 0;
1001
1002 free_pages:
1003 list_for_each_entry_safe(bpage, tmp, &pages, list) {
1004 list_del_init(&bpage->list);
1005 free_buffer_page(bpage);
1006 }
1007 return -ENOMEM;
1008}
1009
1010static struct ring_buffer_per_cpu *
1011rb_allocate_cpu_buffer(struct ring_buffer *buffer, int cpu)
1012{
1013 struct ring_buffer_per_cpu *cpu_buffer;
1014 struct buffer_page *bpage;
1015 unsigned long addr;
1016 int ret;
1017
1018 cpu_buffer = kzalloc_node(ALIGN(sizeof(*cpu_buffer), cache_line_size()),
1019 GFP_KERNEL, cpu_to_node(cpu));
1020 if (!cpu_buffer)
1021 return NULL;
1022
1023 cpu_buffer->cpu = cpu;
1024 cpu_buffer->buffer = buffer;
1025 spin_lock_init(&cpu_buffer->reader_lock);
1026 lockdep_set_class(&cpu_buffer->reader_lock, buffer->reader_lock_key);
1027 cpu_buffer->lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
1028
1029 bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()),
1030 GFP_KERNEL, cpu_to_node(cpu));
1031 if (!bpage)
1032 goto fail_free_buffer;
1033
1034 rb_check_bpage(cpu_buffer, bpage);
1035
1036 cpu_buffer->reader_page = bpage;
1037 addr = __get_free_page(GFP_KERNEL);
1038 if (!addr)
1039 goto fail_free_reader;
1040 bpage->page = (void *)addr;
1041 rb_init_page(bpage->page);
1042
1043 INIT_LIST_HEAD(&cpu_buffer->reader_page->list);
1044
1045 ret = rb_allocate_pages(cpu_buffer, buffer->pages);
1046 if (ret < 0)
1047 goto fail_free_reader;
1048
1049 cpu_buffer->head_page
1050 = list_entry(cpu_buffer->pages, struct buffer_page, list);
1051 cpu_buffer->tail_page = cpu_buffer->commit_page = cpu_buffer->head_page;
1052
1053 rb_head_page_activate(cpu_buffer);
1054
1055 return cpu_buffer;
1056
1057 fail_free_reader:
1058 free_buffer_page(cpu_buffer->reader_page);
1059
1060 fail_free_buffer:
1061 kfree(cpu_buffer);
1062 return NULL;
1063}
1064
1065static void rb_free_cpu_buffer(struct ring_buffer_per_cpu *cpu_buffer)
1066{
1067 struct list_head *head = cpu_buffer->pages;
1068 struct buffer_page *bpage, *tmp;
1069
1070 free_buffer_page(cpu_buffer->reader_page);
1071
1072 rb_head_page_deactivate(cpu_buffer);
1073
1074 if (head) {
1075 list_for_each_entry_safe(bpage, tmp, head, list) {
1076 list_del_init(&bpage->list);
1077 free_buffer_page(bpage);
1078 }
1079 bpage = list_entry(head, struct buffer_page, list);
1080 free_buffer_page(bpage);
1081 }
1082
1083 kfree(cpu_buffer);
1084}
1085
1086#ifdef CONFIG_HOTPLUG_CPU
1087static int rb_cpu_notify(struct notifier_block *self,
1088 unsigned long action, void *hcpu);
1089#endif
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101struct ring_buffer *__ring_buffer_alloc(unsigned long size, unsigned flags,
1102 struct lock_class_key *key)
1103{
1104 struct ring_buffer *buffer;
1105 int bsize;
1106 int cpu;
1107
1108
1109 buffer = kzalloc(ALIGN(sizeof(*buffer), cache_line_size()),
1110 GFP_KERNEL);
1111 if (!buffer)
1112 return NULL;
1113
1114 if (!alloc_cpumask_var(&buffer->cpumask, GFP_KERNEL))
1115 goto fail_free_buffer;
1116
1117 buffer->pages = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
1118 buffer->flags = flags;
1119 buffer->clock = trace_clock_local;
1120 buffer->reader_lock_key = key;
1121
1122
1123 if (buffer->pages < 2)
1124 buffer->pages = 2;
1125
1126
1127
1128
1129
1130
1131#ifdef CONFIG_HOTPLUG_CPU
1132 get_online_cpus();
1133 cpumask_copy(buffer->cpumask, cpu_online_mask);
1134#else
1135 cpumask_copy(buffer->cpumask, cpu_possible_mask);
1136#endif
1137 buffer->cpus = nr_cpu_ids;
1138
1139 bsize = sizeof(void *) * nr_cpu_ids;
1140 buffer->buffers = kzalloc(ALIGN(bsize, cache_line_size()),
1141 GFP_KERNEL);
1142 if (!buffer->buffers)
1143 goto fail_free_cpumask;
1144
1145 for_each_buffer_cpu(buffer, cpu) {
1146 buffer->buffers[cpu] =
1147 rb_allocate_cpu_buffer(buffer, cpu);
1148 if (!buffer->buffers[cpu])
1149 goto fail_free_buffers;
1150 }
1151
1152#ifdef CONFIG_HOTPLUG_CPU
1153 buffer->cpu_notify.notifier_call = rb_cpu_notify;
1154 buffer->cpu_notify.priority = 0;
1155 register_cpu_notifier(&buffer->cpu_notify);
1156#endif
1157
1158 put_online_cpus();
1159 mutex_init(&buffer->mutex);
1160
1161 return buffer;
1162
1163 fail_free_buffers:
1164 for_each_buffer_cpu(buffer, cpu) {
1165 if (buffer->buffers[cpu])
1166 rb_free_cpu_buffer(buffer->buffers[cpu]);
1167 }
1168 kfree(buffer->buffers);
1169
1170 fail_free_cpumask:
1171 free_cpumask_var(buffer->cpumask);
1172 put_online_cpus();
1173
1174 fail_free_buffer:
1175 kfree(buffer);
1176 return NULL;
1177}
1178EXPORT_SYMBOL_GPL(__ring_buffer_alloc);
1179
1180
1181
1182
1183
1184void
1185ring_buffer_free(struct ring_buffer *buffer)
1186{
1187 int cpu;
1188
1189 get_online_cpus();
1190
1191#ifdef CONFIG_HOTPLUG_CPU
1192 unregister_cpu_notifier(&buffer->cpu_notify);
1193#endif
1194
1195 for_each_buffer_cpu(buffer, cpu)
1196 rb_free_cpu_buffer(buffer->buffers[cpu]);
1197
1198 put_online_cpus();
1199
1200 kfree(buffer->buffers);
1201 free_cpumask_var(buffer->cpumask);
1202
1203 kfree(buffer);
1204}
1205EXPORT_SYMBOL_GPL(ring_buffer_free);
1206
1207void ring_buffer_set_clock(struct ring_buffer *buffer,
1208 u64 (*clock)(void))
1209{
1210 buffer->clock = clock;
1211}
1212
1213static void rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer);
1214
1215static void
1216rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
1217{
1218 struct buffer_page *bpage;
1219 struct list_head *p;
1220 unsigned i;
1221
1222 spin_lock_irq(&cpu_buffer->reader_lock);
1223 rb_head_page_deactivate(cpu_buffer);
1224
1225 for (i = 0; i < nr_pages; i++) {
1226 if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
1227 goto out;
1228 p = cpu_buffer->pages->next;
1229 bpage = list_entry(p, struct buffer_page, list);
1230 list_del_init(&bpage->list);
1231 free_buffer_page(bpage);
1232 }
1233 if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
1234 goto out;
1235
1236 rb_reset_cpu(cpu_buffer);
1237 rb_check_pages(cpu_buffer);
1238
1239out:
1240 spin_unlock_irq(&cpu_buffer->reader_lock);
1241}
1242
1243static void
1244rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
1245 struct list_head *pages, unsigned nr_pages)
1246{
1247 struct buffer_page *bpage;
1248 struct list_head *p;
1249 unsigned i;
1250
1251 spin_lock_irq(&cpu_buffer->reader_lock);
1252 rb_head_page_deactivate(cpu_buffer);
1253
1254 for (i = 0; i < nr_pages; i++) {
1255 if (RB_WARN_ON(cpu_buffer, list_empty(pages)))
1256 goto out;
1257 p = pages->next;
1258 bpage = list_entry(p, struct buffer_page, list);
1259 list_del_init(&bpage->list);
1260 list_add_tail(&bpage->list, cpu_buffer->pages);
1261 }
1262 rb_reset_cpu(cpu_buffer);
1263 rb_check_pages(cpu_buffer);
1264
1265out:
1266 spin_unlock_irq(&cpu_buffer->reader_lock);
1267}
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size)
1279{
1280 struct ring_buffer_per_cpu *cpu_buffer;
1281 unsigned nr_pages, rm_pages, new_pages;
1282 struct buffer_page *bpage, *tmp;
1283 unsigned long buffer_size;
1284 unsigned long addr;
1285 LIST_HEAD(pages);
1286 int i, cpu;
1287
1288
1289
1290
1291 if (!buffer)
1292 return size;
1293
1294 size = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
1295 size *= BUF_PAGE_SIZE;
1296 buffer_size = buffer->pages * BUF_PAGE_SIZE;
1297
1298
1299 if (size < BUF_PAGE_SIZE * 2)
1300 size = BUF_PAGE_SIZE * 2;
1301
1302 if (size == buffer_size)
1303 return size;
1304
1305 atomic_inc(&buffer->record_disabled);
1306
1307
1308 synchronize_sched();
1309
1310 mutex_lock(&buffer->mutex);
1311 get_online_cpus();
1312
1313 nr_pages = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
1314
1315 if (size < buffer_size) {
1316
1317
1318 if (RB_WARN_ON(buffer, nr_pages >= buffer->pages))
1319 goto out_fail;
1320
1321 rm_pages = buffer->pages - nr_pages;
1322
1323 for_each_buffer_cpu(buffer, cpu) {
1324 cpu_buffer = buffer->buffers[cpu];
1325 rb_remove_pages(cpu_buffer, rm_pages);
1326 }
1327 goto out;
1328 }
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338 if (RB_WARN_ON(buffer, nr_pages <= buffer->pages))
1339 goto out_fail;
1340
1341 new_pages = nr_pages - buffer->pages;
1342
1343 for_each_buffer_cpu(buffer, cpu) {
1344 for (i = 0; i < new_pages; i++) {
1345 bpage = kzalloc_node(ALIGN(sizeof(*bpage),
1346 cache_line_size()),
1347 GFP_KERNEL, cpu_to_node(cpu));
1348 if (!bpage)
1349 goto free_pages;
1350 list_add(&bpage->list, &pages);
1351 addr = __get_free_page(GFP_KERNEL);
1352 if (!addr)
1353 goto free_pages;
1354 bpage->page = (void *)addr;
1355 rb_init_page(bpage->page);
1356 }
1357 }
1358
1359 for_each_buffer_cpu(buffer, cpu) {
1360 cpu_buffer = buffer->buffers[cpu];
1361 rb_insert_pages(cpu_buffer, &pages, new_pages);
1362 }
1363
1364 if (RB_WARN_ON(buffer, !list_empty(&pages)))
1365 goto out_fail;
1366
1367 out:
1368 buffer->pages = nr_pages;
1369 put_online_cpus();
1370 mutex_unlock(&buffer->mutex);
1371
1372 atomic_dec(&buffer->record_disabled);
1373
1374 return size;
1375
1376 free_pages:
1377 list_for_each_entry_safe(bpage, tmp, &pages, list) {
1378 list_del_init(&bpage->list);
1379 free_buffer_page(bpage);
1380 }
1381 put_online_cpus();
1382 mutex_unlock(&buffer->mutex);
1383 atomic_dec(&buffer->record_disabled);
1384 return -ENOMEM;
1385
1386
1387
1388
1389
1390 out_fail:
1391 put_online_cpus();
1392 mutex_unlock(&buffer->mutex);
1393 atomic_dec(&buffer->record_disabled);
1394 return -1;
1395}
1396EXPORT_SYMBOL_GPL(ring_buffer_resize);
1397
1398static inline void *
1399__rb_data_page_index(struct buffer_data_page *bpage, unsigned index)
1400{
1401 return bpage->data + index;
1402}
1403
1404static inline void *__rb_page_index(struct buffer_page *bpage, unsigned index)
1405{
1406 return bpage->page->data + index;
1407}
1408
1409static inline struct ring_buffer_event *
1410rb_reader_event(struct ring_buffer_per_cpu *cpu_buffer)
1411{
1412 return __rb_page_index(cpu_buffer->reader_page,
1413 cpu_buffer->reader_page->read);
1414}
1415
1416static inline struct ring_buffer_event *
1417rb_iter_head_event(struct ring_buffer_iter *iter)
1418{
1419 return __rb_page_index(iter->head_page, iter->head);
1420}
1421
1422static inline unsigned long rb_page_write(struct buffer_page *bpage)
1423{
1424 return local_read(&bpage->write) & RB_WRITE_MASK;
1425}
1426
1427static inline unsigned rb_page_commit(struct buffer_page *bpage)
1428{
1429 return local_read(&bpage->page->commit);
1430}
1431
1432static inline unsigned long rb_page_entries(struct buffer_page *bpage)
1433{
1434 return local_read(&bpage->entries) & RB_WRITE_MASK;
1435}
1436
1437
1438static inline unsigned rb_page_size(struct buffer_page *bpage)
1439{
1440 return rb_page_commit(bpage);
1441}
1442
1443static inline unsigned
1444rb_commit_index(struct ring_buffer_per_cpu *cpu_buffer)
1445{
1446 return rb_page_commit(cpu_buffer->commit_page);
1447}
1448
1449static inline unsigned
1450rb_event_index(struct ring_buffer_event *event)
1451{
1452 unsigned long addr = (unsigned long)event;
1453
1454 return (addr & ~PAGE_MASK) - BUF_PAGE_HDR_SIZE;
1455}
1456
1457static inline int
1458rb_event_is_commit(struct ring_buffer_per_cpu *cpu_buffer,
1459 struct ring_buffer_event *event)
1460{
1461 unsigned long addr = (unsigned long)event;
1462 unsigned long index;
1463
1464 index = rb_event_index(event);
1465 addr &= PAGE_MASK;
1466
1467 return cpu_buffer->commit_page->page == (void *)addr &&
1468 rb_commit_index(cpu_buffer) == index;
1469}
1470
1471static void
1472rb_set_commit_to_write(struct ring_buffer_per_cpu *cpu_buffer)
1473{
1474 unsigned long max_count;
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484 again:
1485 max_count = cpu_buffer->buffer->pages * 100;
1486
1487 while (cpu_buffer->commit_page != cpu_buffer->tail_page) {
1488 if (RB_WARN_ON(cpu_buffer, !(--max_count)))
1489 return;
1490 if (RB_WARN_ON(cpu_buffer,
1491 rb_is_reader_page(cpu_buffer->tail_page)))
1492 return;
1493 local_set(&cpu_buffer->commit_page->page->commit,
1494 rb_page_write(cpu_buffer->commit_page));
1495 rb_inc_page(cpu_buffer, &cpu_buffer->commit_page);
1496 cpu_buffer->write_stamp =
1497 cpu_buffer->commit_page->page->time_stamp;
1498
1499 barrier();
1500 }
1501 while (rb_commit_index(cpu_buffer) !=
1502 rb_page_write(cpu_buffer->commit_page)) {
1503
1504 local_set(&cpu_buffer->commit_page->page->commit,
1505 rb_page_write(cpu_buffer->commit_page));
1506 RB_WARN_ON(cpu_buffer,
1507 local_read(&cpu_buffer->commit_page->page->commit) &
1508 ~RB_WRITE_MASK);
1509 barrier();
1510 }
1511
1512
1513 barrier();
1514
1515
1516
1517
1518
1519
1520 if (unlikely(cpu_buffer->commit_page != cpu_buffer->tail_page))
1521 goto again;
1522}
1523
1524static void rb_reset_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
1525{
1526 cpu_buffer->read_stamp = cpu_buffer->reader_page->page->time_stamp;
1527 cpu_buffer->reader_page->read = 0;
1528}
1529
1530static void rb_inc_iter(struct ring_buffer_iter *iter)
1531{
1532 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
1533
1534
1535
1536
1537
1538
1539
1540 if (iter->head_page == cpu_buffer->reader_page)
1541 iter->head_page = rb_set_head_page(cpu_buffer);
1542 else
1543 rb_inc_page(cpu_buffer, &iter->head_page);
1544
1545 iter->read_stamp = iter->head_page->page->time_stamp;
1546 iter->head = 0;
1547}
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560static void
1561rb_update_event(struct ring_buffer_event *event,
1562 unsigned type, unsigned length)
1563{
1564 event->type_len = type;
1565
1566 switch (type) {
1567
1568 case RINGBUF_TYPE_PADDING:
1569 case RINGBUF_TYPE_TIME_EXTEND:
1570 case RINGBUF_TYPE_TIME_STAMP:
1571 break;
1572
1573 case 0:
1574 length -= RB_EVNT_HDR_SIZE;
1575 if (length > RB_MAX_SMALL_DATA || RB_FORCE_8BYTE_ALIGNMENT)
1576 event->array[0] = length;
1577 else
1578 event->type_len = DIV_ROUND_UP(length, RB_ALIGNMENT);
1579 break;
1580 default:
1581 BUG();
1582 }
1583}
1584
1585
1586
1587
1588
1589
1590
1591
1592static int
1593rb_handle_head_page(struct ring_buffer_per_cpu *cpu_buffer,
1594 struct buffer_page *tail_page,
1595 struct buffer_page *next_page)
1596{
1597 struct buffer_page *new_head;
1598 int entries;
1599 int type;
1600 int ret;
1601
1602 entries = rb_page_entries(next_page);
1603
1604
1605
1606
1607
1608
1609 type = rb_head_page_set_update(cpu_buffer, next_page, tail_page,
1610 RB_PAGE_HEAD);
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623 switch (type) {
1624 case RB_PAGE_HEAD:
1625
1626
1627
1628
1629
1630 local_add(entries, &cpu_buffer->overrun);
1631
1632
1633
1634
1635
1636
1637
1638 break;
1639
1640 case RB_PAGE_UPDATE:
1641
1642
1643
1644
1645 break;
1646 case RB_PAGE_NORMAL:
1647
1648
1649
1650
1651
1652 return 1;
1653 case RB_PAGE_MOVED:
1654
1655
1656
1657
1658
1659 return 1;
1660 default:
1661 RB_WARN_ON(cpu_buffer, 1);
1662 return -1;
1663 }
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679 new_head = next_page;
1680 rb_inc_page(cpu_buffer, &new_head);
1681
1682 ret = rb_head_page_set_head(cpu_buffer, new_head, next_page,
1683 RB_PAGE_NORMAL);
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693 switch (ret) {
1694 case RB_PAGE_HEAD:
1695 case RB_PAGE_NORMAL:
1696
1697 break;
1698 default:
1699 RB_WARN_ON(cpu_buffer, 1);
1700 return -1;
1701 }
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713 if (ret == RB_PAGE_NORMAL) {
1714
1715
1716
1717
1718 if (cpu_buffer->tail_page != tail_page &&
1719 cpu_buffer->tail_page != next_page)
1720 rb_head_page_set_normal(cpu_buffer, new_head,
1721 next_page,
1722 RB_PAGE_HEAD);
1723 }
1724
1725
1726
1727
1728
1729
1730 if (type == RB_PAGE_HEAD) {
1731 ret = rb_head_page_set_normal(cpu_buffer, next_page,
1732 tail_page,
1733 RB_PAGE_UPDATE);
1734 if (RB_WARN_ON(cpu_buffer,
1735 ret != RB_PAGE_UPDATE))
1736 return -1;
1737 }
1738
1739 return 0;
1740}
1741
1742static unsigned rb_calculate_event_length(unsigned length)
1743{
1744 struct ring_buffer_event event;
1745
1746
1747 if (!length)
1748 length = 1;
1749
1750 if (length > RB_MAX_SMALL_DATA || RB_FORCE_8BYTE_ALIGNMENT)
1751 length += sizeof(event.array[0]);
1752
1753 length += RB_EVNT_HDR_SIZE;
1754 length = ALIGN(length, RB_ARCH_ALIGNMENT);
1755
1756 return length;
1757}
1758
1759static inline void
1760rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
1761 struct buffer_page *tail_page,
1762 unsigned long tail, unsigned long length)
1763{
1764 struct ring_buffer_event *event;
1765
1766
1767
1768
1769
1770 if (tail >= BUF_PAGE_SIZE) {
1771
1772
1773
1774
1775
1776 if (tail == BUF_PAGE_SIZE)
1777 tail_page->real_end = 0;
1778
1779 local_sub(length, &tail_page->write);
1780 return;
1781 }
1782
1783 event = __rb_page_index(tail_page, tail);
1784 kmemcheck_annotate_bitfield(event, bitfield);
1785
1786
1787
1788
1789
1790
1791 tail_page->real_end = tail;
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804 if (tail > (BUF_PAGE_SIZE - RB_EVNT_MIN_SIZE)) {
1805
1806
1807
1808 rb_event_set_padding(event);
1809
1810
1811 local_sub(length, &tail_page->write);
1812 return;
1813 }
1814
1815
1816 event->array[0] = (BUF_PAGE_SIZE - tail) - RB_EVNT_HDR_SIZE;
1817 event->type_len = RINGBUF_TYPE_PADDING;
1818
1819 event->time_delta = 1;
1820
1821
1822 length = (tail + length) - BUF_PAGE_SIZE;
1823 local_sub(length, &tail_page->write);
1824}
1825
1826static struct ring_buffer_event *
1827rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
1828 unsigned long length, unsigned long tail,
1829 struct buffer_page *tail_page, u64 *ts)
1830{
1831 struct buffer_page *commit_page = cpu_buffer->commit_page;
1832 struct ring_buffer *buffer = cpu_buffer->buffer;
1833 struct buffer_page *next_page;
1834 int ret;
1835
1836 next_page = tail_page;
1837
1838 rb_inc_page(cpu_buffer, &next_page);
1839
1840
1841
1842
1843
1844
1845 if (unlikely(next_page == commit_page)) {
1846 local_inc(&cpu_buffer->commit_overrun);
1847 goto out_reset;
1848 }
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864 if (rb_is_head_page(cpu_buffer, next_page, &tail_page->list)) {
1865
1866
1867
1868
1869
1870 if (!rb_is_reader_page(cpu_buffer->commit_page)) {
1871
1872
1873
1874
1875 if (!(buffer->flags & RB_FL_OVERWRITE))
1876 goto out_reset;
1877
1878 ret = rb_handle_head_page(cpu_buffer,
1879 tail_page,
1880 next_page);
1881 if (ret < 0)
1882 goto out_reset;
1883 if (ret)
1884 goto out_again;
1885 } else {
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896 if (unlikely((cpu_buffer->commit_page !=
1897 cpu_buffer->tail_page) &&
1898 (cpu_buffer->commit_page ==
1899 cpu_buffer->reader_page))) {
1900 local_inc(&cpu_buffer->commit_overrun);
1901 goto out_reset;
1902 }
1903 }
1904 }
1905
1906 ret = rb_tail_page_update(cpu_buffer, tail_page, next_page);
1907 if (ret) {
1908
1909
1910
1911
1912 *ts = rb_time_stamp(buffer);
1913 next_page->page->time_stamp = *ts;
1914 }
1915
1916 out_again:
1917
1918 rb_reset_tail(cpu_buffer, tail_page, tail, length);
1919
1920
1921 return ERR_PTR(-EAGAIN);
1922
1923 out_reset:
1924
1925 rb_reset_tail(cpu_buffer, tail_page, tail, length);
1926
1927 return NULL;
1928}
1929
1930static struct ring_buffer_event *
1931__rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
1932 unsigned type, unsigned long length, u64 *ts)
1933{
1934 struct buffer_page *tail_page;
1935 struct ring_buffer_event *event;
1936 unsigned long tail, write;
1937
1938 tail_page = cpu_buffer->tail_page;
1939 write = local_add_return(length, &tail_page->write);
1940
1941
1942 write &= RB_WRITE_MASK;
1943 tail = write - length;
1944
1945
1946 if (write > BUF_PAGE_SIZE)
1947 return rb_move_tail(cpu_buffer, length, tail,
1948 tail_page, ts);
1949
1950
1951
1952 event = __rb_page_index(tail_page, tail);
1953 kmemcheck_annotate_bitfield(event, bitfield);
1954 rb_update_event(event, type, length);
1955
1956
1957 if (likely(!type))
1958 local_inc(&tail_page->entries);
1959
1960
1961
1962
1963
1964 if (!tail)
1965 tail_page->page->time_stamp = *ts;
1966
1967 return event;
1968}
1969
1970static inline int
1971rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer,
1972 struct ring_buffer_event *event)
1973{
1974 unsigned long new_index, old_index;
1975 struct buffer_page *bpage;
1976 unsigned long index;
1977 unsigned long addr;
1978
1979 new_index = rb_event_index(event);
1980 old_index = new_index + rb_event_length(event);
1981 addr = (unsigned long)event;
1982 addr &= PAGE_MASK;
1983
1984 bpage = cpu_buffer->tail_page;
1985
1986 if (bpage->page == (void *)addr && rb_page_write(bpage) == old_index) {
1987 unsigned long write_mask =
1988 local_read(&bpage->write) & ~RB_WRITE_MASK;
1989
1990
1991
1992
1993
1994
1995 old_index += write_mask;
1996 new_index += write_mask;
1997 index = local_cmpxchg(&bpage->write, old_index, new_index);
1998 if (index == old_index)
1999 return 1;
2000 }
2001
2002
2003 return 0;
2004}
2005
2006static int
2007rb_add_time_stamp(struct ring_buffer_per_cpu *cpu_buffer,
2008 u64 *ts, u64 *delta)
2009{
2010 struct ring_buffer_event *event;
2011 int ret;
2012
2013 WARN_ONCE(*delta > (1ULL << 59),
2014 KERN_WARNING "Delta way too big! %llu ts=%llu write stamp = %llu\n",
2015 (unsigned long long)*delta,
2016 (unsigned long long)*ts,
2017 (unsigned long long)cpu_buffer->write_stamp);
2018
2019
2020
2021
2022
2023 event = __rb_reserve_next(cpu_buffer,
2024 RINGBUF_TYPE_TIME_EXTEND,
2025 RB_LEN_TIME_EXTEND,
2026 ts);
2027 if (!event)
2028 return -EBUSY;
2029
2030 if (PTR_ERR(event) == -EAGAIN)
2031 return -EAGAIN;
2032
2033
2034 if (rb_event_is_commit(cpu_buffer, event)) {
2035
2036
2037
2038
2039
2040 if (rb_event_index(event)) {
2041 event->time_delta = *delta & TS_MASK;
2042 event->array[0] = *delta >> TS_SHIFT;
2043 } else {
2044
2045 if (!rb_try_to_discard(cpu_buffer, event)) {
2046
2047 event->time_delta = 0;
2048 event->array[0] = 0;
2049 }
2050 }
2051 cpu_buffer->write_stamp = *ts;
2052
2053 ret = 1;
2054 } else {
2055
2056 if (!rb_try_to_discard(cpu_buffer, event)) {
2057
2058 event->time_delta = 0;
2059 event->array[0] = 0;
2060 }
2061 ret = 0;
2062 }
2063
2064 *delta = 0;
2065
2066 return ret;
2067}
2068
2069static void rb_start_commit(struct ring_buffer_per_cpu *cpu_buffer)
2070{
2071 local_inc(&cpu_buffer->committing);
2072 local_inc(&cpu_buffer->commits);
2073}
2074
2075static void rb_end_commit(struct ring_buffer_per_cpu *cpu_buffer)
2076{
2077 unsigned long commits;
2078
2079 if (RB_WARN_ON(cpu_buffer,
2080 !local_read(&cpu_buffer->committing)))
2081 return;
2082
2083 again:
2084 commits = local_read(&cpu_buffer->commits);
2085
2086 barrier();
2087 if (local_read(&cpu_buffer->committing) == 1)
2088 rb_set_commit_to_write(cpu_buffer);
2089
2090 local_dec(&cpu_buffer->committing);
2091
2092
2093 barrier();
2094
2095
2096
2097
2098
2099
2100 if (unlikely(local_read(&cpu_buffer->commits) != commits) &&
2101 !local_read(&cpu_buffer->committing)) {
2102 local_inc(&cpu_buffer->committing);
2103 goto again;
2104 }
2105}
2106
2107static struct ring_buffer_event *
2108rb_reserve_next_event(struct ring_buffer *buffer,
2109 struct ring_buffer_per_cpu *cpu_buffer,
2110 unsigned long length)
2111{
2112 struct ring_buffer_event *event;
2113 u64 ts, delta = 0;
2114 int commit = 0;
2115 int nr_loops = 0;
2116
2117 rb_start_commit(cpu_buffer);
2118
2119#ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
2120
2121
2122
2123
2124
2125
2126 barrier();
2127 if (unlikely(ACCESS_ONCE(cpu_buffer->buffer) != buffer)) {
2128 local_dec(&cpu_buffer->committing);
2129 local_dec(&cpu_buffer->commits);
2130 return NULL;
2131 }
2132#endif
2133
2134 length = rb_calculate_event_length(length);
2135 again:
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145 if (RB_WARN_ON(cpu_buffer, ++nr_loops > 1000))
2146 goto out_fail;
2147
2148 ts = rb_time_stamp(cpu_buffer->buffer);
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158 if (likely(cpu_buffer->tail_page == cpu_buffer->commit_page &&
2159 rb_page_write(cpu_buffer->tail_page) ==
2160 rb_commit_index(cpu_buffer))) {
2161 u64 diff;
2162
2163 diff = ts - cpu_buffer->write_stamp;
2164
2165
2166 barrier();
2167
2168
2169 if (unlikely(ts < cpu_buffer->write_stamp))
2170 goto get_event;
2171
2172 delta = diff;
2173 if (unlikely(test_time_stamp(delta))) {
2174
2175 commit = rb_add_time_stamp(cpu_buffer, &ts, &delta);
2176 if (commit == -EBUSY)
2177 goto out_fail;
2178
2179 if (commit == -EAGAIN)
2180 goto again;
2181
2182 RB_WARN_ON(cpu_buffer, commit < 0);
2183 }
2184 }
2185
2186 get_event:
2187 event = __rb_reserve_next(cpu_buffer, 0, length, &ts);
2188 if (unlikely(PTR_ERR(event) == -EAGAIN))
2189 goto again;
2190
2191 if (!event)
2192 goto out_fail;
2193
2194 if (!rb_event_is_commit(cpu_buffer, event))
2195 delta = 0;
2196
2197 event->time_delta = delta;
2198
2199 return event;
2200
2201 out_fail:
2202 rb_end_commit(cpu_buffer);
2203 return NULL;
2204}
2205
2206#ifdef CONFIG_TRACING
2207
2208#define TRACE_RECURSIVE_DEPTH 16
2209
2210static int trace_recursive_lock(void)
2211{
2212 current->trace_recursion++;
2213
2214 if (likely(current->trace_recursion < TRACE_RECURSIVE_DEPTH))
2215 return 0;
2216
2217
2218 tracing_off_permanent();
2219
2220 printk_once(KERN_WARNING "Tracing recursion: depth[%ld]:"
2221 "HC[%lu]:SC[%lu]:NMI[%lu]\n",
2222 current->trace_recursion,
2223 hardirq_count() >> HARDIRQ_SHIFT,
2224 softirq_count() >> SOFTIRQ_SHIFT,
2225 in_nmi());
2226
2227 WARN_ON_ONCE(1);
2228 return -1;
2229}
2230
2231static void trace_recursive_unlock(void)
2232{
2233 WARN_ON_ONCE(!current->trace_recursion);
2234
2235 current->trace_recursion--;
2236}
2237
2238#else
2239
2240#define trace_recursive_lock() (0)
2241#define trace_recursive_unlock() do { } while (0)
2242
2243#endif
2244
2245static DEFINE_PER_CPU(int, rb_need_resched);
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262struct ring_buffer_event *
2263ring_buffer_lock_reserve(struct ring_buffer *buffer, unsigned long length)
2264{
2265 struct ring_buffer_per_cpu *cpu_buffer;
2266 struct ring_buffer_event *event;
2267 int cpu, resched;
2268
2269 if (ring_buffer_flags != RB_BUFFERS_ON)
2270 return NULL;
2271
2272
2273 resched = ftrace_preempt_disable();
2274
2275 if (atomic_read(&buffer->record_disabled))
2276 goto out_nocheck;
2277
2278 if (trace_recursive_lock())
2279 goto out_nocheck;
2280
2281 cpu = raw_smp_processor_id();
2282
2283 if (!cpumask_test_cpu(cpu, buffer->cpumask))
2284 goto out;
2285
2286 cpu_buffer = buffer->buffers[cpu];
2287
2288 if (atomic_read(&cpu_buffer->record_disabled))
2289 goto out;
2290
2291 if (length > BUF_MAX_DATA_SIZE)
2292 goto out;
2293
2294 event = rb_reserve_next_event(buffer, cpu_buffer, length);
2295 if (!event)
2296 goto out;
2297
2298
2299
2300
2301
2302
2303 if (preempt_count() == 1)
2304 per_cpu(rb_need_resched, cpu) = resched;
2305
2306 return event;
2307
2308 out:
2309 trace_recursive_unlock();
2310
2311 out_nocheck:
2312 ftrace_preempt_enable(resched);
2313 return NULL;
2314}
2315EXPORT_SYMBOL_GPL(ring_buffer_lock_reserve);
2316
2317static void
2318rb_update_write_stamp(struct ring_buffer_per_cpu *cpu_buffer,
2319 struct ring_buffer_event *event)
2320{
2321
2322
2323
2324
2325 if (rb_event_is_commit(cpu_buffer, event))
2326 cpu_buffer->write_stamp += event->time_delta;
2327}
2328
2329static void rb_commit(struct ring_buffer_per_cpu *cpu_buffer,
2330 struct ring_buffer_event *event)
2331{
2332 local_inc(&cpu_buffer->entries);
2333 rb_update_write_stamp(cpu_buffer, event);
2334 rb_end_commit(cpu_buffer);
2335}
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346int ring_buffer_unlock_commit(struct ring_buffer *buffer,
2347 struct ring_buffer_event *event)
2348{
2349 struct ring_buffer_per_cpu *cpu_buffer;
2350 int cpu = raw_smp_processor_id();
2351
2352 cpu_buffer = buffer->buffers[cpu];
2353
2354 rb_commit(cpu_buffer, event);
2355
2356 trace_recursive_unlock();
2357
2358
2359
2360
2361 if (preempt_count() == 1)
2362 ftrace_preempt_enable(per_cpu(rb_need_resched, cpu));
2363 else
2364 preempt_enable_no_resched_notrace();
2365
2366 return 0;
2367}
2368EXPORT_SYMBOL_GPL(ring_buffer_unlock_commit);
2369
2370static inline void rb_event_discard(struct ring_buffer_event *event)
2371{
2372
2373 event->array[0] = rb_event_data_length(event) - RB_EVNT_HDR_SIZE;
2374 event->type_len = RINGBUF_TYPE_PADDING;
2375
2376 if (!event->time_delta)
2377 event->time_delta = 1;
2378}
2379
2380
2381
2382
2383
2384
2385
2386static inline void
2387rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer,
2388 struct ring_buffer_event *event)
2389{
2390 unsigned long addr = (unsigned long)event;
2391 struct buffer_page *bpage = cpu_buffer->commit_page;
2392 struct buffer_page *start;
2393
2394 addr &= PAGE_MASK;
2395
2396
2397 if (likely(bpage->page == (void *)addr)) {
2398 local_dec(&bpage->entries);
2399 return;
2400 }
2401
2402
2403
2404
2405
2406 rb_inc_page(cpu_buffer, &bpage);
2407 start = bpage;
2408 do {
2409 if (bpage->page == (void *)addr) {
2410 local_dec(&bpage->entries);
2411 return;
2412 }
2413 rb_inc_page(cpu_buffer, &bpage);
2414 } while (bpage != start);
2415
2416
2417 RB_WARN_ON(cpu_buffer, 1);
2418}
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439void ring_buffer_discard_commit(struct ring_buffer *buffer,
2440 struct ring_buffer_event *event)
2441{
2442 struct ring_buffer_per_cpu *cpu_buffer;
2443 int cpu;
2444
2445
2446 rb_event_discard(event);
2447
2448 cpu = smp_processor_id();
2449 cpu_buffer = buffer->buffers[cpu];
2450
2451
2452
2453
2454
2455
2456 RB_WARN_ON(buffer, !local_read(&cpu_buffer->committing));
2457
2458 rb_decrement_entry(cpu_buffer, event);
2459 if (rb_try_to_discard(cpu_buffer, event))
2460 goto out;
2461
2462
2463
2464
2465
2466 rb_update_write_stamp(cpu_buffer, event);
2467 out:
2468 rb_end_commit(cpu_buffer);
2469
2470 trace_recursive_unlock();
2471
2472
2473
2474
2475 if (preempt_count() == 1)
2476 ftrace_preempt_enable(per_cpu(rb_need_resched, cpu));
2477 else
2478 preempt_enable_no_resched_notrace();
2479
2480}
2481EXPORT_SYMBOL_GPL(ring_buffer_discard_commit);
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496int ring_buffer_write(struct ring_buffer *buffer,
2497 unsigned long length,
2498 void *data)
2499{
2500 struct ring_buffer_per_cpu *cpu_buffer;
2501 struct ring_buffer_event *event;
2502 void *body;
2503 int ret = -EBUSY;
2504 int cpu, resched;
2505
2506 if (ring_buffer_flags != RB_BUFFERS_ON)
2507 return -EBUSY;
2508
2509 resched = ftrace_preempt_disable();
2510
2511 if (atomic_read(&buffer->record_disabled))
2512 goto out;
2513
2514 cpu = raw_smp_processor_id();
2515
2516 if (!cpumask_test_cpu(cpu, buffer->cpumask))
2517 goto out;
2518
2519 cpu_buffer = buffer->buffers[cpu];
2520
2521 if (atomic_read(&cpu_buffer->record_disabled))
2522 goto out;
2523
2524 if (length > BUF_MAX_DATA_SIZE)
2525 goto out;
2526
2527 event = rb_reserve_next_event(buffer, cpu_buffer, length);
2528 if (!event)
2529 goto out;
2530
2531 body = rb_event_data(event);
2532
2533 memcpy(body, data, length);
2534
2535 rb_commit(cpu_buffer, event);
2536
2537 ret = 0;
2538 out:
2539 ftrace_preempt_enable(resched);
2540
2541 return ret;
2542}
2543EXPORT_SYMBOL_GPL(ring_buffer_write);
2544
2545static int rb_per_cpu_empty(struct ring_buffer_per_cpu *cpu_buffer)
2546{
2547 struct buffer_page *reader = cpu_buffer->reader_page;
2548 struct buffer_page *head = rb_set_head_page(cpu_buffer);
2549 struct buffer_page *commit = cpu_buffer->commit_page;
2550
2551
2552 if (unlikely(!head))
2553 return 1;
2554
2555 return reader->read == rb_page_commit(reader) &&
2556 (commit == reader ||
2557 (commit == head &&
2558 head->read == rb_page_commit(commit)));
2559}
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570void ring_buffer_record_disable(struct ring_buffer *buffer)
2571{
2572 atomic_inc(&buffer->record_disabled);
2573}
2574EXPORT_SYMBOL_GPL(ring_buffer_record_disable);
2575
2576
2577
2578
2579
2580
2581
2582
2583void ring_buffer_record_enable(struct ring_buffer *buffer)
2584{
2585 atomic_dec(&buffer->record_disabled);
2586}
2587EXPORT_SYMBOL_GPL(ring_buffer_record_enable);
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599void ring_buffer_record_disable_cpu(struct ring_buffer *buffer, int cpu)
2600{
2601 struct ring_buffer_per_cpu *cpu_buffer;
2602
2603 if (!cpumask_test_cpu(cpu, buffer->cpumask))
2604 return;
2605
2606 cpu_buffer = buffer->buffers[cpu];
2607 atomic_inc(&cpu_buffer->record_disabled);
2608}
2609EXPORT_SYMBOL_GPL(ring_buffer_record_disable_cpu);
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619void ring_buffer_record_enable_cpu(struct ring_buffer *buffer, int cpu)
2620{
2621 struct ring_buffer_per_cpu *cpu_buffer;
2622
2623 if (!cpumask_test_cpu(cpu, buffer->cpumask))
2624 return;
2625
2626 cpu_buffer = buffer->buffers[cpu];
2627 atomic_dec(&cpu_buffer->record_disabled);
2628}
2629EXPORT_SYMBOL_GPL(ring_buffer_record_enable_cpu);
2630
2631
2632
2633
2634
2635
2636unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu)
2637{
2638 struct ring_buffer_per_cpu *cpu_buffer;
2639 unsigned long ret;
2640
2641 if (!cpumask_test_cpu(cpu, buffer->cpumask))
2642 return 0;
2643
2644 cpu_buffer = buffer->buffers[cpu];
2645 ret = (local_read(&cpu_buffer->entries) - local_read(&cpu_buffer->overrun))
2646 - cpu_buffer->read;
2647
2648 return ret;
2649}
2650EXPORT_SYMBOL_GPL(ring_buffer_entries_cpu);
2651
2652
2653
2654
2655
2656
2657unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu)
2658{
2659 struct ring_buffer_per_cpu *cpu_buffer;
2660 unsigned long ret;
2661
2662 if (!cpumask_test_cpu(cpu, buffer->cpumask))
2663 return 0;
2664
2665 cpu_buffer = buffer->buffers[cpu];
2666 ret = local_read(&cpu_buffer->overrun);
2667
2668 return ret;
2669}
2670EXPORT_SYMBOL_GPL(ring_buffer_overrun_cpu);
2671
2672
2673
2674
2675
2676
2677unsigned long
2678ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu)
2679{
2680 struct ring_buffer_per_cpu *cpu_buffer;
2681 unsigned long ret;
2682
2683 if (!cpumask_test_cpu(cpu, buffer->cpumask))
2684 return 0;
2685
2686 cpu_buffer = buffer->buffers[cpu];
2687 ret = local_read(&cpu_buffer->commit_overrun);
2688
2689 return ret;
2690}
2691EXPORT_SYMBOL_GPL(ring_buffer_commit_overrun_cpu);
2692
2693
2694
2695
2696
2697
2698
2699
2700unsigned long ring_buffer_entries(struct ring_buffer *buffer)
2701{
2702 struct ring_buffer_per_cpu *cpu_buffer;
2703 unsigned long entries = 0;
2704 int cpu;
2705
2706
2707 for_each_buffer_cpu(buffer, cpu) {
2708 cpu_buffer = buffer->buffers[cpu];
2709 entries += (local_read(&cpu_buffer->entries) -
2710 local_read(&cpu_buffer->overrun)) - cpu_buffer->read;
2711 }
2712
2713 return entries;
2714}
2715EXPORT_SYMBOL_GPL(ring_buffer_entries);
2716
2717
2718
2719
2720
2721
2722
2723
2724unsigned long ring_buffer_overruns(struct ring_buffer *buffer)
2725{
2726 struct ring_buffer_per_cpu *cpu_buffer;
2727 unsigned long overruns = 0;
2728 int cpu;
2729
2730
2731 for_each_buffer_cpu(buffer, cpu) {
2732 cpu_buffer = buffer->buffers[cpu];
2733 overruns += local_read(&cpu_buffer->overrun);
2734 }
2735
2736 return overruns;
2737}
2738EXPORT_SYMBOL_GPL(ring_buffer_overruns);
2739
2740static void rb_iter_reset(struct ring_buffer_iter *iter)
2741{
2742 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
2743
2744
2745 if (list_empty(&cpu_buffer->reader_page->list)) {
2746 iter->head_page = rb_set_head_page(cpu_buffer);
2747 if (unlikely(!iter->head_page))
2748 return;
2749 iter->head = iter->head_page->read;
2750 } else {
2751 iter->head_page = cpu_buffer->reader_page;
2752 iter->head = cpu_buffer->reader_page->read;
2753 }
2754 if (iter->head)
2755 iter->read_stamp = cpu_buffer->read_stamp;
2756 else
2757 iter->read_stamp = iter->head_page->page->time_stamp;
2758 iter->cache_reader_page = cpu_buffer->reader_page;
2759 iter->cache_read = cpu_buffer->read;
2760}
2761
2762
2763
2764
2765
2766
2767
2768
2769void ring_buffer_iter_reset(struct ring_buffer_iter *iter)
2770{
2771 struct ring_buffer_per_cpu *cpu_buffer;
2772 unsigned long flags;
2773
2774 if (!iter)
2775 return;
2776
2777 cpu_buffer = iter->cpu_buffer;
2778
2779 spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
2780 rb_iter_reset(iter);
2781 spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
2782}
2783EXPORT_SYMBOL_GPL(ring_buffer_iter_reset);
2784
2785
2786
2787
2788
2789int ring_buffer_iter_empty(struct ring_buffer_iter *iter)
2790{
2791 struct ring_buffer_per_cpu *cpu_buffer;
2792
2793 cpu_buffer = iter->cpu_buffer;
2794
2795 return iter->head_page == cpu_buffer->commit_page &&
2796 iter->head == rb_commit_index(cpu_buffer);
2797}
2798EXPORT_SYMBOL_GPL(ring_buffer_iter_empty);
2799
2800static void
2801rb_update_read_stamp(struct ring_buffer_per_cpu *cpu_buffer,
2802 struct ring_buffer_event *event)
2803{
2804 u64 delta;
2805
2806 switch (event->type_len) {
2807 case RINGBUF_TYPE_PADDING:
2808 return;
2809
2810 case RINGBUF_TYPE_TIME_EXTEND:
2811 delta = event->array[0];
2812 delta <<= TS_SHIFT;
2813 delta += event->time_delta;
2814 cpu_buffer->read_stamp += delta;
2815 return;
2816
2817 case RINGBUF_TYPE_TIME_STAMP:
2818
2819 return;
2820
2821 case RINGBUF_TYPE_DATA:
2822 cpu_buffer->read_stamp += event->time_delta;
2823 return;
2824
2825 default:
2826 BUG();
2827 }
2828 return;
2829}
2830
2831static void
2832rb_update_iter_read_stamp(struct ring_buffer_iter *iter,
2833 struct ring_buffer_event *event)
2834{
2835 u64 delta;
2836
2837 switch (event->type_len) {
2838 case RINGBUF_TYPE_PADDING:
2839 return;
2840
2841 case RINGBUF_TYPE_TIME_EXTEND:
2842 delta = event->array[0];
2843 delta <<= TS_SHIFT;
2844 delta += event->time_delta;
2845 iter->read_stamp += delta;
2846 return;
2847
2848 case RINGBUF_TYPE_TIME_STAMP:
2849
2850 return;
2851
2852 case RINGBUF_TYPE_DATA:
2853 iter->read_stamp += event->time_delta;
2854 return;
2855
2856 default:
2857 BUG();
2858 }
2859 return;
2860}
2861
2862static struct buffer_page *
2863rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
2864{
2865 struct buffer_page *reader = NULL;
2866 unsigned long overwrite;
2867 unsigned long flags;
2868 int nr_loops = 0;
2869 int ret;
2870
2871 local_irq_save(flags);
2872 arch_spin_lock(&cpu_buffer->lock);
2873
2874 again:
2875
2876
2877
2878
2879
2880
2881 if (RB_WARN_ON(cpu_buffer, ++nr_loops > 3)) {
2882 reader = NULL;
2883 goto out;
2884 }
2885
2886 reader = cpu_buffer->reader_page;
2887
2888
2889 if (cpu_buffer->reader_page->read < rb_page_size(reader))
2890 goto out;
2891
2892
2893 if (RB_WARN_ON(cpu_buffer,
2894 cpu_buffer->reader_page->read > rb_page_size(reader)))
2895 goto out;
2896
2897
2898 reader = NULL;
2899 if (cpu_buffer->commit_page == cpu_buffer->reader_page)
2900 goto out;
2901
2902
2903
2904
2905 local_set(&cpu_buffer->reader_page->write, 0);
2906 local_set(&cpu_buffer->reader_page->entries, 0);
2907 local_set(&cpu_buffer->reader_page->page->commit, 0);
2908 cpu_buffer->reader_page->real_end = 0;
2909
2910 spin:
2911
2912
2913
2914 reader = rb_set_head_page(cpu_buffer);
2915 cpu_buffer->reader_page->list.next = rb_list_head(reader->list.next);
2916 cpu_buffer->reader_page->list.prev = reader->list.prev;
2917
2918
2919
2920
2921
2922
2923 cpu_buffer->pages = reader->list.prev;
2924
2925
2926 rb_set_list_to_head(cpu_buffer, &cpu_buffer->reader_page->list);
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937 smp_mb();
2938 overwrite = local_read(&(cpu_buffer->overrun));
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951 ret = rb_head_page_replace(reader, cpu_buffer->reader_page);
2952
2953
2954
2955
2956 if (!ret)
2957 goto spin;
2958
2959
2960
2961
2962
2963
2964 rb_list_head(reader->list.next)->prev = &cpu_buffer->reader_page->list;
2965 rb_inc_page(cpu_buffer, &cpu_buffer->head_page);
2966
2967
2968 cpu_buffer->reader_page = reader;
2969 rb_reset_reader_page(cpu_buffer);
2970
2971 if (overwrite != cpu_buffer->last_overrun) {
2972 cpu_buffer->lost_events = overwrite - cpu_buffer->last_overrun;
2973 cpu_buffer->last_overrun = overwrite;
2974 }
2975
2976 goto again;
2977
2978 out:
2979 arch_spin_unlock(&cpu_buffer->lock);
2980 local_irq_restore(flags);
2981
2982 return reader;
2983}
2984
2985static void rb_advance_reader(struct ring_buffer_per_cpu *cpu_buffer)
2986{
2987 struct ring_buffer_event *event;
2988 struct buffer_page *reader;
2989 unsigned length;
2990
2991 reader = rb_get_reader_page(cpu_buffer);
2992
2993
2994 if (RB_WARN_ON(cpu_buffer, !reader))
2995 return;
2996
2997 event = rb_reader_event(cpu_buffer);
2998
2999 if (event->type_len <= RINGBUF_TYPE_DATA_TYPE_LEN_MAX)
3000 cpu_buffer->read++;
3001
3002 rb_update_read_stamp(cpu_buffer, event);
3003
3004 length = rb_event_length(event);
3005 cpu_buffer->reader_page->read += length;
3006}
3007
3008static void rb_advance_iter(struct ring_buffer_iter *iter)
3009{
3010 struct ring_buffer *buffer;
3011 struct ring_buffer_per_cpu *cpu_buffer;
3012 struct ring_buffer_event *event;
3013 unsigned length;
3014
3015 cpu_buffer = iter->cpu_buffer;
3016 buffer = cpu_buffer->buffer;
3017
3018
3019
3020
3021 if (iter->head >= rb_page_size(iter->head_page)) {
3022
3023 if (iter->head_page == cpu_buffer->commit_page)
3024 return;
3025 rb_inc_iter(iter);
3026 return;
3027 }
3028
3029 event = rb_iter_head_event(iter);
3030
3031 length = rb_event_length(event);
3032
3033
3034
3035
3036
3037 if (RB_WARN_ON(cpu_buffer,
3038 (iter->head_page == cpu_buffer->commit_page) &&
3039 (iter->head + length > rb_commit_index(cpu_buffer))))
3040 return;
3041
3042 rb_update_iter_read_stamp(iter, event);
3043
3044 iter->head += length;
3045
3046
3047 if ((iter->head >= rb_page_size(iter->head_page)) &&
3048 (iter->head_page != cpu_buffer->commit_page))
3049 rb_advance_iter(iter);
3050}
3051
3052static int rb_lost_events(struct ring_buffer_per_cpu *cpu_buffer)
3053{
3054 return cpu_buffer->lost_events;
3055}
3056
3057static struct ring_buffer_event *
3058rb_buffer_peek(struct ring_buffer_per_cpu *cpu_buffer, u64 *ts,
3059 unsigned long *lost_events)
3060{
3061 struct ring_buffer_event *event;
3062 struct buffer_page *reader;
3063 int nr_loops = 0;
3064
3065 again:
3066
3067
3068
3069
3070
3071
3072 if (RB_WARN_ON(cpu_buffer, ++nr_loops > RB_TIMESTAMPS_PER_PAGE))
3073 return NULL;
3074
3075 reader = rb_get_reader_page(cpu_buffer);
3076 if (!reader)
3077 return NULL;
3078
3079 event = rb_reader_event(cpu_buffer);
3080
3081 switch (event->type_len) {
3082 case RINGBUF_TYPE_PADDING:
3083 if (rb_null_event(event))
3084 RB_WARN_ON(cpu_buffer, 1);
3085
3086
3087
3088
3089
3090
3091
3092
3093 return event;
3094
3095 case RINGBUF_TYPE_TIME_EXTEND:
3096
3097 rb_advance_reader(cpu_buffer);
3098 goto again;
3099
3100 case RINGBUF_TYPE_TIME_STAMP:
3101
3102 rb_advance_reader(cpu_buffer);
3103 goto again;
3104
3105 case RINGBUF_TYPE_DATA:
3106 if (ts) {
3107 *ts = cpu_buffer->read_stamp + event->time_delta;
3108 ring_buffer_normalize_time_stamp(cpu_buffer->buffer,
3109 cpu_buffer->cpu, ts);
3110 }
3111 if (lost_events)
3112 *lost_events = rb_lost_events(cpu_buffer);
3113 return event;
3114
3115 default:
3116 BUG();
3117 }
3118
3119 return NULL;
3120}
3121EXPORT_SYMBOL_GPL(ring_buffer_peek);
3122
3123static struct ring_buffer_event *
3124rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts)
3125{
3126 struct ring_buffer *buffer;
3127 struct ring_buffer_per_cpu *cpu_buffer;
3128 struct ring_buffer_event *event;
3129 int nr_loops = 0;
3130
3131 cpu_buffer = iter->cpu_buffer;
3132 buffer = cpu_buffer->buffer;
3133
3134
3135
3136
3137
3138
3139 if (unlikely(iter->cache_read != cpu_buffer->read ||
3140 iter->cache_reader_page != cpu_buffer->reader_page))
3141 rb_iter_reset(iter);
3142
3143 again:
3144 if (ring_buffer_iter_empty(iter))
3145 return NULL;
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155 if (RB_WARN_ON(cpu_buffer, ++nr_loops > RB_TIMESTAMPS_PER_PAGE))
3156 return NULL;
3157
3158 if (rb_per_cpu_empty(cpu_buffer))
3159 return NULL;
3160
3161 if (iter->head >= local_read(&iter->head_page->page->commit)) {
3162 rb_inc_iter(iter);
3163 goto again;
3164 }
3165
3166 event = rb_iter_head_event(iter);
3167
3168 switch (event->type_len) {
3169 case RINGBUF_TYPE_PADDING:
3170 if (rb_null_event(event)) {
3171 rb_inc_iter(iter);
3172 goto again;
3173 }
3174 rb_advance_iter(iter);
3175 return event;
3176
3177 case RINGBUF_TYPE_TIME_EXTEND:
3178
3179 rb_advance_iter(iter);
3180 goto again;
3181
3182 case RINGBUF_TYPE_TIME_STAMP:
3183
3184 rb_advance_iter(iter);
3185 goto again;
3186
3187 case RINGBUF_TYPE_DATA:
3188 if (ts) {
3189 *ts = iter->read_stamp + event->time_delta;
3190 ring_buffer_normalize_time_stamp(buffer,
3191 cpu_buffer->cpu, ts);
3192 }
3193 return event;
3194
3195 default:
3196 BUG();
3197 }
3198
3199 return NULL;
3200}
3201EXPORT_SYMBOL_GPL(ring_buffer_iter_peek);
3202
3203static inline int rb_ok_to_lock(void)
3204{
3205
3206
3207
3208
3209
3210
3211 if (likely(!in_nmi()))
3212 return 1;
3213
3214 tracing_off_permanent();
3215 return 0;
3216}
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228struct ring_buffer_event *
3229ring_buffer_peek(struct ring_buffer *buffer, int cpu, u64 *ts,
3230 unsigned long *lost_events)
3231{
3232 struct ring_buffer_per_cpu *cpu_buffer = buffer->buffers[cpu];
3233 struct ring_buffer_event *event;
3234 unsigned long flags;
3235 int dolock;
3236
3237 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3238 return NULL;
3239
3240 dolock = rb_ok_to_lock();
3241 again:
3242 local_irq_save(flags);
3243 if (dolock)
3244 spin_lock(&cpu_buffer->reader_lock);
3245 event = rb_buffer_peek(cpu_buffer, ts, lost_events);
3246 if (event && event->type_len == RINGBUF_TYPE_PADDING)
3247 rb_advance_reader(cpu_buffer);
3248 if (dolock)
3249 spin_unlock(&cpu_buffer->reader_lock);
3250 local_irq_restore(flags);
3251
3252 if (event && event->type_len == RINGBUF_TYPE_PADDING)
3253 goto again;
3254
3255 return event;
3256}
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266struct ring_buffer_event *
3267ring_buffer_iter_peek(struct ring_buffer_iter *iter, u64 *ts)
3268{
3269 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
3270 struct ring_buffer_event *event;
3271 unsigned long flags;
3272
3273 again:
3274 spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
3275 event = rb_iter_peek(iter, ts);
3276 spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
3277
3278 if (event && event->type_len == RINGBUF_TYPE_PADDING)
3279 goto again;
3280
3281 return event;
3282}
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295struct ring_buffer_event *
3296ring_buffer_consume(struct ring_buffer *buffer, int cpu, u64 *ts,
3297 unsigned long *lost_events)
3298{
3299 struct ring_buffer_per_cpu *cpu_buffer;
3300 struct ring_buffer_event *event = NULL;
3301 unsigned long flags;
3302 int dolock;
3303
3304 dolock = rb_ok_to_lock();
3305
3306 again:
3307
3308 preempt_disable();
3309
3310 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3311 goto out;
3312
3313 cpu_buffer = buffer->buffers[cpu];
3314 local_irq_save(flags);
3315 if (dolock)
3316 spin_lock(&cpu_buffer->reader_lock);
3317
3318 event = rb_buffer_peek(cpu_buffer, ts, lost_events);
3319 if (event) {
3320 cpu_buffer->lost_events = 0;
3321 rb_advance_reader(cpu_buffer);
3322 }
3323
3324 if (dolock)
3325 spin_unlock(&cpu_buffer->reader_lock);
3326 local_irq_restore(flags);
3327
3328 out:
3329 preempt_enable();
3330
3331 if (event && event->type_len == RINGBUF_TYPE_PADDING)
3332 goto again;
3333
3334 return event;
3335}
3336EXPORT_SYMBOL_GPL(ring_buffer_consume);
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358struct ring_buffer_iter *
3359ring_buffer_read_prepare(struct ring_buffer *buffer, int cpu)
3360{
3361 struct ring_buffer_per_cpu *cpu_buffer;
3362 struct ring_buffer_iter *iter;
3363
3364 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3365 return NULL;
3366
3367 iter = kmalloc(sizeof(*iter), GFP_KERNEL);
3368 if (!iter)
3369 return NULL;
3370
3371 cpu_buffer = buffer->buffers[cpu];
3372
3373 iter->cpu_buffer = cpu_buffer;
3374
3375 atomic_inc(&cpu_buffer->record_disabled);
3376
3377 return iter;
3378}
3379EXPORT_SYMBOL_GPL(ring_buffer_read_prepare);
3380
3381
3382
3383
3384
3385
3386
3387
3388void
3389ring_buffer_read_prepare_sync(void)
3390{
3391 synchronize_sched();
3392}
3393EXPORT_SYMBOL_GPL(ring_buffer_read_prepare_sync);
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406void
3407ring_buffer_read_start(struct ring_buffer_iter *iter)
3408{
3409 struct ring_buffer_per_cpu *cpu_buffer;
3410 unsigned long flags;
3411
3412 if (!iter)
3413 return;
3414
3415 cpu_buffer = iter->cpu_buffer;
3416
3417 spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
3418 arch_spin_lock(&cpu_buffer->lock);
3419 rb_iter_reset(iter);
3420 arch_spin_unlock(&cpu_buffer->lock);
3421 spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
3422}
3423EXPORT_SYMBOL_GPL(ring_buffer_read_start);
3424
3425
3426
3427
3428
3429
3430
3431
3432void
3433ring_buffer_read_finish(struct ring_buffer_iter *iter)
3434{
3435 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
3436
3437 atomic_dec(&cpu_buffer->record_disabled);
3438 kfree(iter);
3439}
3440EXPORT_SYMBOL_GPL(ring_buffer_read_finish);
3441
3442
3443
3444
3445
3446
3447
3448
3449struct ring_buffer_event *
3450ring_buffer_read(struct ring_buffer_iter *iter, u64 *ts)
3451{
3452 struct ring_buffer_event *event;
3453 struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
3454 unsigned long flags;
3455
3456 spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
3457 again:
3458 event = rb_iter_peek(iter, ts);
3459 if (!event)
3460 goto out;
3461
3462 if (event->type_len == RINGBUF_TYPE_PADDING)
3463 goto again;
3464
3465 rb_advance_iter(iter);
3466 out:
3467 spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
3468
3469 return event;
3470}
3471EXPORT_SYMBOL_GPL(ring_buffer_read);
3472
3473
3474
3475
3476
3477unsigned long ring_buffer_size(struct ring_buffer *buffer)
3478{
3479 return BUF_PAGE_SIZE * buffer->pages;
3480}
3481EXPORT_SYMBOL_GPL(ring_buffer_size);
3482
3483static void
3484rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
3485{
3486 rb_head_page_deactivate(cpu_buffer);
3487
3488 cpu_buffer->head_page
3489 = list_entry(cpu_buffer->pages, struct buffer_page, list);
3490 local_set(&cpu_buffer->head_page->write, 0);
3491 local_set(&cpu_buffer->head_page->entries, 0);
3492 local_set(&cpu_buffer->head_page->page->commit, 0);
3493
3494 cpu_buffer->head_page->read = 0;
3495
3496 cpu_buffer->tail_page = cpu_buffer->head_page;
3497 cpu_buffer->commit_page = cpu_buffer->head_page;
3498
3499 INIT_LIST_HEAD(&cpu_buffer->reader_page->list);
3500 local_set(&cpu_buffer->reader_page->write, 0);
3501 local_set(&cpu_buffer->reader_page->entries, 0);
3502 local_set(&cpu_buffer->reader_page->page->commit, 0);
3503 cpu_buffer->reader_page->read = 0;
3504
3505 local_set(&cpu_buffer->commit_overrun, 0);
3506 local_set(&cpu_buffer->overrun, 0);
3507 local_set(&cpu_buffer->entries, 0);
3508 local_set(&cpu_buffer->committing, 0);
3509 local_set(&cpu_buffer->commits, 0);
3510 cpu_buffer->read = 0;
3511
3512 cpu_buffer->write_stamp = 0;
3513 cpu_buffer->read_stamp = 0;
3514
3515 cpu_buffer->lost_events = 0;
3516 cpu_buffer->last_overrun = 0;
3517
3518 rb_head_page_activate(cpu_buffer);
3519}
3520
3521
3522
3523
3524
3525
3526void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu)
3527{
3528 struct ring_buffer_per_cpu *cpu_buffer = buffer->buffers[cpu];
3529 unsigned long flags;
3530
3531 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3532 return;
3533
3534 atomic_inc(&cpu_buffer->record_disabled);
3535
3536 spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
3537
3538 if (RB_WARN_ON(cpu_buffer, local_read(&cpu_buffer->committing)))
3539 goto out;
3540
3541 arch_spin_lock(&cpu_buffer->lock);
3542
3543 rb_reset_cpu(cpu_buffer);
3544
3545 arch_spin_unlock(&cpu_buffer->lock);
3546
3547 out:
3548 spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
3549
3550 atomic_dec(&cpu_buffer->record_disabled);
3551}
3552EXPORT_SYMBOL_GPL(ring_buffer_reset_cpu);
3553
3554
3555
3556
3557
3558void ring_buffer_reset(struct ring_buffer *buffer)
3559{
3560 int cpu;
3561
3562 for_each_buffer_cpu(buffer, cpu)
3563 ring_buffer_reset_cpu(buffer, cpu);
3564}
3565EXPORT_SYMBOL_GPL(ring_buffer_reset);
3566
3567
3568
3569
3570
3571int ring_buffer_empty(struct ring_buffer *buffer)
3572{
3573 struct ring_buffer_per_cpu *cpu_buffer;
3574 unsigned long flags;
3575 int dolock;
3576 int cpu;
3577 int ret;
3578
3579 dolock = rb_ok_to_lock();
3580
3581
3582 for_each_buffer_cpu(buffer, cpu) {
3583 cpu_buffer = buffer->buffers[cpu];
3584 local_irq_save(flags);
3585 if (dolock)
3586 spin_lock(&cpu_buffer->reader_lock);
3587 ret = rb_per_cpu_empty(cpu_buffer);
3588 if (dolock)
3589 spin_unlock(&cpu_buffer->reader_lock);
3590 local_irq_restore(flags);
3591
3592 if (!ret)
3593 return 0;
3594 }
3595
3596 return 1;
3597}
3598EXPORT_SYMBOL_GPL(ring_buffer_empty);
3599
3600
3601
3602
3603
3604
3605int ring_buffer_empty_cpu(struct ring_buffer *buffer, int cpu)
3606{
3607 struct ring_buffer_per_cpu *cpu_buffer;
3608 unsigned long flags;
3609 int dolock;
3610 int ret;
3611
3612 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3613 return 1;
3614
3615 dolock = rb_ok_to_lock();
3616
3617 cpu_buffer = buffer->buffers[cpu];
3618 local_irq_save(flags);
3619 if (dolock)
3620 spin_lock(&cpu_buffer->reader_lock);
3621 ret = rb_per_cpu_empty(cpu_buffer);
3622 if (dolock)
3623 spin_unlock(&cpu_buffer->reader_lock);
3624 local_irq_restore(flags);
3625
3626 return ret;
3627}
3628EXPORT_SYMBOL_GPL(ring_buffer_empty_cpu);
3629
3630#ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641int ring_buffer_swap_cpu(struct ring_buffer *buffer_a,
3642 struct ring_buffer *buffer_b, int cpu)
3643{
3644 struct ring_buffer_per_cpu *cpu_buffer_a;
3645 struct ring_buffer_per_cpu *cpu_buffer_b;
3646 int ret = -EINVAL;
3647
3648 if (!cpumask_test_cpu(cpu, buffer_a->cpumask) ||
3649 !cpumask_test_cpu(cpu, buffer_b->cpumask))
3650 goto out;
3651
3652
3653 if (buffer_a->pages != buffer_b->pages)
3654 goto out;
3655
3656 ret = -EAGAIN;
3657
3658 if (ring_buffer_flags != RB_BUFFERS_ON)
3659 goto out;
3660
3661 if (atomic_read(&buffer_a->record_disabled))
3662 goto out;
3663
3664 if (atomic_read(&buffer_b->record_disabled))
3665 goto out;
3666
3667 cpu_buffer_a = buffer_a->buffers[cpu];
3668 cpu_buffer_b = buffer_b->buffers[cpu];
3669
3670 if (atomic_read(&cpu_buffer_a->record_disabled))
3671 goto out;
3672
3673 if (atomic_read(&cpu_buffer_b->record_disabled))
3674 goto out;
3675
3676
3677
3678
3679
3680
3681
3682 atomic_inc(&cpu_buffer_a->record_disabled);
3683 atomic_inc(&cpu_buffer_b->record_disabled);
3684
3685 ret = -EBUSY;
3686 if (local_read(&cpu_buffer_a->committing))
3687 goto out_dec;
3688 if (local_read(&cpu_buffer_b->committing))
3689 goto out_dec;
3690
3691 buffer_a->buffers[cpu] = cpu_buffer_b;
3692 buffer_b->buffers[cpu] = cpu_buffer_a;
3693
3694 cpu_buffer_b->buffer = buffer_a;
3695 cpu_buffer_a->buffer = buffer_b;
3696
3697 ret = 0;
3698
3699out_dec:
3700 atomic_dec(&cpu_buffer_a->record_disabled);
3701 atomic_dec(&cpu_buffer_b->record_disabled);
3702out:
3703 return ret;
3704}
3705EXPORT_SYMBOL_GPL(ring_buffer_swap_cpu);
3706#endif
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723void *ring_buffer_alloc_read_page(struct ring_buffer *buffer)
3724{
3725 struct buffer_data_page *bpage;
3726 unsigned long addr;
3727
3728 addr = __get_free_page(GFP_KERNEL);
3729 if (!addr)
3730 return NULL;
3731
3732 bpage = (void *)addr;
3733
3734 rb_init_page(bpage);
3735
3736 return bpage;
3737}
3738EXPORT_SYMBOL_GPL(ring_buffer_alloc_read_page);
3739
3740
3741
3742
3743
3744
3745
3746
3747void ring_buffer_free_read_page(struct ring_buffer *buffer, void *data)
3748{
3749 free_page((unsigned long)data);
3750}
3751EXPORT_SYMBOL_GPL(ring_buffer_free_read_page);
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786int ring_buffer_read_page(struct ring_buffer *buffer,
3787 void **data_page, size_t len, int cpu, int full)
3788{
3789 struct ring_buffer_per_cpu *cpu_buffer = buffer->buffers[cpu];
3790 struct ring_buffer_event *event;
3791 struct buffer_data_page *bpage;
3792 struct buffer_page *reader;
3793 unsigned long missed_events;
3794 unsigned long flags;
3795 unsigned int commit;
3796 unsigned int read;
3797 u64 save_timestamp;
3798 int ret = -1;
3799
3800 if (!cpumask_test_cpu(cpu, buffer->cpumask))
3801 goto out;
3802
3803
3804
3805
3806
3807 if (len <= BUF_PAGE_HDR_SIZE)
3808 goto out;
3809
3810 len -= BUF_PAGE_HDR_SIZE;
3811
3812 if (!data_page)
3813 goto out;
3814
3815 bpage = *data_page;
3816 if (!bpage)
3817 goto out;
3818
3819 spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
3820
3821 reader = rb_get_reader_page(cpu_buffer);
3822 if (!reader)
3823 goto out_unlock;
3824
3825 event = rb_reader_event(cpu_buffer);
3826
3827 read = reader->read;
3828 commit = rb_page_commit(reader);
3829
3830
3831 missed_events = cpu_buffer->lost_events;
3832
3833
3834
3835
3836
3837
3838
3839
3840 if (read || (len < (commit - read)) ||
3841 cpu_buffer->reader_page == cpu_buffer->commit_page) {
3842 struct buffer_data_page *rpage = cpu_buffer->reader_page->page;
3843 unsigned int rpos = read;
3844 unsigned int pos = 0;
3845 unsigned int size;
3846
3847 if (full)
3848 goto out_unlock;
3849
3850 if (len > (commit - read))
3851 len = (commit - read);
3852
3853 size = rb_event_length(event);
3854
3855 if (len < size)
3856 goto out_unlock;
3857
3858
3859 save_timestamp = cpu_buffer->read_stamp;
3860
3861
3862 do {
3863 memcpy(bpage->data + pos, rpage->data + rpos, size);
3864
3865 len -= size;
3866
3867 rb_advance_reader(cpu_buffer);
3868 rpos = reader->read;
3869 pos += size;
3870
3871 event = rb_reader_event(cpu_buffer);
3872 size = rb_event_length(event);
3873 } while (len > size);
3874
3875
3876 local_set(&bpage->commit, pos);
3877 bpage->time_stamp = save_timestamp;
3878
3879
3880 read = 0;
3881 } else {
3882
3883 cpu_buffer->read += rb_page_entries(reader);
3884
3885
3886 rb_init_page(bpage);
3887 bpage = reader->page;
3888 reader->page = *data_page;
3889 local_set(&reader->write, 0);
3890 local_set(&reader->entries, 0);
3891 reader->read = 0;
3892 *data_page = bpage;
3893
3894
3895
3896
3897
3898
3899 if (reader->real_end)
3900 local_set(&bpage->commit, reader->real_end);
3901 }
3902 ret = read;
3903
3904 cpu_buffer->lost_events = 0;
3905
3906 commit = local_read(&bpage->commit);
3907
3908
3909
3910 if (missed_events) {
3911
3912
3913
3914 if (BUF_PAGE_SIZE - commit >= sizeof(missed_events)) {
3915 memcpy(&bpage->data[commit], &missed_events,
3916 sizeof(missed_events));
3917 local_add(RB_MISSED_STORED, &bpage->commit);
3918 commit += sizeof(missed_events);
3919 }
3920 local_add(RB_MISSED_EVENTS, &bpage->commit);
3921 }
3922
3923
3924
3925
3926 if (commit < BUF_PAGE_SIZE)
3927 memset(&bpage->data[commit], 0, BUF_PAGE_SIZE - commit);
3928
3929 out_unlock:
3930 spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
3931
3932 out:
3933 return ret;
3934}
3935EXPORT_SYMBOL_GPL(ring_buffer_read_page);
3936
3937#ifdef CONFIG_TRACING
3938static ssize_t
3939rb_simple_read(struct file *filp, char __user *ubuf,
3940 size_t cnt, loff_t *ppos)
3941{
3942 unsigned long *p = filp->private_data;
3943 char buf[64];
3944 int r;
3945
3946 if (test_bit(RB_BUFFERS_DISABLED_BIT, p))
3947 r = sprintf(buf, "permanently disabled\n");
3948 else
3949 r = sprintf(buf, "%d\n", test_bit(RB_BUFFERS_ON_BIT, p));
3950
3951 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
3952}
3953
3954static ssize_t
3955rb_simple_write(struct file *filp, const char __user *ubuf,
3956 size_t cnt, loff_t *ppos)
3957{
3958 unsigned long *p = filp->private_data;
3959 char buf[64];
3960 unsigned long val;
3961 int ret;
3962
3963 if (cnt >= sizeof(buf))
3964 return -EINVAL;
3965
3966 if (copy_from_user(&buf, ubuf, cnt))
3967 return -EFAULT;
3968
3969 buf[cnt] = 0;
3970
3971 ret = strict_strtoul(buf, 10, &val);
3972 if (ret < 0)
3973 return ret;
3974
3975 if (val)
3976 set_bit(RB_BUFFERS_ON_BIT, p);
3977 else
3978 clear_bit(RB_BUFFERS_ON_BIT, p);
3979
3980 (*ppos)++;
3981
3982 return cnt;
3983}
3984
3985static const struct file_operations rb_simple_fops = {
3986 .open = tracing_open_generic,
3987 .read = rb_simple_read,
3988 .write = rb_simple_write,
3989};
3990
3991
3992static __init int rb_init_debugfs(void)
3993{
3994 struct dentry *d_tracer;
3995
3996 d_tracer = tracing_init_dentry();
3997
3998 trace_create_file("tracing_on", 0644, d_tracer,
3999 &ring_buffer_flags, &rb_simple_fops);
4000
4001 return 0;
4002}
4003
4004fs_initcall(rb_init_debugfs);
4005#endif
4006
4007#ifdef CONFIG_HOTPLUG_CPU
4008static int rb_cpu_notify(struct notifier_block *self,
4009 unsigned long action, void *hcpu)
4010{
4011 struct ring_buffer *buffer =
4012 container_of(self, struct ring_buffer, cpu_notify);
4013 long cpu = (long)hcpu;
4014
4015 switch (action) {
4016 case CPU_UP_PREPARE:
4017 case CPU_UP_PREPARE_FROZEN:
4018 if (cpumask_test_cpu(cpu, buffer->cpumask))
4019 return NOTIFY_OK;
4020
4021 buffer->buffers[cpu] =
4022 rb_allocate_cpu_buffer(buffer, cpu);
4023 if (!buffer->buffers[cpu]) {
4024 WARN(1, "failed to allocate ring buffer on CPU %ld\n",
4025 cpu);
4026 return NOTIFY_OK;
4027 }
4028 smp_wmb();
4029 cpumask_set_cpu(cpu, buffer->cpumask);
4030 break;
4031 case CPU_DOWN_PREPARE:
4032 case CPU_DOWN_PREPARE_FROZEN:
4033
4034
4035
4036
4037
4038 break;
4039 default:
4040 break;
4041 }
4042 return NOTIFY_OK;
4043}
4044#endif
4045