MCPcopy Create free account
hub / github.com/axboe/liburing / test_regions

Function test_regions

test/reg-wait.c:277–405  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

275}
276
277static int test_regions(void)
278{
279 struct io_uring_region_desc rd = {};
280 struct io_uring_mem_region_reg mr = {};
281 void *buffer;
282 int ret;
283
284 buffer = t_aligned_alloc(page_size, page_size * 4);
285 if (!buffer) {
286 fprintf(stderr, "allocation failed\n");
287 return T_EXIT_FAIL;
288 }
289
290 rd.user_addr = uring_ptr_to_u64(buffer);
291 rd.size = page_size;
292 rd.flags = IORING_MEM_REGION_TYPE_USER;
293
294 mr.region_uptr = uring_ptr_to_u64(&rd);
295 mr.flags = IORING_MEM_REGION_REG_WAIT_ARG;
296
297 ret = test_try_register_region(&mr, true);
298 if (ret == -EINVAL) {
299 free(buffer);
300 return T_EXIT_SKIP;
301 }
302 if (ret) {
303 fprintf(stderr, "region: register normal fail %i\n", ret);
304 return T_EXIT_FAIL;
305 }
306
307 ret = test_try_register_region(&mr, false);
308 if (ret != -EINVAL) {
309 fprintf(stderr, "region: register with !R_DISABLED fail %i\n", ret);
310 return T_EXIT_FAIL;
311 }
312
313 rd.size = page_size * 4;
314 ret = test_try_register_region(&mr, true);
315 if (ret) {
316 fprintf(stderr, "test_try_register_region() 16KB fail %i\n", ret);
317 return T_EXIT_FAIL;
318 }
319 rd.size = page_size;
320
321 rd.user_addr = 0;
322 ret = test_try_register_region(&mr, true);
323 if (ret != -EFAULT) {
324 fprintf(stderr, "test_try_register_region() null uptr fail %i\n", ret);
325 return T_EXIT_FAIL;
326 }
327 rd.user_addr = uring_ptr_to_u64(buffer);
328
329 rd.flags = 0;
330 ret = test_try_register_region(&mr, true);
331 if (!ret) {
332 fprintf(stderr, "test_try_register_region() kernel alloc with uptr fail %i\n", ret);
333 return T_EXIT_FAIL;
334 }

Callers 1

mainFunction · 0.85

Calls 2

test_try_register_regionFunction · 0.85
t_aligned_allocFunction · 0.70

Tested by

no test coverage detected