Lines Matching +full:self +full:- +full:test

1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright (c) 2021-2022, NVIDIA CORPORATION & AFFILIATES
13 * This test is best run with:
34 if (fd == -1) in writeat()
35 return -1; in writeat()
49 MAP_SHARED | MAP_ANONYMOUS, -1, 0); in setup_buffer()
53 * This sets up fail_injection in a way that is useful for this test.
65 if (writeat(dirfd(debugfs), "failslab/ignore-gfp-wait", "N")) in setup_fault_injection()
67 writeat(dirfd(debugfs), "fail_page_alloc/ignore-gfp-wait", "N"); in setup_fault_injection()
68 writeat(dirfd(debugfs), "fail_page_alloc/ignore-gfp-highmem", "N"); in setup_fault_injection()
73 if (strncmp(dent->d_name, "fail", 4) != 0) in setup_fault_injection()
77 snprintf(fn, sizeof(fn), "%s/verbose", dent->d_name); in setup_fault_injection()
94 snprintf(buf, sizeof(buf), "/proc/self/task/%u/fail-nth", getpid()); in fail_nth_first()
95 nth_state->proc_fd = open(buf, O_RDWR); in fail_nth_first()
96 ASSERT_NE(-1, nth_state->proc_fd); in fail_nth_first()
110 * necessarily mean a test failure, just that the limit has to be made in fail_nth_next()
113 ASSERT_GT(400, nth_state->iteration); in fail_nth_next()
114 if (nth_state->iteration != 0) { in fail_nth_next()
121 * the test passed without triggering failure in fail_nth_next()
123 res = pread(nth_state->proc_fd, buf, sizeof(buf), 0); in fail_nth_next()
124 if (res == -1 && errno == EFAULT) { in fail_nth_next()
130 res2 = pwrite(nth_state->proc_fd, disable_nth, in fail_nth_next()
131 ARRAY_SIZE(disable_nth) - 1, 0); in fail_nth_next()
132 if (res2 == -1 && errno == EFAULT) { in fail_nth_next()
133 res2 = pwrite(nth_state->proc_fd, disable_nth, in fail_nth_next()
134 ARRAY_SIZE(disable_nth) - 1, 0); in fail_nth_next()
138 ASSERT_EQ(ARRAY_SIZE(disable_nth) - 1, res2); in fail_nth_next()
140 /* printf(" nth %u result=%d nth=%u\n", nth_state->iteration, in fail_nth_next()
147 /* printf(" nth %u result=%d\n", nth_state->iteration, in fail_nth_next()
150 nth_state->iteration++; in fail_nth_next()
155 * This is called during the test to start failure injection. It allows the test
165 if (!nth_state->iteration) in __fail_nth_enable()
168 len = snprintf(buf, sizeof(buf), "%u", nth_state->iteration); in __fail_nth_enable()
169 ASSERT_EQ(len, pwrite(nth_state->proc_fd, buf, len, 0)); in __fail_nth_enable()
175 FIXTURE_DATA(fixture_name) *self, \
188 ASSERT_EQ(0, test_nth_##name(_metadata, self, variant, \
191 fixture_name##_teardown(_metadata, self, variant); \
192 fixture_name##_setup(_metadata, self, variant); \
193 test_result = test_nth_##name(_metadata, self, \
200 FIXTURE_DATA(fixture_name) __attribute__((unused)) *self, \
213 self->fd = -1; in FIXTURE_SETUP()
214 self->access_id = 0; in FIXTURE_SETUP()
221 if (self->access_id) { in FIXTURE_TEARDOWN()
223 rc = _test_cmd_destroy_access(self->access_id); in FIXTURE_TEARDOWN()
226 teardown_iommufd(self->fd, _metadata); in FIXTURE_TEARDOWN()
238 self->fd = open("/dev/iommu", O_RDWR); in TEST_FAIL_NTH()
239 if (self->fd == -1) in TEST_FAIL_NTH()
240 return -1; in TEST_FAIL_NTH()
242 if (_test_ioctl_ioas_alloc(self->fd, &ioas_id)) in TEST_FAIL_NTH()
243 return -1; in TEST_FAIL_NTH()
252 if (ioctl(self->fd, IOMMU_IOAS_IOVA_RANGES, &ranges_cmd)) in TEST_FAIL_NTH()
253 return -1; in TEST_FAIL_NTH()
265 ranges[0].last = BUFFER_SIZE + 16 * 1024 * 600 - 1; in TEST_FAIL_NTH()
266 if (ioctl(self->fd, IOMMU_IOAS_ALLOW_IOVAS, &allow_cmd)) in TEST_FAIL_NTH()
267 return -1; in TEST_FAIL_NTH()
270 if (_test_ioctl_ioas_map(self->fd, ioas_id, buffer, BUFFER_SIZE, &iova, in TEST_FAIL_NTH()
273 return -1; in TEST_FAIL_NTH()
286 if (ioctl(self->fd, IOMMU_IOAS_COPY, &copy_cmd)) in TEST_FAIL_NTH()
287 return -1; in TEST_FAIL_NTH()
290 if (_test_ioctl_ioas_unmap(self->fd, ioas_id, iova, BUFFER_SIZE, in TEST_FAIL_NTH()
292 return -1; in TEST_FAIL_NTH()
294 _test_ioctl_ioas_unmap(self->fd, ioas_id, iova, BUFFER_SIZE, NULL); in TEST_FAIL_NTH()
306 self->fd = open("/dev/iommu", O_RDWR); in TEST_FAIL_NTH()
307 if (self->fd == -1) in TEST_FAIL_NTH()
308 return -1; in TEST_FAIL_NTH()
310 if (_test_ioctl_ioas_alloc(self->fd, &ioas_id)) in TEST_FAIL_NTH()
311 return -1; in TEST_FAIL_NTH()
313 if (_test_ioctl_set_temp_memory_limit(self->fd, 32)) in TEST_FAIL_NTH()
314 return -1; in TEST_FAIL_NTH()
318 if (_test_cmd_mock_domain(self->fd, ioas_id, &stdev_id, &hwpt_id, NULL)) in TEST_FAIL_NTH()
319 return -1; in TEST_FAIL_NTH()
321 if (_test_ioctl_ioas_map(self->fd, ioas_id, buffer, 262144, &iova, in TEST_FAIL_NTH()
324 return -1; in TEST_FAIL_NTH()
326 if (_test_ioctl_destroy(self->fd, stdev_id)) in TEST_FAIL_NTH()
327 return -1; in TEST_FAIL_NTH()
329 if (_test_cmd_mock_domain(self->fd, ioas_id, &stdev_id, &hwpt_id, NULL)) in TEST_FAIL_NTH()
330 return -1; in TEST_FAIL_NTH()
343 self->fd = open("/dev/iommu", O_RDWR); in TEST_FAIL_NTH()
344 if (self->fd == -1) in TEST_FAIL_NTH()
345 return -1; in TEST_FAIL_NTH()
347 if (_test_ioctl_ioas_alloc(self->fd, &ioas_id)) in TEST_FAIL_NTH()
348 return -1; in TEST_FAIL_NTH()
350 if (_test_ioctl_set_temp_memory_limit(self->fd, 32)) in TEST_FAIL_NTH()
351 return -1; in TEST_FAIL_NTH()
353 if (_test_cmd_mock_domain(self->fd, ioas_id, &stdev_id, &hwpt_id, NULL)) in TEST_FAIL_NTH()
354 return -1; in TEST_FAIL_NTH()
358 if (_test_cmd_mock_domain(self->fd, ioas_id, &stdev_id2, &hwpt_id2, in TEST_FAIL_NTH()
360 return -1; in TEST_FAIL_NTH()
362 if (_test_ioctl_ioas_map(self->fd, ioas_id, buffer, 262144, &iova, in TEST_FAIL_NTH()
365 return -1; in TEST_FAIL_NTH()
367 if (_test_ioctl_destroy(self->fd, stdev_id)) in TEST_FAIL_NTH()
368 return -1; in TEST_FAIL_NTH()
370 if (_test_ioctl_destroy(self->fd, stdev_id2)) in TEST_FAIL_NTH()
371 return -1; in TEST_FAIL_NTH()
373 if (_test_cmd_mock_domain(self->fd, ioas_id, &stdev_id, &hwpt_id, NULL)) in TEST_FAIL_NTH()
374 return -1; in TEST_FAIL_NTH()
375 if (_test_cmd_mock_domain(self->fd, ioas_id, &stdev_id2, &hwpt_id2, in TEST_FAIL_NTH()
377 return -1; in TEST_FAIL_NTH()
388 self->fd = open("/dev/iommu", O_RDWR); in TEST_FAIL_NTH()
389 if (self->fd == -1) in TEST_FAIL_NTH()
390 return -1; in TEST_FAIL_NTH()
392 if (_test_ioctl_ioas_alloc(self->fd, &ioas_id)) in TEST_FAIL_NTH()
393 return -1; in TEST_FAIL_NTH()
395 if (_test_ioctl_set_temp_memory_limit(self->fd, 32)) in TEST_FAIL_NTH()
396 return -1; in TEST_FAIL_NTH()
398 if (_test_ioctl_ioas_map(self->fd, ioas_id, buffer, 262144, &iova, in TEST_FAIL_NTH()
401 return -1; in TEST_FAIL_NTH()
405 if (_test_cmd_create_access(self->fd, ioas_id, &self->access_id, 0)) in TEST_FAIL_NTH()
406 return -1; in TEST_FAIL_NTH()
412 .id = self->access_id, in TEST_FAIL_NTH()
419 if (ioctl(self->fd, _IOMMU_TEST_CMD(IOMMU_TEST_OP_ACCESS_RW), in TEST_FAIL_NTH()
421 return -1; in TEST_FAIL_NTH()
424 if (ioctl(self->fd, _IOMMU_TEST_CMD(IOMMU_TEST_OP_ACCESS_RW), in TEST_FAIL_NTH()
426 return -1; in TEST_FAIL_NTH()
429 if (ioctl(self->fd, _IOMMU_TEST_CMD(IOMMU_TEST_OP_ACCESS_RW), in TEST_FAIL_NTH()
431 return -1; in TEST_FAIL_NTH()
434 if (ioctl(self->fd, _IOMMU_TEST_CMD(IOMMU_TEST_OP_ACCESS_RW), in TEST_FAIL_NTH()
436 return -1; in TEST_FAIL_NTH()
443 .id = self->access_id, in TEST_FAIL_NTH()
450 if (ioctl(self->fd, _IOMMU_TEST_CMD(IOMMU_TEST_OP_ACCESS_RW), in TEST_FAIL_NTH()
452 return -1; in TEST_FAIL_NTH()
454 if (_test_cmd_destroy_access(self->access_id)) in TEST_FAIL_NTH()
455 return -1; in TEST_FAIL_NTH()
456 self->access_id = 0; in TEST_FAIL_NTH()
467 self->fd = open("/dev/iommu", O_RDWR); in TEST_FAIL_NTH()
468 if (self->fd == -1) in TEST_FAIL_NTH()
469 return -1; in TEST_FAIL_NTH()
471 if (_test_ioctl_ioas_alloc(self->fd, &ioas_id)) in TEST_FAIL_NTH()
472 return -1; in TEST_FAIL_NTH()
474 if (_test_ioctl_set_temp_memory_limit(self->fd, 32)) in TEST_FAIL_NTH()
475 return -1; in TEST_FAIL_NTH()
477 if (_test_ioctl_ioas_map(self->fd, ioas_id, buffer, BUFFER_SIZE, &iova, in TEST_FAIL_NTH()
480 return -1; in TEST_FAIL_NTH()
482 if (_test_cmd_create_access(self->fd, ioas_id, &self->access_id, in TEST_FAIL_NTH()
484 return -1; in TEST_FAIL_NTH()
492 .id = self->access_id, in TEST_FAIL_NTH()
498 if (ioctl(self->fd, _IOMMU_TEST_CMD(IOMMU_TEST_OP_ACCESS_RW), in TEST_FAIL_NTH()
500 return -1; in TEST_FAIL_NTH()
504 if (_test_cmd_destroy_access_pages(self->fd, self->access_id, in TEST_FAIL_NTH()
506 return -1; in TEST_FAIL_NTH()
508 if (_test_cmd_destroy_access(self->access_id)) in TEST_FAIL_NTH()
509 return -1; in TEST_FAIL_NTH()
510 self->access_id = 0; in TEST_FAIL_NTH()
523 self->fd = open("/dev/iommu", O_RDWR); in TEST_FAIL_NTH()
524 if (self->fd == -1) in TEST_FAIL_NTH()
525 return -1; in TEST_FAIL_NTH()
527 if (_test_ioctl_ioas_alloc(self->fd, &ioas_id)) in TEST_FAIL_NTH()
528 return -1; in TEST_FAIL_NTH()
530 if (_test_ioctl_set_temp_memory_limit(self->fd, 32)) in TEST_FAIL_NTH()
531 return -1; in TEST_FAIL_NTH()
533 if (_test_cmd_mock_domain(self->fd, ioas_id, &stdev_id, &hwpt_id, NULL)) in TEST_FAIL_NTH()
534 return -1; in TEST_FAIL_NTH()
536 if (_test_ioctl_ioas_map(self->fd, ioas_id, buffer, BUFFER_SIZE, &iova, in TEST_FAIL_NTH()
539 return -1; in TEST_FAIL_NTH()
541 if (_test_cmd_create_access(self->fd, ioas_id, &self->access_id, in TEST_FAIL_NTH()
543 return -1; in TEST_FAIL_NTH()
551 .id = self->access_id, in TEST_FAIL_NTH()
557 if (ioctl(self->fd, _IOMMU_TEST_CMD(IOMMU_TEST_OP_ACCESS_RW), in TEST_FAIL_NTH()
559 return -1; in TEST_FAIL_NTH()
563 if (_test_cmd_destroy_access_pages(self->fd, self->access_id, in TEST_FAIL_NTH()
565 return -1; in TEST_FAIL_NTH()
567 if (_test_cmd_destroy_access(self->access_id)) in TEST_FAIL_NTH()
568 return -1; in TEST_FAIL_NTH()
569 self->access_id = 0; in TEST_FAIL_NTH()
571 if (_test_ioctl_destroy(self->fd, stdev_id)) in TEST_FAIL_NTH()
572 return -1; in TEST_FAIL_NTH()
587 self->fd = open("/dev/iommu", O_RDWR); in TEST_FAIL_NTH()
588 if (self->fd == -1) in TEST_FAIL_NTH()
589 return -1; in TEST_FAIL_NTH()
591 if (_test_ioctl_ioas_alloc(self->fd, &ioas_id)) in TEST_FAIL_NTH()
592 return -1; in TEST_FAIL_NTH()
594 if (_test_ioctl_ioas_alloc(self->fd, &ioas_id2)) in TEST_FAIL_NTH()
595 return -1; in TEST_FAIL_NTH()
598 if (_test_ioctl_ioas_map(self->fd, ioas_id, buffer, PAGE_SIZE, &iova, in TEST_FAIL_NTH()
602 return -1; in TEST_FAIL_NTH()
603 if (_test_ioctl_ioas_map(self->fd, ioas_id2, buffer, PAGE_SIZE, &iova, in TEST_FAIL_NTH()
607 return -1; in TEST_FAIL_NTH()
611 if (_test_cmd_mock_domain(self->fd, ioas_id, &stdev_id, NULL, in TEST_FAIL_NTH()
613 return -1; in TEST_FAIL_NTH()
615 if (_test_cmd_get_hw_info(self->fd, idev_id, &info, sizeof(info), NULL)) in TEST_FAIL_NTH()
616 return -1; in TEST_FAIL_NTH()
618 if (_test_cmd_hwpt_alloc(self->fd, idev_id, ioas_id, 0, &hwpt_id, in TEST_FAIL_NTH()
620 return -1; in TEST_FAIL_NTH()
622 if (_test_cmd_mock_domain_replace(self->fd, stdev_id, ioas_id2, NULL)) in TEST_FAIL_NTH()
623 return -1; in TEST_FAIL_NTH()
625 if (_test_cmd_mock_domain_replace(self->fd, stdev_id, hwpt_id, NULL)) in TEST_FAIL_NTH()
626 return -1; in TEST_FAIL_NTH()