|
12 | 12 | #include <sys/sysinfo.h>
|
13 | 13 | #include <linux/perf_event.h>
|
14 | 14 | #include <linux/ring_buffer.h>
|
| 15 | + |
15 | 16 | #include "test_ringbuf.lskel.h"
|
16 | 17 | #include "test_ringbuf_n.lskel.h"
|
17 | 18 | #include "test_ringbuf_map_key.lskel.h"
|
| 19 | +#include "test_ringbuf_write.lskel.h" |
18 | 20 |
|
19 | 21 | #define EDONE 7777
|
20 | 22 |
|
@@ -84,6 +86,47 @@ static void *poll_thread(void *input)
|
84 | 86 | return (void *)(long)ring_buffer__poll(ringbuf, timeout);
|
85 | 87 | }
|
86 | 88 |
|
| 89 | +static void ringbuf_write_subtest(void) |
| 90 | +{ |
| 91 | + struct test_ringbuf_write_lskel *skel; |
| 92 | + int page_size = getpagesize(); |
| 93 | + size_t *mmap_ptr; |
| 94 | + int err, rb_fd; |
| 95 | + |
| 96 | + skel = test_ringbuf_write_lskel__open(); |
| 97 | + if (!ASSERT_OK_PTR(skel, "skel_load")) |
| 98 | + return; |
| 99 | + |
| 100 | + skel->maps.ringbuf.max_entries = 0x4000; |
| 101 | + |
| 102 | + err = test_ringbuf_write_lskel__load(skel); |
| 103 | + if (!ASSERT_OK(err, "ringbuf_write")) |
| 104 | + goto cleanup; |
| 105 | + |
| 106 | + rb_fd = skel->maps.ringbuf.map_fd; |
| 107 | + |
| 108 | + mmap_ptr = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, rb_fd, 0); |
| 109 | + ASSERT_OK_PTR(mmap_ptr, "rw_cons_pos"); |
| 110 | + *mmap_ptr = 0x3000; |
| 111 | + |
| 112 | + skel->bss->pid = getpid(); |
| 113 | + |
| 114 | + ringbuf = ring_buffer__new(rb_fd, process_sample, NULL, NULL); |
| 115 | + if (!ASSERT_OK_PTR(ringbuf, "ringbuf_create")) |
| 116 | + goto cleanup; |
| 117 | + |
| 118 | + err = test_ringbuf_write_lskel__attach(skel); |
| 119 | + if (!ASSERT_OK(err, "ringbuf_write")) |
| 120 | + goto cleanup; |
| 121 | + |
| 122 | + trigger_samples(); |
| 123 | + ASSERT_GE(skel->bss->discarded, 1, "discarded"); |
| 124 | + ASSERT_EQ(skel->bss->passed, 0, "passed"); |
| 125 | +cleanup: |
| 126 | + ring_buffer__free(ringbuf); |
| 127 | + test_ringbuf_write_lskel__destroy(skel); |
| 128 | +} |
| 129 | + |
87 | 130 | static void ringbuf_subtest(void)
|
88 | 131 | {
|
89 | 132 | const size_t rec_sz = BPF_RINGBUF_HDR_SZ + sizeof(struct sample);
|
@@ -451,4 +494,6 @@ void test_ringbuf(void)
|
451 | 494 | ringbuf_n_subtest();
|
452 | 495 | if (test__start_subtest("ringbuf_map_key"))
|
453 | 496 | ringbuf_map_key_subtest();
|
| 497 | + if (test__start_subtest("ringbuf_write")) |
| 498 | + ringbuf_write_subtest(); |
454 | 499 | }
|
0 commit comments