Lines Matching full:data

48 typedef int (*work_fn)(struct global_data *data);
49 typedef int (*check_fn)(struct global_data *data);
50 typedef void (*prepare_fn)(struct global_data *data);
80 void propagate_children(struct __test_metadata *_metadata, struct global_data *data) in propagate_children() argument
92 num_child = rand_r(&data->rand_seed) % MAX_CHILDREN + 1; in propagate_children()
93 worker_child = is_worker ? rand_r(&data->rand_seed) % num_child : -1; in propagate_children()
109 data->rand_seed += curr_child; in propagate_children()
114 if (data->do_prepare) in propagate_children()
115 data->do_prepare(data); in propagate_children()
117 close(data->pipefd[1]); in propagate_children()
119 if (is_worker && curr_level == data->worker_level) { in propagate_children()
123 while (read(data->pipefd[0], &buf, 1) > 0) in propagate_children()
126 if (data->do_work) in propagate_children()
127 ret = data->do_work(data); in propagate_children()
130 semctl(data->semid, 0, IPC_RMID); in propagate_children()
133 semop(data->semid, &sem_wait, 1); in propagate_children()
134 if (data->do_check) in propagate_children()
135 ret = data->do_check(data); in propagate_children()
156 struct global_data data; in FIXTURE() local
161 struct global_data *data = &self->data; in FIXTURE_SETUP() local
168 data->mapsize = getpagesize(); in FIXTURE_SETUP()
170 data->expected_pfn = mmap(0, sizeof(unsigned long), in FIXTURE_SETUP()
173 ASSERT_NE(data->expected_pfn, MAP_FAILED); in FIXTURE_SETUP()
176 data->semid = semget(IPC_PRIVATE, 1, 0666 | IPC_CREAT); in FIXTURE_SETUP()
177 ASSERT_NE(data->semid, -1); in FIXTURE_SETUP()
178 ASSERT_NE(semctl(data->semid, 0, SETVAL, 0), -1); in FIXTURE_SETUP()
181 ASSERT_NE(pipe(data->pipefd), -1); in FIXTURE_SETUP()
183 data->rand_seed = time(NULL); in FIXTURE_SETUP()
184 srand(data->rand_seed); in FIXTURE_SETUP()
186 data->worker_level = rand() % TOTAL_LEVEL + 1; in FIXTURE_SETUP()
188 data->do_prepare = NULL; in FIXTURE_SETUP()
189 data->do_work = NULL; in FIXTURE_SETUP()
190 data->do_check = NULL; in FIXTURE_SETUP()
192 data->backend = ANON; in FIXTURE_SETUP()
197 struct global_data *data = &self->data; in FIXTURE_TEARDOWN() local
199 if (data->region != MAP_FAILED) in FIXTURE_TEARDOWN()
200 munmap(data->region, data->mapsize); in FIXTURE_TEARDOWN()
201 data->region = MAP_FAILED; in FIXTURE_TEARDOWN()
202 if (data->expected_pfn != MAP_FAILED) in FIXTURE_TEARDOWN()
203 munmap(data->expected_pfn, sizeof(unsigned long)); in FIXTURE_TEARDOWN()
204 data->expected_pfn = MAP_FAILED; in FIXTURE_TEARDOWN()
205 semctl(data->semid, 0, IPC_RMID); in FIXTURE_TEARDOWN()
206 data->semid = -1; in FIXTURE_TEARDOWN()
208 close(data->pipefd[0]); in FIXTURE_TEARDOWN()
210 switch (data->backend) { in FIXTURE_TEARDOWN()
214 shm_unlink(data->filename); in FIXTURE_TEARDOWN()
217 unlink(data->filename); in FIXTURE_TEARDOWN()
222 void access_region(struct global_data *data) in access_region() argument
227 FORCE_READ(*data->region); in access_region()
275 int move_region(struct global_data *data) in move_region() argument
280 ret = try_to_move_page(data->region); in move_region()
287 *data->expected_pfn = pagemap_get_pfn(pagemap_fd, data->region); in move_region()
292 int has_same_pfn(struct global_data *data) in has_same_pfn() argument
297 if (data->region == MAP_FAILED) in has_same_pfn()
304 pfn = pagemap_get_pfn(pagemap_fd, data->region); in has_same_pfn()
305 if (pfn != *data->expected_pfn) in has_same_pfn()
313 struct global_data *data = &self->data; in TEST_F() local
316 data->region = mmap(0, data->mapsize, PROT_READ | PROT_WRITE, in TEST_F()
318 ASSERT_NE(data->region, MAP_FAILED); in TEST_F()
319 memset(data->region, 0xcf, data->mapsize); in TEST_F()
321 data->do_prepare = access_region; in TEST_F()
322 data->do_work = move_region; in TEST_F()
323 data->do_check = has_same_pfn; in TEST_F()
325 propagate_children(_metadata, data); in TEST_F()
331 struct global_data *data = &self->data; in TEST_F() local
333 snprintf(data->filename, MAX_FILENAME_LEN, "%s%s", PREFIX, suffixes[SHM]); in TEST_F()
334 shm_fd = shm_open(data->filename, O_CREAT | O_RDWR, 0666); in TEST_F()
336 ftruncate(shm_fd, data->mapsize); in TEST_F()
337 data->backend = SHM; in TEST_F()
340 data->region = mmap(0, data->mapsize, PROT_READ | PROT_WRITE, in TEST_F()
342 ASSERT_NE(data->region, MAP_FAILED); in TEST_F()
343 memset(data->region, 0xcf, data->mapsize); in TEST_F()
346 data->do_prepare = access_region; in TEST_F()
347 data->do_work = move_region; in TEST_F()
348 data->do_check = has_same_pfn; in TEST_F()
350 propagate_children(_metadata, data); in TEST_F()
356 struct global_data *data = &self->data; in TEST_F() local
358 snprintf(data->filename, MAX_FILENAME_LEN, "%s%s", PREFIX, suffixes[NORM_FILE]); in TEST_F()
359 fd = open(data->filename, O_CREAT | O_RDWR | O_EXCL, 0666); in TEST_F()
361 ftruncate(fd, data->mapsize); in TEST_F()
362 data->backend = NORM_FILE; in TEST_F()
365 data->region = mmap(0, data->mapsize, PROT_READ | PROT_WRITE, in TEST_F()
367 ASSERT_NE(data->region, MAP_FAILED); in TEST_F()
368 memset(data->region, 0xcf, data->mapsize); in TEST_F()
371 data->do_prepare = access_region; in TEST_F()
372 data->do_work = move_region; in TEST_F()
373 data->do_check = has_same_pfn; in TEST_F()
375 propagate_children(_metadata, data); in TEST_F()
378 void prepare_local_region(struct global_data *data) in prepare_local_region() argument
380 /* Allocate range and set the same data */ in prepare_local_region()
381 data->region = mmap(NULL, data->mapsize, PROT_READ|PROT_WRITE, in prepare_local_region()
383 if (data->region == MAP_FAILED) in prepare_local_region()
386 memset(data->region, 0xcf, data->mapsize); in prepare_local_region()
389 int merge_and_migrate(struct global_data *data) in merge_and_migrate() argument
394 if (data->region == MAP_FAILED) in merge_and_migrate()
400 ret = try_to_move_page(data->region); in merge_and_migrate()
405 *data->expected_pfn = pagemap_get_pfn(pagemap_fd, data->region); in merge_and_migrate()
413 struct global_data *data = &self->data; in TEST_F() local
426 data->do_prepare = prepare_local_region; in TEST_F()
427 data->do_work = merge_and_migrate; in TEST_F()
428 data->do_check = has_same_pfn; in TEST_F()
430 propagate_children(_metadata, data); in TEST_F()