Lines Matching full:buffer
122 struct hmm_buffer *buffer, in hmm_dmirror_cmd() argument
129 cmd.addr = (__u64)buffer->ptr; in hmm_dmirror_cmd()
130 cmd.ptr = (__u64)buffer->mirror; in hmm_dmirror_cmd()
141 buffer->cpages = cmd.cpages; in hmm_dmirror_cmd()
142 buffer->faults = cmd.faults; in hmm_dmirror_cmd()
147 static void hmm_buffer_free(struct hmm_buffer *buffer) in hmm_buffer_free() argument
149 if (buffer == NULL) in hmm_buffer_free()
152 if (buffer->ptr) in hmm_buffer_free()
153 munmap(buffer->ptr, buffer->size); in hmm_buffer_free()
154 free(buffer->mirror); in hmm_buffer_free()
155 free(buffer); in hmm_buffer_free()
222 struct hmm_buffer *buffer; in TEST_F() local
234 buffer = malloc(sizeof(*buffer)); in TEST_F()
235 ASSERT_NE(buffer, NULL); in TEST_F()
237 buffer->fd = -1; in TEST_F()
238 buffer->size = size; in TEST_F()
239 buffer->mirror = malloc(size); in TEST_F()
240 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
242 buffer->ptr = mmap(NULL, size, in TEST_F()
245 buffer->fd, 0); in TEST_F()
246 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
249 * Initialize buffer in system memory but leave the first two pages in TEST_F()
253 for (ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
256 /* Set buffer permission to read-only. */ in TEST_F()
257 ret = mprotect(buffer->ptr, size, PROT_READ); in TEST_F()
261 val = *(int *)(buffer->ptr + self->page_size); in TEST_F()
265 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_READ, buffer, npages); in TEST_F()
267 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
268 ASSERT_EQ(buffer->faults, 1); in TEST_F()
271 ptr = buffer->mirror; in TEST_F()
277 hmm_buffer_free(buffer); in TEST_F()
286 struct hmm_buffer *buffer; in TEST_F() local
297 buffer = malloc(sizeof(*buffer)); in TEST_F()
298 ASSERT_NE(buffer, NULL); in TEST_F()
300 buffer->fd = -1; in TEST_F()
301 buffer->size = size; in TEST_F()
302 buffer->mirror = malloc(size); in TEST_F()
303 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
305 buffer->ptr = mmap(NULL, size, in TEST_F()
308 buffer->fd, 0); in TEST_F()
309 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
311 /* Initialize buffer in system memory. */ in TEST_F()
312 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
315 /* Initialize mirror buffer so we can verify it isn't written. */ in TEST_F()
316 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
319 /* Protect buffer from reading. */ in TEST_F()
320 ret = mprotect(buffer->ptr, size, PROT_NONE); in TEST_F()
324 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_READ, buffer, npages); in TEST_F()
327 /* Allow CPU to read the buffer so we can check it. */ in TEST_F()
328 ret = mprotect(buffer->ptr, size, PROT_READ); in TEST_F()
330 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
334 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
337 hmm_buffer_free(buffer); in TEST_F()
345 struct hmm_buffer *buffer; in TEST_F() local
356 buffer = malloc(sizeof(*buffer)); in TEST_F()
357 ASSERT_NE(buffer, NULL); in TEST_F()
359 buffer->fd = -1; in TEST_F()
360 buffer->size = size; in TEST_F()
361 buffer->mirror = malloc(size); in TEST_F()
362 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
364 buffer->ptr = mmap(NULL, size, in TEST_F()
367 buffer->fd, 0); in TEST_F()
368 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
370 /* Initialize data that the device will write to buffer->ptr. */ in TEST_F()
371 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
375 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_WRITE, buffer, npages); in TEST_F()
377 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
378 ASSERT_EQ(buffer->faults, 1); in TEST_F()
381 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
384 hmm_buffer_free(buffer); in TEST_F()
393 struct hmm_buffer *buffer; in TEST_F() local
404 buffer = malloc(sizeof(*buffer)); in TEST_F()
405 ASSERT_NE(buffer, NULL); in TEST_F()
407 buffer->fd = -1; in TEST_F()
408 buffer->size = size; in TEST_F()
409 buffer->mirror = malloc(size); in TEST_F()
410 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
412 buffer->ptr = mmap(NULL, size, in TEST_F()
415 buffer->fd, 0); in TEST_F()
416 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
419 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_READ, buffer, 1); in TEST_F()
421 ASSERT_EQ(buffer->cpages, 1); in TEST_F()
422 ASSERT_EQ(buffer->faults, 1); in TEST_F()
424 /* Initialize data that the device will write to buffer->ptr. */ in TEST_F()
425 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
429 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_WRITE, buffer, npages); in TEST_F()
433 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
437 ret = mprotect(buffer->ptr, size, PROT_WRITE | PROT_READ); in TEST_F()
441 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_WRITE, buffer, npages); in TEST_F()
443 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
444 ASSERT_EQ(buffer->faults, 1); in TEST_F()
447 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
450 hmm_buffer_free(buffer); in TEST_F()
459 struct hmm_buffer *buffer; in TEST_F() local
472 buffer = malloc(sizeof(*buffer)); in TEST_F()
473 ASSERT_NE(buffer, NULL); in TEST_F()
475 buffer->fd = -1; in TEST_F()
476 buffer->size = size; in TEST_F()
477 buffer->mirror = malloc(size); in TEST_F()
478 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
480 buffer->ptr = mmap(NULL, size, in TEST_F()
483 buffer->fd, 0); in TEST_F()
484 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
486 /* Initialize buffer->ptr so we can tell if it is written. */ in TEST_F()
487 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
490 /* Initialize data that the device will write to buffer->ptr. */ in TEST_F()
491 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
501 /* Check that the parent's buffer did not change. */ in TEST_F()
502 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
508 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
510 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
518 ret = hmm_dmirror_cmd(child_fd, HMM_DMIRROR_WRITE, buffer, npages); in TEST_F()
520 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
521 ASSERT_EQ(buffer->faults, 1); in TEST_F()
524 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
537 struct hmm_buffer *buffer; in TEST_F() local
550 buffer = malloc(sizeof(*buffer)); in TEST_F()
551 ASSERT_NE(buffer, NULL); in TEST_F()
553 buffer->fd = -1; in TEST_F()
554 buffer->size = size; in TEST_F()
555 buffer->mirror = malloc(size); in TEST_F()
556 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
558 buffer->ptr = mmap(NULL, size, in TEST_F()
561 buffer->fd, 0); in TEST_F()
562 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
564 /* Initialize buffer->ptr so we can tell if it is written. */ in TEST_F()
565 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
568 /* Initialize data that the device will write to buffer->ptr. */ in TEST_F()
569 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
579 /* Check that the parent's buffer did change. */ in TEST_F()
580 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
586 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
588 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
596 ret = hmm_dmirror_cmd(child_fd, HMM_DMIRROR_WRITE, buffer, npages); in TEST_F()
598 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
599 ASSERT_EQ(buffer->faults, 1); in TEST_F()
602 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
614 struct hmm_buffer *buffer; in TEST_F() local
625 buffer = malloc(sizeof(*buffer)); in TEST_F()
626 ASSERT_NE(buffer, NULL); in TEST_F()
628 buffer->fd = -1; in TEST_F()
629 buffer->size = size; in TEST_F()
630 buffer->mirror = malloc(size); in TEST_F()
631 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
633 buffer->ptr = mmap(NULL, size, in TEST_F()
636 buffer->fd, 0); in TEST_F()
637 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
641 map = (void *)ALIGN((uintptr_t)buffer->ptr, size); in TEST_F()
644 old_ptr = buffer->ptr; in TEST_F()
645 buffer->ptr = map; in TEST_F()
647 /* Initialize data that the device will write to buffer->ptr. */ in TEST_F()
648 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
652 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_WRITE, buffer, npages); in TEST_F()
654 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
655 ASSERT_EQ(buffer->faults, 1); in TEST_F()
658 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
661 buffer->ptr = old_ptr; in TEST_F()
662 hmm_buffer_free(buffer); in TEST_F()
670 struct hmm_buffer *buffer; in TEST_F() local
691 buffer = malloc(sizeof(*buffer)); in TEST_F()
692 ASSERT_NE(buffer, NULL); in TEST_F()
694 buffer->ptr = get_hugepage_region(size, GHR_STRICT); in TEST_F()
695 if (buffer->ptr == NULL) { in TEST_F()
696 free(buffer); in TEST_F()
700 buffer->fd = -1; in TEST_F()
701 buffer->size = size; in TEST_F()
702 buffer->mirror = malloc(size); in TEST_F()
703 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
705 /* Initialize data that the device will write to buffer->ptr. */ in TEST_F()
706 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
710 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_WRITE, buffer, npages); in TEST_F()
712 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
713 ASSERT_EQ(buffer->faults, 1); in TEST_F()
716 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
719 free_hugepage_region(buffer->ptr); in TEST_F()
720 buffer->ptr = NULL; in TEST_F()
721 hmm_buffer_free(buffer); in TEST_F()
729 struct hmm_buffer *buffer; in TEST_F() local
745 buffer = malloc(sizeof(*buffer)); in TEST_F()
746 ASSERT_NE(buffer, NULL); in TEST_F()
748 buffer->fd = fd; in TEST_F()
749 buffer->size = size; in TEST_F()
750 buffer->mirror = malloc(size); in TEST_F()
751 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
754 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
756 len = pwrite(fd, buffer->mirror, size, 0); in TEST_F()
758 memset(buffer->mirror, 0, size); in TEST_F()
760 buffer->ptr = mmap(NULL, size, in TEST_F()
763 buffer->fd, 0); in TEST_F()
764 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
767 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_READ, buffer, npages); in TEST_F()
769 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
770 ASSERT_EQ(buffer->faults, 1); in TEST_F()
773 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
776 hmm_buffer_free(buffer); in TEST_F()
784 struct hmm_buffer *buffer; in TEST_F() local
800 buffer = malloc(sizeof(*buffer)); in TEST_F()
801 ASSERT_NE(buffer, NULL); in TEST_F()
803 buffer->fd = fd; in TEST_F()
804 buffer->size = size; in TEST_F()
805 buffer->mirror = malloc(size); in TEST_F()
806 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
808 buffer->ptr = mmap(NULL, size, in TEST_F()
811 buffer->fd, 0); in TEST_F()
812 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
814 /* Initialize data that the device will write to buffer->ptr. */ in TEST_F()
815 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
819 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_WRITE, buffer, npages); in TEST_F()
821 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
822 ASSERT_EQ(buffer->faults, 1); in TEST_F()
825 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
829 len = pread(fd, buffer->mirror, size, 0); in TEST_F()
831 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
834 hmm_buffer_free(buffer); in TEST_F()
842 struct hmm_buffer *buffer; in TEST_F() local
853 buffer = malloc(sizeof(*buffer)); in TEST_F()
854 ASSERT_NE(buffer, NULL); in TEST_F()
856 buffer->fd = -1; in TEST_F()
857 buffer->size = size; in TEST_F()
858 buffer->mirror = malloc(size); in TEST_F()
859 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
861 buffer->ptr = mmap(NULL, size, in TEST_F()
864 buffer->fd, 0); in TEST_F()
865 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
867 /* Initialize buffer in system memory. */ in TEST_F()
868 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
872 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_MIGRATE, buffer, npages); in TEST_F()
874 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
877 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
880 hmm_buffer_free(buffer); in TEST_F()
890 struct hmm_buffer *buffer; in TEST_F() local
901 buffer = malloc(sizeof(*buffer)); in TEST_F()
902 ASSERT_NE(buffer, NULL); in TEST_F()
904 buffer->fd = -1; in TEST_F()
905 buffer->size = size; in TEST_F()
906 buffer->mirror = malloc(size); in TEST_F()
907 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
909 buffer->ptr = mmap(NULL, size, in TEST_F()
912 buffer->fd, 0); in TEST_F()
913 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
915 /* Initialize buffer in system memory. */ in TEST_F()
916 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
920 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_MIGRATE, buffer, npages); in TEST_F()
922 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
925 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
929 for (i = 0, ptr = buffer->ptr; i < size / (2 * sizeof(*ptr)); ++i) in TEST_F()
933 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_MIGRATE, buffer, npages); in TEST_F()
935 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
938 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
941 hmm_buffer_free(buffer); in TEST_F()
949 struct hmm_buffer *buffer; in TEST_F() local
958 buffer = malloc(sizeof(*buffer)); in TEST_F()
959 ASSERT_NE(buffer, NULL); in TEST_F()
961 buffer->fd = -1; in TEST_F()
962 buffer->size = size; in TEST_F()
963 buffer->mirror = malloc(size); in TEST_F()
964 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
966 buffer->ptr = mmap(NULL, size, in TEST_F()
969 buffer->fd, 0); in TEST_F()
970 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
973 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_MIGRATE, buffer, npages); in TEST_F()
976 hmm_buffer_free(buffer); in TEST_F()
984 struct hmm_buffer *buffer; in TEST_F() local
995 buffer = malloc(sizeof(*buffer)); in TEST_F()
996 ASSERT_NE(buffer, NULL); in TEST_F()
998 buffer->fd = -1; in TEST_F()
999 buffer->size = size; in TEST_F()
1000 buffer->mirror = malloc(size); in TEST_F()
1001 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
1004 buffer->ptr = mmap(NULL, size, in TEST_F()
1007 buffer->fd, 0); in TEST_F()
1008 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
1009 p = buffer->ptr; in TEST_F()
1012 ret = hmm_dmirror_cmd(self->fd1, HMM_DMIRROR_MIGRATE, buffer, npages); in TEST_F()
1016 ret = munmap(buffer->ptr + self->page_size, self->page_size); in TEST_F()
1020 ret = hmm_dmirror_cmd(self->fd1, HMM_DMIRROR_MIGRATE, buffer, 3); in TEST_F()
1024 ret = mprotect(buffer->ptr + 2 * self->page_size, self->page_size, in TEST_F()
1027 ptr = (int *)(buffer->ptr + 2 * self->page_size); in TEST_F()
1032 ret = mprotect(buffer->ptr + 3 * self->page_size, self->page_size, in TEST_F()
1035 ptr = (int *)(buffer->ptr + 3 * self->page_size); in TEST_F()
1037 ret = mprotect(buffer->ptr + 3 * self->page_size, self->page_size, in TEST_F()
1042 ret = mprotect(buffer->ptr + 4 * self->page_size, 2 * self->page_size, in TEST_F()
1045 ptr = (int *)(buffer->ptr + 4 * self->page_size); in TEST_F()
1047 ptr = (int *)(buffer->ptr + 5 * self->page_size); in TEST_F()
1051 buffer->ptr = p + 2 * self->page_size; in TEST_F()
1052 ret = hmm_dmirror_cmd(self->fd1, HMM_DMIRROR_MIGRATE, buffer, 4); in TEST_F()
1054 ASSERT_EQ(buffer->cpages, 4); in TEST_F()
1057 buffer->ptr = p + 5 * self->page_size; in TEST_F()
1058 ret = hmm_dmirror_cmd(self->fd0, HMM_DMIRROR_MIGRATE, buffer, 1); in TEST_F()
1060 buffer->ptr = p; in TEST_F()
1062 buffer->ptr = p; in TEST_F()
1063 hmm_buffer_free(buffer); in TEST_F()
1072 struct hmm_buffer *buffer; in TEST_F() local
1085 buffer = malloc(sizeof(*buffer)); in TEST_F()
1086 ASSERT_NE(buffer, NULL); in TEST_F()
1088 buffer->fd = -1; in TEST_F()
1089 buffer->size = size; in TEST_F()
1090 buffer->mirror = malloc(size); in TEST_F()
1091 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
1093 buffer->ptr = mmap(NULL, size, in TEST_F()
1096 buffer->fd, 0); in TEST_F()
1097 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
1099 /* Initialize buffer in system memory. */ in TEST_F()
1100 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
1104 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_MIGRATE, buffer, in TEST_F()
1107 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
1110 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
1114 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
1117 hmm_buffer_free(buffer); in TEST_F()
1126 struct hmm_buffer *buffer; in TEST_F() local
1139 buffer = malloc(sizeof(*buffer)); in TEST_F()
1140 ASSERT_NE(buffer, NULL); in TEST_F()
1142 buffer->fd = -1; in TEST_F()
1143 buffer->size = size; in TEST_F()
1144 buffer->mirror = malloc(size); in TEST_F()
1145 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
1147 buffer->ptr = mmap(NULL, size, in TEST_F()
1150 buffer->fd, 0); in TEST_F()
1151 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
1153 /* Initialize buffer in system memory. */ in TEST_F()
1154 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
1158 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_READ, buffer, in TEST_F()
1161 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
1162 ASSERT_EQ(buffer->faults, 1); in TEST_F()
1165 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
1168 hmm_buffer_free(buffer); in TEST_F()
1174 struct hmm_buffer *buffer = p; in unmap_buffer() local
1176 /* Delay for a bit and then unmap buffer while it is being read. */ in unmap_buffer()
1178 munmap(buffer->ptr + buffer->size / 2, buffer->size / 2); in unmap_buffer()
1179 buffer->ptr = NULL; in unmap_buffer()
1200 struct hmm_buffer *buffer; in TEST_F() local
1205 buffer = malloc(sizeof(*buffer)); in TEST_F()
1206 ASSERT_NE(buffer, NULL); in TEST_F()
1208 buffer->fd = -1; in TEST_F()
1209 buffer->size = size; in TEST_F()
1210 buffer->mirror = malloc(size); in TEST_F()
1211 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
1213 buffer->ptr = mmap(NULL, size, in TEST_F()
1216 buffer->fd, 0); in TEST_F()
1217 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
1219 /* Initialize buffer in system memory. */ in TEST_F()
1220 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
1223 rc = pthread_create(&thread, NULL, unmap_buffer, buffer); in TEST_F()
1227 rc = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_READ, buffer, in TEST_F()
1230 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
1231 ASSERT_EQ(buffer->faults, 1); in TEST_F()
1234 for (i = 0, ptr = buffer->mirror; in TEST_F()
1241 hmm_buffer_free(buffer); in TEST_F()
1250 struct hmm_buffer *buffer; in TEST_F() local
1262 buffer = malloc(sizeof(*buffer)); in TEST_F()
1263 ASSERT_NE(buffer, NULL); in TEST_F()
1265 buffer->fd = -1; in TEST_F()
1266 buffer->size = size; in TEST_F()
1267 buffer->mirror = malloc(npages); in TEST_F()
1268 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
1271 buffer->ptr = mmap(NULL, size, in TEST_F()
1274 buffer->fd, 0); in TEST_F()
1275 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
1276 p = buffer->ptr; in TEST_F()
1279 ret = munmap(buffer->ptr + self->page_size, self->page_size); in TEST_F()
1283 ret = mprotect(buffer->ptr + 2 * self->page_size, self->page_size, in TEST_F()
1286 ptr = (int *)(buffer->ptr + 2 * self->page_size); in TEST_F()
1291 ret = mprotect(buffer->ptr + 3 * self->page_size, self->page_size, in TEST_F()
1294 ptr = (int *)(buffer->ptr + 3 * self->page_size); in TEST_F()
1296 ret = mprotect(buffer->ptr + 3 * self->page_size, self->page_size, in TEST_F()
1301 ret = mprotect(buffer->ptr + 4 * self->page_size, 3 * self->page_size, in TEST_F()
1304 ptr = (int *)(buffer->ptr + 4 * self->page_size); in TEST_F()
1308 buffer->ptr = p + 5 * self->page_size; in TEST_F()
1309 ret = hmm_dmirror_cmd(self->fd0, HMM_DMIRROR_MIGRATE, buffer, 1); in TEST_F()
1311 ASSERT_EQ(buffer->cpages, 1); in TEST_F()
1314 buffer->ptr = p + 6 * self->page_size; in TEST_F()
1315 ret = hmm_dmirror_cmd(self->fd1, HMM_DMIRROR_MIGRATE, buffer, 1); in TEST_F()
1317 ASSERT_EQ(buffer->cpages, 1); in TEST_F()
1320 buffer->ptr = p; in TEST_F()
1321 ret = hmm_dmirror_cmd(self->fd0, HMM_DMIRROR_SNAPSHOT, buffer, npages); in TEST_F()
1323 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
1326 m = buffer->mirror; in TEST_F()
1336 hmm_buffer_free(buffer); in TEST_F()
1345 struct hmm_buffer *buffer; in TEST_F() local
1367 buffer = malloc(sizeof(*buffer)); in TEST_F()
1368 ASSERT_NE(buffer, NULL); in TEST_F()
1370 buffer->ptr = get_hugepage_region(size, GHR_STRICT); in TEST_F()
1371 if (buffer->ptr == NULL) { in TEST_F()
1372 free(buffer); in TEST_F()
1376 buffer->size = size; in TEST_F()
1377 buffer->mirror = malloc(npages); in TEST_F()
1378 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
1380 /* Initialize the pages the device will snapshot in buffer->ptr. */ in TEST_F()
1381 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
1385 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_SNAPSHOT, buffer, npages); in TEST_F()
1387 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
1390 m = buffer->mirror; in TEST_F()
1396 ret = mprotect(buffer->ptr, size, PROT_READ); in TEST_F()
1400 ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_SNAPSHOT, buffer, npages); in TEST_F()
1402 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
1405 m = buffer->mirror; in TEST_F()
1410 free_hugepage_region(buffer->ptr); in TEST_F()
1411 buffer->ptr = NULL; in TEST_F()
1412 hmm_buffer_free(buffer); in TEST_F()
1420 struct hmm_buffer *buffer; in TEST_F() local
1430 buffer = malloc(sizeof(*buffer)); in TEST_F()
1431 ASSERT_NE(buffer, NULL); in TEST_F()
1433 buffer->fd = -1; in TEST_F()
1434 buffer->size = size; in TEST_F()
1435 buffer->mirror = malloc(npages); in TEST_F()
1436 ASSERT_NE(buffer->mirror, NULL); in TEST_F()
1439 buffer->ptr = mmap(NULL, size, in TEST_F()
1442 buffer->fd, 0); in TEST_F()
1443 ASSERT_NE(buffer->ptr, MAP_FAILED); in TEST_F()
1445 /* Initialize buffer in system memory. */ in TEST_F()
1446 for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i) in TEST_F()
1450 ret = mprotect(buffer->ptr, size, PROT_READ); in TEST_F()
1454 ret = hmm_dmirror_cmd(self->fd0, HMM_DMIRROR_READ, buffer, npages); in TEST_F()
1456 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
1457 ASSERT_EQ(buffer->faults, 1); in TEST_F()
1460 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
1464 ret = hmm_dmirror_cmd(self->fd1, HMM_DMIRROR_READ, buffer, npages); in TEST_F()
1466 ASSERT_EQ(buffer->cpages, npages); in TEST_F()
1467 ASSERT_EQ(buffer->faults, 1); in TEST_F()
1470 for (i = 0, ptr = buffer->mirror; i < size / sizeof(*ptr); ++i) in TEST_F()
1474 ret = munmap(buffer->ptr + self->page_size, self->page_size); in TEST_F()
1477 hmm_buffer_free(buffer); in TEST_F()