Lines Matching +full:buffer +full:- +full:size
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* I/O iterator tests. This can only test kernel-backed iterator types.
34 { -1 }
53 void *buffer; in iov_kunit_create_buffer() local
65 buffer = vmap(pages, npages, VM_MAP | VM_MAP_PUT_PAGES, PAGE_KERNEL); in iov_kunit_create_buffer()
66 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buffer); in iov_kunit_create_buffer()
68 kunit_add_action_or_reset(test, iov_kunit_unmap, buffer); in iov_kunit_create_buffer()
69 return buffer; in iov_kunit_create_buffer()
75 void *buffer, size_t bufsize, in iov_kunit_load_kvec() argument
78 size_t size = 0; in iov_kunit_load_kvec() local
82 if (pr->from < 0) in iov_kunit_load_kvec()
84 KUNIT_ASSERT_GE(test, pr->to, pr->from); in iov_kunit_load_kvec()
85 KUNIT_ASSERT_LE(test, pr->to, bufsize); in iov_kunit_load_kvec()
86 kvec[i].iov_base = buffer + pr->from; in iov_kunit_load_kvec()
87 kvec[i].iov_len = pr->to - pr->from; in iov_kunit_load_kvec()
88 size += pr->to - pr->from; in iov_kunit_load_kvec()
90 KUNIT_ASSERT_LE(test, size, bufsize); in iov_kunit_load_kvec()
92 iov_iter_kvec(iter, dir, kvec, i, size); in iov_kunit_load_kvec()
96 * Test copying to a ITER_KVEC-type iterator.
104 u8 *scratch, *buffer; in iov_kunit_copy_to_kvec() local
105 size_t bufsize, npages, size, copied; in iov_kunit_copy_to_kvec() local
115 buffer = iov_kunit_create_buffer(test, &bpages, npages); in iov_kunit_copy_to_kvec()
116 memset(buffer, 0, bufsize); in iov_kunit_copy_to_kvec()
119 buffer, bufsize, kvec_test_ranges); in iov_kunit_copy_to_kvec()
120 size = iter.count; in iov_kunit_copy_to_kvec()
122 copied = copy_to_iter(scratch, size, &iter); in iov_kunit_copy_to_kvec()
124 KUNIT_EXPECT_EQ(test, copied, size); in iov_kunit_copy_to_kvec()
128 /* Build the expected image in the scratch buffer. */ in iov_kunit_copy_to_kvec()
131 for (pr = kvec_test_ranges; pr->from >= 0; pr++) in iov_kunit_copy_to_kvec()
132 for (i = pr->from; i < pr->to; i++) in iov_kunit_copy_to_kvec()
137 KUNIT_EXPECT_EQ_MSG(test, buffer[i], scratch[i], "at i=%x", i); in iov_kunit_copy_to_kvec()
138 if (buffer[i] != scratch[i]) in iov_kunit_copy_to_kvec()
146 * Test copying from a ITER_KVEC-type iterator.
154 u8 *scratch, *buffer; in iov_kunit_copy_from_kvec() local
155 size_t bufsize, npages, size, copied; in iov_kunit_copy_from_kvec() local
161 buffer = iov_kunit_create_buffer(test, &bpages, npages); in iov_kunit_copy_from_kvec()
163 buffer[i] = pattern(i); in iov_kunit_copy_from_kvec()
169 buffer, bufsize, kvec_test_ranges); in iov_kunit_copy_from_kvec()
170 size = min(iter.count, bufsize); in iov_kunit_copy_from_kvec()
172 copied = copy_from_iter(scratch, size, &iter); in iov_kunit_copy_from_kvec()
174 KUNIT_EXPECT_EQ(test, copied, size); in iov_kunit_copy_from_kvec()
178 /* Build the expected image in the main buffer. */ in iov_kunit_copy_from_kvec()
180 memset(buffer, 0, bufsize); in iov_kunit_copy_from_kvec()
181 for (pr = kvec_test_ranges; pr->from >= 0; pr++) { in iov_kunit_copy_from_kvec()
182 for (j = pr->from; j < pr->to; j++) { in iov_kunit_copy_from_kvec()
183 buffer[i++] = pattern(j); in iov_kunit_copy_from_kvec()
192 KUNIT_EXPECT_EQ_MSG(test, scratch[i], buffer[i], "at i=%x", i); in iov_kunit_copy_from_kvec()
193 if (scratch[i] != buffer[i]) in iov_kunit_copy_from_kvec()
213 { -1, -1, -1 }
224 size_t size = 0; in iov_kunit_load_bvec() local
228 if (pr->from < 0) in iov_kunit_load_bvec()
230 KUNIT_ASSERT_LT(test, pr->page, npages); in iov_kunit_load_bvec()
231 KUNIT_ASSERT_LT(test, pr->page * PAGE_SIZE, bufsize); in iov_kunit_load_bvec()
232 KUNIT_ASSERT_GE(test, pr->from, 0); in iov_kunit_load_bvec()
233 KUNIT_ASSERT_GE(test, pr->to, pr->from); in iov_kunit_load_bvec()
234 KUNIT_ASSERT_LE(test, pr->to, PAGE_SIZE); in iov_kunit_load_bvec()
236 page = pages[pr->page]; in iov_kunit_load_bvec()
237 if (pr->from == 0 && pr->from != pr->to && page == can_merge) { in iov_kunit_load_bvec()
238 i--; in iov_kunit_load_bvec()
239 bvec[i].bv_len += pr->to; in iov_kunit_load_bvec()
241 bvec_set_page(&bvec[i], page, pr->to - pr->from, pr->from); in iov_kunit_load_bvec()
244 size += pr->to - pr->from; in iov_kunit_load_bvec()
245 if ((pr->to & ~PAGE_MASK) == 0) in iov_kunit_load_bvec()
246 can_merge = page + pr->to / PAGE_SIZE; in iov_kunit_load_bvec()
251 iov_iter_bvec(iter, dir, bvec, i, size); in iov_kunit_load_bvec()
255 * Test copying to a ITER_BVEC-type iterator.
263 u8 *scratch, *buffer; in iov_kunit_copy_to_bvec() local
264 size_t bufsize, npages, size, copied; in iov_kunit_copy_to_bvec() local
274 buffer = iov_kunit_create_buffer(test, &bpages, npages); in iov_kunit_copy_to_bvec()
275 memset(buffer, 0, bufsize); in iov_kunit_copy_to_bvec()
279 size = iter.count; in iov_kunit_copy_to_bvec()
281 copied = copy_to_iter(scratch, size, &iter); in iov_kunit_copy_to_bvec()
283 KUNIT_EXPECT_EQ(test, copied, size); in iov_kunit_copy_to_bvec()
287 /* Build the expected image in the scratch buffer. */ in iov_kunit_copy_to_bvec()
291 for (pr = bvec_test_ranges; pr->from >= 0; pr++, b++) { in iov_kunit_copy_to_bvec()
292 u8 *p = scratch + pr->page * PAGE_SIZE; in iov_kunit_copy_to_bvec()
294 for (i = pr->from; i < pr->to; i++) in iov_kunit_copy_to_bvec()
300 KUNIT_EXPECT_EQ_MSG(test, buffer[i], scratch[i], "at i=%x", i); in iov_kunit_copy_to_bvec()
301 if (buffer[i] != scratch[i]) in iov_kunit_copy_to_bvec()
309 * Test copying from a ITER_BVEC-type iterator.
317 u8 *scratch, *buffer; in iov_kunit_copy_from_bvec() local
318 size_t bufsize, npages, size, copied; in iov_kunit_copy_from_bvec() local
324 buffer = iov_kunit_create_buffer(test, &bpages, npages); in iov_kunit_copy_from_bvec()
326 buffer[i] = pattern(i); in iov_kunit_copy_from_bvec()
333 size = iter.count; in iov_kunit_copy_from_bvec()
335 copied = copy_from_iter(scratch, size, &iter); in iov_kunit_copy_from_bvec()
337 KUNIT_EXPECT_EQ(test, copied, size); in iov_kunit_copy_from_bvec()
341 /* Build the expected image in the main buffer. */ in iov_kunit_copy_from_bvec()
343 memset(buffer, 0, bufsize); in iov_kunit_copy_from_bvec()
344 for (pr = bvec_test_ranges; pr->from >= 0; pr++) { in iov_kunit_copy_from_bvec()
345 size_t patt = pr->page * PAGE_SIZE; in iov_kunit_copy_from_bvec()
347 for (j = pr->from; j < pr->to; j++) { in iov_kunit_copy_from_bvec()
348 buffer[i++] = pattern(patt + j); in iov_kunit_copy_from_bvec()
357 KUNIT_EXPECT_EQ_MSG(test, scratch[i], buffer[i], "at i=%x", i); in iov_kunit_copy_from_bvec()
358 if (scratch[i] != buffer[i]) in iov_kunit_copy_from_bvec()
378 size_t size = 0; in iov_kunit_load_xarray() local
385 size += PAGE_SIZE; in iov_kunit_load_xarray()
387 iov_iter_xarray(iter, dir, xarray, 0, size); in iov_kunit_load_xarray()
402 * Test copying to a ITER_XARRAY-type iterator.
410 u8 *scratch, *buffer; in iov_kunit_copy_to_xarray() local
411 size_t bufsize, npages, size, copied; in iov_kunit_copy_to_xarray() local
423 buffer = iov_kunit_create_buffer(test, &bpages, npages); in iov_kunit_copy_to_xarray()
424 memset(buffer, 0, bufsize); in iov_kunit_copy_to_xarray()
429 for (pr = kvec_test_ranges; pr->from >= 0; pr++) { in iov_kunit_copy_to_xarray()
430 size = pr->to - pr->from; in iov_kunit_copy_to_xarray()
431 KUNIT_ASSERT_LE(test, pr->to, bufsize); in iov_kunit_copy_to_xarray()
433 iov_iter_xarray(&iter, READ, xarray, pr->from, size); in iov_kunit_copy_to_xarray()
434 copied = copy_to_iter(scratch + i, size, &iter); in iov_kunit_copy_to_xarray()
436 KUNIT_EXPECT_EQ(test, copied, size); in iov_kunit_copy_to_xarray()
438 KUNIT_EXPECT_EQ(test, iter.iov_offset, size); in iov_kunit_copy_to_xarray()
439 i += size; in iov_kunit_copy_to_xarray()
442 /* Build the expected image in the scratch buffer. */ in iov_kunit_copy_to_xarray()
445 for (pr = kvec_test_ranges; pr->from >= 0; pr++) in iov_kunit_copy_to_xarray()
446 for (i = pr->from; i < pr->to; i++) in iov_kunit_copy_to_xarray()
451 KUNIT_EXPECT_EQ_MSG(test, buffer[i], scratch[i], "at i=%x", i); in iov_kunit_copy_to_xarray()
452 if (buffer[i] != scratch[i]) in iov_kunit_copy_to_xarray()
460 * Test copying from a ITER_XARRAY-type iterator.
468 u8 *scratch, *buffer; in iov_kunit_copy_from_xarray() local
469 size_t bufsize, npages, size, copied; in iov_kunit_copy_from_xarray() local
477 buffer = iov_kunit_create_buffer(test, &bpages, npages); in iov_kunit_copy_from_xarray()
479 buffer[i] = pattern(i); in iov_kunit_copy_from_xarray()
487 for (pr = kvec_test_ranges; pr->from >= 0; pr++) { in iov_kunit_copy_from_xarray()
488 size = pr->to - pr->from; in iov_kunit_copy_from_xarray()
489 KUNIT_ASSERT_LE(test, pr->to, bufsize); in iov_kunit_copy_from_xarray()
491 iov_iter_xarray(&iter, WRITE, xarray, pr->from, size); in iov_kunit_copy_from_xarray()
492 copied = copy_from_iter(scratch + i, size, &iter); in iov_kunit_copy_from_xarray()
494 KUNIT_EXPECT_EQ(test, copied, size); in iov_kunit_copy_from_xarray()
496 KUNIT_EXPECT_EQ(test, iter.iov_offset, size); in iov_kunit_copy_from_xarray()
497 i += size; in iov_kunit_copy_from_xarray()
500 /* Build the expected image in the main buffer. */ in iov_kunit_copy_from_xarray()
502 memset(buffer, 0, bufsize); in iov_kunit_copy_from_xarray()
503 for (pr = kvec_test_ranges; pr->from >= 0; pr++) { in iov_kunit_copy_from_xarray()
504 for (j = pr->from; j < pr->to; j++) { in iov_kunit_copy_from_xarray()
505 buffer[i++] = pattern(j); in iov_kunit_copy_from_xarray()
514 KUNIT_EXPECT_EQ_MSG(test, scratch[i], buffer[i], "at i=%x", i); in iov_kunit_copy_from_xarray()
515 if (scratch[i] != buffer[i]) in iov_kunit_copy_from_xarray()
523 * Test the extraction of ITER_KVEC-type iterators.
531 u8 *buffer; in iov_kunit_extract_pages_kvec() local
533 size_t bufsize, size = 0, npages; in iov_kunit_extract_pages_kvec() local
539 buffer = iov_kunit_create_buffer(test, &bpages, npages); in iov_kunit_extract_pages_kvec()
542 buffer, bufsize, kvec_test_ranges); in iov_kunit_extract_pages_kvec()
543 size = iter.count; in iov_kunit_extract_pages_kvec()
546 from = pr->from; in iov_kunit_extract_pages_kvec()
560 KUNIT_EXPECT_LE(test, len, size); in iov_kunit_extract_pages_kvec()
561 KUNIT_EXPECT_EQ(test, iter.count, size - len); in iov_kunit_extract_pages_kvec()
562 size -= len; in iov_kunit_extract_pages_kvec()
569 ssize_t part = min_t(ssize_t, len, PAGE_SIZE - offset0); in iov_kunit_extract_pages_kvec()
573 while (from == pr->to) { in iov_kunit_extract_pages_kvec()
575 from = pr->from; in iov_kunit_extract_pages_kvec()
585 len -= part; in iov_kunit_extract_pages_kvec()
592 if (test->status == KUNIT_FAILURE) in iov_kunit_extract_pages_kvec()
597 KUNIT_EXPECT_EQ(test, size, 0); in iov_kunit_extract_pages_kvec()
603 * Test the extraction of ITER_BVEC-type iterators.
612 size_t bufsize, size = 0, npages; in iov_kunit_extract_pages_bvec() local
621 size = iter.count; in iov_kunit_extract_pages_bvec()
624 from = pr->from; in iov_kunit_extract_pages_bvec()
638 KUNIT_EXPECT_LE(test, len, size); in iov_kunit_extract_pages_bvec()
639 KUNIT_EXPECT_EQ(test, iter.count, size - len); in iov_kunit_extract_pages_bvec()
640 size -= len; in iov_kunit_extract_pages_bvec()
647 ssize_t part = min_t(ssize_t, len, PAGE_SIZE - offset0); in iov_kunit_extract_pages_bvec()
651 while (from == pr->to) { in iov_kunit_extract_pages_bvec()
653 from = pr->from; in iov_kunit_extract_pages_bvec()
657 ix = pr->page + from / PAGE_SIZE; in iov_kunit_extract_pages_bvec()
663 len -= part; in iov_kunit_extract_pages_bvec()
670 if (test->status == KUNIT_FAILURE) in iov_kunit_extract_pages_bvec()
675 KUNIT_EXPECT_EQ(test, size, 0); in iov_kunit_extract_pages_bvec()
681 * Test the extraction of ITER_XARRAY-type iterators.
690 size_t bufsize, size = 0, npages; in iov_kunit_extract_pages_xarray() local
701 for (pr = kvec_test_ranges; pr->from >= 0; pr++) { in iov_kunit_extract_pages_xarray()
702 from = pr->from; in iov_kunit_extract_pages_xarray()
703 size = pr->to - from; in iov_kunit_extract_pages_xarray()
704 KUNIT_ASSERT_LE(test, pr->to, bufsize); in iov_kunit_extract_pages_xarray()
706 iov_iter_xarray(&iter, WRITE, xarray, from, size); in iov_kunit_extract_pages_xarray()
719 KUNIT_EXPECT_LE(test, len, size); in iov_kunit_extract_pages_xarray()
720 KUNIT_EXPECT_EQ(test, iter.count, size - len); in iov_kunit_extract_pages_xarray()
723 size -= len; in iov_kunit_extract_pages_xarray()
729 ssize_t part = min_t(ssize_t, len, PAGE_SIZE - offset0); in iov_kunit_extract_pages_xarray()
739 len -= part; in iov_kunit_extract_pages_xarray()
746 if (test->status == KUNIT_FAILURE) in iov_kunit_extract_pages_xarray()
750 KUNIT_EXPECT_EQ(test, size, 0); in iov_kunit_extract_pages_xarray()
752 KUNIT_EXPECT_EQ(test, iter.iov_offset, pr->to - pr->from); in iov_kunit_extract_pages_xarray()