Lines Matching +full:cpu +full:- +full:map

1 // SPDX-License-Identifier: GPL-2.0
3 * Ring-buffer memory mapping tests
36 return ret == -1 ? -errno : 0; in __tracefs_write()
45 return -1; in __tracefs_write_int()
63 return -1; in tracefs_reset()
65 return -1; in tracefs_reset()
67 return -1; in tracefs_reset()
69 return -1; in tracefs_reset()
79 int tracefs_cpu_map(struct tracefs_cpu_map_desc *desc, int cpu) in tracefs_cpu_map() argument
83 void *map; in tracefs_cpu_map() local
86 TRACEFS_ROOT"/per_cpu/cpu%d/trace_pipe_raw", in tracefs_cpu_map()
87 cpu) < 0) in tracefs_cpu_map()
88 return -ENOMEM; in tracefs_cpu_map()
90 desc->cpu_fd = open(cpu_path, O_RDONLY | O_NONBLOCK); in tracefs_cpu_map()
92 if (desc->cpu_fd < 0) in tracefs_cpu_map()
93 return -ENODEV; in tracefs_cpu_map()
96 map = mmap(NULL, page_size, PROT_READ, MAP_SHARED, desc->cpu_fd, 0); in tracefs_cpu_map()
97 if (map == MAP_FAILED) in tracefs_cpu_map()
98 return -errno; in tracefs_cpu_map()
100 desc->meta = (struct trace_buffer_meta *)map; in tracefs_cpu_map()
102 /* the meta-page is bigger than the original mapping */ in tracefs_cpu_map()
103 if (page_size < desc->meta->meta_struct_len) { in tracefs_cpu_map()
104 int meta_page_size = desc->meta->meta_page_size; in tracefs_cpu_map()
106 munmap(desc->meta, page_size); in tracefs_cpu_map()
116 munmap(desc->meta, desc->meta->meta_page_size); in tracefs_cpu_unmap()
117 close(desc->cpu_fd); in tracefs_cpu_unmap()
120 FIXTURE(map) { in FIXTURE() argument
125 FIXTURE_VARIANT(map) { in FIXTURE_VARIANT() argument
129 FIXTURE_VARIANT_ADD(map, subbuf_size_4k) { in FIXTURE_VARIANT_ADD() argument
133 FIXTURE_VARIANT_ADD(map, subbuf_size_8k) { in FIXTURE_VARIANT_ADD() argument
137 FIXTURE_SETUP(map) in FIXTURE_SETUP() argument
139 int cpu = sched_getcpu(); in FIXTURE_SETUP() local
155 self->umount = umount; in FIXTURE_SETUP()
157 ASSERT_GE(cpu, 0); in FIXTURE_SETUP()
161 tracefs_write_int(TRACEFS_ROOT"/buffer_subbuf_size_kb", variant->subbuf_size); in FIXTURE_SETUP()
163 ASSERT_EQ(tracefs_cpu_map(&self->map_desc, cpu), 0); in FIXTURE_SETUP()
166 * Ensure generated events will be found on this very same ring-buffer. in FIXTURE_SETUP()
169 CPU_SET(cpu, &cpu_mask); in FIXTURE_SETUP()
173 FIXTURE_TEARDOWN(map) in FIXTURE_TEARDOWN() argument
177 if (self->umount) in FIXTURE_TEARDOWN()
180 tracefs_cpu_unmap(&self->map_desc); in FIXTURE_TEARDOWN()
183 TEST_F(map, meta_page_check) in TEST_F() argument
185 struct tracefs_cpu_map_desc *desc = &self->map_desc; in TEST_F()
188 ASSERT_EQ(desc->meta->entries, 0); in TEST_F()
189 ASSERT_EQ(desc->meta->overrun, 0); in TEST_F()
190 ASSERT_EQ(desc->meta->read, 0); in TEST_F()
192 ASSERT_EQ(desc->meta->reader.id, 0); in TEST_F()
193 ASSERT_EQ(desc->meta->reader.read, 0); in TEST_F()
195 ASSERT_EQ(ioctl(desc->cpu_fd, TRACE_MMAP_IOCTL_GET_READER), 0); in TEST_F()
196 ASSERT_EQ(desc->meta->reader.id, 0); in TEST_F()
202 ASSERT_EQ(ioctl(desc->cpu_fd, TRACE_MMAP_IOCTL_GET_READER), 0); in TEST_F()
204 ASSERT_EQ(desc->meta->entries, 16); in TEST_F()
205 ASSERT_EQ(desc->meta->overrun, 0); in TEST_F()
206 ASSERT_EQ(desc->meta->read, 16); in TEST_F()
208 ASSERT_EQ(desc->meta->reader.id, 1); in TEST_F()
214 TEST_F(map, data_mmap) in TEST_F() argument
216 struct tracefs_cpu_map_desc *desc = &self->map_desc; in TEST_F()
220 meta_len = desc->meta->meta_page_size; in TEST_F()
221 data_len = desc->meta->subbuf_size * desc->meta->nr_subbufs; in TEST_F()
223 /* Map all the available subbufs */ in TEST_F()
225 desc->cpu_fd, meta_len); in TEST_F()
229 /* Map all the available subbufs - 1 */ in TEST_F()
230 data_len -= desc->meta->subbuf_size; in TEST_F()
232 desc->cpu_fd, meta_len); in TEST_F()
236 /* Offset within ring-buffer bounds, mapping size overflow */ in TEST_F()
237 meta_len += desc->meta->subbuf_size * 2; in TEST_F()
239 desc->cpu_fd, meta_len); in TEST_F()
242 /* Offset outside ring-buffer bounds */ in TEST_F()
243 data_len = desc->meta->subbuf_size * desc->meta->nr_subbufs; in TEST_F()
245 desc->cpu_fd, data_len + (desc->meta->subbuf_size * 2)); in TEST_F()
248 /* Verify meta-page padding */ in TEST_F()
249 if (desc->meta->meta_page_size > getpagesize()) { in TEST_F()
250 data_len = desc->meta->meta_page_size; in TEST_F()
252 PROT_READ, MAP_SHARED, desc->cpu_fd, 0); in TEST_F()
255 for (int i = desc->meta->meta_struct_len; in TEST_F()
256 i < desc->meta->meta_page_size; i += sizeof(int)) in TEST_F()
287 self->umount = umount; in FIXTURE_SETUP()
296 if (self->umount) in FIXTURE_TEARDOWN()
303 int cpu = sched_getcpu(); in TEST_F() local
305 ASSERT_GE(cpu, 0); in TEST_F()
308 ASSERT_EQ(tracefs_cpu_map(&map_desc, cpu), -EBUSY); in TEST_F()
314 int cpu = sched_getcpu(); in TEST_F() local
316 ASSERT_EQ(tracefs_cpu_map(&map_desc, cpu), 0); in TEST_F()
319 "snapshot"), -EBUSY); in TEST_F()
321 "1"), -EBUSY); in TEST_F()